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

50 lines
3.3 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";
import { fileURLToPath } from "node:url";
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
const sourceRoot = path.join(root, "freecad-source");
const docs = path.join(root, "docs/p6");
const files = [
"src/Mod/PartDesign/CMakeLists.txt",
"src/Mod/PartDesign/App/CMakeLists.txt",
"src/Mod/PartDesign/App/AppPartDesign.cpp",
"src/Mod/PartDesign/Init.py",
"src/Mod/PartDesign/App/FeaturePrimitive.cpp",
];
const input = files.map((file) => `${file}\n${fs.readFileSync(path.join(sourceRoot, file), "utf8")}`).join("\n");
const inputSha256 = crypto.createHash("sha256").update(input).digest("hex");
const sourceRevision = execFileSync("git", ["-C", sourceRoot, "rev-parse", "HEAD"], { encoding: "utf8" }).trim();
const report = {
schema: "freecad-web-partdesign-source-boundary/v1",
task_id: "FW-P6-PDN-A",
status: "pass",
source_revision: sourceRevision,
input_sha256: inputSha256,
module: "PartDesign",
cmake: {
module: "src/Mod/PartDesign/CMakeLists.txt:3",
appTarget: "src/Mod/PartDesign/App/CMakeLists.txt:136",
guiConditional: "src/Mod/PartDesign/CMakeLists.txt:4-6",
appSources: "src/Mod/PartDesign/App/CMakeLists.txt:19-134",
directDependencies: ["OCC_LIBRARIES", "OCC_DEBUG_LIBRARIES", "Part", "FreeCADApp"],
},
registration: {
entry: "src/Mod/PartDesign/App/AppPartDesign.cpp:81-165",
representativeTypes: ["PartDesign::AdditiveBox", "PartDesign::AdditiveCone", "PartDesign::AdditiveCylinder", "PartDesign::AdditiveEllipsoid", "PartDesign::AdditiveHelix", "PartDesign::AdditiveLoft", "PartDesign::AdditivePipe", "PartDesign::AdditivePrism"],
representativeSource: ["FeaturePrimitive.cpp:250", "FeaturePrimitive.cpp:317", "FeaturePrimitive.cpp:450", "FeaturePrimitive.cpp:557", "FeatureHelix.cpp:846", "FeatureLoft.cpp:400", "FeaturePipe.cpp:715", "FeaturePrimitive.cpp:727"],
},
python: { init: "src/Mod/PartDesign/Init.py:28", generatedBindings: "src/Mod/PartDesign/App/CMakeLists.txt:8-9" },
gui: { buildFlag: "BUILD_GUI", guiSources: "src/Mod/PartDesign/Gui/CMakeLists.txt", webBoundary: "GUI target is excluded from GUI-free WASM" },
actions: { createRecompute: "PartDesign::AdditiveBox", inspect: "PartDesign source registration", pythonApi: "AppPartDesignPy.cpp", saveReopen: "not yet implemented in this A card" },
artifacts: { sourceFiles: files },
boundaries: ["This is a source boundary probe only; it does not claim PartDesign runtime registration or WASM execution.", "PartDesign links the native Part and FreeCADApp libraries plus OpenCASCADE; GUI sources are conditional on BUILD_GUI.", "The complete object inventory and later C-G/action cards remain separate contracts."],
};
fs.mkdirSync(docs, { recursive: true });
fs.writeFileSync(path.join(docs, "partdesign-source-boundary.json"), `${JSON.stringify(report, null, 2)}\n`);
fs.writeFileSync(path.join(root, "docs/freecad-p6-partdesign-a-boundary.log"), `${JSON.stringify({ status: report.status, sourceRevision, inputSha256, directDependencies: report.cmake.directDependencies, gui: report.gui })}\n`);
console.log(JSON.stringify({ status: report.status, module: report.module, sourceRevision, inputSha256 }));