Files
cnc_wams/textbak/text28.txt
wangdequan 626bcfe8e3 继续完成 web-rtcp-5axis-sim-plan
结论:完成 LinuxCNC kinematics WASM ABI 覆盖,并将 web-rtcp-5axis-sim-plan 的 RTCP frame/boundary adapter 接到 xyzac-trt kinematics SDK;Node、build、browser smoke 验证通过。
2026-06-21 16:44:29 +08:00

955 lines
30 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
项目接续文件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 1machine-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 2row-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 3row native pass proof
- 逐 row 证明 native runtime pass
- 对齐 `python-remap-row-runtime-proof.tsv` 的 proof targets
- native proof 不能只证明 stop-lookahead lifecycle 后推断 53 rows 全 PASS。
Phase 4WASM Node pass proof
- 逐 row 证明 WASM Node runtime bridge 可执行同等 row contract
- 保留 LinuxCNC-owned semantics禁止 JS 重写 CNC 语义。
Phase 5Browser pass proof
- 逐 row 证明 browser worker / UI workflow 与 Node proof 对齐;
- browser proof 必须在 Node proof 后接受。
Phase 6manual 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 数为 2promotion_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。
```