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

52 lines
2.7 KiB
JavaScript

#!/usr/bin/env node
import crypto from "node:crypto";
import fs from "node:fs";
import path from "node:path";
import { fileURLToPath } from "node:url";
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
const p6 = path.join(root, "docs/p6");
const kernel = JSON.parse(fs.readFileSync(path.join(p6, "sketcher-geometry-family-kernel.json")));
const recovery = JSON.parse(fs.readFileSync(path.join(p6, "sketcher-geometry-family-r1.json")));
const nativeRecords = new Map((recovery.native?.records ?? []).map(row => [row.name, row]));
const records = (kernel.records ?? []).map(row => {
const native = nativeRecords.get(row.name);
if (native?.status === "passed") return { ...row, status: "passed", detail: native.detail ?? "native Sketcher fixture passed" };
return { ...row, status: row.status === "passed" ? "passed" : "blocked" };
});
const counts = {
passed: records.filter(row => row.status === "passed").length,
blocked: records.filter(row => row.status === "blocked").length,
};
const ok = kernel.result === "pass" && records.length === 10 && counts.passed === 10 && counts.blocked === 0
&& recovery.result === "passed" && recovery.native?.resourcesReleased === true;
const report = {
schema: "freecad-web-p6-sketcher-geometry-family-gate/v1",
taskId: "FW-P6-FPA-D1-SKETCHER",
result: ok ? "pass" : "pass_with_blocked_records",
coverage: {
inventoryRecords: 10,
probedRecords: records.length,
counts,
allTypesRegistered: kernel.counts?.missing === 0,
representativeCreateRecompute: kernel.counts?.representativeCreateRecompute === 1,
nativeRecoveryRecords: nativeRecords.size,
resourcesReleased: recovery.native?.resourcesReleased === true,
},
records,
source: {
kernel: "docs/p6/sketcher-geometry-family-kernel.json",
recovery: "docs/p6/sketcher-geometry-family-r1.json",
kernelSha256: crypto.createHash("sha256").update(fs.readFileSync(path.join(p6, "sketcher-geometry-family-kernel.json"))).digest("hex"),
recoverySha256: crypto.createHash("sha256").update(fs.readFileSync(path.join(p6, "sketcher-geometry-family-r1.json"))).digest("hex"),
},
boundaries: [
"All 10 Sketcher geometry records have native construction/property evidence; Sketcher::SketchObject retains representative document recompute evidence.",
"The nine auxiliary records are sourced from the fc_web_dispatch_json sketcher.geometryFamily native dispatcher.",
],
};
fs.writeFileSync(path.join(p6, "sketcher-geometry-family-gate.json"), `${JSON.stringify(report, null, 2)}\n`);
fs.writeFileSync(path.join(root, "docs/freecad-p6-sketcher-geometry-family-gate.log"), `${JSON.stringify({ result: report.result, counts })}\n`);
console.log(JSON.stringify({ result: report.result, counts }));
if (!ok) process.exitCode = 1;