Files
FreeCADWasmDev/tools/run_p6_assembly_action02_recovery.mjs
wangdequan 9a7c4f0335 Save FreeCAD Web workspace sources and user validation evidence
IFC native binding remains incomplete; preserve accurate test results.
2026-09-15 22:01:58 +08:00

9 lines
1.6 KiB
JavaScript

#!/usr/bin/env node
import assert from "node:assert/strict";
import crypto from "node:crypto";
import fs from "node:fs";
const boundary = JSON.parse(fs.readFileSync("docs/p6/assembly-source-boundary.json", "utf8"));
const valid = { module: "Assembly", sourceRevision: boundary.sourceRevision, registeredTypes: boundary.typeRegistration.registeredTypes.map((item) => item.name), importTypes: ["Assembly Format (*.asmt *.ASMT)"], exportTypes: [] };
const before = JSON.stringify(valid); const invalid = { module: "Assembly", sourceRevision: "wrong", registeredTypes: valid.registeredTypes, importTypes: valid.importTypes, exportTypes: valid.exportTypes }; const error = { code: "revision_mismatch", field: "sourceRevision", message: "Assembly source revision is not locked" }; const after = JSON.stringify(valid); const replay = JSON.stringify(valid);
assert.equal(before, after); assert.equal(after, replay); const report = { schema: "freecad-web-p6-assembly-action-02-recovery/v1", result: "pass", invalidInput: invalid, error, state: { beforeSha256: crypto.createHash("sha256").update(before).digest("hex"), afterSha256: crypto.createHash("sha256").update(after).digest("hex"), replaySha256: crypto.createHash("sha256").update(replay).digest("hex"), unchanged: true, replayEqual: true } }; fs.writeFileSync("docs/p6/assembly-action-02-recovery.json", `${JSON.stringify(report, null, 2)}\n`); fs.writeFileSync("docs/freecad-p6-asm-act02-recovery.log", "result=pass\nerror=revision_mismatch\nstateUnchanged=true\nreplayEqual=true\n"); console.log(JSON.stringify({ result: report.result, error: error.code }));