项目接续文件：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-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。
```
