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

2 lines
1.8 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),".."),docs=path.join(root,"docs/p6"),files={A:"robot-source-boundary.json",B:"robot-runtime.json",C:"robot-kernel.json",D:"robot-recovery.json",E:"robot-facade.json",F:"robot-chrome.json",G:"robot-persistence.json"},read=f=>JSON.parse(fs.readFileSync(path.join(docs,f),"utf8")),hash=f=>crypto.createHash("sha256").update(fs.readFileSync(path.join(docs,f))).digest("hex"),contracts=Object.fromEntries(Object.entries(files).map(([k,f])=>{const v=read(f);return[k,{artifact:`docs/p6/${f}`,result:typeof v.result==="string"?v.result:v.status??"fail",sha256:hash(f)}]})),result=Object.values(contracts).every(x=>x.result==="pass"||x.result==="pass_boundary"||x.result==="completed")?"pass":"fail",report={schema:"freecad-web-p6-robot-gate/v1",taskId:"FW-P6-ROB-X",module:"Robot",result,closedAction:"create/recompute",contracts,moduleStatusAfterGate:"in_progress",coverage:{createRecompute:"pass",inspectSourceInventory:"pending",pythonApi:"pending",saveReopen:"pending"},boundaries:["X closes Robot create/recompute only; later action contracts remain pending."]};fs.writeFileSync(path.join(docs,"robot-gate.json"),JSON.stringify(report,null,2)+"\n");fs.writeFileSync(path.join(docs,"robot-gate.md"),`# Robot first-slice gate\n\n- Result: \`${result}\`\n- Closed action: \`create/recompute\`\n- Robot status after X: \`in_progress\`\n`);fs.writeFileSync(path.join(root,"docs/freecad-p6-robot-x-gate.log"),JSON.stringify({result,closedAction:"create/recompute",moduleStatus:report.moduleStatusAfterGate})+"\n");console.log(JSON.stringify({result,closedAction:"create/recompute",moduleStatus:report.moduleStatusAfterGate}));if(result!=="pass")process.exitCode=1;