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

7 lines
2.8 KiB
JavaScript

#!/usr/bin/env node
import assert from "node:assert/strict"; 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"); const revision = "b5a086fda59b0325fe0996147e6e9b344414f9bc"; const read = (file) => JSON.parse(fs.readFileSync(path.join(docs, "p6", file), "utf8")); const sha = (file) => crypto.createHash("sha256").update(fs.readFileSync(path.join(docs, "p6", file))).digest("hex");
const action02 = ["cloud-action-02-kernel.json", "cloud-action-02-recovery.json", "cloud-action-02-facade.json", "cloud-action-02-chrome.json", "cloud-action-02-persistence.json"].map(read);
const contracts = { firstSlice: { task_id: "FW-P6-CLD-X", artifact: "cloud-gate.json", status: read("cloud-gate.json").status }, inspect: { task_id: "FW-P6-CLD-ACT-02", artifact: "cloud-action-02-inspect-source-inventory.json", status: action02.every((item) => (item.status ?? item.result) === "pass") ? "pass" : "fail" }, python: { task_id: "FW-P6-CLD-ACT-03", artifact: "cloud-action-03-python-api.json", status: read("cloud-action-03-python-api.json").status }, saveReopen: { task_id: "FW-P6-CLD-ACT-04", artifact: "cloud-action-04-save-reopen.json", status: read("cloud-action-04-save-reopen.json").status } };
assert.equal(contracts.firstSlice.status, "pass"); assert.equal(contracts.inspect.status, "pass"); assert.equal(contracts.python.status, "pass"); assert.equal(contracts.saveReopen.status, "pass"); const report = { schema: "freecad-web-p6-cloud-module-gate/v1", task_id: "FW-P6-CLD-Y", module: "Cloud", status: "pass", source_revision: revision, contracts: Object.fromEntries(Object.entries(contracts).map(([key, value]) => [key, { ...value, sha256: sha(value.artifact) }])), module_status_after_gate: "completed", boundaries: ["All four declared Cloud actions have independent conclusions.", "Cloud Save/Restore remains remote-service functionality; local FCStd save/reopen is explicitly not applicable.", "No release, legal, performance, or non-Chrome compatibility claim is made."] }; fs.writeFileSync(path.join(docs, "p6/cloud-module-gate.json"), `${JSON.stringify(report, null, 2)}\n`); fs.writeFileSync(path.join(docs, "p6/cloud-module-gate.md"), `# Cloud module gate\n\n- Result: \`pass\`\n- Source revision: \`${revision}\`\n- Declared actions: configure/recompute, inspect/source-inventory, python-api, save/reopen\n- Cloud status after gate: \`completed\`\n\nAll four actions have independent C-G evidence. Save/Restore is remote S3-style functionality and is explicitly not a local FCStd round-trip.\n`); fs.writeFileSync(path.join(docs, "freecad-p6-cloud-y-gate.log"), "actions=4\nresult=pass\nmoduleStatus=completed\n"); console.log(JSON.stringify({ result: report.status, actions: 4, moduleStatus: report.module_status_after_gate }));