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

17 lines
2.1 KiB
JavaScript

#!/usr/bin/env node
import crypto from "node:crypto";
import fs from "node:fs";
import path from "node:path";
import { execFileSync } from "node:child_process";
const root = path.resolve(path.dirname(new URL(import.meta.url).pathname), "..");
const docs = path.join(root, "docs", "p6");
const build = path.resolve(process.argv[2] ?? path.join(root, "freecad-source", "build-web", "configure", "bin"));
const output = execFileSync(process.execPath, [path.join(root, "freecad-source", "src", "WebAssembly", "FreeCADCoreProbe", "sandbox-runtime-smoke.js"), build], { encoding: "utf8" }).trim().split("\n").at(-1);
const smoke = JSON.parse(output);
const report = { schema: "freecad-web-p6-sandbox-geometry-family-r1/v1", taskId: "FW-P6-FPA-D1-SANDBOX-R1", result: smoke.type === 1 && smoke.createRecompute === 1 && smoke.action?.objectType === "Sandbox::SandboxObject" && smoke.action?.resourcesReleased === 1 ? "passed" : "blocked", target: { requestedType: "Sandbox::SandboxObject", typeProbe: smoke.type, objectType: smoke.action?.objectType ?? "", createRecompute: smoke.createRecompute, recomputeCount: smoke.action?.recomputeCount ?? 0, integer: smoke.action?.objectInteger ?? null, resourcesReleased: smoke.action?.resourcesReleased ?? 0 }, recovery: smoke.recoveryState, source: { smoke: "src/WebAssembly/FreeCADCoreProbe/sandbox-runtime-smoke.js", outputSha256: crypto.createHash("sha256").update(output).digest("hex") }, boundaries: ["The official registered type is Sandbox::SandboxObject; the former bare SandboxObject probe input remains preserved as the original failure.", "No source-only registration is used as a runtime pass."] };
fs.writeFileSync(path.join(docs, "sandbox-geometry-family-r1.json"), `${JSON.stringify(report, null, 2)}\n`);
fs.writeFileSync(path.join(root, "docs", "freecad-p6-sandbox-geometry-family-r1.log"), `result=${report.result}\nrequestedType=${report.target.requestedType}\nobjectType=${report.target.objectType}\ncreateRecompute=${report.target.createRecompute}\nresourcesReleased=${report.target.resourcesReleased}\n`);
console.log(JSON.stringify({ result: report.result, target: report.target }));
if (report.result !== "passed") process.exitCode = 1;