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

3 lines
2.4 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 files = { A: "reverseengineering-source-boundary.json", B: "reverseengineering-runtime.json", C: "reverseengineering-kernel.json", D: "reverseengineering-recovery.json", E: "reverseengineering-facade.json", F: "reverseengineering-chrome.json", G: "reverseengineering-persistence.json" }; const read = file => JSON.parse(fs.readFileSync(path.join(docs, file), "utf8")); const hash = file => crypto.createHash("sha256").update(fs.readFileSync(path.join(docs, file))).digest("hex"); const contracts = Object.fromEntries(Object.entries(files).map(([step, file]) => { const value = read(file); const status = typeof value.result === "string" ? value.result : value.status ?? (value.result?.pass === true ? "pass" : "fail"); return [step, { artifact: `docs/p6/${file}`, result: status, sha256: hash(file) }]; })); const result = Object.values(contracts).every(item => item.result === "pass" || item.result === "pass_boundary" || item.result === "completed") ? "pass" : "fail"; const report = { schema: "freecad-web-p6-reverseengineering-gate/v2", taskId: "FW-P6-REV-X", module: "ReverseEngineering", result, sourceRevision: contracts.A.sha256, closedAction: "create/recompute", contracts, moduleStatusAfterGate: "in_progress", coverage: { createRecompute: "pass", inspectSourceInventory: "pending", pythonApi: "pending", saveReopen: "pending" }, boundaries: ["X closes only create/recompute; later action contracts remain separate.", "Part::Feature is the explicit geometry result container because ReverseEngineering App registers no dedicated persistent object."] }; fs.writeFileSync(path.join(docs, "reverseengineering-gate.json"), `${JSON.stringify(report, null, 2)}\n`); fs.writeFileSync(path.join(docs, "reverseengineering-gate.md"), `# ReverseEngineering first-slice gate\n\n- Result: \`${result}\`\n- Closed action: \`create/recompute\`\n- ReverseEngineering status after X: \`in_progress\`\n`); fs.writeFileSync(path.join(root, "docs/freecad-p6-reverseengineering-x-gate.log"), `${JSON.stringify({ result, closedAction: report.closedAction, moduleStatus: report.moduleStatusAfterGate })}\n`); console.log(JSON.stringify({ result, closedAction: report.closedAction, moduleStatus: report.moduleStatusAfterGate })); if (result !== "pass") process.exitCode = 1;