40 lines
2.5 KiB
JavaScript
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 }));
|