结论:完成 LinuxCNC kinematics WASM ABI 覆盖,并将 web-rtcp-5axis-sim-plan 的 RTCP frame/boundary adapter 接到 xyzac-trt kinematics SDK;Node、build、browser smoke 验证通过。
955 lines
30 KiB
Plaintext
955 lines
30 KiB
Plaintext
项目接续文件: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。
|
||
```
|