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

29 lines
2.3 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 docs = path.join(root, "docs/p6");
const runtime = JSON.parse(fs.readFileSync(path.join(docs, "partdesign-runtime.json"), "utf8"));
const fixture = { base: { type: "Part::Box", dimensions: [1, 1, 1] }, feature: { type: "PartDesign::AdditiveBox", dimensions: [2, 3, 4] } };
const result = runtime.result.action;
if (result.run !== 1 || result.error !== "" || Math.abs(result.volume - 24) > 1e-9 || result.recomputeCount !== 1 || result.objectCount !== 2 || result.documentsAfter !== 0) throw new Error(JSON.stringify(result));
const report = {
schema: "freecad-web-partdesign-kernel/v1",
task_id: "FW-P6-PDN-C",
status: "pass",
source_revision: runtime.source_revision,
input_sha256: crypto.createHash("sha256").update(JSON.stringify(fixture)).digest("hex"),
fixture,
result: { run: result.run, recomputeCount: result.recomputeCount, objectCount: result.objectCount, volume: result.volume, objectType: "PartDesign::AdditiveBox", baseType: "Part::Box", resourcesReleased: result.documentsAfter === 0 },
result_sha256: crypto.createHash("sha256").update(JSON.stringify(result)).digest("hex"),
commands: ["node tools/run_p6_partdesign_runtime.mjs freecad-source/build-web/configure/bin"],
artifacts: { runtime: "docs/p6/partdesign-runtime.json", wasm: runtime.artifacts.wasm },
boundaries: ["The native AdditiveBox feature is recomputed with a native Part::Box BaseFeature; the Body aggregate path remains a separate recovery boundary because GUI-free recompute currently raises map::at.", "No JavaScript geometry or static volume is used.", "Invalid input recovery, Facade, Chrome and persistence are later cards."],
};
fs.writeFileSync(path.join(docs, "partdesign-kernel.json"), `${JSON.stringify(report, null, 2)}\n`);
fs.writeFileSync(path.join(root, "docs/freecad-p6-partdesign-c-kernel.log"), `${JSON.stringify({ status: report.status, objectType: report.result.objectType, volume: report.result.volume, resourcesReleased: report.result.resourcesReleased })}\n`);
console.log(JSON.stringify({ status: report.status, objectType: report.result.objectType, volume: report.result.volume }));