import assert from "node:assert/strict"; import fs from "node:fs"; import { evidencePath, expectedEvidenceIdentity, sha256 } from "./v1-acceptance-lib.mjs"; const { ledgerSha256, packageSha256, plan, toolSourceSha256 } = expectedEvidenceIdentity(); assert.ok(fs.existsSync(evidencePath), "V1 acceptance evidence is missing; run release:v1-acceptance"); const manifest = JSON.parse(fs.readFileSync(evidencePath, "utf8")); assert.equal(manifest.schemaVersion, 1); assert.equal(manifest.sourceSha256, ledgerSha256, "V1 acceptance evidence is stale relative to parity ledger"); assert.equal(manifest.packageSha256, packageSha256, "V1 acceptance evidence is stale relative to web package scripts"); assert.deepEqual(manifest.toolSourceSha256, toolSourceSha256, "V1 acceptance evidence is stale relative to acceptance tools"); assert.ok(Number.isFinite(Date.parse(manifest.generatedAt)), "V1 acceptance generatedAt is invalid"); assert.equal(manifest.summary.families, plan.familyCount); assert.equal(manifest.summary.declarations, plan.declarationCount); assert.equal(manifest.summary.unique, plan.uniqueCount); assert.equal(manifest.summary.passed, plan.uniqueCount); assert.equal(manifest.summary.failed, 0); assert.equal(manifest.environment.blender.includes("USD=True"), true, "acceptance Blender must provide USD"); assert.match(manifest.environment.blenderExecutableSha256, /^[a-f0-9]{64}$/, "acceptance Blender executable hash is missing"); assert.match(manifest.environment.blenderArchiveSha256, /^[a-f0-9]{64}$/, "acceptance Blender archive hash is missing"); assert.equal(manifest.results.length, plan.uniqueCount); assert.deepEqual(manifest.results.map((result) => result.token), plan.entries.map((entry) => entry.token)); for (const [index, result] of manifest.results.entries()) { const expected = plan.entries[index]; assert.deepEqual(result.familyIds, expected.familyIds, `${result.token}: family mapping drifted`); assert.equal(result.command, expected.command, `${result.token}: command drifted`); assert.equal(result.exitCode, 0, `${result.token}: command failed`); assert.ok(result.durationMs >= 0, `${result.token}: duration is invalid`); assert.match(result.outputSha256, /^[a-f0-9]{64}$/, `${result.token}: output hash is missing`); assert.equal(result.outputSha256, sha256(result.output), `${result.token}: stored output does not match its hash`); assert.ok(result.output.trim().length > 0, `${result.token}: output is empty`); } process.stdout.write( `v1-acceptance-evidence-ok families=${plan.familyCount} declarations=${plan.declarationCount} unique=${plan.uniqueCount} sha256=${sha256(fs.readFileSync(evidencePath))}\n`, );