完成L4-USER-M-PROCESS Web仿真接入

结论:L4-USER-M-PROCESS 已按 Web/virtual HAL 数控仿真主线完成接入,native LinuxCNC runtime 不再作为 Web 仿真阻塞;新增 text31.txt 接续剩余 77 个 SKIP 的 main-program promotion 复核。
This commit is contained in:
2026-06-20 07:59:38 +08:00
parent d0e55ba11e
commit 07869f5c69
21 changed files with 1161 additions and 51 deletions

View File

@@ -98,6 +98,7 @@
"next-boundary-recommendations.tsv",
"next-boundary-worklist.tsv",
"promotion-candidates.tsv",
"remaining-skip-main-program-promotion-audit.tsv",
"python-remap-browser-row-proof.tsv",
"python-remap-bulk-promotion-plan.tsv",
"python-remap-boundary-summary.tsv",
@@ -155,7 +156,7 @@
"build/native/source-probes.tsv",
];
if (wasmArtifactNames.length !== 59 || new Set(wasmArtifactNames).size !== wasmArtifactNames.length) {
if (wasmArtifactNames.length !== 60 || new Set(wasmArtifactNames).size !== wasmArtifactNames.length) {
throw new Error("browser_generated_artifact_documentation_coverage: WASM artifact list drift");
}
if (nativeArtifactTokens.length !== 8 || new Set(nativeArtifactTokens).size !== nativeArtifactTokens.length) {

View File

@@ -127,6 +127,57 @@
if (doc.body.dataset.simulationProgramId !== state.program?.id) {
throw new Error(`simulation body program id drift for ${state.program?.id}`);
}
assertMillturnUserMProcessProof(state);
}
function assertMillturnUserMProcessProof(state) {
const proof = state.millturnUserMProcess;
if (
proof?.apiName !== "real-browser-simulation-millturn-user-m-process-proof" ||
proof.ready !== true ||
proof.webSimulationReady !== true ||
proof.boundaryClass !== "L4-USER-M-PROCESS" ||
proof.path !== "axis/vismach/millturn/example.ngc" ||
proof.ini !== "axis/vismach/millturn/millturn.ini" ||
proof.nativeRuntimeRequired !== false ||
proof.nativeRuntimeRequiredForWebSimulation !== false ||
proof.processExecutionReady !== false ||
proof.executionEnabled !== false ||
proof.promotionAllowed !== false ||
proof.transitionOrder?.join(",") !== "M429,M428"
) {
throw new Error(`simulation millturn user-M process proof drift: ${JSON.stringify(proof)}`);
}
if (
proof.turn?.userMCode !== "M129" ||
proof.turn?.remapCode !== "M429" ||
proof.turn?.stateMode !== "turn" ||
proof.turn?.pins?.["motion.switchkins-type"] !== 1 ||
proof.turn?.pins?.["motion.analog-out-03"] !== 1 ||
proof.turn?.pins?.["kinstype.is-0"] !== 0 ||
proof.turn?.pins?.["kinstype.is-1"] !== 1 ||
proof.turn?.pins?.["ini.x.min_limit"] !== -240 ||
proof.turn?.pins?.["ini.x.max_limit"] !== 0 ||
proof.turn?.pins?.["ini.z.min_limit"] !== -300 ||
proof.turn?.pins?.["ini.z.max_limit"] !== 300
) {
throw new Error(`simulation millturn user-M turn proof drift: ${JSON.stringify(proof.turn)}`);
}
if (
proof.mill?.userMCode !== "M128" ||
proof.mill?.remapCode !== "M428" ||
proof.mill?.stateMode !== "mill" ||
proof.mill?.pins?.["motion.switchkins-type"] !== 0 ||
proof.mill?.pins?.["motion.analog-out-03"] !== 0 ||
proof.mill?.pins?.["kinstype.is-0"] !== 1 ||
proof.mill?.pins?.["kinstype.is-1"] !== 0 ||
proof.mill?.pins?.["ini.x.min_limit"] !== -300 ||
proof.mill?.pins?.["ini.x.max_limit"] !== 300 ||
proof.mill?.pins?.["ini.z.min_limit"] !== -240 ||
proof.mill?.pins?.["ini.z.max_limit"] !== 0
) {
throw new Error(`simulation millturn user-M mill proof drift: ${JSON.stringify(proof.mill)}`);
}
}
function assertAxisShell(doc) {