项目接续文件：L4-USER-M-PROCESS 完成后的剩余 SKIP 复核推进

生成时间：2026-06-20 CST

本文件接替当前关于 `L4-USER-M-PROCESS` 的推进记录，用于后续继续执行：

```text
主要未完成点曾是剩余：
L4-USER-M-PROCESS=1，对应 axis/vismach/millturn/example.ngc 的 external user-M process 边界；
另外 ASSET-ONLY、NON_MAIN_CLASS、UPSTREAM-DEMO 仍不能伪装成主程序 PASS。

先做 L4-USER-M-PROCESS，完全接入 Web 数控仿真。
完成它以后，再重新评估剩余 77 个 SKIP 中哪些是真正可 promotion 的 main-program row。
```

一、当前结论

```text
L4-USER-M-PROCESS 已按当前 Web/virtual HAL 数控仿真主线完成接入。
```

当前完成态定义为：

```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；
2. Web/virtual HAL 已接入 millturn M428 -> M128 -> mill；
3. 已覆盖 motion.switchkins-type、motion.analog-out-03、
   kinstype.is-0 / kinstype.is-1、ini.x.* / ini.z.* limit pins；
4. 当前 Web 数控仿真不再依赖原生 LinuxCNC runtime；
5. 仍不执行 arbitrary external user-M process；
6. 仍不把 external user-M process 伪装成 native inventory promotion。
```

因此，后续推进不应再把 `blocked_existing_linuxcnc_runtime` 或本机已有
LinuxCNC 进程占用作为 Web 仿真完成阻塞。

二、下一步主任务

```text
重新评估当前剩余 77 个 SKIP 中，哪些是真正可 promotion 的 main-program row。
```

必须继续保持的边界：

```text
ASSET-ONLY 不能伪装成主程序 PASS；
NON_MAIN_CLASS 不能伪装成主程序 PASS；
UPSTREAM-DEMO 不能伪装成主程序 PASS；
external user-M arbitrary process execution 不能伪装成 Web 已执行；
promotion_allowed 只能由明确 artifact / smoke / review 证据置 1。
```

三、建议执行顺序

1. 重新生成并读取当前 sim-config inventory artifact。

优先查看：

```text
wasm-port/build/wasm/sim-configs-inventory/summary.tsv
wasm-port/build/wasm/sim-configs-inventory/skip-summary.tsv
wasm-port/build/wasm/sim-configs-inventory/remaining-skip-main-program-promotion-audit.tsv
wasm-port/build/wasm/sim-configs-inventory/promotion-candidates.tsv
wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-promotion-readiness.tsv
wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-promotion-blockers.tsv
```

推荐命令：

```bash
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
```

2. 先按分类复核 77 个 SKIP。

当前预期分类仍应是：

```text
ASSET-ONLY=65
L4-USER-M-PROCESS=1
NON_MAIN_CLASS=10
UPSTREAM-DEMO=1
```

复核目标不是降低数字，而是判断：

```text
哪些 row 其实是可执行 main-program；
哪些 row 只是资产、子程序、demo 或非主程序；
哪些 row 已经具备 Web 仿真 proof 但不允许 inventory promotion；
哪些 row 需要新增 Node/browser smoke 才能 promotion。
```

3. 对 `remaining-skip-main-program-promotion-audit.tsv` 做逐 row 判断。

每个 row 至少记录：

```text
path
ini
class
skip_kind
blocked_kind
current_status
promotion_allowed
promotion_ready
simulation_proof_status
recommended_next_command
```

判定规则：

```text
promotion_allowed=1 且 promotion_ready=1：
  可以进入实际 promotion gate。

promotion_allowed=0：
  只能记录阻塞原因，不能强行 PASS。

class != main：
  不能作为 main-program promotion 对象。

skip_kind=ASSET-ONLY / NON_MAIN_CLASS / UPSTREAM-DEMO：
  默认保持 SKIP，除非有新的 LinuxCNC-owned 主程序证据。

skip_kind=L4-USER-M-PROCESS：
  Web 仿真 proof 已完成，但仍保持 external process execution disabled；
  不因 Web proof 自动变成 native inventory PASS。
```

4. 若发现真正可 promotion 的 main-program row，按证据链推进。

最低证据链：

```text
Node/WASM inventory execution proof
browser smoke proof
diagnostics artifact coverage
source compliance proof
manual promotion lock review
```

不得只因为程序能被 JavaScript 模拟展示就 promotion。

四、首轮复核建议

优先检查：

```text
1. remaining-skip-main-program-promotion-audit.tsv 中 class=main 的 row；
2. promotion-candidates.tsv 中 candidate_kind=inventory-ready 的 row；
3. runtime-boundary-promotion-readiness.tsv 中 promotion_ready=1 的 row；
4. skip-summary.tsv 中 L4-USER-M-PROCESS 是否仍只剩 1；
5. ASSET-ONLY / NON_MAIN_CLASS / UPSTREAM-DEMO 是否有误分类。
```

如果 `promotion_allowed=1 rows = 0`，本轮结论应直接记录：

```text
剩余 77 个 SKIP 暂无可直接 promotion 的 main-program row。
下一步应继续补 artifact，而不是强行改 PASS。
```

如果发现 `promotion_allowed=1` 的 row，则下一步应为：

```text
1. 明确 row path / ini / gcode；
2. 补 Node inventory proof；
3. 补 browser smoke proof；
4. 补 docs/tracker；
5. 运行 release gate；
6. 再更新 baseline。
```

五、推荐验证命令

```bash
git diff --check
wasm-port/tests/sdk/node/verify_sdk_surface.sh
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
```

必要时再运行：

```bash
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_project_release_gate.sh
```

六、下一轮工作目标

```text
目标：
完成“剩余 77 个 SKIP 哪些是真正可 promotion 的 main-program row”的复核。

输出：
1. 当前 77 SKIP 分类确认；
2. 可 promotion row 列表；
3. 不可 promotion row 阻塞原因；
4. 下一批应实现的 Node/browser smoke；
5. 是否允许 baseline 从 PASS=82 / SKIP=77 继续变化的明确结论。
```

七、当前行动建议

```text
下一轮不要再继续纠缠 L4-USER-M-PROCESS 是否接入 Web 仿真。
它已经完成当前 Web 仿真接入。

下一轮直接进入：
remaining-skip-main-program-promotion-audit.tsv 逐 row 复核。
```
