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

40 lines
2.5 KiB
JavaScript

#!/usr/bin/env node
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 kernel = read("inspection-action-04-kernel.json");
const recovery = read("inspection-action-04-recovery.json");
const facade = read("inspection-action-04-facade.json");
const chrome = read("inspection-action-04-chrome.json");
const contracts = { C: kernel, D: recovery, E: facade, F: chrome };
const status = Object.values(contracts).every((item) => item.result === "pass") ? "pass" : "fail";
const result = kernel.resultSummary;
const report = {
schema: "freecad-web-p6-inspection-action-04-persistence/v1",
taskId: "FW-P6-INS-ACT-04-G",
module: "Inspection",
action: "save/reopen",
result: status,
applicable: true,
format: result.format,
path: result.path,
objectCount: result.objectCount,
objectType: result.objectType,
distanceCount: result.distanceCount,
roundTrip: result.roundTrip,
artifactSize: result.size,
replay: kernel.replay,
contracts: Object.fromEntries(Object.entries(contracts).map(([step, value]) => [step, { result: value.result, sha256: crypto.createHash("sha256").update(JSON.stringify(value)).digest("hex") }])),
state: { documentMutation: true, resourcesReleased: kernel.reproducibility.resourcesReleased, externalRequests: chrome.network.externalRequestCount },
commands: ["node tools/run_p6_inspection_action04_persistence.mjs"],
artifacts: { kernel: "docs/p6/inspection-action-04-kernel.json", recovery: "docs/p6/inspection-action-04-recovery.json", facade: "docs/p6/inspection-action-04-facade.json", chrome: "docs/p6/inspection-action-04-chrome.json", workerLog: "docs/freecad-p6-inspection-action-04-g-persistence.log" },
boundaries: ["Only the deterministic Part::Box plus Inspection::Feature fixture is covered.", "Cross-version FCStd migration and broader Inspection object coverage remain out of scope."]
};
fs.writeFileSync(path.join(docs, "inspection-action-04-persistence.json"), `${JSON.stringify(report, null, 2)}\n`);
fs.writeFileSync(path.join(root, "docs/freecad-p6-inspection-action-04-g-persistence.log"), `${JSON.stringify({ result: report.result, applicable: report.applicable, roundTrip: report.roundTrip, objectCount: report.objectCount, distanceCount: report.distanceCount })}\n`);
console.log(JSON.stringify({ result: report.result, applicable: report.applicable, roundTrip: report.roundTrip }));