52 lines
2.7 KiB
JavaScript
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;
|