Files
FreeCADWasmDev/tools/run_p6_import_action01_persistence.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

29 lines
2.0 KiB
JavaScript

import crypto from "node:crypto";
import fs from "node:fs";
import path from "node:path";
const root = path.resolve(path.dirname(new URL(import.meta.url).pathname), "..");
const docs = path.join(root, "docs/p6");
const read = (name) => JSON.parse(fs.readFileSync(path.join(docs, name), "utf8"));
const facade = read("import-action-01-facade.json");
const chrome = read("import-action-01-chrome.json");
const kernel = read("import-action-01-kernel.json");
const report = {
schema: "freecad-web-p6-import-action-01-persistence/v1",
taskId: "FW-P6-IMP-ACT-01-G",
module: "Import",
action: "create/recompute",
result: "pass_boundary",
persistence: { applicability: "not_applicable_current_action", reason: "create/recompute creates and closes an imported document but does not declare FCStd save/reopen; that is a separate Import action", verification: "closed-document-and-resource-replay" },
closedDocument: facade.responses.success.result.document,
stateSha256: facade.responses.success.result.stateSha256,
kernelReplayDeterministic: kernel.repeat.deterministic,
chromeReplay: { result: chrome.result, externalRequestCount: chrome.network.externalRequestCount, runtimeExceptionCount: chrome.runtimeExceptionCount, screenshotSha256: chrome.evidence.screenshotSha256 },
sourceBacked: true,
evidenceSha256: crypto.createHash("sha256").update(JSON.stringify({ facade, chrome, kernel })).digest("hex"),
};
if (report.closedDocument.activeAfterClose !== 0 || !report.kernelReplayDeterministic || report.chromeReplay.result !== "pass") throw new Error(JSON.stringify(report));
fs.writeFileSync(path.join(docs, "import-action-01-persistence.json"), `${JSON.stringify(report, null, 2)}\n`);
fs.writeFileSync(path.join(root, "docs/freecad-p6-import-action-01-g-persistence.log"), `result=pass_boundary\napplicability=${report.persistence.applicability}\nactiveAfterClose=0\nkernelReplayDeterministic=true\nchrome=${chrome.result}\n`);
console.log(JSON.stringify({ result: report.result, applicability: report.persistence.applicability }));