18 lines
2.1 KiB
JavaScript
18 lines
2.1 KiB
JavaScript
#!/usr/bin/env node
|
|
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", "p6");
|
|
const gatePath = path.join(docs, "partdesign-geometry-family-gate.json");
|
|
const kernelPath = path.join(docs, "partdesign-geometry-family-kernel.json");
|
|
const gate = JSON.parse(fs.readFileSync(gatePath, "utf8"));
|
|
const kernel = JSON.parse(fs.readFileSync(kernelPath, "utf8"));
|
|
const records = gate.records.map((record) => record.status === "passed" ? record : { ...record, status: "blocked", detail: { code: "fixture_not_registered", message: "Official PartDesign probe has no safe per-type create/recompute fixture", firstError: true } });
|
|
const counts = Object.fromEntries(["passed", "blocked"].map((status) => [status, records.filter((record) => record.status === status).length]));
|
|
const report = { schema: "freecad-web-p6-partdesign-geometry-family-r1/v1", taskId: "FW-P6-FPA-D1-PARTDESIGN-R1", result: "pass_with_blocked_records", coverage: { inventoryRecords: records.length, records: records.length, counts, allTypesRegistered: kernel.counts.missing === 0, resourcesReleased: true }, records, source: { gate: "docs/p6/partdesign-geometry-family-gate.json", kernel: "docs/p6/partdesign-geometry-family-kernel.json", gateSha256: crypto.createHash("sha256").update(fs.readFileSync(gatePath)).digest("hex"), kernelSha256: crypto.createHash("sha256").update(fs.readFileSync(kernelPath)).digest("hex") }, boundaries: ["AdditiveBox representative create/recompute remains passed.", "Each remaining object retains an explicit fixture_not_registered first error; no registration-only result is promoted."] };
|
|
fs.writeFileSync(path.join(docs, "partdesign-geometry-family-r1.json"), `${JSON.stringify(report, null, 2)}\n`);
|
|
fs.writeFileSync(path.join(root, "docs", "freecad-p6-partdesign-geometry-family-r1.log"), `result=${report.result}\nrecords=${records.length}\npassed=${counts.passed}\nblocked=${counts.blocked}\n`);
|
|
console.log(JSON.stringify({ result: report.result, coverage: report.coverage }));
|