Files
cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/tools/compare-xyzbc-trt-evidence.mjs
2026-07-02 08:01:34 -04:00

99 lines
4.1 KiB
JavaScript

import { mkdir, readFile, writeFile } from "node:fs/promises";
import { dirname, resolve } from "node:path";
import { fileURLToPath } from "node:url";
const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), "../..");
const projectRoot = resolve(repoRoot, "web-rtcp-5axis-xyzbc-trt-sim-plan");
const nativePath = process.argv[2] || resolve(projectRoot, "working/evidence/native-xyzbc-trt-evidence.json");
const webPath = process.argv[3] || resolve(projectRoot, "working/evidence/web-xyzbc-trt-evidence.json");
const outputPath = process.argv[4] || resolve(projectRoot, "working/evidence/compare-xyzbc-trt-evidence.json");
const nativeEvidence = JSON.parse(await readFile(nativePath, "utf8"));
const webEvidence = JSON.parse(await readFile(webPath, "utf8"));
const checks = [
check("profile", "native axis mask is XYZBC", nativeEvidence.coverage?.axisProfile === true, {
nativeAxisMask: nativeEvidence.after?.axisMask ?? nativeEvidence.before?.axisMask,
}),
check("profile", "web default profile is xyzbc-trt", webEvidence.coverage?.profileDefaultXyzbc === true, {
webProfile: webEvidence.profile?.id,
}),
check("ini", "native loaded xyzbc switchkins program", nativeEvidence.coverage?.xyzbcProgramOpen === true, {
nativeFile: nativeEvidence.after?.file ?? nativeEvidence.before?.file,
}),
check("ini", "web INI parse is ready", webEvidence.coverage?.iniReady === true, {
webIniReady: webEvidence.ini?.ready,
}),
check("switchkins", "native switchkins pin readable", nativeEvidence.coverage?.switchkinsPinReadable === true, {
nativePin: nativeEvidence.hal?.pins?.["motion.switchkins-type"],
}),
check("switchkins", "web remap files staged", webEvidence.coverage?.remapsStaged === true, {
remaps: webEvidence.ini?.remaps,
}),
check("program", "web default xyzbc_switchkins program staged", webEvidence.coverage?.defaultProgramStaged === true, {
selected: webEvidence.opfsStaging?.selectedProgram,
}),
check("tool-table", "web tool table staged", webEvidence.coverage?.toolTableStaged === true, {
toolTable: webEvidence.ini?.toolTable,
}),
check("pyvcp", "web PyVCP XML staged", webEvidence.coverage?.pyvcpXmlStaged === true, {
pyvcpXmlPath: webEvidence.profile?.pyvcpXmlPath,
}),
check("positions", "native joint feedback readable", nativeEvidence.coverage?.jointFeedbackReadable === true, {
joints: nativeEvidence.after?.jointActualPosition,
}),
check("wasm", "required WASM artifacts available", webEvidence.coverage?.wasmArtifactsReady === true, {
missing: webEvidence.wasm?.missing,
}),
check("parameters", "parameter file staged", webEvidence.coverage?.parameterFileStaged === true, {
parameterFile: webEvidence.ini?.parameterFile,
}),
];
const failed = checks.filter((item) => item.status !== "pass");
const blockers = [
...(nativeEvidence.status === "blocked" ? nativeEvidence.blocker ? [nativeEvidence.blocker] : ["native-blocked"] : []),
...(webEvidence.blockers || []).map((blocker) => blocker.id),
];
const report = {
apiName: "xyzbc-trt-native-web-evidence-comparison",
status: failed.length === 0 ? "pass" : "fail",
comparedAt: new Date().toISOString(),
nativePath,
webPath,
summary: {
checkCount: checks.length,
passCount: checks.length - failed.length,
failCount: failed.length,
blockers,
nativeStatus: nativeEvidence.status,
webStatus: webEvidence.status,
},
checks,
requiredImprovements: failed.map((item) => ({
category: item.category,
requirement: item.requirement,
evidence: item.evidence,
})),
semanticBoundary: "native_linuxcnc_vs_web_opfs_wasm_xyzbc_trt_evidence_comparison",
};
await mkdir(dirname(outputPath), { recursive: true });
await writeFile(outputPath, JSON.stringify(report, null, 2) + "\n", "utf8");
console.log(`compare_xyzbc_trt_evidence=${outputPath}`);
if (failed.length > 0) {
console.log(`compare_xyzbc_trt_status=fail fail_count=${failed.length}`);
} else {
console.log("compare_xyzbc_trt_status=pass");
}
function check(category, requirement, passed, evidence = {}) {
return {
category,
requirement,
status: passed ? "pass" : "fail",
evidence,
};
}