Files
workinf_Blender_Wasm/tools/web/check-v1-acceptance-evidence.mjs
2026-08-15 01:01:23 -04:00

39 lines
2.6 KiB
JavaScript

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`,
);