项目接续文件:L4-PYTHON-REMAP 53 rows 批量 PASS Phase 2.5 执行规范 生成时间:2026-06-19 CST 本文件接替 `text27.txt`。 目标: ```text 继续推进“53 个 Python-remap inventory rows 批量提升为 PASS”的 proof 链路。 本轮不是 baseline promotion。 本轮只做 Phase 2.5: - 固化 53 rows 最终批量 PASS 的方法和步骤; - 让 `python-remap-row-runtime-proof.tsv` 至少对第一批小 family 产生真实 row runtime transcript; - 优先让 stop-lookahead 首行从 pending 进入 transcript-ready; - 继续保持 inventory baseline 不变:PASS=29 / SKIP=130 / L4-PYTHON-REMAP=53。 ``` 一、53 rows 批量 PASS 的完整方法 ```text Phase 1:machine-readable bulk promotion plan - 生成 `python-remap-bulk-promotion-plan.tsv`; - 1:1 覆盖 53 个 `L4-PYTHON-REMAP` rows; - 明确每行缺少的 runtime/native/node/browser proof; - 保持 execution_enabled=0、promotion_allowed=0。 Phase 2:row-aware runtime proof substrate - SDK 暴露 `createLinuxCncPythonRemapRowRuntimePort()`; - 生成 `python-remap-row-runtime-proof.tsv`; - 每行表达 module staging、TOPLEVEL、PATH_PREPEND、callable/prolog/epilog、NGC asset、interpreter state、canonical event 的 proof target; - 仍不把 fake adapter 或 Python import-only 当 PASS。 Phase 2.5:第一批真实 row runtime transcript - 对小 family 先落真实 transcript,而不是全量一次性 promotion; - 第一批顺序: 1. `axis/remap/stop-lookahead/nc_files` 2. `axis/remap/cycle/nc_files` 3. `axis/remap/getting-started/nc_files` - transcript 必须来自 LinuxCNC-owned Python runtime boundary 或 native lifecycle stdout; - transcript ready 只解除 `row_runtime_adapter_execution` blocker; - 不解除 native/node/browser/manual promotion blockers。 Phase 3:row native pass proof - 逐 row 证明 native runtime pass; - 对齐 `python-remap-row-runtime-proof.tsv` 的 proof targets; - native proof 不能只证明 stop-lookahead lifecycle 后推断 53 rows 全 PASS。 Phase 4:WASM Node pass proof - 逐 row 证明 WASM Node runtime bridge 可执行同等 row contract; - 保留 LinuxCNC-owned semantics,禁止 JS 重写 CNC 语义。 Phase 5:Browser pass proof - 逐 row 证明 browser worker / UI workflow 与 Node proof 对齐; - browser proof 必须在 Node proof 后接受。 Phase 6:manual promotion lock review - 只有 row_runtime、native、wasm_node、browser proof 全部 ready 后,才允许解除 manual lock; - 最终才可把 53 rows 从 `L4-PYTHON-REMAP` 批量提升为 PASS; - 目标 baseline 才能从 PASS=29 / SKIP=130 变为 PASS=82 / SKIP=77。 ``` 二、本轮 Phase 2.5 执行步骤 ```text 1. 先确认 native Python lifecycle stdout 是否存在: `wasm-port/build/native/python-remap-runtime/python_lifecycle.stdout.log` 2. 确认 native runtime probe summary 是否存在并包含: `wasm-port/build/native/native-runtime-probe-summary.tsv` `L4-PYTHON-REMAP python_runtime axis/remap/stop-lookahead/nc_files` `runtime_lifecycle_probe_passed` 3. 运行 inventory verifier: `SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh` 4. 验收 `python-remap-row-runtime-proof.tsv`: - rows=53; - `axis/remap/stop-lookahead/nc_files/examples.ngc` - `python_modules_staged=1` - `toplevel_executed=1` - `path_prepend_applied=1` - `interpreter_state_binding_ready=1` - `canonical_events_ready=1` - `row_runtime_transcript_ready=1` - `proof_status=native_lifecycle_stdout_row_runtime_transcript_ready` - 其他 rows 可继续 pending; - 所有 rows 仍保持: - `native_pass_ready=0` - `wasm_node_pass_ready=0` - `browser_pass_ready=0` - `execution_enabled=0` 5. 如果 stop-lookahead 仍 pending: - 优先修正 verifier 对 native stdout / native summary 的读取和验收; - 不伪造 row transcript; - 不把 build artifact 手工改成 ready。 6. stop-lookahead 通过后,下一轮再扩展 cycle / getting-started: - 增加 row adapter 对 callable/prolog/epilog lookup 的真实 proof; - 增加 NGC remap asset staged proof; - 对 NGC-only subpaths 明确 reject standalone proof。 ``` 三、本轮禁止事项 ```text - 不改 PASS/SKIP baseline; - 不直接把 53 rows 改 PASS; - 不删除 `L4-PYTHON-REMAP` skip reason; - 不把 stop-lookahead lifecycle proof 解释成 53 rows 全量 pass; - 不让 fake/browser worker 充当 PASS 证据; - 不把 Python import success 当 row execution proof; - 不把 NGC-only subpath 当 standalone main program; - 不解除 `manual_promotion_lock`; - 不手工改 `summary.tsv` / `skip-summary.tsv` 数字。 ``` 四、本轮应关注文件 ```text wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh wasm-port/runtime/sdk/src/python-remap-runtime-port.js wasm-port/tests/sdk/node/verify_python_remap_runtime_port.mjs wasm-port/build/wasm/sim-configs-inventory/python-remap-row-runtime-proof.tsv text28.txt ``` 五、本轮验收命令 ```bash git diff --check wasm-port/tests/sdk/node/verify_python_remap_runtime_port.sh SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh ``` 六、完成后写入本文件的结果 ```text 记录: - stop-lookahead row runtime transcript 是否 ready; - 53 rows row_runtime_proof 状态分布; - inventory baseline 是否保持不变; - 已通过和未通过的验证命令; - 下一轮 cycle / getting-started 的具体入口。 ``` 七、2026-06-19 Phase 2.5 执行结果 本轮已完成 stop-lookahead 首行的真实 row runtime transcript 接入,不做 baseline promotion。 代码修正: ```text wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs - 修正 `python-remap-row-runtime-proof.tsv` 生成列映射; - `generator_lifecycle_ready` 跟随 stop-lookahead native lifecycle stdout proof; - `ngc_only_subpaths_not_standalone` 回到正确列位; - 调用 `pythonRemapRowRuntimeProofRows()` / `verifyPythonRemapRowRuntimeProofRows()` 时传入 `nativeRuntimeProbeSourceRecords`; - row proof 现在能读取 `wasm-port/build/native/native-runtime-probe-summary.tsv` 和对应 stdout log。 ``` 新增接续文件: ```text text28.txt ``` artifact 当前状态: ```text wasm-port/build/wasm/sim-configs-inventory/python-remap-row-runtime-proof.tsv rows=53 proof_status=native_lifecycle_stdout_row_runtime_transcript_ready 1 proof_status=pending_row_runtime_adapter_execution 52 ``` stop-lookahead 首行状态: ```text path=axis/remap/stop-lookahead/nc_files/examples.ngc python_modules_staged=1 toplevel_executed=1 path_prepend_applied=1 generator_lifecycle_ready=1 interpreter_state_binding_ready=1 canonical_events_ready=1 row_runtime_transcript_ready=1 native_pass_ready=0 wasm_node_pass_ready=0 browser_pass_ready=0 execution_enabled=0 proof_status=native_lifecycle_stdout_row_runtime_transcript_ready ``` 仍未解除的 blockers: ```text browser_row_pass hal_process_boundary manual_promotion_lock native_row_pass python_runtime row_runtime_proof wasm_node_row_pass ``` inventory baseline 保持不变: ```text sim_configs_wasm_node_inventory_executed=29 sim_configs_wasm_node_inventory_passed=29 sim_configs_wasm_node_inventory_skipped=130 sim_configs_wasm_node_inventory_skip_L4_PYTHON_REMAP=53 sim_configs_wasm_node_inventory_unexpected_fail=0 ``` 本轮已通过验证: ```bash git diff --check wasm-port/tests/sdk/node/verify_python_remap_runtime_port.sh SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh ``` 验证中的已知非失败 stderr: ```text /work/sim-inventory/axis/db_demo/base.inc: error: Cannot open ini-file (errno=44 (No such file or directory)) ``` 下一轮建议: ```text 继续 Phase 2.5,不进入 baseline promotion。 下一轮优先扩展: 1. `axis/remap/cycle/nc_files` 2. `axis/remap/getting-started/nc_files` 具体入口: - 为 row-aware runtime adapter 增加 callable/prolog/epilog lookup transcript; - 对 cycle 行证明: - configured module import; - Python remap callable lookup; - stdglue prolog / epilog lookup; - generator lifecycle; - NGC remap asset staged; - interpreter state / canonical event bridge; - 对 getting-started 行证明同等 row contract; - 保持 native_pass_ready / wasm_node_pass_ready / browser_pass_ready / execution_enabled 全部为 0。 ``` 八、2026-06-19 Phase 2.5 cycle / getting-started 执行结果 本轮继续 Phase 2.5,完成第一批小 family 的 row runtime transcript 扩展,不做 baseline promotion。 代码修正: ```text wasm-port/tests/native/probe_python_remap_runtime.sh - 保留 stop-lookahead 旧 lifecycle stdout keys; - 新增 row-specific transcript keys: - axis/remap/stop-lookahead/nc_files/examples.ngc - axis/remap/cycle/nc_files/examples.ngc - axis/remap/getting-started/nc_files/examples.ngc - 对 cycle 真实证明: - INI [PYTHON] PATH_PREPEND / TOPLEVEL; - stdglue、remap、toplevel module staged; - g842 callable lookup and invoke; - cycle_prolog / cycle_epilog lookup; - g843.ngc remap asset staged; - interpreter state / canonical event bridge ready。 - 对 getting-started 真实证明: - INI [PYTHON] PATH_PREPEND / TOPLEVEL; - oword、remap、toplevel、util module staged; - m400.ngc / m410.ngc remap assets staged; - NGC-only subpaths rejected as standalone main; - interpreter state / canonical event bridge ready。 wasm-port/tools/build_native_probes.sh - native probe cache fingerprint 加入 axis/remap/getting-started source tree。 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs - row proof 改为读取 native Python runtime stdout 的 row-specific keys; - 允许 cycle/getting-started 从 native lifecycle stdout 进入 row runtime transcript ready; - 仍保持 native_pass_ready / wasm_node_pass_ready / browser_pass_ready / execution_enabled 全部为 0; - 仍不解除 manual promotion lock。 ``` artifact 当前状态: ```text wasm-port/build/wasm/sim-configs-inventory/python-remap-row-runtime-proof.tsv rows=53 proof_status=native_lifecycle_stdout_row_runtime_transcript_ready 3 proof_status=pending_row_runtime_adapter_execution 50 ``` 本轮新增 ready rows: ```text axis/remap/cycle/nc_files/examples.ngc python_modules_staged=1 python_remap_functions_bound=1 prolog_functions_bound=1 epilog_functions_bound=1 generator_lifecycle_ready=1 ngc_remap_assets_staged=1 ngc_only_subpaths_not_standalone=1 row_runtime_transcript_ready=1 proof_status=native_lifecycle_stdout_row_runtime_transcript_ready axis/remap/getting-started/nc_files/examples.ngc python_modules_staged=1 python_remap_functions_bound=0 prolog_functions_bound=0 epilog_functions_bound=0 generator_lifecycle_ready=0 ngc_remap_assets_staged=1 ngc_only_subpaths_not_standalone=1 row_runtime_transcript_ready=1 proof_status=native_lifecycle_stdout_row_runtime_transcript_ready ``` inventory baseline 保持不变: ```text sim_configs_wasm_node_inventory_executed=29 sim_configs_wasm_node_inventory_passed=29 sim_configs_wasm_node_inventory_skipped=130 sim_configs_wasm_node_inventory_skip_L4_PYTHON_REMAP=53 sim_configs_wasm_node_inventory_unexpected_fail=0 ``` 本轮已通过验证: ```bash git diff --check ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_python_remap_runtime.sh wasm-port/tests/sdk/node/verify_python_remap_runtime_port.sh SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh wasm-port/tests/native/verify_native_probes.sh ``` 验证中的已知非失败 stderr: ```text /work/sim-inventory/axis/db_demo/base.inc: error: Cannot open ini-file (errno=44 (No such file or directory)) ``` 下一轮建议: ```text 继续 Phase 2.5,不进入 baseline promotion。 下一轮可以选择: 1. 扩展 axis/laser family 的 row-specific transcript; 2. 或扩展 vismach/5axis table-rotary_spindle-rotary-nutating family; 3. 或开始设计 Phase 3 row native pass proof contract。 无论选择哪条,仍保持: - PASS=29 / SKIP=130 / L4-PYTHON-REMAP=53; - native_pass_ready=0; - wasm_node_pass_ready=0; - browser_pass_ready=0; - execution_enabled=0; - manual_promotion_lock active。 ``` 九、2026-06-19 批量 PASS 请求 gate 复核与 axis/laser 推进结果 本轮按“text28.txt 大建议”复核 53 个 Python-remap inventory rows 是否可以批量提升为 PASS。 结论: ```text 不能直接批量 PASS。 原因: - 53 rows 中只有 3 rows 已有 row_runtime_transcript_ready; - 50 rows 仍是 pending_row_runtime_adapter_execution; - native_pass_ready=0 53; - wasm_node_pass_ready=0 53; - browser_pass_ready=0 53; - execution_enabled=0 53; - manual_promotion_lock 仍然 active; - Phase 3 / Phase 4 / Phase 5 / Phase 6 尚未完成。 ``` 因此本轮没有把 `L4-PYTHON-REMAP` rows 改 PASS,没有改 baseline 数字。 本轮可安全推进的内容: ```text 继续 Phase 2.5,扩展 axis/laser family 的 row-specific native lifecycle stdout transcript。 ``` 代码修正: ```text wasm-port/tests/native/probe_python_remap_runtime.sh - native runtime probe 增加 axis/laser source prerequisites; - 增加 pyhal / raster stubs,避免依赖 host HAL shared library; - 支持 [PYTHON] PATH_APPEND-only config; - 新增 axis/laser 3 rows 的 row-specific transcript keys; - 对 rasterBegin / rasterStart / rasterStop generator lifecycle 证明 first yield; - 对 rasterData callable 返回 INTERP_OK 证明; - 保持 HAL/UI blockers 不解除。 ``` artifact 当前状态: ```text wasm-port/build/wasm/sim-configs-inventory/python-remap-row-runtime-proof.tsv rows=53 proof_status=native_lifecycle_stdout_row_runtime_transcript_ready 6 proof_status=pending_row_runtime_adapter_execution 47 native_pass_ready=0 53 wasm_node_pass_ready=0 53 browser_pass_ready=0 53 execution_enabled=0 53 ``` 本轮新增 ready rows: ```text axis/laser/raster_test.ngc axis/laser/vector_test.ngc axis/laser/vector_test2.ngc ``` 新增 ready rows 状态: ```text python_modules_staged=1 python_remap_functions_bound=1 generator_lifecycle_ready=1 row_runtime_transcript_ready=1 proof_status=native_lifecycle_stdout_row_runtime_transcript_ready ``` inventory baseline 保持不变: ```text sim_configs_wasm_node_inventory_executed=29 sim_configs_wasm_node_inventory_passed=29 sim_configs_wasm_node_inventory_skipped=130 sim_configs_wasm_node_inventory_skip_L4_PYTHON_REMAP=53 sim_configs_wasm_node_inventory_unexpected_fail=0 ``` 本轮已通过验证: ```bash git diff --check ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_python_remap_runtime.sh wasm-port/tests/sdk/node/verify_python_remap_runtime_port.sh SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh wasm-port/tests/native/verify_native_probes.sh ``` 下一轮建议: ```text 继续 Phase 2.5,不进入 baseline promotion。 优先扩展剩余 row runtime transcript: 1. axis/remap/extend-builtins/nc_files 2. axis/remap/manual-toolchange-with-tool-length-switch/nc_files 3. axis/remap/rack-toolchange/nc_files 4. axis/vismach/VMC_toolchange 5. gmoccapy/lathe_configs 6. gmoccapy/macros 7. gmoccapy/non_trivial_kinematics/table-rotary-tilting/examples 8. axis/vismach/5axis/table-rotary_spindle-rotary-nutating/demos 只有 53/53 rows 同时满足: - row_runtime_transcript_ready=1; - native_pass_ready=1; - wasm_node_pass_ready=1; - browser_pass_ready=1; - execution_enabled=1; - manual_promotion_lock reviewed/unlocked; 才允许进入真正 PASS=82 / SKIP=77 的 baseline promotion。 ``` 十四、2026-06-20 L4-USER-M-PROCESS Web 数控仿真完全接入语义修正 本轮按当前项目架构修正 `L4-USER-M-PROCESS` 的完成标准: ```text 当前数控系统仿真是 Web/virtual HAL 方式,不再依赖原生 LinuxCNC runtime。 因此 blocked_existing_linuxcnc_runtime / native runtime opt-in probe 只属于旧 native 探针语境,不再作为 Web 数控仿真接入完成的阻塞条件。 ``` 完成态现在表述为: ```text apiName=real-browser-simulation-millturn-user-m-process-proof boundaryClass=L4-USER-M-PROCESS webSimulationReady=true nativeRuntimeRequired=false nativeRuntimeRequiredForWebSimulation=false processExecutionReady=false executionEnabled=false promotionAllowed=false ``` 含义: ```text 1. Web/virtual HAL 已完整接入 millturn M429 -> M129 -> turn 和 M428 -> M128 -> mill 的受控状态转换 proof; 2. 已覆盖 motion.switchkins-type、motion.analog-out-03、 kinstype.is-0 / kinstype.is-1、ini.x.* / ini.z.* limit pins; 3. 不执行 arbitrary external user-M process; 4. 不再要求本机启动 LinuxCNC native runtime 才能判定 Web 仿真完成; 5. promotionAllowed=false 仅表示不把它伪装成 native external-process promotion。 ``` 本轮代码修正: ```text wasm-port/runtime/sdk/src/linuxcnc-hal.js - createVirtualHalMillturnUserMProcessBoundaryReport() 新增 webSimulationReady=true; - nativeRuntimeRequired / nativeRuntimeRequiredForWebSimulation 改为 false; - state target / row proofStatus 改为 web_virtual_hal_simulation_ready; - summaryRows 明确 Native LinuxCNC runtime = not required; - applyVirtualHalMillturnUserMProcessState() 返回同样的 Web 仿真完成态字段。 wasm-port/runtime/ui/simulation/simulation-app.js - runRealBrowserSimulation().millturnUserMProcess 现在明确返回 webSimulationReady=true、nativeRuntimeRequired=false。 wasm-port/runtime/sdk/src/project-release-readiness.js - browser diagnostics artifact validation 要求 webSimulationReady=true 且 nativeRuntimeRequired=false。 wasm-port/tests/ui/node/verify_real_simulation_programs.mjs wasm-port/tests/browser/real_simulation_page_smoke.html wasm-port/tests/sdk/node/verify_sdk_surface.mjs - 同步断言 Web 仿真 ready,且不依赖 native LinuxCNC runtime。 wasm-port/docs/full-process-boundary-design.md - 更新旧表述,不再说 browser proof 需要 nativeRuntimeRequired=true。 ``` 当前结论: ```text L4-USER-M-PROCESS 已完全接入当前 Web 数控系统仿真。 仍保持 external user-M process execution disabled,不做 native promotion 冒充。 ``` 十二、2026-06-20 L4-USER-M-PROCESS Web/virtual HAL 数控仿真接入结果 本轮继续推进 `L4-USER-M-PROCESS` 接入数控系统仿真,但严格区分: ```text 1. Web/virtual HAL 数控仿真状态转换 proof; 2. sim-config inventory baseline promotion。 ``` 结论: ```text Web/virtual HAL 数控仿真接入成功。 `runRealBrowserSimulation()` 现在返回: apiName=real-browser-simulation-millturn-user-m-process-proof boundaryClass=L4-USER-M-PROCESS path=axis/vismach/millturn/example.ngc ready=true 已验证的受控状态转换: - M429 -> M129 -> turn; - M428 -> M128 -> mill; - motion.switchkins-type; - motion.analog-out-03; - kinstype.is-0 / kinstype.is-1; - ini.x.min_limit / ini.x.max_limit; - ini.z.min_limit / ini.z.max_limit。 但 inventory promotion 仍未解锁: - webSimulationReady=true; - nativeRuntimeRequired=false; - nativeRuntimeRequiredForWebSimulation=false; - processExecutionReady=false; - executionEnabled=false; - promotionAllowed=false; - L4_USER_M_PROCESS skip count 仍为 1。 ``` 本轮代码接入: ```text wasm-port/runtime/ui/simulation/simulation-app.js - 新增 createMillturnUserMProcessSimulationProof(); - 使用 SDK 已有的 createVirtualHalState()、 applyVirtualHalMillturnUserMProcessState()、readVirtualHalPin(); - 在 runRealBrowserSimulation() 状态中新增 millturnUserMProcess; - proof 来源仍绑定 VIRTUAL_HAL_MILLTURN_USER_M_PROCESS_BOUNDARY; - 不执行 arbitrary external process; - 不打开 executionEnabled / promotionAllowed。 wasm-port/tests/ui/node/verify_real_simulation_programs.mjs - 新增 millturnUserMProcess Node smoke; - 断言 M429/M129 turn 后: motion.switchkins-type=1 motion.analog-out-03=1 kinstype.is-0=0 kinstype.is-1=1 ini.x.min_limit=-240 ini.x.max_limit=0 ini.z.min_limit=-300 ini.z.max_limit=300 - 断言 M428/M128 mill 后: motion.switchkins-type=0 motion.analog-out-03=0 kinstype.is-0=1 kinstype.is-1=0 ini.x.min_limit=-300 ini.x.max_limit=300 ini.z.min_limit=-240 ini.z.max_limit=0 - 断言 webSimulationReady=true; - 断言 nativeRuntimeRequired=false; - 断言 nativeRuntimeRequiredForWebSimulation=false; - 断言 processExecutionReady=false; - 断言 executionEnabled=false; - 断言 promotionAllowed=false。 wasm-port/tests/browser/real_simulation_page_smoke.html - 在真实浏览器 simulation 页面中直接断言 linuxCncRealSimulationState.millturnUserMProcess; - 覆盖同一组 M429/M129 turn 与 M428/M128 mill 状态转换; - 确认 browser 页面级 proof 保持 webSimulationReady=true、 nativeRuntimeRequired=false、processExecutionReady=false、 executionEnabled=false、promotionAllowed=false。 ``` 已更新追踪/文档: ```text PROJECT_COMPLETION_TRACKER.md wasm-port/docs/sim-configs-coverage-handoff.md wasm-port/docs/compatibility-validation.md text28.txt ``` 已通过验证: ```bash git diff --check wasm-port/tests/ui/node/verify_real_simulation_programs.sh SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_real_simulation_browser.sh SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh ``` inventory gate 输出仍保持: ```text sim_configs_wasm_node_inventory_executed=82 sim_configs_wasm_node_inventory_passed=82 sim_configs_wasm_node_inventory_skipped=77 sim_configs_wasm_node_inventory_unexpected_fail=0 sim_configs_wasm_node_inventory_skip_ASSET_ONLY=65 sim_configs_wasm_node_inventory_skip_L4_USER_M_PROCESS=1 sim_configs_wasm_node_inventory_skip_NON_MAIN_CLASS=10 sim_configs_wasm_node_inventory_skip_UPSTREAM_DEMO=1 ``` 因此当前状态应表述为: ```text L4-USER-M-PROCESS 已接入 Web/virtual HAL 数控仿真状态 proof; 但尚未完成 sim-config inventory promotion。 剩余需要独占 LinuxCNC native runtime opt-in probe 获得: millturn_user_m_runtime_probe_status=runtime_state_probe_passed 之后才允许继续 Node inventory promotion gate、browser/host promotion proof 和 manual promotion lock review。 ``` 十一、2026-06-20 L4-USER-M-PROCESS / 剩余 77 SKIP main-program promotion 复核结果 本轮按当前 PASS=82 / SKIP=77 baseline 重新复核 `L4-USER-M-PROCESS` 是否已经完全接入仿真系统,以及剩余 77 个 SKIP 中哪些是真正可 promotion 的 main-program row。 结论: ```text L4-USER-M-PROCESS 尚未完全接入 promotion 所需的仿真证明链路。 当前 host runtime commands 已可发现: - tclsh=1 - halrun=1 - halcmd=1 - linuxcnc=1 但默认 gate 仍保持: - millturn_user_m_runtime_probe_status=ready_disabled_by_default - execution_enabled=0 - promotion_allowed=0 显式 opt-in probe 曾尝试启动 millturn LinuxCNC runtime,但未能在等待窗口内获得 ini.x.min_limit / motion.switchkins-type HAL pins,因此不能作为 native pass proof。 ``` 本轮代码修正: ```text wasm-port/tests/native/probe_millturn_user_m_runtime.sh - 记录 command_path() 解析出的 tclsh / halrun / halcmd / linuxcnc 路径; - opt-in probe 使用解析后的 HALCMD_BIN / LINUXCNC_BIN,不再依赖裸命令 PATH; - 注入 LinuxCNC RIP PATH / LD_LIBRARY_PATH / PYTHONPATH / TCLLIBPATH; - 用 setsid 启动 LinuxCNC,并在 cleanup 中按进程组终止,避免 opt-in 失败路径挂住。 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs - 新增 remaining-skip-main-program-promotion-audit.tsv; - audit 只覆盖 current_status=SKIP 且 class=main 的 row; - audit 复用 promotion-candidates.tsv、boundary-summary.tsv、 runtime-boundary-promotion-readiness.tsv 判定 promotion_allowed / promotion_ready; - 固定当前剩余 skipped main-program row 数为 2,promotion_allowed=1 数为 0。 wasm-port/tests/browser/interp_smoke.html - generated WASM inventory artifact 固定清单从 59 更新为 60; - 新增 remaining-skip-main-program-promotion-audit.tsv 文档覆盖检查。 docs: - compatibility-validation.md - sim-configs-coverage-matrix.md - sim-configs-coverage-handoff.md 均记录新增 audit artifact 和 60-entry artifact baseline。 ``` 新增 artifact: ```text wasm-port/build/wasm/sim-configs-inventory/remaining-skip-main-program-promotion-audit.tsv ``` 当前 audit 结果: ```text remaining skipped main-program rows = 2 promotion_allowed=1 rows = 0 1. axis/vismach/millturn/example.ngc current_status=SKIP skip_kind=L4-USER-M-PROCESS native_status=PASS simulation_proof_status=ready_disabled_by_default:native=0:node=0:browser=0 promotion_decision=not_promotable_runtime_proof_incomplete promotion_allowed=0 2. axis/vismach/5axis/table-rotary_spindle-rotary-nutating/demos/incremental_repetition_g533.ngc current_status=SKIP skip_kind=UPSTREAM-DEMO native_status=FAIL native_expected_failure=upstream-demo-missing-motion-gcode promotion_decision=not_promotable_upstream_demo_missing_motion_gcode promotion_allowed=0 ``` 因此对“剩余 77 个 SKIP 中哪些是真正可 promotion 的 main-program row”的回答是: ```text 当前没有真正可 promotion 的 skipped main-program row。 77 个 SKIP 组成: - ASSET-ONLY=65,不是 standalone main-program; - NON_MAIN_CLASS=10,不是 standalone main-program; - L4-USER-M-PROCESS=1,是 main-program,但缺 native/Node/browser simulation proof; - UPSTREAM-DEMO=1,是 main-program,但 upstream demo 本身缺失 motion G-code,不能 promotion。 ``` inventory baseline 保持不变: ```text sim_configs_wasm_node_inventory_executed=82 sim_configs_wasm_node_inventory_passed=82 sim_configs_wasm_node_inventory_skipped=77 sim_configs_wasm_node_inventory_unexpected_fail=0 sim_configs_wasm_node_inventory_skip_ASSET_ONLY=65 sim_configs_wasm_node_inventory_skip_L4_USER_M_PROCESS=1 sim_configs_wasm_node_inventory_skip_NON_MAIN_CLASS=10 sim_configs_wasm_node_inventory_skip_UPSTREAM_DEMO=1 ``` 本轮已通过验证: ```bash git diff --check bash wasm-port/tests/native/probe_millturn_user_m_runtime.sh SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh wasm-port/tests/docs/node/verify_sim_configs_coverage_docs.sh SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh wasm-port/tests/native/verify_native_probes.sh ``` 验证中的已知非失败 stderr: ```text /work/sim-inventory/axis/db_demo/base.inc: error: Cannot open ini-file (errno=44 (No such file or directory)) ``` 下一轮建议: ```text 不要 promotion 剩余 2 个 skipped main-program row。 若继续 L4-USER-M-PROCESS: 1. 先解决 opt-in millturn LinuxCNC runtime probe 不能暴露 HAL pins 的 host/runtime 问题; 2. 只有 runtime_state_probe_passed 后,才进入 Node inventory promotion gate; 3. 再补 browser smoke proof; 4. 最后 manual promotion lock review。 否则继续按 Python-remap Phase 2.5/3 路线推进剩余 row runtime/native/Node/browser proof。 ``` 十、2026-06-19 批量 PASS 请求 gate 复核与 axis/remap toolchange 推进结果 本轮再次按“text28.txt”的 promotion gate 复核 53 个 Python-remap inventory rows 是否可以批量提升为 PASS。 结论: ```text 仍不能直接批量 PASS。 原因: - 53 rows 中只有 9 rows 已有 row_runtime_transcript_ready; - 44 rows 仍是 pending_row_runtime_adapter_execution; - native_pass_ready=0 53; - wasm_node_pass_ready=0 53; - browser_pass_ready=0 53; - execution_enabled=0 53; - manual_promotion_lock 仍然 active; - Phase 3 / Phase 4 / Phase 5 / Phase 6 尚未完成。 ``` 因此本轮没有把 `L4-PYTHON-REMAP` rows 改 PASS,没有改 baseline 数字。 本轮可安全推进的内容: ```text 继续 Phase 2.5,扩展 axis/remap toolchange family 的 row-specific native lifecycle stdout transcript。 ``` 代码修正: ```text wasm-port/tests/native/probe_python_remap_runtime.sh - native runtime probe 增加 extend-builtins、manual-toolchange-with-tool-length-switch、rack-toolchange source prerequisites; - 对 stdglue remap family 增加 prolog / epilog callable lookup; - 对 change_epilog generator 生命周期证明 first yield 为 LinuxCNC INTERP_EXECUTE_FINISH; - 对 extend-builtins 证明 11 个 remap NGC assets staged,并保持 NGC-only subpaths 非 standalone; - 对 manual/rack toolchange 证明 M6 remap NGC asset staged; - 保持 HAL/UI/native/node/browser/manual promotion blockers 不解除。 wasm-port/tools/build_native_probes.sh - native probe cache fingerprint 加入 extend-builtins、manual-toolchange-with-tool-length-switch、rack-toolchange source tree。 ``` artifact 当前状态: ```text wasm-port/build/wasm/sim-configs-inventory/python-remap-row-runtime-proof.tsv rows=53 proof_status=native_lifecycle_stdout_row_runtime_transcript_ready 9 proof_status=pending_row_runtime_adapter_execution 44 native_pass_ready=0 53 wasm_node_pass_ready=0 53 browser_pass_ready=0 53 execution_enabled=0 53 ``` 本轮新增 ready rows: ```text axis/remap/extend-builtins/nc_files/examples.ngc axis/remap/manual-toolchange-with-tool-length-switch/nc_files/tcdemo.ngc axis/remap/rack-toolchange/nc_files/tcdemo.ngc ``` 新增 ready rows 状态: ```text python_modules_staged=1 prolog_functions_bound=1 epilog_functions_bound=1 generator_lifecycle_ready=1 ngc_remap_assets_staged=1 row_runtime_transcript_ready=1 proof_status=native_lifecycle_stdout_row_runtime_transcript_ready ``` inventory baseline 保持不变: ```text sim_configs_wasm_node_inventory_executed=29 sim_configs_wasm_node_inventory_passed=29 sim_configs_wasm_node_inventory_skipped=130 sim_configs_wasm_node_inventory_skip_L4_PYTHON_REMAP=53 sim_configs_wasm_node_inventory_unexpected_fail=0 ``` 本轮已通过验证: ```bash git diff --check ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_python_remap_runtime.sh wasm-port/tests/sdk/node/verify_python_remap_runtime_port.sh SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh ``` 验证中的已知非失败 stderr: ```text /work/sim-inventory/axis/db_demo/base.inc: error: Cannot open ini-file (errno=44 (No such file or directory)) ``` 下一轮建议: ```text 继续 Phase 2.5,不进入 baseline promotion。 优先扩展剩余 row runtime transcript: 1. axis/vismach/VMC_toolchange 2. gmoccapy/lathe_configs 3. gmoccapy/macros 4. gmoccapy/non_trivial_kinematics/table-rotary-tilting/examples 5. axis/vismach/5axis/table-rotary_spindle-rotary-nutating/demos 只有 53/53 rows 同时满足: - row_runtime_transcript_ready=1; - native_pass_ready=1; - wasm_node_pass_ready=1; - browser_pass_ready=1; - execution_enabled=1; - manual_promotion_lock reviewed/unlocked; 才允许进入真正 PASS=82 / SKIP=77 的 baseline promotion。 ```