项目整体完成情况与后续执行计划

生成时间：2026-06-11 CST

本文件接替 `text4.txt`。后续工作按 `text5.txt` 执行；除非本文件被更新，
不要再回到 `text1/text2/text3/text4` 的旧计划扩展范围。

一、项目纪律

1. LinuxCNC 仍是唯一 CNC 语义来源。
   G-code、remap、tool、parameter、planner、kinematics、user-M、tool DB、
   Python remap 等语义必须来自 LinuxCNC upstream 或 vendored LinuxCNC
   C/C++/配置/脚本源码。

2. 本项目允许实现的范围是：
   build、source sync、runtime shim、filesystem staging、OPFS、WASM/browser
   boundary、测试胶水、文档、机器可读 gate/artifact。

3. 禁止事项：
   - 不在 JS 中重写 G-code 或 CNC 语义。
   - 不修改 vendored LinuxCNC 源文件来让测试通过。
   - 不把 full-process/HAL/UI/Python/tool DB 依赖伪装成 standalone pass。
   - 不把 expected failure 硬改成 pass，除非已经有 LinuxCNC-owned runtime
     proof，并且 native、Node、browser gate 都按顺序通过。

4. browser 不能依赖目录枚举。Node/browser staging 继续使用
   `tools/source-manifest.txt`、INI 文本和 SDK staging helper 生成计划。

二、当前整体完成情况

1. WASM port 基础架构已成型。
   `wasm-port` 已按独立移植工作区组织，包含 vendor、runtime/core、
   runtime/sdk、runtime/opfs、runtime/ui、native/wasm/browser tests、docs 和
   tools。`linuxcnc/` 作为 upstream source tree 使用，不在原地修改。

2. G-code file execution 状态输出已完成第一阶段。
   已有 `run_step` 机器可解析输出：
   - 当前 line；
   - 当前 statement_uri；
   - read/execute phase 与 step；
   - X/Y/Z/A/B/C/U/V/W 轴位置；
   - UI 优先解析 run_step，fallback 到 canonical motion event。

3. `linuxcnc/nc_files` 基础测试已固化。
   当前 Layer 1 基线：
   - 命令：`wasm-port/tests/native/verify_nc_files.sh`
   - 结果：`total 107, pass 101, expected_fail 6, unexpected_fail 0`
   - `3D_Chips.ngc` 等代表程序已纳入 context-aware smoke。

4. `linuxcnc/configs/sim` native strict harness 已建立。
   当前 Layer 2 基线：
   - 命令：`wasm-port/tests/native/verify_sim_configs.sh`
   - 结果：`total 159, pass 151, expected_fail 8, unexpected_fail 0`
   - class 统计：
     - `main 48`
     - `macro_load 46`
     - `remap_subroutine 65`
   - 8 个 expected failure 当前归因清楚：
     - `axis/foam/foam.ngc`：native standalone 缺 U/V axis context；
     - bridge-mill `5axisgui.ngc`：native standalone 缺 W axis context；
     - `axis/geometry/xyzc.ngc`：native standalone 缺 M110 USER_M_PATH runtime；
     - `axis/external_offsets/*.ngc`：native standalone 缺 M111 USER_M_PATH
       runtime；
     - `incremental_repetition_g533.ngc`：保留 upstream demo edge。

5. `configs/sim` 覆盖矩阵已完成当前定义。
   已有 tracked matrix：
   - `wasm-port/docs/sim-configs-coverage-matrix.md`
   已有 native generated artifacts：
   - `wasm-port/build/native/sim-configs/summary.tsv`
   - `wasm-port/build/native/sim-configs/class-summary.tsv`
   - `wasm-port/build/native/sim-configs/path-matrix.tsv`
   159 条记录已映射到 class、native status、expected failure、Layer 3/4
   coverage、blocked dependency 或非目标分类。

6. INI-context staging helper 已制度化。
   `planIniFileContextStaging()` 和 `planSimConfigStaging()` 已负责根据 INI
   与 manifest 收集：
   - `[DISPLAY]OPEN_FILE`
   - `[EMCIO]TOOL_TABLE`
   - `[RS274NGC]PARAMETER_FILE`
   - `[RS274NGC]SUBROUTINE_PATH`
   - `[RS274NGC]USER_M_PATH`
   - remap-NGC files
   这些 helper 只做 host/filesystem staging plan，不读写 CNC 语义。

7. Node WASM sim-config inventory 已完成当前阶段。
   当前 Node inventory：
   - `executed 28`
   - `passed 28`
   - `skipped 131`
   - `unexpected_fail 0`
   当前 skip/block 汇总：
   - `ASSET-ONLY 65`
   - `L4-PYTHON-REMAP 53`
   - `L4-TOOL-DB 1`
   - `L4-USER-M-PROCESS 1`
   - `NON_MAIN_CLASS 10`
   - `UPSTREAM-DEMO 1`

8. HAL/UI/full-process boundary classifier 与 gate 已完成当前阶段。
   SDK 已能识别并记录：
   - HAL/HALUI/UI process declarations；
   - Python UI/DB/remap declarations；
   - `[EMCIO]DB_PROGRAM` tool DB process；
   - `[RS274NGC]USER_M_PATH` 与 unstaged external user-M process calls；
   - L4 hard blocked recommendation。

9. 当前三个 hard blocked runtime family 已有非执行 proof/gate/artifact。
   仍 blocked，不允许 promotion：
   - `L4-USER-M-PROCESS`：
     `axis/vismach/millturn/example.ngc`
   - `L4-TOOL-DB`：
     `axis/db_demo/base.ngc`
   - `L4-PYTHON-REMAP`：
     `axis/remap/stop-lookahead/nc_files` 作为最小生命周期 fixture

10. blocked runtime host readiness 当前状态。
    当前 host 不具备执行 blocked runtime opt-in probes 的条件：
    - 缺 `halcmd`
    - 缺 `halrun`
    - 缺 `linuxcnc`
    - 缺 `milltask`
    当前 rollup：
    - `family_count=3`
    - `host_ready_family_count=0`
    - `host_blocked_family_count=3`
    - `ready_opt_in_command_count=0`
    - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
    - `execution_enabled=0`
    - `promotion_allowed=0`

11. 当前工作区状态说明。
    已有未提交改动：
    - `text4.txt`
    - `wasm-port/tests/browser/interp_smoke.html`
    - `wasm-port/tests/browser/verify_interp_browser.sh`
    - `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
    本文件只新增 `text5.txt`，不回退这些既有改动。

三、当前必须保持通过的验证入口

每一批后续改动后，至少运行：

```bash
git diff --check
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

涉及 native baseline 或大范围 source/staging 改动时，再运行：

```bash
wasm-port/tests/native/verify_nc_files.sh
wasm-port/tests/native/verify_sim_configs.sh
wasm-port/tests/native/verify_native_probes.sh
```

通过条件：

- `git diff --check` clean。
- vendor sync 通过。
- no-standalone-CNC-semantics guard 通过。
- Node/browser smoke 通过。
- Layer 1 保持 `107 / 101 / expected_fail 6 / unexpected_fail 0`。
- Layer 2 保持 `159 / 151 / expected_fail 8 / unexpected_fail 0`，除非有新的
  LinuxCNC-owned proof 和文档同步说明。
- Node inventory 保持 `unexpected_fail 0`。
- blocked runtime rows 保持 `execution_enabled=0` 和 `promotion_allowed=0`，
  直到 gate 明确允许。

四、后续执行顺序

1. 先稳定当前大批改动，形成可审查状态

目标：

- 不继续扩大测试面。
- 先确认当前 23 个 boundary/gate 批次、browser smoke 改动和 Node inventory
  改动可以稳定复跑。
- 把当前工作集整理成可审查边界。

执行命令：

```bash
git diff --check
git status --short
git diff --stat
git diff --name-only
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

产出：

- 记录当前所有改动文件。
- 按审查 batch 归类：
  - Batch A：browser smoke gate/schema 扩展；
  - Batch B：Node sim-config inventory artifact/gate 扩展；
  - Batch C：`text4.txt` 边界记录；
  - Batch D：`text5.txt` 后续执行计划。
- 如果某个验证失败，优先修当前批次的 test/gate drift，不新增功能。

2. 对 `text4` 后半段新增 gate 做文档对账

目标：

- 确认 `text4.txt` 中 Batch 15 到 Batch 23 的新增 artifact，都在
  `docs/compatibility-validation.md` 或
  `docs/sim-configs-coverage-matrix.md` 中有对应说明。
- 文档不能只记录“生成了文件”，还要记录该 artifact 的 promotion 含义：
  non-executing、non-promoting、blocked until host/runtime/native proof。

重点对账 artifact：

```text
runtime-boundary-host-preflight.tsv
runtime-boundary-host-requirement-summary.tsv
runtime-boundary-host-unblock-plan.tsv
runtime-boundary-family-host-readiness.tsv
runtime-boundary-host-readiness-rollup.tsv
runtime-boundary-opt-in-probe-dispatch-plan.tsv
runtime-boundary-opt-in-probe-dispatch-rollup.tsv
runtime-boundary-opt-in-probe-skip-evidence-contract.tsv
runtime-boundary-opt-in-probe-skip-evidence-rollup.tsv
```

验证：

```bash
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

3. 固化 blocked runtime host preflight 的人工检查流程

目标：

- 后续换到具备 LinuxCNC host runtime 的机器时，可以先跑 preflight/rollup，
  再决定是否允许执行 opt-in native probes。
- 当前机器继续保持 blocked，不运行 opt-in probe。

当前缺失：

```text
halcmd
halrun
linuxcnc
milltask
```

当前禁止直接执行：

```bash
ENABLE_MILLTURN_USER_M_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_millturn_user_m_runtime.sh
ENABLE_TOOL_DB_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_tool_db_runtime.sh
ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_python_remap_runtime.sh
```

只有当对应 gate 显示 `runtime_ready=1`，并且 dispatch plan 显示
`dispatch_allowed=1` 时，才允许人工 opt-in 执行。

执行时仍然不能自动 promotion。native pass 后还必须经过：

1. native pass evidence contract；
2. Node inventory gate；
3. browser smoke gate；
4. manual promotion lock update；
5. 文档和 coverage matrix 同步。

4. 第一个可推进 blocked runtime：millturn M128/M129

前置条件：

- host 具备 `tclsh`、`halrun`、`halcmd`、`linuxcnc`。
- `user-m-process-native-runtime-probe-gate.tsv` 报告 `runtime_ready=1`。
- `runtime-boundary-opt-in-probe-dispatch-plan.tsv` 对
  `L4-USER-M-PROCESS` 报告可 dispatch。

执行目标：

- 用 LinuxCNC-owned Tcl/HAL runtime 证明 `M128/M129` 过程脚本真实更新
  `ini.[xyz].*` HAL pins。
- 证明 `M428 -> M128` 和 `M429 -> M129` transition contract。
- 不把该行为降级成 canonical user-M event。

允许执行的 opt-in 命令：

```bash
ENABLE_MILLTURN_USER_M_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_millturn_user_m_runtime.sh
```

native pass 期望：

```text
runtime_state_probe_passed
millturn_user_m_M128_runtime_state_ok=1
millturn_user_m_M129_runtime_state_ok=1
```

后续要求：

- 更新 native evidence artifact。
- 更新 Node inventory gate。
- 只在 Node proof 通过后，再考虑 browser/sdkwasm narrow boundary。
- 不声明 full LinuxCNC task/HAL/UI process coverage。

5. 第二个可推进 blocked runtime：tool DB process

前置条件：

- host 具备 `python3`、`linuxcnc`、`milltask`、`halcmd`。
- `tool-db-process-native-runtime-probe-gate.tsv` 报告 `runtime_ready=1`。
- dispatch plan 对 `L4-TOOL-DB` 报告可 dispatch。

执行目标：

- 证明 LinuxCNC `DB_PROGRAM` v2.1 protocol：
  - startup handshake；
  - `g` get-all；
  - `p` put/update；
  - `l` load；
  - `u` unload；
  - persistence state。
- 禁止用 `.tbl` fallback 冒充 DB_PROGRAM coverage。

允许执行的 opt-in 命令：

```bash
ENABLE_TOOL_DB_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_tool_db_runtime.sh
```

native pass 期望：

```text
runtime_protocol_probe_passed
tool_db_protocol_version=v2.1
tool_db_runtime_protocol_probe_ok=1
tool_db_persistence_state_ok=1
```

6. 第三个可推进 blocked runtime：Python remap lifecycle

前置条件：

- host 具备 `python3` 和 `linuxcnc`。
- `python-remap-native-runtime-probe-gate.tsv` 报告 `runtime_ready=1`。
- dispatch plan 对 `L4-PYTHON-REMAP` 报告可 dispatch。

执行目标：

- 先只做最小 fixture：
  `axis/remap/stop-lookahead/nc_files`
- 证明 LinuxCNC Python remap runtime lifecycle：
  - demo.ini path/toplevel import；
  - callable lookup；
  - generator return；
  - first `INTERP_EXECUTE_FINISH` yield。
- 不把 53 个 Python-remap family 直接提升到 browser/full inventory。

允许执行的 opt-in 命令：

```bash
ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_python_remap_runtime.sh
```

native pass 期望：

```text
runtime_lifecycle_probe_passed
python_remap_lifecycle_generator_first_yield=2
python_remap_runtime_lifecycle_probe_ok=1
```

7. native pass 后的 promotion 顺序

任何 blocked runtime family 即使 native opt-in probe 通过，也必须按下面顺序推进：

1. pass evidence contract 变为 ready；
2. `runtime-probe-gate-alignment.tsv` 对齐；
3. `runtime-boundary-promotion-readiness.tsv` 更新；
4. Node inventory 新增 narrow proof，但 blocked row 不能直接变成 broad REP；
5. browser smoke 只补 narrow boundary proof；
6. 手动更新 promotion lock；
7. 更新：
   - `docs/compatibility-validation.md`
   - `docs/full-process-boundary-design.md`
   - `docs/sim-configs-coverage-matrix.md`
   - `text5.txt`

8. 继续 upstream intake 的条件

只有当前工作集稳定，并且 blocked runtime gate 没有 drift 后，才允许继续小批量
引入 upstream `tests/interp/*` 或 `tests/ccomp/*`。

候选原则：

- 优先 pure interpreter file execution。
- 需要 INI/tool/parameter/subroutine/user-M context 的，必须通过 staging helper。
- Python remap、MDI/UI/full-process、HAL/task/linuxcncrsh 默认 blocked。
- 每个 intake 必须先 native，再 Node WASM，再 browser。
- 每次只做小批量，不用新增测试面掩盖当前 gate 问题。

五、近期不要做的事

1. 不继续扩大 browser 全量 inventory。
   browser 保持 class representative smoke，不追求一次性跑完 159 个 sim-config
   rows。

2. 不在当前 host 上执行 blocked opt-in probes。
   当前 host 缺 `halcmd/halrun/linuxcnc/milltask`，dispatch rollup 已显示全部
   blocked。

3. 不把 `axis/db_demo/base.ngc` 降级成 tool-table fallback。

4. 不把 `axis/vismach/millturn/example.ngc` 降级成 user-M canonical event。

5. 不把 Python remap family 降级成 JS/Python stub 语义。

6. 不把 `incremental_repetition_g533.ngc` 改成 pass。
   这是保留 upstream demo edge，不修改 G-code 或 runner 语义。

六、下一次开始执行时的第一条命令

从这里继续：

```bash
git diff --check
git status --short
git diff --stat
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

如果这些不通过，先修验证 drift；不要新增功能。

如果这些通过，优先做“第四部分第 2 步：对 `text4` 后半段新增 gate 做文档对账”。

七、2026-06-11 执行记录

本轮按“六、下一次开始执行时的第一条命令”继续执行。

1. 初始稳定性检查完成。

执行：

```bash
git diff --check
git status --short
git diff --stat
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- 当前工作区仍有既有改动，并新增/更新本轮文档：
  - `text4.txt`
  - `text5.txt`
  - `wasm-port/tests/browser/interp_smoke.html`
  - `wasm-port/tests/browser/verify_interp_browser.sh`
  - `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
  - `wasm-port/docs/compatibility-validation.md`
  - `wasm-port/docs/sim-configs-coverage-matrix.md`
  - `wasm-port/docs/full-process-boundary-design.md`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`

2. 第四部分第 2 步完成：`text4` 后半段新增 gate 文档对账。

更新：

- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

已补齐以下 artifact 的路径和 non-executing/non-promoting 语义说明：

```text
runtime-boundary-host-preflight.tsv
runtime-boundary-host-requirement-summary.tsv
runtime-boundary-host-unblock-plan.tsv
runtime-boundary-family-host-readiness.tsv
runtime-boundary-host-readiness-rollup.tsv
runtime-boundary-opt-in-probe-dispatch-plan.tsv
runtime-boundary-opt-in-probe-dispatch-rollup.tsv
runtime-boundary-opt-in-probe-skip-evidence-contract.tsv
runtime-boundary-opt-in-probe-skip-evidence-rollup.tsv
```

验证：

```bash
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果全部通过。

3. 第四部分第 3 步完成：blocked runtime host preflight 人工检查流程固化。

更新：

- `wasm-port/docs/full-process-boundary-design.md`

新增 `Host Preflight Runbook`，明确：

- 必须先检查 host preflight、family readiness、host readiness rollup、
  dispatch plan、dispatch rollup。
- 当前 host 缺 `halcmd`、`halrun`、`linuxcnc`、`milltask`。
- 当前 host 对所有 blocked runtime opt-in native probes 都保持 blocked。
- 以下命令当前仍禁止执行：

```bash
ENABLE_MILLTURN_USER_M_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_millturn_user_m_runtime.sh
ENABLE_TOOL_DB_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_tool_db_runtime.sh
ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_python_remap_runtime.sh
```

- 只有对应 family 的 `runtime_ready=1` 且 `dispatch_allowed=1` 后，才允许
  人工 opt-in。
- native opt-in probe pass 仍不等于 promotion；还必须经过 evidence contract、
  gate alignment、Node proof、browser proof 和 manual promotion lock update。

验证：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 第四部分第 4 步当前 blocked，不能执行。

原因：

- `runtime-boundary-host-readiness-rollup.tsv` 当前仍为
  `host_blocked_for_all_opt_in_native_probes`。
- `runtime-boundary-opt-in-probe-dispatch-plan.tsv` 对
  `L4-USER-M-PROCESS` 仍为 `dispatch_allowed=0`。
- 当前缺失 `halrun`、`halcmd`、`linuxcnc`，因此不能运行 millturn
  `M128/M129` opt-in native runtime probe。

下一步：

- 暂停 blocked runtime promotion 执行。
- 若继续在当前 host 工作，只能做不需要 host runtime 的文档、对账、
  source/gate consistency、或小批量 pure interpreter intake。
- 若要推进第四部分第 4 步，需要先切换到具备 LinuxCNC host runtime 的环境，
  重新跑 host preflight/dispatch artifacts，确认 `runtime_ready=1` 和
  `dispatch_allowed=1`。

八、2026-06-11 继续执行记录：source/gate consistency 对账

本轮从第七部分记录的 blocker 继续执行。由于当前 host 仍缺 LinuxCNC runtime，
第四部分第 4 步的 millturn `M128/M129` opt-in probe 继续保持 blocked；
本轮只做不需要 host runtime 的 source/gate consistency 对账。

1. 当前 blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- `runtime-boundary-host-readiness-rollup.tsv` 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

结论：

- 不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。
- 继续保持 blocked runtime promotion 暂停。

2. 生成 artifact 与文档引用对账完成。

执行：

```bash
find wasm-port/build/wasm/sim-configs-inventory -maxdepth 1 -type f -name '*.tsv' -printf '%f\n' | sort > /tmp/generated.tsvs
rg -o "[A-Za-z0-9_.-]+\\.tsv" \
  wasm-port/docs/compatibility-validation.md \
  wasm-port/docs/sim-configs-coverage-matrix.md \
  wasm-port/docs/full-process-boundary-design.md \
  text5.txt | sed 's/^.*://' | sort -u > /tmp/documented.tsvs
comm -23 /tmp/generated.tsvs /tmp/documented.tsvs
```

初始发现 4 个已生成但未被当前文档集合引用的 artifact：

```text
native-runtime-probe-execution-plan.tsv
next-boundary-recommendations.tsv
runtime-boundary-native-evidence-acceptance-gate.tsv
runtime-boundary-promotion-blockers.tsv
```

已更新：

- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`
- `wasm-port/docs/full-process-boundary-design.md`

补充说明：

- `native-runtime-probe-execution-plan.tsv` 是 guarded opt-in execution plan，
  记录 exact command、required proof、runtime readiness、expected pass status
  和 promotion prerequisites；它不是 probe runner，也不允许 promotion。
- `next-boundary-recommendations.tsv` 是 generated priority handoff，不是执行
  许可。
- `runtime-boundary-native-evidence-acceptance-gate.tsv` 决定 native pass
  evidence 是否可被接受；当前因 host runtime 缺失仍 blocked。
- `runtime-boundary-promotion-blockers.tsv` 展开 promotion blocker keys：
  host runtime 缺失、native probe 未通过、native evidence 未 ready、
  Node/browser gate 未完成、promotion lock active、manual lock update required。

复查结果：

- `comm -23 /tmp/generated.tsvs /tmp/documented.tsvs` 现在无输出。
- `sim-configs-inventory` 下当前生成的 TSV artifact 都已被文档集合引用。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 `text5.txt` 的 blocked runtime 执行仍不能继续，因为 host readiness
没有变化。下一步有两个合法方向：

- 切换到具备 `halcmd`、`halrun`、`linuxcnc`、`milltask` 的 LinuxCNC host
  runtime 环境，然后重新跑 preflight/dispatch，再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的工作：文档对账、gate consistency、
  source proof consistency，或小批量 pure interpreter intake。

九、2026-06-11 继续执行记录：blocked runtime 跨 artifact guard

本轮继续按当前 host 可执行范围推进。blocked runtime host readiness 仍未变化，
不执行任何 opt-in native runtime probe。

1. blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- 当前 host 仍为：
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

2. 新增 Node inventory 跨 artifact consistency guard。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`

新增 `verifyBlockedRuntimeOptInGateConsistency()`，在每次 Node inventory
运行时检查以下 artifact 的 blocked runtime opt-in target 是否一致：

```text
next-boundary-recommendations.tsv
native-runtime-probe-execution-plan.tsv
runtime-boundary-promotion-readiness.tsv
runtime-boundary-promotion-blockers.tsv
runtime-boundary-post-native-pass-gates.tsv
runtime-boundary-host-preflight.tsv
runtime-boundary-family-host-readiness.tsv
runtime-boundary-opt-in-probe-dispatch-plan.tsv
runtime-boundary-opt-in-probe-skip-evidence-contract.tsv
runtime-boundary-native-evidence-acceptance-gate.tsv
```

检查内容：

- 3 个 opt-in target 的 class/order 必须一致：
  - `L4-USER-M-PROCESS`
  - `L4-TOOL-DB`
  - `L4-PYTHON-REMAP`
- boundary kind、target、blocked kind 必须一致。
- required native/Node/browser proof 必须与 recommendation 对齐。
- opt-in env 和 execution command 必须一致。
- current probe status 必须一致。
- missing host/runtime requirements 必须一致。
- dispatch 必须保持 `dispatch_allowed=0`。
- evidence acceptance 必须保持 blocked。
- promotion lock、manual lock、host runtime blocker 必须仍然存在。
- 所有相关 artifact 必须保持 `execution_enabled=0` 和
  `promotion_allowed=0`。

第一次运行时发现 guard 对 `native-runtime-probe-execution-plan.tsv` 的 schema
假设过严：该 artifact 使用 `boundary_class` 表示 blocked kind，没有单独
`blocked` 字段。已按实际 schema 修正为：

```text
row.blocked ?? row.boundary_class
```

修正后 Node inventory 通过。

3. 文档同步。

更新：

- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

已记录 Node inventory 现在会执行 blocked runtime opt-in target 的跨 artifact
一致性检查，防止 recommendations、execution plan、host preflight、dispatch、
skip/evidence、native evidence acceptance、promotion readiness/blockers 和
post-native-pass gates 之间发生 drift。

4. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

5. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。
*** End of File

十、2026-06-11 继续执行记录：artifact 文档覆盖 completion criteria

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- `runtime-boundary-host-readiness-rollup.tsv` 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

2. 将 artifact 文档覆盖加入 boundary phase completion summary。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`

新增到 `boundary-phase-completion-summary.tsv` 的 criterion：

```text
wasm_inventory_artifact_documentation_coverage
native_artifact_documentation_coverage
```

当前生成结果：

```text
wasm_inventory_artifact_documentation_coverage    passed=1 count=54
native_artifact_documentation_coverage            passed=1 count=8
```

含义：

- WASM sim-config inventory 生成的 TSV artifact 必须被 compatibility、matrix
  或 full-process boundary docs 引用。
- native generated TSV artifact 必须按相对路径被 compatibility、matrix 或
  full-process boundary docs 引用。
- 这两个检查原本已经作为硬断言存在；本轮把它们也写入机器可读 completion
  summary，方便后续 review/CI 对账。

3. 文档同步。

更新：

- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

已记录 `boundary-phase-completion-summary.tsv` 现在包含：

- WASM sim-config inventory artifact 文档覆盖；
- native generated TSV artifact 文档覆盖。

4. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

5. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

十一、2026-06-11 继续执行记录：native TSV 文档覆盖 guard

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- `runtime-boundary-host-readiness-rollup.tsv` 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

2. 新增 native generated TSV 文档覆盖自动检查。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`

新增：

- `generatedTsvArtifactTokens()`
- `verifyNativeGeneratedArtifactDocumentationCoverage()`

检查内容：

- `build/native/` 下生成的所有 TSV artifact，必须按相对路径被以下文档至少
  引用一次：
  - `wasm-port/docs/compatibility-validation.md`
  - `wasm-port/docs/sim-configs-coverage-matrix.md`
  - `wasm-port/docs/full-process-boundary-design.md`
- 使用相对路径检查，避免 `summary.tsv` 这类 basename 在 `nc-files` 与
  `sim-configs` 之间重名导致误判。

当前被纳入检查的 native TSV：

```text
build/native/source-probes.tsv
build/native/native-source-proof-summary.tsv
build/native/native-runtime-probe-summary.tsv
build/native/nc-files/summary.tsv
build/native/sim-configs/summary.tsv
build/native/sim-configs/class-summary.tsv
build/native/sim-configs/path-matrix.tsv
build/native/sim-configs/skipped.tsv
```

3. 文档同步。

更新：

- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

已补充 native generated TSV artifact 列表和检查说明，包括：

- native source proof summary；
- native runtime probe summary；
- native `nc_files` baseline summary；
- native sim-config summary/class/path/skipped artifacts；
- `source-probes.tsv`。

4. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

5. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

十二、2026-06-11 继续执行记录：native source proof consistency guard

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- `runtime-boundary-host-readiness-rollup.tsv` 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

2. 新增 native source proof consistency guard。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`

新增 `verifyNativeSourceProofRuntimeProbeConsistency()`，在每次 Node inventory
运行时检查：

- `native-proof-alignment-summary.tsv`
- `native-runtime-probe-summary.tsv`
- `runtime-probe-gate-alignment.tsv`

检查内容：

- 三者必须覆盖同一组 blocked class：
  - `L4-USER-M-PROCESS`
  - `L4-TOOL-DB`
  - `L4-PYTHON-REMAP`
- native source proof alignment 必须为 `alignment_ok=1`。
- native runtime probe summary 的 `source_proof_ready` 必须与 source proof
  alignment 一致。
- runtime probe gate alignment 的 native/gate source proof readiness 必须与
  source proof alignment 一致。
- source proof、runtime probe、gate alignment 都必须保持
  `execution_enabled=0` / `promotion_allowed=0`。
- runtime probe gate alignment 必须保持 `alignment_ok=1`。

这样可以防止 native source proof summary、native runtime probe summary 与
runtime probe gate alignment 之间发生 drift。

3. 文档同步。

更新：

- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

已记录 Node inventory 现在会检查 native source proof consistency，确保 source
proof alignment、native runtime probe summary 和 runtime probe gate alignment
一致，且不启用 execution/promotion。

4. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

5. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

十三、2026-06-11 继续执行记录：生成 artifact 文档覆盖 guard

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- `runtime-boundary-host-readiness-rollup.tsv` 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

2. 新增生成 artifact 文档覆盖自动检查。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`

新增：

- `generatedSimConfigInventoryArtifactPaths`
- `verifyGeneratedArtifactDocumentationCoverage()`

检查内容：

- `build/wasm/sim-configs-inventory/` 下由 Node inventory 生成的每一个 TSV
  artifact，都必须被以下文档至少引用一次：
  - `wasm-port/docs/compatibility-validation.md`
  - `wasm-port/docs/sim-configs-coverage-matrix.md`
  - `wasm-port/docs/full-process-boundary-design.md`
- 如果新增 gate artifact 但没有文档说明，`verify_sim_configs_inventory_wasm.sh`
  会失败。

执行该检查前，docs-only 对账发现还缺 2 个引用：

```text
python-remap-native-runtime-probe-gate.tsv
tool-db-process-native-runtime-probe-gate.tsv
```

已补充到：

- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

同时补充了该自动检查本身的文档说明。

3. 验证完成。

执行：

```bash
find wasm-port/build/wasm/sim-configs-inventory -maxdepth 1 -type f -name '*.tsv' -printf '%f\n' | sort > /tmp/generated.tsvs
rg -o "[A-Za-z0-9_.-]+\\.tsv" \
  wasm-port/docs/compatibility-validation.md \
  wasm-port/docs/sim-configs-coverage-matrix.md \
  wasm-port/docs/full-process-boundary-design.md | sed 's/^.*://' | sort -u > /tmp/documented-docs-only.tsvs
comm -23 /tmp/generated.tsvs /tmp/documented-docs-only.tsvs
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- docs-only `comm` 对账无输出。
- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

十四、2026-06-11 继续执行记录：completion summary consistency criteria

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- `runtime-boundary-host-readiness-rollup.tsv` 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

2. 将已有 consistency guard 暴露到 completion summary。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

新增到 `boundary-phase-completion-summary.tsv` 的 criterion：

```text
blocked_runtime_opt_in_gate_consistency
native_source_proof_runtime_probe_consistency
```

当前生成结果：

```text
blocked_runtime_opt_in_gate_consistency        passed=1 count=3
native_source_proof_runtime_probe_consistency passed=1 count=3
```

含义：

- blocked runtime opt-in target 的 recommendations、execution plan、host
  preflight、dispatch、skip/evidence、native evidence acceptance、promotion
  readiness/blockers 和 post-native-pass gates 必须保持同一 class/order、
  target、proof key、opt-in command、host blocking、dispatch blocking、
  evidence blocking 和 promotion lock 状态。
- native source proof alignment、native runtime probe summary 和 runtime
  probe gate alignment 必须覆盖同一 blocked class set，并保持
  `execution_enabled=0` 和 `promotion_allowed=0`。
- 这只是把已有硬断言写入机器可读 completion summary；不执行 native runtime
  probe，也不允许 promotion。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

十五、2026-06-11 继续执行记录：blocked runtime rollup consistency

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- `runtime-boundary-host-readiness-rollup.tsv` 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

2. 新增 blocked runtime rollup consistency guard。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

新增：

- `verifyBlockedRuntimeRollupConsistency()`
- `boundary-phase-completion-summary.tsv` criterion：

```text
blocked_runtime_rollup_consistency
```

当前生成结果：

```text
blocked_runtime_rollup_consistency passed=1 count=3
```

检查内容：

- `runtime-boundary-host-readiness-rollup.tsv`
- `runtime-boundary-opt-in-probe-dispatch-rollup.tsv`
- `runtime-boundary-opt-in-probe-skip-evidence-rollup.tsv`

三类 rollup 必须一致：

- family/probe count；
- blocked family set；
- missing host requirements；
- blocked/allowed opt-in commands；
- host readiness、dispatch、skip/evidence 状态；
- `execution_enabled=0`；
- `promotion_allowed=0`。

该检查只做生成 artifact 一致性验证，不执行 native runtime probe，也不允许
promotion。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

十六、2026-06-11 继续执行记录：blocked runtime host requirement consistency

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- `runtime-boundary-host-readiness-rollup.tsv` 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

2. 新增 blocked runtime host requirement consistency guard。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

新增：

- `verifyBlockedRuntimeHostRequirementConsistency()`
- `boundary-phase-completion-summary.tsv` criterion：

```text
blocked_runtime_host_requirement_consistency
```

当前生成结果：

```text
blocked_runtime_host_requirement_consistency passed=1 count=3
```

检查内容：

- `runtime-boundary-host-requirement-summary.tsv`
- `runtime-boundary-host-unblock-plan.tsv`
- `runtime-boundary-family-host-readiness.tsv`

三类 host requirement artifact 必须一致：

- 缺失 requirement set 与 unblock plan set；
- 每个 family 的 missing/available requirement set；
- 每个缺失 requirement 影响的 blocked family、target 和 opt-in command；
- 移除单个 requirement 后仍剩余的 missing requirements；
- `execution_enabled=0`；
- `promotion_allowed=0`。

该检查只做生成 artifact 一致性验证，不执行 native runtime probe，也不允许
promotion。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

十七、2026-06-11 继续执行记录：blocked runtime promotion gate consistency

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- `runtime-boundary-host-readiness-rollup.tsv` 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

2. 新增 blocked runtime promotion gate consistency guard。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

新增：

- `verifyBlockedRuntimePromotionGateConsistency()`
- `boundary-phase-completion-summary.tsv` criterion：

```text
blocked_runtime_promotion_gate_consistency
```

当前生成结果：

```text
blocked_runtime_promotion_gate_consistency passed=1 count=3
```

检查内容：

- `blocked-runtime-promotion-lock.tsv`
- `runtime-boundary-promotion-readiness.tsv`
- `runtime-boundary-promotion-blockers.tsv`
- `runtime-boundary-post-native-pass-gates.tsv`
- `runtime-boundary-native-evidence-acceptance-gate.tsv`
- `native-runtime-probe-pass-evidence-contract.tsv`

这些 promotion gate artifacts 必须一致：

- target、blocked class、current probe status、expected pass status；
- native pass/evidence readiness；
- Node/browser promotion gate status；
- promotion lock 和 manual lock 状态；
- blocker keys；
- evidence acceptance 仍 blocked；
- `execution_enabled=0`；
- `promotion_allowed=0`。

该检查只做生成 artifact 一致性验证，不执行 native runtime probe，也不允许
promotion。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

十八、2026-06-11 继续执行记录：blocked runtime worklist recommendation consistency

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- `runtime-boundary-host-readiness-rollup.tsv` 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

2. 新增 blocked runtime worklist recommendation consistency guard。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

新增：

- `verifyBlockedRuntimeWorklistRecommendationConsistency()`
- `boundary-phase-completion-summary.tsv` criterion：

```text
blocked_runtime_worklist_recommendation_consistency
```

当前生成结果：

```text
blocked_runtime_worklist_recommendation_consistency passed=1 count=3
```

检查内容：

- `next-boundary-worklist.tsv`
- `boundary-proof-gates.tsv`
- `next-boundary-recommendations.tsv`
- `blocked-runtime-promotion-lock.tsv`
- `runtime-boundary-contract-summary.tsv`

这些 worklist/recommendation artifacts 必须一致：

- recommendation target 必须有对应 worklist row；
- recommendation target 必须有 native/node/browser proof gates；
- recommendation 的 Node/browser proof 必须与 worklist/proof-gate 对齐；
- promotion lock 必须仍 active；
- runtime contract summary 必须仍 `contract_ok=1`；
- `execution_enabled=0`；
- `promotion_allowed=0`。

该检查只做生成 artifact 一致性验证，不执行 native runtime probe，也不允许
promotion。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

十九、2026-06-12 继续执行记录：runtime family contract/alignment consistency

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 新增 runtime family contract/alignment consistency guard。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

新增：

- `verifyRuntimeFamilyContractAlignmentConsistency()`
- `boundary-phase-completion-summary.tsv` criterion：

```text
runtime_family_contract_alignment_consistency
```

当前生成结果：

```text
runtime_family_contract_alignment_consistency passed=1 count=3
```

检查内容：

- `L4-USER-M-PROCESS`：
  - `user-m-process-transition-plan.tsv`
  - `user-m-process-native-runtime-state-plan.tsv`
  - `user-m-process-native-runtime-readiness.tsv`
  - `user-m-process-native-runtime-probe-gate.tsv`
  - `runtime-boundary-contract-summary.tsv`
  - `runtime-boundary-native-alignment-summary.tsv`
- `L4-TOOL-DB`：
  - `tool-db-process-transaction-plan.tsv`
  - `tool-db-process-native-runtime-readiness.tsv`
  - `tool-db-process-native-runtime-probe-gate.tsv`
  - `runtime-boundary-contract-summary.tsv`
  - `runtime-boundary-native-alignment-summary.tsv`
- `L4-PYTHON-REMAP`：
  - `python-remap-runtime-contract.tsv`
  - `python-remap-native-runtime-readiness.tsv`
  - `python-remap-native-runtime-state-plan.tsv`
  - `python-remap-native-runtime-fixture-plan.tsv`
  - `python-remap-native-runtime-probe-gate.tsv`
  - `runtime-boundary-contract-summary.tsv`
  - `runtime-boundary-native-alignment-summary.tsv`

这些 family-specific artifacts 必须与 aggregate runtime contract/native
alignment summaries 一致：

- contract artifact、row count、runtime alignment artifact、alignment row count；
- user-M transition/state-plan/probe-gate M128/M129 字段；
- tool DB transaction/probe-gate protocol transaction set；
- Python family runtime contract/state-plan/fixture/probe-gate fields；
- missing host requirements；
- `source_proof_ready=1`；
- `proof_status=pending`；
- `execution_enabled=0`；
- `promotion_allowed=0`。

该检查只做生成 artifact 一致性验证，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- `boundary-phase-completion-summary.tsv` 现在包含
  `runtime_family_contract_alignment_consistency`。
- 该 criterion 用于确保 user-M、tool DB、Python 三个 blocked runtime family
  的 contract/readiness/probe/fixture/state-plan artifacts 与
  `runtime-boundary-contract-summary.tsv` 和
  `runtime-boundary-native-alignment-summary.tsv` 对齐。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

二十、2026-06-12 继续执行记录：browser completion summary parity

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 新增 browser completion summary parity 检查。

更新：

- `wasm-port/tests/browser/interp_smoke.html`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- Node inventory 的 `boundary-phase-completion-summary.tsv` 已包含新增
  consistency criteria：
  - `blocked_runtime_worklist_recommendation_consistency`
  - `blocked_runtime_probe_execution_consistency`
  - `blocked_runtime_promotion_gate_consistency`
  - `blocked_runtime_host_requirement_consistency`
  - `blocked_runtime_rollup_consistency`
  - `blocked_runtime_opt_in_gate_consistency`
  - `native_source_proof_runtime_probe_consistency`
  - `runtime_family_contract_alignment_consistency`
  - `wasm_inventory_artifact_documentation_coverage`
  - `native_artifact_documentation_coverage`
- browser smoke 已读取 `boundary-phase-completion-summary.tsv`，但
  `expectedCriteria` 列表落后于 Node verifier。

本轮补齐 browser 侧 criterion 顺序，使 browser smoke 与 Node inventory
对同一组 boundary-phase completion criteria 做 drift 检查。

该检查只读取 generated summary，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- browser smoke 现在会镜像 `boundary-phase-completion-summary.tsv` criterion
  列表；
- 如果 Node inventory 新增 completion criterion 但 browser smoke 未同步，
  browser smoke 会因 criterion drift 失败；
- 该检查是 browser-side parity check，不改变 blocked runtime 状态。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

二十一、2026-06-12 继续执行记录：browser runtime contract/native alignment parity

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 新增 browser runtime contract/native alignment summary parity 检查。

更新：

- `wasm-port/tests/browser/interp_smoke.html`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- Node inventory 已通过 `runtime_family_contract_alignment_consistency`
  检查 family-specific contract/readiness/probe artifacts 与
  aggregate runtime contract/native alignment summaries 的一致性。
- browser smoke 已分别检查 runtime contract summary 和 native alignment
  summary，但没有直接确认两者之间的 artifact/count/kind 对齐。

本轮新增 browser-side parity：

- `verifyBrowserRuntimeBoundaryContractSummary()` 现在返回 parsed rows；
- 新增 `verifyBrowserRuntimeContractNativeAlignmentParity()`；
- browser smoke 会检查：
  - `boundary_kind` 一致；
  - `runtime_alignment_artifact` 与 native alignment `artifact` 一致；
  - `runtime_alignment_row_count` 与 native alignment `row_count` 一致；
  - `runtime_alignment_ok` 与 native alignment `summary_ok` 一致；
  - contract/native alignment summary 均保持 OK；
  - execution/promotion disabled counts 与各自 row counts 一致。

该检查只读取 generated artifacts，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- browser smoke 现在会检查 `runtime-boundary-contract-summary.tsv` 与
  `runtime-boundary-native-alignment-summary.tsv` 的 browser-side parity；
- 该检查确保 browser 侧看到的 aggregate contract/native alignment summary
  与 Node inventory 生成的 boundary gate 状态一致。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

二十二、2026-06-12 继续执行记录：browser native source proof/runtime probe parity

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 新增 browser native source proof/runtime probe/gate parity 检查。

更新：

- `wasm-port/tests/browser/interp_smoke.html`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- Node inventory 已通过 `native_source_proof_runtime_probe_consistency`
  检查：
  - `native-proof-alignment-summary.tsv`
  - `native-runtime-probe-summary.tsv`
  - `runtime-probe-gate-alignment.tsv`
- browser smoke 已分别检查这三个 artifact，但没有直接确认三者之间的
  source-proof/runtime/gate 对齐。

本轮新增 browser-side parity：

- `verifyBrowserNativeProofAlignment()` 现在返回 parsed rows；
- `verifyBrowserNativeRuntimeProbeSummary()` 现在返回 parsed rows；
- `verifyBrowserRuntimeProbeGateAlignment()` 现在返回 parsed rows；
- 新增 `verifyBrowserNativeSourceProofRuntimeProbeParity()`；
- browser smoke 会检查：
  - 三个 artifact 覆盖同一 blocked class 顺序；
  - `boundary_kind` 一致；
  - proof/runtime target 一致，Python wildcard proof 例外；
  - runtime/gate target 一致；
  - native source proof alignment 为 ready；
  - runtime `source_proof_ready` 与 gate source proof readiness 一致；
  - required native proof 一致；
  - runtime readiness、missing requirements、status compatibility 一致；
  - execution/promotion disabled 状态一致。

该检查只读取 generated artifacts，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- browser smoke 现在会交叉检查 `native-proof-alignment-summary.tsv`、
  `native-runtime-probe-summary.tsv` 和 `runtime-probe-gate-alignment.tsv`；
- 该检查确保 browser 侧看到的 source proof readiness、runtime readiness、
  required native proof、target 和 disabled execution/promotion 状态与
  Node inventory 一致。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

二十三、2026-06-12 继续执行记录：browser blocked runtime probe execution parity

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 新增 browser blocked runtime probe execution parity 检查。

更新：

- `wasm-port/tests/browser/interp_smoke.html`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- Node inventory 已通过 `blocked_runtime_probe_execution_consistency` 检查：
  - `native-runtime-probe-execution-plan.tsv`
  - `native-runtime-probe-pass-evidence-contract.tsv`
  - `runtime-boundary-host-preflight.tsv`
  - `runtime-boundary-opt-in-probe-dispatch-plan.tsv`
  - `runtime-boundary-opt-in-probe-skip-evidence-contract.tsv`
- browser smoke 已分别检查这些 artifact，但没有直接确认 probe execution、
  pass evidence、host preflight、dispatch 和 skip-evidence 之间的对齐。

本轮新增 browser-side parity：

- `verifyBrowserNativeRuntimeProbeExecutionPlan()` 现在返回 parsed rows；
- `verifyBrowserNativeRuntimeProbePassEvidenceContract()` 现在返回 parsed rows；
- `verifyBrowserRuntimeBoundaryHostPreflight()` 现在返回 parsed rows；
- `verifyBrowserRuntimeBoundaryOptInProbeDispatchPlan()` 现在返回 parsed rows；
- `verifyBrowserRuntimeBoundaryOptInProbeSkipEvidenceContract()` 现在返回
  parsed rows；
- 新增 `verifyBrowserBlockedRuntimeProbeExecutionParity()`；
- browser smoke 会检查：
  - 五个 artifact 覆盖同一 blocked class 顺序；
  - `boundary_kind`、target、blocked class 一致；
  - runtime probe、expected pass status、required native proof 一致；
  - opt-in env 和 exact execution command 一致；
  - current probe status 一致；
  - runtime readiness、source proof readiness、missing requirements 一致；
  - 当前 host 仍保持 `runtime_ready=0`、`skipped_missing_host_runtime`、
    `blocked_missing_host_runtime`、`dispatch_allowed=0`；
  - pass/skip evidence 仍未 required/ready；
  - execution/promotion disabled 状态一致。

该检查只读取 generated artifacts，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- browser smoke 现在会交叉检查 native runtime probe execution plan、pass
  evidence contract、host preflight、dispatch plan 和 skip-evidence contract；
- 该检查确保 browser 侧看到的 host-blocked opt-in command、missing
  requirements、evidence status 和 disabled execution/promotion 状态与
  Node inventory 一致。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

二十四、2026-06-12 继续执行记录：browser blocked runtime rollup parity

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 新增 browser blocked runtime rollup parity 检查。

更新：

- `wasm-port/tests/browser/interp_smoke.html`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- Node inventory 已通过 `blocked_runtime_rollup_consistency` 检查：
  - `runtime-boundary-host-readiness-rollup.tsv`
  - `runtime-boundary-opt-in-probe-dispatch-rollup.tsv`
  - `runtime-boundary-opt-in-probe-skip-evidence-rollup.tsv`
- browser smoke 已分别检查这三个 rollup，但没有直接确认 host readiness、
  dispatch 和 skip-evidence rollup 之间的对齐。

本轮新增 browser-side parity：

- `verifyBrowserRuntimeBoundaryFamilyHostReadiness()` 现在返回 parsed rows；
- `verifyBrowserRuntimeBoundaryHostReadinessRollup()` 现在返回 parsed rows；
- `verifyBrowserRuntimeBoundaryOptInProbeDispatchRollup()` 现在返回 parsed
  rows；
- `verifyBrowserRuntimeBoundaryOptInProbeSkipEvidenceRollup()` 现在返回
  parsed rows；
- 新增 `verifyBrowserBlockedRuntimeRollupParity()`；
- browser smoke 会检查：
  - host family count、dispatch probe count、skip evidence probe count 一致；
  - ready/blocked family count 与 dispatch allowed/blocked count 一致；
  - dispatch blocked count 与 skip count 一致；
  - blocked families 一致；
  - missing host requirements 一致；
  - ready/blocked opt-in commands 一致；
  - host readiness、dispatch、evidence rollup status 一致；
  - current probe/native evidence/skip evidence status 保持 blocked；
  - execution/promotion disabled 状态一致。

该检查只读取 generated artifacts，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- browser smoke 现在会交叉检查 host-readiness、dispatch 和 skip-evidence
  rollups；
- 该检查确保 browser 侧看到的 counts、blocked families、missing
  requirements、blocked commands、host/dispatch/evidence status 和 disabled
  execution/promotion 状态与 Node inventory 一致。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

二十五、2026-06-12 继续执行记录：browser blocked runtime promotion/opt-in gate parity

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 新增 browser blocked runtime promotion/opt-in gate parity 检查。

更新：

- `wasm-port/tests/browser/interp_smoke.html`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- Node inventory 已通过：
  - `blockedRuntimePromotionGateConsistency`
  - `blockedRuntimeOptInGateConsistency`
- browser smoke 已分别检查 promotion lock、promotion readiness、promotion
  blockers、post-native-pass gates、native evidence acceptance gate、
  recommendations、host preflight、family readiness、dispatch plan 和
  skip-evidence contract，但此前没有直接确认这些 artifact 之间的 promotion
  gate 与 opt-in gate 对齐。

本轮新增 browser-side parity：

- `verifyBrowserBlockedRuntimePromotionLock()` 现在返回 parsed rows；
- `verifyBrowserRuntimeBoundaryPromotionReadiness()` 现在返回 parsed rows；
- `verifyBrowserRuntimeBoundaryPromotionBlockers()` 现在返回 parsed rows；
- `verifyBrowserRuntimeBoundaryPostNativePassGates()` 现在返回 parsed rows；
- `verifyBrowserRuntimeBoundaryNativeEvidenceAcceptanceGate()` 现在返回
  parsed rows；
- `verifyBrowserNextBoundaryRecommendations()` 现在返回 parsed rows；
- 新增 `verifyBrowserBlockedRuntimePromotionGateParity()`；
- 新增 `verifyBrowserBlockedRuntimeOptInGateParity()`。

browser smoke 会检查：

- promotion lock、promotion readiness、promotion blockers、
  post-native-pass gates、native evidence acceptance gate 和 pass-evidence
  contract 对齐；
- recommendation、execution plan、promotion readiness/blockers、
  post-native-pass gates、host preflight、family readiness、dispatch plan、
  skip-evidence contract 和 evidence acceptance gate 对齐；
- target、boundary kind、blocked class、proof key、opt-in env、exact command、
  current probe status、missing requirements 一致；
- 当前 host 仍保持 host-blocked、dispatch disabled、evidence acceptance
  blocked、promotion lock active、manual lock update required；
- execution/promotion disabled 状态一致。

该检查只读取 generated artifacts，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- browser smoke 现在会交叉检查 promotion lock、promotion readiness、
  promotion blockers、post-native-pass gates、native evidence acceptance gate
  和 pass-evidence contract；
- browser smoke 现在会交叉检查 recommendations、execution plans、host
  preflight、family readiness、dispatch plans、skip-evidence contracts 和
  evidence acceptance gates；
- 该检查确保 browser 侧看到的 locked promotion state、opt-in command、
  proof、missing requirements 和 disabled execution/promotion 状态与 Node
  inventory 一致。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

二十六、2026-06-12 继续执行记录：browser boundary phase completion count parity

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 新增 browser boundary phase completion count parity 检查。

更新：

- `wasm-port/tests/browser/interp_smoke.html`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- browser smoke 已检查 `boundary-phase-completion-summary.tsv` 的 criterion
  顺序、`passed=1`、count 格式和 evidence 非空；
- 但 browser 侧没有直接确认该 completion summary 中的 blocked-runtime
  criterion count 与浏览器已经读取的 generated artifact row 数一致。

本轮新增 browser-side parity：

- `verifyBrowserBoundaryPhaseCompletion()` 现在返回 parsed rows；
- `verifyBrowserRuntimeBoundaryHostRequirementSummary()` 现在返回 parsed
  rows；
- `verifyBrowserRuntimeBoundaryHostUnblockPlan()` 现在返回 parsed rows；
- 新增 `verifyBrowserBoundaryPhaseCompletionCountParity()`；
- browser smoke 会检查 selected blocked-runtime completion criteria 的
  `count` 与对应 browser artifact row 数一致，包括：
  - native proof alignment；
  - runtime/native alignment summary；
  - native runtime probe summary；
  - runtime probe gate alignment；
  - native runtime execution/pass-evidence artifacts；
  - promotion readiness/blockers/post-native-pass gates；
  - host preflight、host requirement summary、host unblock plan、family
    readiness；
  - dispatch/skip-evidence plan 与 rollup；
  - native evidence acceptance gate；
  - runtime contract summary；
  - blocked runtime consistency criteria。

该检查只读取 generated artifacts，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- browser smoke 现在会把 completion summary 的 selected blocked-runtime
  criterion count 与已加载 artifact row 数对齐；
- 该检查确保 browser 侧看到的 machine-readable completion summary 不会与
  实际 generated gate artifact 计数漂移。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

二十七、2026-06-12 继续执行记录：browser family-specific completion count parity

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 扩展 browser boundary phase completion count parity 覆盖面。

更新：

- `wasm-port/tests/browser/interp_smoke.html`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 二十六已让 browser smoke 校验 selected blocked-runtime completion
  criteria 的 `count` 与已加载 generated artifact row 数一致；
- 但 user-M、tool DB、Python runtime 的 family-specific contract/readiness/
  probe criteria 还没有进入 browser count parity。

本轮扩展 browser-side count parity：

- 让以下 verifier 返回 parsed rows：
  - `verifyBrowserUserMTransitionPlan()`
  - `verifyBrowserUserMNativeRuntimeStatePlan()`
  - `verifyBrowserUserMNativeRuntimeReadiness()`
  - `verifyBrowserUserMNativeRuntimeProbeGate()`
  - `verifyBrowserToolDbTransactionPlan()`
  - `verifyBrowserToolDbNativeRuntimeReadiness()`
  - `verifyBrowserToolDbNativeRuntimeProbeGate()`
  - `verifyBrowserPythonRuntimeContract()`
  - `verifyBrowserPythonNativeRuntimeReadiness()`
  - `verifyBrowserPythonNativeRuntimeProbeGate()`
  - `verifyBrowserPythonNativeRuntimeStatePlan()`
  - `verifyBrowserPythonNativeRuntimeFixturePlan()`
- `verifyBrowserBoundaryPhaseCompletionCountParity()` 现在还会检查：
  - `user_m_transition_contract`
  - `user_m_native_runtime_state_plan`
  - `user_m_native_runtime_readiness`
  - `user_m_native_runtime_probe_gate`
  - `tool_db_transaction_contract`
  - `tool_db_native_runtime_readiness`
  - `tool_db_native_runtime_probe_gate`
  - `python_runtime_contract`
  - `python_native_runtime_readiness`
  - `python_native_runtime_probe_gate`
  - `python_native_runtime_state_plan`
  - `python_native_runtime_fixture_plan`

该检查只读取 generated artifacts，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- browser smoke 的 completion-summary count parity 现在覆盖 blocked-runtime
  和 family-specific artifact rows；
- 该检查确保 machine-readable completion summary 不会与 browser 已读取的
  user-M、tool DB、Python runtime contract/readiness/probe artifacts 计数
  漂移。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

二十八、2026-06-12 继续执行记录：browser runtime family contract alignment parity

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 新增 browser runtime family contract alignment parity 检查。

更新：

- `wasm-port/tests/browser/interp_smoke.html`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- Node inventory 已通过 `runtimeFamilyContractAlignmentConsistency`；
- browser smoke 已逐个检查 user-M、tool DB、Python runtime family-specific
  contract/readiness/probe/state/fixture artifacts，并在二十七中把这些
  artifact count 纳入 completion summary parity；
- 但 browser 侧此前没有直接把这些 family-specific artifacts 与
  `runtime-boundary-contract-summary.tsv` 做跨 artifact 对齐。

本轮新增 browser-side parity：

- 新增 `verifyBrowserRuntimeFamilyContractAlignmentParity()`；
- browser smoke 会检查：
  - `runtime-boundary-contract-summary.tsv` 的 contract artifact、row count、
    pending/disabled/promotion-disabled 状态与 family artifacts 一致；
  - user-M transition plan、native runtime state plan、readiness、probe gate
    在 remap code、user-M code、switchkins、G5x、work offset、expected state
    pins、missing requirements 和 proof key 上一致；
  - tool DB transaction plan、runtime readiness、probe gate 在 DB_PROGRAM、
    protocol transactions、missing requirements 和 proof key 上一致；
  - Python runtime contract、state plan、readiness、fixture plan、probe gate
    在 family、runtime phases、modules、callables、process assumptions、
    missing requirements 和 proof key 上一致；
  - 所有相关 rows 继续保持 `proof_status=pending`、`execution_enabled=0`
    和 `promotion_allowed=0`。

该检查只读取 generated artifacts，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- browser smoke 现在会把 user-M、tool DB、Python family-specific
  contract/readiness/probe artifacts 与 `runtime-boundary-contract-summary.tsv`
  交叉对齐；
- 该检查确保 browser 侧看到的 runtime-family contract alignment 与 Node
  inventory 一致，同时仍保持 non-executing、non-promoting。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

二十九、2026-06-12 继续执行记录：browser next-boundary recommendation count parity

本轮继续在当前 host 可执行范围内推进。blocked runtime host readiness 仍为
blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 新增 browser next-boundary recommendation count parity 检查。

更新：

- `wasm-port/tests/browser/interp_smoke.html`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- browser smoke 已检查 `next-boundary-recommendations.tsv` 的 priority、
  target、blocked kind、recommendation、primary artifact、proof fields 和
  disabled execution/promotion 状态；
- 但 browser 侧此前只确认 `artifact_row_count` 是正数，没有直接确认它与
  生成该 recommendation 的 source artifact row 数一致；
- 当前 generated recommendation 中 tool DB 的 primary artifact 是
  `tool-db-process-native-runtime-probe-gate.tsv`，browser 期望同步为该
  artifact。

本轮新增 browser-side parity：

- 修正 tool DB recommendation primary artifact 期望为
  `tool-db-process-native-runtime-probe-gate.tsv`；
- 新增 `verifyBrowserNextBoundaryRecommendationCountParity()`；
- browser smoke 会检查：
  - user-M recommendation `artifact_row_count` 等于
    `user-m-process-native-runtime-probe-gate.tsv` row 数；
  - tool DB recommendation `artifact_row_count` 等于
    `tool-db-process-native-runtime-probe-gate.tsv` row 数；
  - Python recommendation `artifact_row_count` 等于
    `python-remap-runtime-contract.tsv` row 数；
  - recommendation `source_artifacts` 包含对应 source artifact；
  - recommendation rows 继续保持 `execution_enabled=0` 和
    `promotion_allowed=0`。

该检查只读取 generated artifacts，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- browser smoke 现在会把 `next-boundary-recommendations.tsv` 的 artifact row
  count 与 user-M probe-gate、tool DB probe-gate、Python runtime-contract
  source rows 对齐；
- 该检查确保 priority handoff 不会与 visible source artifacts 计数漂移。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

三十、2026-06-12 继续执行记录：browser host requirement artifact parity

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 新增 browser host requirement artifact parity 检查。

更新：

- `wasm-port/tests/browser/interp_smoke.html`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- browser smoke 已分别检查 host preflight、host requirement summary、
  host unblock plan、family host readiness、host readiness rollup；
- 但 browser 侧此前没有直接把 requirement summary / unblock plan /
  family readiness / preflight 做逐 requirement 归属对齐；
- 该 drift 会影响 future host 上是否错误判断 opt-in native probe 可执行。

本轮新增 browser-side parity：

- 新增 `verifyBrowserBlockedRuntimeHostRequirementParity()`；
- browser smoke 会检查：
  - 每个 family host readiness row 与对应 host preflight row 的 target、
    blocked kind、required runtime、opt-in env、execution command、
    current probe status、preflight status 和 missing requirements 一致；
  - family missing/available requirement count 与列表长度一致；
  - 每个 missing requirement 在 requirement summary 中为 unavailable、
    阻塞对应 family，并记录对应 opt-in env；
  - 每个 missing requirement 在 unblock plan 中记录 affected target、
    affected execution command，并且 remaining list 不再包含该 requirement；
  - 每个 available prerequisite 在 requirement summary 中为 available、
    不产生 missing block，并仍能追溯到对应 family 与 opt-in env；
  - 所有相关 rows 继续保持 `execution_enabled=0` 和
    `promotion_allowed=0`。

该检查只读取 generated artifacts，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- browser smoke 现在会把 `runtime-boundary-host-requirement-summary.tsv`、
  `runtime-boundary-host-unblock-plan.tsv`、
  `runtime-boundary-family-host-readiness.tsv` 与
  `runtime-boundary-host-preflight.tsv` 交叉对齐；
- 该检查覆盖 missing/available host requirement ownership、affected
  opt-in env 和 exact probe command traceability。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

三十一、2026-06-12 继续执行记录：browser artifact documentation coverage parity

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 新增 browser generated artifact documentation coverage 检查。

更新：

- `wasm-port/tests/browser/interp_smoke.html`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- Node inventory 已通过 `wasm_inventory_artifact_documentation_coverage`
  和 `native_artifact_documentation_coverage`；
- browser smoke 已检查 completion summary criteria 和 count parity；
- 但 browser 侧此前没有直接 fetch 文档并确认 generated artifact names /
  native artifact tokens 被文档引用。

本轮新增 browser-side parity：

- 新增 `verifyBrowserGeneratedArtifactDocumentationCoverage()`；
- browser smoke 会 fetch：
  - `docs/compatibility-validation.md`
  - `docs/sim-configs-coverage-matrix.md`
  - `docs/full-process-boundary-design.md`
- browser smoke 会检查：
  - 54 个 `build/wasm/sim-configs-inventory/*.tsv` artifact name 均在当前
    文档中出现；
  - 8 个 `build/native/**/*.tsv` relative artifact token 均在当前文档中出现；
  - `boundary-phase-completion-summary.tsv` 中
    `wasm_inventory_artifact_documentation_coverage` 的 count 等于 54；
  - `native_artifact_documentation_coverage` 的 count 等于 8。

该检查只读取 generated artifacts 和文档，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- browser smoke 现在会直接镜像 Node artifact documentation coverage gate；
- 该检查确保 generated gate artifact 出现时不会只更新 Node inventory，而漏掉
  browser 可见的文档覆盖验证。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

三十二、2026-06-12 继续执行记录：browser recommendation source artifact coverage parity

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 新增 browser recommendation source artifact coverage 检查。

更新：

- `wasm-port/tests/browser/interp_smoke.html`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- browser smoke 已检查 `next-boundary-recommendations.tsv` 的 priority、
  target、blocked kind、recommendation、primary artifact、proof fields、
  artifact row count 和 disabled execution/promotion 状态；
- browser smoke 也已能看到 generated WASM inventory artifact name set；
- 但 browser 侧此前没有确认 recommendation 的每个 `source_artifacts`
  token 都属于 browser 可见的 generated artifact set。

本轮新增 browser-side parity：

- 新增 `verifyBrowserNextBoundaryRecommendationSourceArtifactCoverage()`；
- browser smoke 会检查：
  - 每条 recommendation 都有 source artifact 列表；
  - source artifact 列表没有重复项；
  - `primary_artifact` 必须出现在 `source_artifacts` 中；
  - `primary_artifact` 和每个 `source_artifacts` token 都存在于 browser
    generated WASM inventory artifact set；
  - recommendation rows 继续保持 `execution_enabled=0` 和
    `promotion_allowed=0`。

该检查只读取 generated artifacts，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- browser smoke 现在会把 recommendation primary/source artifacts 与 generated
  WASM inventory artifact set 对齐；
- 该检查防止 priority handoff 引用不存在、重复或未追踪的 machine-readable
  source artifact。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

三十三、2026-06-12 继续执行记录：browser recommendation exact source artifact set parity

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 收紧 browser recommendation source artifact coverage 检查。

更新：

- `wasm-port/tests/browser/interp_smoke.html`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 三十二中 browser smoke 已确认 recommendation 的 `primary_artifact` 和
  `source_artifacts` 都属于 browser 可见的 generated WASM inventory artifact set；
- 但该检查允许 source artifact 列表增加额外 artifact；
- priority handoff 的 source artifact 应该是每个 blocked family 的精确来源集合。

本轮扩展 browser-side parity：

- `verifyBrowserNextBoundaryRecommendationSourceArtifactCoverage()` 现在会检查
  每个 recommendation 的 exact `source_artifacts` 顺序和集合：
  - user-M：
    `next-boundary-worklist.tsv`,
    `blocked-runtime-promotion-lock.tsv`,
    `user-m-process-transition-plan.tsv`,
    `user-m-process-native-runtime-state-plan.tsv`,
    `user-m-process-native-runtime-probe-gate.tsv`
  - tool DB：
    `next-boundary-worklist.tsv`,
    `blocked-runtime-promotion-lock.tsv`,
    `tool-db-process-transaction-plan.tsv`,
    `tool-db-process-native-runtime-readiness.tsv`,
    `tool-db-process-native-runtime-probe-gate.tsv`
  - Python remap：
    `next-boundary-worklist.tsv`,
    `blocked-runtime-promotion-lock.tsv`,
    `python-remap-runtime-contract.tsv`,
    `python-remap-native-runtime-fixture-plan.tsv`,
    `python-remap-native-runtime-probe-gate.tsv`
- 检查仍保留：
  - source artifact 列表非空；
  - 无重复 source artifact；
  - `primary_artifact` 出现在 source artifact 列表中；
  - 所有 source artifact 都存在于 browser generated WASM inventory artifact set；
  - recommendation rows 继续保持 `execution_enabled=0` 和
    `promotion_allowed=0`。

该检查只读取 generated artifacts，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- browser smoke 现在会把 recommendation primary/source artifacts 与 generated
  WASM inventory artifact set 和 exact per-family source artifact set 对齐；
- 该检查防止 priority handoff 引用额外、错误、重复或未追踪的
  machine-readable source artifact。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

三十四、2026-06-12 继续执行记录：Node recommendation exact source artifact set parity

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 将 recommendation exact source artifact set 检查补到 Node inventory。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 三十三中 browser smoke 已检查每个 recommendation 的 exact
  `source_artifacts` 顺序和集合；
- Node inventory 此前只要求 recommendation source artifacts 包含
  `next-boundary-worklist.tsv` 和 `blocked-runtime-promotion-lock.tsv`；
- 生成端也应阻止 extra / wrong / duplicated source artifact。

本轮新增 Node-side parity：

- `verifyNextBoundaryRecommendationRows()` 现在会检查：
  - 每个 recommendation 的 exact `source_artifacts` 顺序和集合；
  - source artifact 列表无重复；
  - `primary_artifact` 出现在 source artifact 列表中；
  - 原有 priority、target、blocked kind、recommendation、primary artifact、
    proof fields、promotion lock、contract、disabled execution/promotion 检查保持不变。

该检查只校验 generated TSV rows，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- Node inventory 和 browser smoke 现在都校验 recommendation exact
  per-family source artifact set；
- recommendation priority handoff 的 machine-readable source trace 在生成端
  和 browser 端保持一致。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

三十五、2026-06-12 继续执行记录：Node recommendation generated source artifact existence

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 收紧 Node recommendation source artifact trace 检查。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 三十四中 Node inventory 已检查每个 recommendation 的 exact
  `source_artifacts` 顺序和集合；
- 但还可以进一步确认这些 source artifact token 实际对应
  `build/wasm/sim-configs-inventory/` 下的 generated artifact 文件。

本轮新增 Node-side parity：

- `verifyNextBoundaryRecommendationRows()` 现在会检查：
  - `primary_artifact` 文件存在于 generated sim-config inventory artifact
    directory；
  - 每个 `source_artifacts` token 对应的 generated artifact 文件存在；
  - 原有 exact source set、无重复、primary traceability、proof fields、
    promotion lock、contract、disabled execution/promotion 检查保持不变。

该检查只校验 generated TSV rows 和 artifact 文件存在性，不执行 native runtime
probe，也不允许 promotion。

2. 文档同步。

已记录：

- Node inventory 现在要求 recommendation source trace 不仅语义上精确，
  还必须指向实际生成的 machine-readable artifact；
- browser 端仍继续校验 browser-visible generated artifact set、exact source set
  和 disabled execution/promotion 状态。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

三十六、2026-06-12 继续执行记录：browser generated artifact fetchability parity

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 新增 browser generated artifact fetchability 检查。

更新：

- `wasm-port/tests/browser/interp_smoke.html`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 三十一中 browser smoke 已 fetch 文档并确认 generated artifact names /
  native artifact tokens 被文档引用；
- 三十五中 Node inventory 已确认 recommendation source trace 指向实际生成
  artifact；
- browser 侧也应确认文档覆盖对象在 browser HTTP smoke 中实际可 fetch。

本轮新增 browser-side parity：

- `verifyBrowserGeneratedArtifactDocumentationCoverage()` 现在会检查：
  - 54 个 `build/wasm/sim-configs-inventory/*.tsv` artifact 都能通过 browser
    smoke fetch；
  - 8 个 `build/native/**/*.tsv` artifact token 都能通过 browser smoke fetch；
  - 每个 fetched TSV 有非空 header 且包含 TSV delimiter；
  - 原有文档覆盖和 completion-summary count parity 保持不变。

该检查只读取 generated artifacts 和文档，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- browser smoke 现在不仅检查文档覆盖，也检查 generated WASM/native TSV
  artifact 在浏览器 smoke 中可读取；
- 该检查是 artifact fetchability parity，不改变 blocked runtime 状态。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

三十七、2026-06-12 继续执行记录：browser generated artifact list uniqueness parity

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 收紧 browser generated artifact fetchability 检查。

更新：

- `wasm-port/tests/browser/interp_smoke.html`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 三十六中 browser smoke 已 fetch generated WASM/native TSV artifacts；
- 如果 browser expected artifact list 中出现重复项，同时漏掉另一个 artifact，
  单纯 fetch 和 count parity 不够直接暴露 expected list drift；
- browser 侧应显式检查 expected artifact/token list 唯一性和固定数量。

本轮新增 browser-side parity：

- `verifyBrowserGeneratedArtifactDocumentationCoverage()` 现在会检查：
  - expected WASM inventory artifact list 固定为 54 项；
  - expected WASM inventory artifact list 无重复；
  - expected native artifact token list 固定为 8 项；
  - expected native artifact token list 无重复；
  - 原有 fetchability、non-empty TSV header、文档覆盖和
    completion-summary count parity 保持不变。

该检查只读取 generated artifacts 和文档，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- browser smoke 现在不仅检查 generated artifact fetchability，也检查 expected
  artifact/token list duplicate-free 和 fixed count；
- 该检查是 artifact list parity，不改变 blocked runtime 状态。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

三十八、2026-06-12 继续执行记录：Node/browser native skipped artifact empty allowance

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 将 generated artifact fetchability 检查补到 Node，并同步 browser 空文件例外。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 三十六/三十七中 browser smoke 已检查 generated artifact fetchability、
  fixed count 和 duplicate-free expected artifact list；
- Node documentation coverage gate 此前只检查文档引用；
- 本轮先把 Node coverage gate 收紧为文件存在性和 TSV header 检查；
- 复跑时发现 `build/native/sim-configs/skipped.tsv` 当前为 0 字节，这是 native
  strict sim-config baseline 没有 skipped rows 时的合法 artifact。

本轮新增/修正：

- `verifyGeneratedArtifactDocumentationCoverage()` 现在会检查每个 generated
  WASM sim-config inventory artifact 文件存在，且有非空 TSV header；
- `verifyNativeGeneratedArtifactDocumentationCoverage()` 现在会检查每个 native
  generated TSV artifact 文件存在；
- native generated TSV artifact 除
  `build/native/sim-configs/skipped.tsv` 外必须有非空 TSV header；
- browser generated artifact fetchability 使用同一个空文件例外：
  `build/native/sim-configs/skipped.tsv` 可以为空；
- 文档明确该空文件只表示 native strict sim-config baseline 当前没有 skipped
  rows，不是 runtime promotion 证据。

该检查只读取 generated artifacts 和文档，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- Node 和 browser 都检查 generated artifact 可见性；
- `build/native/sim-configs/skipped.tsv` 是唯一允许为空的 native TSV artifact。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

三十九、2026-06-12 继续执行记录：Node generated artifact list fixed-count parity

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 将 generated artifact list fixed-count parity 补到 Node。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 三十七中 browser smoke 已检查 expected WASM/native artifact list 的固定数量
  和无重复；
- 三十八中 Node coverage gate 已检查 generated artifact 文件存在性和 TSV
  header；
- Node 端也应明确锁定 generated artifact list 的当前数量，防止生成端新增或
  丢失 artifact 时只靠 browser hardcoded list 才暴露。

本轮新增 Node-side parity：

- `verifyGeneratedArtifactDocumentationCoverage()` 现在要求 generated WASM
  sim-config inventory artifact list：
  - 无重复；
  - 固定为 54 项；
  - 每个 artifact 文件存在；
  - 每个 artifact 有非空 TSV header。
- `verifyNativeGeneratedArtifactDocumentationCoverage()` 现在要求 native
  generated TSV token list：
  - 无重复；
  - 固定为 8 项；
  - 每个 artifact 文件存在；
  - 除 `build/native/sim-configs/skipped.tsv` 外必须有非空 TSV header。

该检查只读取 generated artifacts 和文档，不执行 native runtime probe，也不允许
promotion。

2. 文档同步。

已记录：

- Node 和 browser 都锁定当前 artifact list 数量：
  - WASM inventory artifacts：54；
  - native TSV artifacts：8；
- generated artifact list drift 必须通过 gate 和文档审查处理。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

四十、2026-06-12 继续执行记录：Node native artifact exact token set parity

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 将 native generated TSV artifact list 从 fixed-count 收紧为 exact set。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 三十九中 Node coverage gate 已检查 native generated TSV token list 固定为
  8 项且无重复；
- 但如果 8 项中替换了一个 token，单纯 fixed-count 不能表达 intended
  baseline；
- Node 端应直接锁定当前 native generated TSV token exact set。

本轮新增 Node-side parity：

- `verifyNativeGeneratedArtifactDocumentationCoverage()` 现在要求 native
  generated TSV token list 精确等于：
  - `build/native/native-runtime-probe-summary.tsv`
  - `build/native/native-source-proof-summary.tsv`
  - `build/native/nc-files/summary.tsv`
  - `build/native/sim-configs/class-summary.tsv`
  - `build/native/sim-configs/path-matrix.tsv`
  - `build/native/sim-configs/skipped.tsv`
  - `build/native/sim-configs/summary.tsv`
  - `build/native/source-probes.tsv`
- 原有无重复、fixed count、文件存在性、header/empty-skipped 例外、文档覆盖
  检查保持不变。

该检查只读取 generated native artifacts 和文档，不执行 native runtime probe，
也不允许 promotion。

2. 文档同步。

已记录：

- Node coverage gate 的 native generated TSV token list 是 exact
  duplicate-free 8-token baseline；
- native generated artifact drift 必须通过 gate 和文档审查处理。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

四十一、2026-06-12 继续执行记录：Node WASM inventory artifact exact set parity

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 将 WASM inventory artifact list 从 fixed-count 收紧为 exact set。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 三十九中 Node coverage gate 已检查 generated WASM inventory artifact list
  固定为 54 项且无重复；
- 但如果 54 项中替换了一个 artifact，单纯 fixed-count 不能表达 intended
  baseline；
- browser smoke 已有 hardcoded expected list，Node 端也应锁定 exact set。

本轮新增 Node-side parity：

- `verifyGeneratedArtifactDocumentationCoverage()` 现在要求 generated WASM
  sim-config inventory artifact list 精确等于当前 54-entry baseline；
- 原有无重复、fixed count、文件存在性、非空 TSV header、文档覆盖检查保持
  不变；
- native generated TSV token exact set 检查继续保持。

该检查只读取 generated WASM inventory artifacts 和文档，不执行 native runtime
probe，也不允许 promotion。

2. 文档同步。

已记录：

- Node coverage gate 的 generated WASM inventory artifact list 是 exact
  duplicate-free 54-entry baseline；
- WASM inventory artifact drift 必须通过 gate 和文档审查处理。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

四十二、2026-06-12 继续执行记录：Node/browser artifact token surface parity

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 新增 Node 对 browser smoke artifact token 列表的 cross-surface 检查。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 四十/四十一中 Node 已锁定 native exact 8-token baseline 和 WASM exact
  54-entry baseline；
- browser smoke 也有 hardcoded expected artifact list 并执行 fetchability；
- 但如果 Node exact set 更新而 browser hardcoded list 漏同步，需要在 Node
  侧直接暴露 cross-surface drift。

本轮新增 Node-side parity：

- 新增 `browserInterpSmokePath`；
- `verifyGeneratedArtifactDocumentationCoverage()` 现在会检查 browser smoke
  source 中包含全部 54 个 generated WASM inventory artifact names；
- `verifyNativeGeneratedArtifactDocumentationCoverage()` 现在会检查 browser
  smoke source 中包含全部 8 个 native generated TSV artifact tokens；
- 原有 exact set、fixed count、无重复、文件存在性、header/empty-skipped 例外、
  文档覆盖检查保持不变。

该检查只读取 Node/browser test source、generated artifacts 和文档，不执行 native
runtime probe，也不允许 promotion。

2. 文档同步。

已记录：

- Node coverage gate 现在会检查 browser smoke source 中列出同一批 WASM/native
  artifact tokens；
- generated artifact coverage 的 Node/browser surface 必须同步。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

四十三、2026-06-12 继续执行记录：Node/browser artifact fixed-count guard surface parity

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 收紧 Node 对 browser smoke artifact coverage surface 的检查。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 四十二中 Node 已检查 browser smoke source 中列出同一批 WASM/native artifact
  tokens；
- 但如果 browser smoke 保留 token 列表、移除 fixed-count guard，browser 侧仍
  可能少一层 expected list drift 检查；
- Node 应确认 browser smoke 保留同一组 fixed-count guards。

本轮新增 Node-side parity：

- `verifyGeneratedArtifactDocumentationCoverage()` 现在检查 browser smoke
  source 中保留 `wasmArtifactNames.length !== 54` guard；
- `verifyNativeGeneratedArtifactDocumentationCoverage()` 现在检查 browser smoke
  source 中保留 `nativeArtifactTokens.length !== 8` guard；
- 原有 exact set、fixed count、无重复、文件存在性、header/empty-skipped 例外、
  文档覆盖和 browser token surface 检查保持不变。

该检查只读取 Node/browser test source、generated artifacts 和文档，不执行 native
runtime probe，也不允许 promotion。

2. 文档同步。

已记录：

- Node coverage gate 现在确认 browser smoke 不仅列出同一批 artifact tokens，
  也保留对应 fixed-count guards；
- generated artifact coverage 的 Node/browser surface 必须同步。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

四十四、2026-06-12 继续执行记录：Node/browser artifact duplicate-free guard surface parity

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 继续收紧 Node 对 browser smoke artifact coverage surface 的检查。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 四十三中 Node 已确认 browser smoke 保留 WASM/native artifact fixed-count
  guards；
- 但 browser smoke 的 duplicate-free guards 也属于 expected artifact list drift
  防线；
- Node 应确认 browser smoke 同时保留 duplicate-free guards。

本轮新增 Node-side parity：

- `verifyGeneratedArtifactDocumentationCoverage()` 现在检查 browser smoke
  source 中保留 `new Set(wasmArtifactNames).size !== wasmArtifactNames.length`
  guard；
- `verifyNativeGeneratedArtifactDocumentationCoverage()` 现在检查 browser smoke
  source 中保留
  `new Set(nativeArtifactTokens).size !== nativeArtifactTokens.length` guard；
- 原有 exact set、fixed count、无重复、文件存在性、header/empty-skipped 例外、
  文档覆盖、browser token surface 和 browser fixed-count guard 检查保持不变。

该检查只读取 Node/browser test source、generated artifacts 和文档，不执行 native
runtime probe，也不允许 promotion。

2. 文档同步。

已记录：

- Node coverage gate 现在确认 browser smoke 不仅列出同一批 artifact tokens、
  保留 fixed-count guards，也保留 duplicate-free guards；
- generated artifact coverage 的 Node/browser surface 必须同步。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

四十五、2026-06-12 继续执行记录：Node/browser artifact fetchability guard surface parity

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 继续收紧 Node 对 browser smoke artifact coverage surface 的检查。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 四十二到四十四中 Node 已确认 browser smoke 保留同一批 artifact tokens、
  fixed-count guards 和 duplicate-free guards；
- browser smoke 的 fetchability/header guards 和 native skipped 空文件例外也是
  artifact surface contract 的一部分；
- Node 应确认 browser smoke 保留这些 guard，防止 browser 侧只保留 token list。

本轮新增 Node-side parity：

- `verifyGeneratedArtifactDocumentationCoverage()` 现在检查 browser smoke
  source 中保留 `browser_generated_artifact_fetchability` guard；
- `verifyNativeGeneratedArtifactDocumentationCoverage()` 现在检查 browser smoke
  source 中保留 `browser_native_artifact_fetchability` guard；
- `verifyNativeGeneratedArtifactDocumentationCoverage()` 还检查 browser smoke
  source 中保留 `emptyNativeArtifactTokensAllowed.has(artifactToken)`，确保
  `build/native/sim-configs/skipped.tsv` 的合法空文件例外同步存在；
- 原有 exact set、fixed count、无重复、文件存在性、header/empty-skipped 例外、
  文档覆盖、browser token surface、fixed-count guard 和 duplicate-free guard
  检查保持不变。

该检查只读取 Node/browser test source、generated artifacts 和文档，不执行 native
runtime probe，也不允许 promotion。

2. 文档同步。

已记录：

- Node coverage gate 现在确认 browser smoke 保留 token list、fixed-count guards、
  duplicate-free guards、fetchability/header guards，以及 native skipped 空文件
  例外；
- generated artifact coverage 的 Node/browser surface 必须同步。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

4. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

四十六、2026-06-12 继续执行记录：Node/browser artifact documentation guard surface parity

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- `runtime-boundary-host-readiness-rollup.tsv` 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

2. 继续收紧 Node 对 browser smoke artifact coverage surface 的检查。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 四十二到四十五中 Node 已确认 browser smoke 保留同一批 artifact tokens、
  fixed-count guards、duplicate-free guards、fetchability/header guards，以及
  native skipped 空文件例外；
- browser smoke 对文档覆盖的 missing-artifact guard 也是 artifact surface
  contract 的一部分；
- Node 应确认 browser smoke 保留这些 guard，防止 browser 侧只保留 token 和
  fetchability 检查。

本轮新增 Node-side parity：

- `verifyGeneratedArtifactDocumentationCoverage()` 现在检查 browser smoke
  source 中保留 `browser_generated_artifact_documentation_coverage: missing`
  guard；
- `verifyNativeGeneratedArtifactDocumentationCoverage()` 现在检查 browser smoke
  source 中保留 `browser_native_artifact_documentation_coverage: missing`
  guard；
- 原有 exact set、fixed count、无重复、文件存在性、header/empty-skipped 例外、
  文档覆盖、browser token surface、fixed-count guard、duplicate-free guard 和
  fetchability/header guard 检查保持不变。

该检查只读取 Node/browser test source、generated artifacts 和文档，不执行 native
runtime probe，也不允许 promotion。

3. 文档同步。

已记录：

- Node coverage gate 现在确认 browser smoke 保留 token list、fixed-count guards、
  duplicate-free guards、fetchability/header guards、documentation-missing guards，
  以及 native skipped 空文件例外；
- generated artifact coverage 的 Node/browser surface 必须同步。

4. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`

5. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

四十七、2026-06-12 继续执行记录：Node/browser artifact completion count-parity surface guard

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- `runtime-boundary-host-readiness-rollup.tsv` 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

2. 继续收紧 Node 对 browser smoke artifact coverage surface 的检查。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 四十二到四十六中 Node 已确认 browser smoke 保留同一批 artifact tokens、
  fixed-count guards、duplicate-free guards、fetchability/header guards、
  documentation-missing guards，以及 native skipped 空文件例外；
- browser smoke 还会把 `boundary-phase-completion-summary.tsv` 中的 artifact
  documentation coverage count 与 browser 已加载的 token list 长度对齐；
- Node 应确认 browser smoke 保留该 completion count-parity 调用。

本轮新增 Node-side parity：

- `verifyGeneratedArtifactDocumentationCoverage()` 现在检查 browser smoke
  source 中保留 `wasm_inventory_artifact_documentation_coverage` 使用
  `generatedArtifactDocumentationCoverage.wasmArtifactNames.length` 的 count
  parity guard；
- `verifyNativeGeneratedArtifactDocumentationCoverage()` 现在检查 browser smoke
  source 中保留 `native_artifact_documentation_coverage` 使用
  `generatedArtifactDocumentationCoverage.nativeArtifactTokens.length` 的 count
  parity guard；
- 原有 exact set、fixed count、无重复、文件存在性、header/empty-skipped 例外、
  文档覆盖、browser token surface、fixed-count guard、duplicate-free guard、
  fetchability/header guard 和 documentation-missing guard 检查保持不变。

该检查只读取 Node/browser test source、generated artifacts 和文档，不执行 native
runtime probe，也不允许 promotion。

3. 文档同步。

已记录：

- Node coverage gate 现在确认 browser smoke 保留 token list、fixed-count guards、
  duplicate-free guards、fetchability/header guards、documentation-missing guards、
  completion count-parity guards，以及 native skipped 空文件例外；
- generated artifact coverage 的 Node/browser surface 必须同步。

4. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`

5. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

四十八、2026-06-12 继续执行记录：Node/browser artifact review-document fetch surface guard

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- `runtime-boundary-host-readiness-rollup.tsv` 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

2. 继续收紧 Node 对 browser smoke artifact coverage surface 的检查。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 四十二到四十七中 Node 已确认 browser smoke 保留同一批 artifact tokens、
  fixed-count guards、duplicate-free guards、fetchability/header guards、
  documentation-missing guards、completion count-parity guards，以及 native
  skipped 空文件例外；
- browser smoke 的 artifact documentation coverage 必须实际 fetch 三份 review
  docs，而不是只检查内联 token list；
- Node 应确认 browser smoke 保留 review-document fetch surface。

本轮新增 Node-side parity：

- `verifyGeneratedArtifactDocumentationCoverage()` 现在检查 browser smoke
  source 中保留以下 fetch token：
  - `../../docs/compatibility-validation.md`
  - `../../docs/sim-configs-coverage-matrix.md`
  - `../../docs/full-process-boundary-design.md`
- 原有 exact set、fixed count、无重复、文件存在性、header/empty-skipped 例外、
  文档覆盖、browser token surface、fixed-count guard、duplicate-free guard、
  fetchability/header guard、documentation-missing guard 和 completion
  count-parity guard 检查保持不变。

该检查只读取 Node/browser test source、generated artifacts 和文档，不执行 native
runtime probe，也不允许 promotion。

3. 文档同步。

已记录：

- Node coverage gate 现在确认 browser smoke 保留 token list、fixed-count guards、
  duplicate-free guards、fetchability/header guards、documentation-missing guards、
  completion count-parity guards、review-document fetches，以及 native skipped
  空文件例外；
- generated artifact coverage 的 Node/browser surface 必须同步。

4. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`

5. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

四十九、2026-06-12 继续执行记录：Node/browser artifact review-document join surface guard

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- `runtime-boundary-host-readiness-rollup.tsv` 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

2. 继续收紧 Node 对 browser smoke artifact coverage surface 的检查。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 四十八中 Node 已确认 browser smoke 保留三份 review-document fetch token；
- 仅保留 token 还不够，browser smoke 必须把 fetch 结果收集成
  `documentationText`，并在 missing-reference 检查前 join；
- Node 应确认 browser smoke 保留这个 review-document join surface。

本轮新增 Node-side parity：

- `verifyGeneratedArtifactDocumentationCoverage()` 现在检查 browser smoke
  source 中保留 `const documentationText = [`；
- 同一检查还要求 browser smoke 保留 `].join("\\n");`；
- 这保证 browser smoke 的 artifact documentation coverage 仍使用三份 review
  docs 的合并文本，而不是只保留内联 artifact token list。

原有 exact set、fixed count、无重复、文件存在性、header/empty-skipped 例外、
文档覆盖、browser token surface、fixed-count guard、duplicate-free guard、
fetchability/header guard、documentation-missing guard、completion count-parity
guard 和 review-document fetch token 检查保持不变。

该检查只读取 Node/browser test source、generated artifacts 和文档，不执行 native
runtime probe，也不允许 promotion。

3. 文档同步。

已记录：

- Node coverage gate 现在确认 browser smoke 保留 review-document fetches，并把
  fetched docs join 成用于 missing-reference 检查的 review text；
- generated artifact coverage 的 Node/browser surface 必须同步。

4. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`

5. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

五十、2026-06-12 继续执行记录：completion-summary artifact documentation count baseline guard

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- `runtime-boundary-host-readiness-rollup.tsv` 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

2. 收紧 Node completion-summary artifact documentation count。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- Node 已锁定 generated WASM artifact list 是 54 项，native generated TSV token
  list 是 8 项；
- browser smoke 已把 documentation coverage completion count 与 browser 已加载
  token list 长度做 count-parity；
- Node 自身也应直接检查 `boundary-phase-completion-summary.tsv` 中这两个
  documentation coverage criterion 的 count 与当前 baseline 一致。

本轮新增 Node-side guard：

- `verifyBoundaryPhaseCompletionSummaryRows()` 现在要求
  `wasm_inventory_artifact_documentation_coverage.count === "54"`；
- 同一函数要求 `native_artifact_documentation_coverage.count === "8"`；
- 这样可以防止 completion summary 的 documentation coverage count 与生成的
  artifact baseline 脱节。

该检查只读取生成的 completion rows，不执行 native runtime probe，也不允许
promotion。

3. 文档同步。

已记录：

- Node coverage gate 现在锁定 `boundary-phase-completion-summary.tsv` 中 artifact
  documentation coverage 的两个 baseline count：
  - WASM sim-config inventory artifact count `54`
  - native generated TSV artifact count `8`

4. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`

5. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

五十一、2026-06-12 继续执行记录：browser completion evidence reviewability surface guard

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- `runtime-boundary-host-readiness-rollup.tsv` 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

2. 收紧 browser completion count parity 的 evidence surface。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- browser smoke 已检查 artifact documentation coverage completion count 与
  browser 已加载 token list 一致；
- 该 count parity 还必须保留 reviewable evidence 检查，避免 completion summary
  只给出 count 而没有可审查 evidence；
- Node 应确认 browser smoke 源码保留该 evidence reviewability guard。

本轮新增 Node-side parity：

- `verifyGeneratedArtifactDocumentationCoverage()` 现在检查 browser smoke source
  中保留 `row.evidence === "-" || row.evidence.length < 12`；
- 同一检查还要求保留 `completion evidence is not reviewable` 错误文本；
- 这样可以防止 browser-side completion count parity 去掉 evidence 可审查性约束。

该检查只读取 Node/browser test source、generated artifacts 和文档，不执行 native
runtime probe，也不允许 promotion。

3. 文档同步。

已记录：

- Node coverage gate 现在确认 browser smoke 在 completion count parity 中保留
  reviewable evidence 检查；
- generated artifact coverage 的 Node/browser surface 必须同步。

4. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`

5. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

五十二、2026-06-12 继续执行记录：browser completion count-parity invocation guard

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- `runtime-boundary-host-readiness-rollup.tsv` 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

2. 收紧 browser completion count parity 调用面。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- 五十一中 Node 已确认 browser smoke 的 count-parity helper 保留 reviewable
  evidence 检查；
- 仅保留 helper 内容还不够，browser smoke 必须实际用 generated
  `boundaryPhaseCompletionRows` 调用该 helper；
- Node 应确认 browser smoke 保留这个调用面。

本轮新增 Node-side parity：

- `verifyGeneratedArtifactDocumentationCoverage()` 现在检查 browser smoke source
  中保留：
  `verifyBrowserBoundaryPhaseCompletionCountParity(\n        boundaryPhaseCompletionRows,`
- 这样可以防止 browser smoke 只保留 helper 定义或字符串，但不再用实际生成的
  completion rows 进行 count parity。

该检查只读取 Node/browser test source、generated artifacts 和文档，不执行 native
runtime probe，也不允许 promotion。

3. 文档同步。

已记录：

- Node coverage gate 现在确认 browser smoke 实际用 generated completion rows
  调用 completion count-parity helper；
- generated artifact coverage 的 Node/browser surface 必须同步。

4. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`

5. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

五十三、2026-06-12 继续执行记录：browser artifact documentation coverage invocation guard

本轮继续选择当前 host 可执行的非 runtime 方向。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. blocker 复查。

执行：

```bash
git diff --check
git status --short
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
```

结果：

- `git diff --check` clean。
- `runtime-boundary-host-readiness-rollup.tsv` 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`

2. 收紧 browser artifact documentation coverage 调用面。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- Node 已确认 browser smoke 保留 artifact documentation coverage helper 的
  token list、review-document fetch、join、missing guard 和 count parity；
- 仅保留 helper 内容还不够，browser smoke 必须实际 await 执行该 helper；
- Node 应确认 browser smoke 保留这个调用面。

本轮新增 Node-side parity：

- `verifyGeneratedArtifactDocumentationCoverage()` 现在检查 browser smoke source
  中保留 `await verifyBrowserGeneratedArtifactDocumentationCoverage();`；
- 这样可以防止 browser smoke 只保留 helper 定义，但不再实际执行 generated
  artifact documentation coverage。

该检查只读取 Node/browser test source、generated artifacts 和文档，不执行 native
runtime probe，也不允许 promotion。

3. 文档同步。

已记录：

- Node coverage gate 现在确认 browser smoke 实际执行 artifact documentation
  coverage helper；
- generated artifact coverage 的 Node/browser surface 必须同步。

4. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`

5. 下一步状态。

当前 host 仍不能推进第四部分第 4 步。后续继续有两个合法方向：

- 切换到具备 LinuxCNC host runtime 的环境，重新跑 preflight/dispatch，
  再决定是否执行 opt-in probe。
- 留在当前 host，继续做不需要 runtime 的 source proof/gate consistency，
  或小批量 pure interpreter intake。

五十四、2026-06-12 继续执行记录：当前 gate 复跑与下一步建议

本轮按当前 `text5.txt` 最新状态继续执行。blocked runtime host readiness
仍为 blocked，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 基础 gate 复跑。

执行：

```bash
git diff --check
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_wasm.sh
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `sim_configs_wasm_node_smoke=ok`
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`

2. host preflight artifact 复查。

读取：

```bash
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-preflight.tsv
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-requirement-summary.tsv
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-unblock-plan.tsv
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-opt-in-probe-dispatch-plan.tsv
```

当前结论：

- `L4-USER-M-PROCESS` 仍缺 `halrun,halcmd,linuxcnc`。
- `L4-TOOL-DB` 仍缺 `linuxcnc,milltask,halcmd`。
- `L4-PYTHON-REMAP` 仍缺 `linuxcnc`。
- rollup 仍为：
  - `family_count=3`
  - `host_ready_family_count=0`
  - `host_blocked_family_count=3`
  - `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
  - `ready_opt_in_command_count=0`
  - `host_readiness_status=host_blocked_for_all_opt_in_native_probes`
  - `execution_enabled=0`
  - `promotion_allowed=0`
- dispatch plan 对三个 blocked family 均为 `dispatch_allowed=0`。

3. 下一步工作建议。

当前最推荐的下一步不是继续扩 runtime，而是在当前 host 上继续做
non-runtime gate consistency，优先级如下：

1. 继续收紧 Node/browser 对 generated artifact 文档覆盖的双向一致性：
   确认新增 artifact 不仅出现在文档 token list，也在 browser smoke 中被实际
   读取和断言，并由 Node gate 检查调用面。
2. 若需要更接近 coverage 增量，则做小批量 pure interpreter intake：
   只选不依赖 HAL/task/Python remap/tool DB/user-M process 的 upstream
   `tests/interp/*` fixture，严格按 native -> Node WASM -> browser representative
   顺序推进。
3. blocked runtime 的 millturn/tool DB/Python remap opt-in probe 暂不推进；
   只有切换到具备 `halcmd/halrun/linuxcnc/milltask` 的 host，并重新跑
   preflight/dispatch 确认 `runtime_ready=1` 与 `dispatch_allowed=1` 后，
   才能人工执行对应 `ENABLE_*_RUNTIME_PROBE=1` 命令。

本轮建议优先执行第 1 项。它不需要 LinuxCNC host runtime，风险低，且能继续
防止 artifact/gate 文档与 browser 实际检查面漂移。

五十五、2026-06-12 继续执行记录：browser generated artifact fetch invocation guard

本轮继续执行五十四建议的第 1 项：在当前 host 上做 non-runtime gate
consistency，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 收紧 browser artifact fetch 调用面。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- browser smoke 已经会执行 `verifyBrowserGeneratedArtifactDocumentationCoverage()`；
- Node gate 也已经确认 browser 保留 artifact list、fixed count、duplicate-free、
  fetchability/header、documentation-missing 和 completion count-parity guard；
- 但 Node 还应显式锁定 browser 必须按 artifact name/token 动态 fetch 生成的
  TSV，而不是只保留错误标签或静态字符串。

本轮新增 Node-side parity：

- 对 WASM inventory artifacts，Node 现在检查 browser smoke source 中保留：
  `await fetchText(\`../../build/wasm/sim-configs-inventory/${artifactName}\`)`
- 对 native generated TSV artifacts，Node 现在检查 browser smoke source 中保留：
  `await fetchText(\`../../${artifactToken}\`)`

该检查只读取 Node/browser test source、generated artifacts 和文档，不执行 native
runtime probe，也不允许 promotion。

2. 文档同步。

已记录：

- Node coverage gate 现在确认 browser smoke 按 artifact name fetch generated
  WASM TSV；
- Node coverage gate 现在确认 browser smoke 按 relative artifact token fetch
  native TSV；
- 这仍是 documentation/artifact fetchability parity，不是 runtime proof。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`

4. 下一步工作建议。

当前 host 仍不能推进 blocked runtime opt-in probe。下一步继续优先做
non-runtime consistency：

1. 检查 Node/browser 是否都锁定 generated artifact coverage 的
   documentation source set，也就是 compatibility、matrix、full-process 三份文档
   必须都被读取并合并后再做 missing-reference check。
2. 若该面已经足够稳，再考虑小批量 pure interpreter intake；仍需避免
   HAL/task/Python remap/tool DB/user-M process 依赖。
3. blocked runtime 只有在具备 `halcmd/halrun/linuxcnc/milltask` 的 host 上重新跑
   preflight/dispatch 并确认可 dispatch 后，才允许人工 opt-in。

五十六、2026-06-12 继续执行记录：browser documentation source-set invocation guard

本轮继续执行五十五建议的第 1 项：检查并收紧 generated artifact coverage 的
documentation source set。仍不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native
probe。

1. 收紧 browser documentation source-set 调用面。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- browser smoke 已读取三份 review docs：
  - `../../docs/compatibility-validation.md`
  - `../../docs/sim-configs-coverage-matrix.md`
  - `../../docs/full-process-boundary-design.md`
- Node gate 已逐个检查这些 token，也检查了 `const documentationText = [` 和
  `].join("\\n");`；
- 但为了防止 token 分散存在却不再作为同一个 missing-reference source set 使用，
  Node 应锁定完整 fetch-and-join 片段。

本轮新增 Node-side parity：

- `verifyGeneratedArtifactDocumentationCoverage()` 现在检查 browser smoke source
  中保留完整三文档 fetch-and-join source set：
  - compatibility validation；
  - sim-configs coverage matrix；
  - full-process boundary design；
  - `].join("\\n");`

该检查只读取 Node/browser test source 和文档，不执行 native runtime probe，也不
允许 promotion。

2. 文档同步。

已记录：

- Node coverage gate 现在确认 browser smoke fetches and joins the exact
  compatibility/matrix/full-process boundary review-document set；
- 该 source set 用于 generated artifact missing-reference checks；
- 这仍是 documentation/artifact parity，不是 runtime proof。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`

4. 下一步工作建议。

当前 host 仍不能推进 blocked runtime opt-in probe。下一步有两个高效方向：

1. 继续 non-runtime consistency：检查 Node/browser 是否都锁定
   generated artifact coverage 的 missing-reference loop 必须遍历
   `wasmArtifactNames` 和 `nativeArtifactTokens`，并且使用同一个 joined
   `documentationText`。
2. 如果不继续收紧 artifact 文档 gate，则切换到小批量 pure interpreter intake；
   仍只选不依赖 HAL/task/Python remap/tool DB/user-M process 的 fixture。

五十七、2026-06-12 继续执行记录：browser documentation missing-reference loop guard

本轮继续执行五十六建议的第 1 项：收紧 generated artifact coverage 的
missing-reference loop。仍不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native
probe。

1. 收紧 browser missing-reference loop 调用面。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- browser smoke 已经 fetch/join 三份 review docs 到同一个 `documentationText`；
- browser smoke 也已经遍历 `wasmArtifactNames` 和 `nativeArtifactTokens` 做
  missing-reference checks；
- Node gate 需要明确锁定这两个 loop 使用同一个 joined `documentationText`，
  防止只保留错误标签或列表 token 而不再实际做覆盖检查。

本轮新增 Node-side parity：

- 对 WASM inventory artifacts，Node 现在检查 browser smoke source 中保留：
  `for (const artifactName of wasmArtifactNames) {`
  和 `if (!documentationText.includes(artifactName)) {`
- 对 native generated TSV artifacts，Node 现在检查 browser smoke source 中保留：
  `for (const artifactToken of nativeArtifactTokens) {`
  和 `if (!documentationText.includes(artifactToken)) {`

该检查只读取 Node/browser test source 和文档，不执行 native runtime probe，也不
允许 promotion。

2. 文档同步。

已记录：

- Node coverage gate 现在确认 browser missing-reference loops 遍历
  `wasmArtifactNames` 和 `nativeArtifactTokens`；
- 两个 loop 都必须 against joined `documentationText`；
- 这仍是 documentation/artifact parity，不是 runtime proof。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`

4. 下一步工作建议。

当前 host 仍不能推进 blocked runtime opt-in probe。下一步建议：

1. artifact documentation coverage 的 Node/browser 调用面已经较完整；优先考虑
   做一次小批量 pure interpreter intake，但必须先筛 fixture，排除 HAL/task、
   Python remap、tool DB、user-M process、UI/full-process 依赖。
2. 如果继续做 non-runtime consistency，可检查 browser 和 Node 对
   `boundary-phase-completion-summary.tsv` 的 artifact documentation count parity
   是否都绑定到同一组 returned artifact arrays，而不是硬编码独立计数。
3. blocked runtime 仍只在具备 `halcmd/halrun/linuxcnc/milltask` 的 host 上重新跑
   preflight/dispatch 并确认可 dispatch 后，才允许人工 opt-in。

五十八、2026-06-12 继续执行记录：small pure interpreter intake - do-while-break bug fixture

本轮执行五十七建议的第 1 项：小批量 pure interpreter intake。仍不执行任何
`ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. fixture 筛选。

候选：

- `wasm-port/vendor/linuxcnc/tests/interp/do-while-break/bug.ngc`

筛选结论：

- 同目录 `test.ngc` 已在 Node/browser 覆盖；
- `bug.ngc` 是一个更小的 `do` / `break` / `while` 回归 fixture；
- 不依赖 INI、tool table、HAL/task、Python remap、tool DB、user-M process、
  UI/full-process；
- 只通过 vendored LinuxCNC interpreter 执行，不引入 JS CNC 语义。

2. 探测。

用 SDK 直接运行 `bug.ngc`，确认当前 WASM output：

- `file_open=0`
- `file_read_count=7`
- `file_execute_count=7`
- `file_saw_error=0`
- `canon_event=PROGRAM_END`
- `@start of do-while-loop` 出现在 print output；
- `@end of do-while-loop` 不出现，证明 `break` 后不会执行 loop 尾部 print。

3. 更新。

更新：

- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

新增检查：

- Node fixture name：`interp_do_while_break_bug_wasm`
- Browser fixture name：`browser_interp_do_while_break_bug`
- 两侧都断言：
  - `file_open=0`
  - `file_read_count=7`
  - `file_execute_count=7`
  - `file_saw_error=0`
  - `canon_event=PROGRAM_END`
  - `absent=@end of do-while-loop`
  - `absent=file_saw_error=1`

4. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_interp_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- `interp_wasm_node_smoke=ok`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- Host aggregate 中 Node inventory 仍保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`

5. 下一步工作建议。

继续小批量 pure interpreter intake，但每次只加 1-2 个 fixture，避免扩大
review 面。下一步优先做覆盖对账后选择：

1. `do-while-break/bug.ngc` 已完成；继续找未被 Node/browser 双侧覆盖的
   pure interpreter `.ngc`。
2. 候选应优先来自 upstream `tests/interp/good` 或 `tests/interp/bad` 中不依赖
   INI/tool/remap/HAL/task 的单文件 arc/error fixture。
3. 若候选需要 INI、tool table、subroutine path 或 remap，必须先走 staging
   helper 和 blocked dependency 分类，不要直接纳入 pure interpreter intake。

五十九、2026-06-12 继续执行记录：good/bad pure interpreter fixture coverage guard

本轮继续执行五十八建议，优先从 upstream `tests/interp/good` 和
`tests/interp/bad` 做 pure interpreter intake 对账。仍不执行任何
`ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 覆盖对账。

对账结果：

- `tests/interp/good` 当前 6 个 `.ngc` 全部已在 Node/browser 覆盖；
- `tests/interp/bad` 当前 21 个 `.ngc` 全部已在 Node/browser 覆盖；
- 因此本轮不重复添加 fixture，而是把“已全覆盖”变成可执行 guard。

2. 更新。

更新：

- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

Node 新增：

- `interpRegressionNgcFiles(name)` 枚举 upstream `tests/interp/<name>` 下的
  `.ngc`；
- `badInterpFixtures` 必须与 vendored `tests/interp/bad/*.ngc` 完全一致；
- `goodArcFixtures` 必须与 vendored `tests/interp/good/*.ngc` 完全一致；
- 如果 upstream good/bad 新增 `.ngc`，Node smoke 会失败，要求显式纳入或分类。

Browser 新增：

- `badInterpFixtures` 固定 `length=21` 且 file list duplicate-free；
- `goodArcFixtures` 固定 `length=6` 且 file list duplicate-free；
- browser representative 不枚举目录，但会防止代表列表被静默删减或重复。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_interp_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- `interp_wasm_node_smoke=ok`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- Host aggregate 中 Node inventory 仍保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`

4. 下一步工作建议。

继续小批量 pure interpreter intake，但不要再从 `good` / `bad` 目录找增量，
这两个目录已有 coverage guard。下一步建议：

1. 对 `tests/interp/m98m99` 做同类覆盖对账，优先确认已覆盖文件、未覆盖文件、
   以及哪些需要 fanuc-mode INI 或 expected-error 分类；
2. 只纳入 1 个明确 pure interpreter 且 Node/browser 都可稳定断言的未覆盖
   fixture；
3. 如果 `m98m99` 已经足够完整，则回到 non-runtime consistency，检查
   `boundary-phase-completion-summary.tsv` 的 count parity 是否完全绑定到返回的
   artifact arrays。

六十、2026-06-12 继续执行记录：m98m99 pure interpreter fixture coverage guard

本轮执行五十九建议，对 upstream `tests/interp/m98m99` 做覆盖对账。仍不执行任何
`ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 覆盖对账。

对账结果：

- `tests/interp/m98m99` 当前 24 个 `.ngc` 已全部在 Node/browser 覆盖；
- 覆盖包含：
  - basic Fanuc and RS274 sub calls；
  - variable scope；
  - M98 expected errors；
  - mixed sub-style expected errors；
  - nested/sub-follow-main；
  - fanuc-mode INI enable/disable cases；
  - main-program O-word legal and expected-error cases；
  - named/numbered program and O-expression call cases；
- 因此本轮不重复添加 fixture，而是把“已全覆盖”变成可执行 guard。

2. 更新。

更新：

- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

Node 新增：

- `interpRegressionNgcFilesRecursive(name)` 递归枚举 upstream
  `tests/interp/<name>/**/*.ngc`；
- `m98m99RegressionFiles` 固定 24 个当前 upstream `.ngc`；
- Node smoke 要求该 manifest 与 vendored `tests/interp/m98m99/**/*.ngc` 完全一致；
- 如果 upstream m98m99 新增 `.ngc`，Node smoke 会失败，要求显式纳入或分类。

Browser 新增：

- `m98m99RegressionFiles` 固定 `length=24` 且 duplicate-free；
- browser representative 不枚举目录，但会防止 m98m99 manifest 被静默删减或重复。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_interp_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- `interp_wasm_node_smoke=ok`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`
- Host aggregate 中 Node inventory 仍保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`

4. 下一步工作建议。

`good`、`bad`、`m98m99` 三个 pure interpreter fixture family 已有覆盖 guard。
下一步建议回到 non-runtime consistency：

1. 检查 `boundary-phase-completion-summary.tsv` 的 artifact documentation count
   parity 是否完全绑定到 `verifyBrowserGeneratedArtifactDocumentationCoverage()`
   返回的 `wasmArtifactNames` / `nativeArtifactTokens`，以及 Node 是否锁定这个
   调用面；
2. 如果还要继续 interpreter intake，优先对 `magic_comments` 或 `rotation` 这类
   已有少量代表的纯解释器 family 做覆盖对账，不要碰 HAL/task/remap/tool DB/
   user-M process；
3. blocked runtime 仍只在具备 `halcmd/halrun/linuxcnc/milltask` 的 host 上重新跑
   preflight/dispatch 并确认可 dispatch 后，才允许人工 opt-in。

六十一、2026-06-12 继续执行记录：artifact documentation count parity returned-array guard

本轮执行六十建议的第 1 项，回到 non-runtime consistency，检查
`boundary-phase-completion-summary.tsv` 的 artifact documentation count parity
是否绑定到 `verifyBrowserGeneratedArtifactDocumentationCoverage()` 返回的 arrays。
仍不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 收紧 browser count-parity 调用面。

更新：

- `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- `wasm-port/docs/compatibility-validation.md`
- `wasm-port/docs/sim-configs-coverage-matrix.md`

背景：

- browser smoke 已执行 `verifyBrowserGeneratedArtifactDocumentationCoverage()`；
- `verifyBrowserBoundaryPhaseCompletionCountParity()` 已用 generated completion rows；
- WASM documentation count 已使用
  `generatedArtifactDocumentationCoverage.wasmArtifactNames.length`；
- native documentation count 已使用
  `generatedArtifactDocumentationCoverage.nativeArtifactTokens.length`；
- 但 Node gate 应锁定这两个 entries 同时位于同一个 count-parity Map 中，防止
  后续被拆成独立硬编码计数。

本轮新增 Node-side parity：

- `verifyGeneratedArtifactDocumentationCoverage()` 现在检查 browser smoke source
  中保留 compound count-parity snippet：
  - `wasm_inventory_artifact_documentation_coverage`
  - `generatedArtifactDocumentationCoverage.wasmArtifactNames.length`
  - `native_artifact_documentation_coverage`
  - `generatedArtifactDocumentationCoverage.nativeArtifactTokens.length`

该检查只读取 Node/browser test source 和文档，不执行 native runtime probe，也不
允许 promotion。

2. 文档同步。

已记录：

- browser documentation-coverage completion counts 必须绑定到 returned
  `wasmArtifactNames` 和 `nativeArtifactTokens` arrays；
- 这仍是 documentation/artifact count-parity，不是 runtime proof。

3. 验证完成。

执行：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- `sim_configs_wasm_node_inventory=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`

4. 下一步工作建议。

当前 artifact documentation coverage 的 Node/browser 调用面已较完整。下一步建议：

1. 继续 interpreter family coverage 对账，优先 `magic_comments` 或 `rotation`；
   只加 coverage guard 或 1 个明确 pure interpreter fixture；
2. 如果不继续 intake，则做一次当前大工作集整理：`git diff --stat`、
   `git diff --name-only`，按 browser gate、Node inventory、interp intake、
   docs/text 归 batch，准备 review；
3. blocked runtime 仍只在具备 `halcmd/halrun/linuxcnc/milltask` 的 host 上重新跑
   preflight/dispatch 并确认可 dispatch 后，才允许人工 opt-in。

六十二、2026-06-12 继续执行记录：magic_comments/rotation pure interpreter fixture coverage guard

本轮执行六十一建议的第 1 项，对 `magic_comments` 和 `rotation` 做 pure
interpreter family coverage 对账。仍不执行任何
`ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 覆盖对账。

对账结果：

- `tests/interp/magic_comments` 当前只有 1 个 `.ngc`：
  `param_format_printing/test.ngc`；
- `tests/interp/rotation` 当前有 3 个 `.ngc`：
  `abs-pts/test.ngc`、`g28/g28.ngc`、`g53/g53.ngc`；
- 这 4 个文件此前已在 Node/browser 中执行覆盖；
- 因此本轮不新增 fixture，只把“已全覆盖”变成可执行 guard。

2. 更新。

更新：

- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

Node 新增：

- `rotationRegressionFiles` 固定 3 个当前 upstream `.ngc`；
- `magicCommentsRegressionFiles` 固定 1 个当前 upstream `.ngc`；
- Node smoke 要求这两个 manifest 与 vendored upstream 递归 `.ngc` 列表完全一致。

Browser 新增：

- `rotationRegressionFiles` 固定 `length=3` 且 duplicate-free；
- `magicCommentsRegressionFiles` 固定 `length=1` 且 duplicate-free；
- browser representative 不枚举目录，但会防止这两个 manifest 被静默删减或重复。

3. 下一步工作建议。

验证通过后，下一步优先做当前大工作集整理：

1. `git diff --stat`、`git diff --name-only`；
2. 按 browser gate、Node inventory、interp intake、docs/text 归 batch；
3. 只补 review 边界说明，不继续扩大 interpreter intake；
4. blocked runtime 仍只在具备 `halcmd/halrun/linuxcnc/milltask` 的 host 上重新跑
   preflight/dispatch 并确认可 dispatch 后，才允许人工 opt-in。

六十三、2026-06-12 继续执行记录：当前大工作集 review batch 整理

本轮执行六十二建议的第 1 到第 3 项，只整理当前工作集的 review 边界，不新增
interpreter fixture，不扩大 browser inventory，也不执行任何
`ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 当前工作区。

当前 tracked 改动：

```text
text4.txt
wasm-port/docs/compatibility-validation.md
wasm-port/docs/full-process-boundary-design.md
wasm-port/docs/sim-configs-coverage-matrix.md
wasm-port/tests/browser/interp_smoke.html
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/wasm/node/verify_interp_wasm.mjs
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs
```

当前 untracked 文件：

```text
text5.txt
```

`git diff --stat` 当前不包含 untracked `text5.txt`，review/提交时必须单独把
`text5.txt` 纳入范围。

2. Review batch 划分。

Batch A：browser gate/schema 扩展。

- 文件：
  - `wasm-port/tests/browser/interp_smoke.html`
  - `wasm-port/tests/browser/verify_interp_browser.sh`
- 内容边界：
  - browser 端校验 generated artifact 文档覆盖、fetchability、唯一性和固定数量；
  - browser 端校验 boundary phase completion count parity；
  - browser 端校验 blocked runtime host readiness、dispatch、skip-evidence、
    promotion/opt-in gate parity；
  - browser 端补 pure interpreter representative 的 fixed-count/duplicate-free
    guard；
  - browser 仍不枚举目录，不跑 full 159 sim-config inventory。
- 非目标：
  - 不执行 blocked runtime probe；
  - 不声明 full-process/HAL/task/UI coverage；
  - 不把 blocked row promotion 成 pass。

Batch B：Node inventory / generated artifact gate 扩展。

- 文件：
  - `wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs`
- 内容边界：
  - 生成并校验 runtime host preflight、requirement summary、unblock plan、
    family readiness、host readiness rollup；
  - 生成并校验 opt-in probe dispatch plan/rollup、skip-evidence contract/rollup；
  - 校验 generated artifact exact set、documentation coverage、review document
    fetch/join surface；
  - 锁定 Node/browser artifact token surface parity 和 completion count parity。
- 当前预期状态：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - blocked runtime 仍保持 `execution_enabled=0`、`promotion_allowed=0`。

Batch C：pure interpreter intake / coverage guard。

- 文件：
  - `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
  - `wasm-port/tests/browser/interp_smoke.html`
- 内容边界：
  - 新增 `do-while-break/bug.ngc` 作为小批量 pure interpreter fixture；
  - `good`、`bad`、`m98m99`、`magic_comments`、`rotation` 已有覆盖变成
    executable coverage guard；
  - Node 对可递归 family 使用 upstream `.ngc` manifest 完全对账；
  - browser 对 representative list 做固定数量和 duplicate-free guard。
- 非目标：
  - 不继续 intake `HAL/task/remap/tool DB/user-M process`；
  - 不用 JS 重写 G-code 语义；
  - 不修改 vendored LinuxCNC 源文件或 fixture 内容。

Batch D：docs/text review 边界。

- 文件：
  - `text4.txt`
  - `text5.txt`
  - `wasm-port/docs/compatibility-validation.md`
  - `wasm-port/docs/full-process-boundary-design.md`
  - `wasm-port/docs/sim-configs-coverage-matrix.md`
- 内容边界：
  - 记录 Batch 16 到 Batch 23 的 blocked runtime host/dispatch/skip evidence
    artifacts；
  - 说明这些 artifacts 是 non-executing、non-promoting proof/gate；
  - 明确当前 host 缺 `halcmd`、`halrun`、`linuxcnc`、`milltask`；
  - 记录 native/Node/browser promotion 顺序和禁止事项。

3. 本轮不处理事项。

- 不运行：

```bash
ENABLE_MILLTURN_USER_M_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_millturn_user_m_runtime.sh
ENABLE_TOOL_DB_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_tool_db_runtime.sh
ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_python_remap_runtime.sh
```

- 不继续扩大 interpreter intake；
- 不新增 browser 全量 inventory；
- 不修改 `wasm-port/vendor/linuxcnc/`；
- 不把 expected failure 或 blocked runtime row 改成 pass。

4. 下一步工作建议。

先复跑最小 review gate：

```bash
git diff --check
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/wasm/node/verify_interp_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

如果全部通过，下一步只做 review 准备：

1. 确认 `text5.txt` 是否需要加入版本控制；
2. 按 Batch A/B/C/D 分开审查 diff；
3. 暂停新增 coverage，除非 review 发现 drift 或 gate 失败。

5. 验证完成。

执行：

```bash
git diff --check
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/wasm/node/verify_interp_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `interp_wasm_node_smoke=ok`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`

6. 下一步工作建议。

当前工作集已经进入 review 准备状态。下一步建议不要继续新增测试面，改为：

1. 确认 `text5.txt` 加入版本控制；
2. 按 Batch A/B/C/D 顺序做人工 review；
3. review 时优先检查：
   - generated artifact list 是否有重复/遗漏；
   - completion count parity 是否仍绑定 generated arrays；
   - blocked runtime 是否始终 `execution_enabled=0`、`promotion_allowed=0`；
   - pure interpreter coverage guard 是否只覆盖 upstream `.ngc` manifest；
4. review 通过后再考虑提交或拆分提交。

六十四、2026-06-12 继续执行记录：review risk audit 静态核查

本轮执行六十三建议的 review 重点检查，只做静态核查和生成物读取，不新增
coverage，不扩大 browser inventory，不执行任何
`ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. Artifact list 精确集合核查。

核查内容：

- browser `wasmArtifactNames` 与当前
  `wasm-port/build/wasm/sim-configs-inventory/*.tsv` 精确一致；
- browser `nativeArtifactTokens` 与当前 `wasm-port/build/native/**/*.tsv`
  精确一致；
- 当前 WASM generated artifact 数量仍为 54；
- 当前 native TSV artifact token 数量仍为 8。

结果：

```text
browser_wasm_artifact_exact_set=ok count=54
browser_native_artifact_exact_set=ok count=8
```

2. Completion count parity 绑定核查。

核查内容：

- browser `verifyBrowserGeneratedArtifactDocumentationCoverage()` 返回
  `wasmArtifactNames` / `nativeArtifactTokens`；
- browser `verifyBrowserBoundaryPhaseCompletionCountParity()` 的
  `wasm_inventory_artifact_documentation_coverage` 使用
  `generatedArtifactDocumentationCoverage.wasmArtifactNames.length`；
- `native_artifact_documentation_coverage` 使用
  `generatedArtifactDocumentationCoverage.nativeArtifactTokens.length`；
- Node gate 仍锁定这段 compound snippet，防止后续改成硬编码独立计数。

结果：

- count parity 仍绑定 generated arrays；
- 未发现独立硬编码计数替代 returned arrays 的 drift。

3. Blocked runtime 禁止提升核查。

读取当前 rollup：

```bash
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-host-readiness-rollup.tsv
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-opt-in-probe-dispatch-rollup.tsv
cat wasm-port/build/wasm/sim-configs-inventory/runtime-boundary-opt-in-probe-skip-evidence-rollup.tsv
```

结果：

- `family_count=3`
- `host_ready_family_count=0`
- `host_blocked_family_count=3`
- `missing_host_requirements=halcmd,halrun,linuxcnc,milltask`
- `ready_opt_in_command_count=0`
- `dispatch_allowed_count=0`
- `dispatch_blocked_count=3`
- `skip_count=3`
- `execution_enabled=0`
- `promotion_allowed=0`

源码静态检索也未发现 `node:child_process`、`spawn()`、`execFile()` 或 `exec()`
用于自动执行 opt-in probe。

4. Pure interpreter manifest guard 核查。

核查内容：

- Node `badInterpFixtures` 对账 `interpRegressionNgcFiles("bad")`；
- Node `goodArcFixtures` 对账 `interpRegressionNgcFiles("good")`；
- Node `m98m99RegressionFiles` 对账
  `interpRegressionNgcFilesRecursive("m98m99")`；
- Node `magicCommentsRegressionFiles` 对账
  `interpRegressionNgcFilesRecursive("magic_comments")`；
- Node `rotationRegressionFiles` 对账
  `interpRegressionNgcFilesRecursive("rotation")`；
- browser 对上述 representative list 保持 fixed-count 和 duplicate-free guard。

结果：

- pure interpreter coverage guard 仍只绑定 upstream `.ngc` manifest；
- 未发现对 HAL/task/remap/tool DB/user-M process 的新增 intake。

5. 下一步工作建议。

当前 review risk audit 通过。下一步建议：

1. 复跑一次最小 review gate；
2. 如果通过，停止继续修改代码，进入人工 review/提交准备；
3. `text5.txt` 仍为 untracked，提交前需要明确加入或有意排除；
4. 如果要拆分提交，优先按 Batch A/B/C/D 拆：
   - A：browser gate/schema；
   - B：Node inventory/generated artifact gate；
   - C：pure interpreter intake/coverage guard；
   - D：docs/text。

6. 验证完成。

执行：

```bash
git diff --check
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
wasm-port/tests/wasm/node/verify_interp_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
  - `ASSET-ONLY=65`
  - `L4-PYTHON-REMAP=53`
  - `L4-TOOL-DB=1`
  - `L4-USER-M-PROCESS=1`
  - `NON_MAIN_CLASS=10`
  - `UPSTREAM-DEMO=1`
- `interp_wasm_node_smoke=ok`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`

7. 下一步工作建议。

当前工作集已满足 review 前置条件。下一步建议停止继续修改代码，进入人工
review/提交准备：

1. 明确 `text5.txt` 是否加入版本控制；
2. 如果提交，按 Batch A/B/C/D 拆分或至少按该顺序 review；
3. 提交前最后复核 `git status --short`，确认没有遗漏 untracked 文件；
4. 除非 review 发现 gate drift，不再继续新增 coverage。

六十五、2026-06-12 继续执行记录：提交拆分准备

本轮执行“进入 review/提交准备”的建议，只做提交边界判断，不修改功能代码，
不新增 coverage，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 当前提交候选状态。

当前工作区包含 9 个文件：

```text
text4.txt
text5.txt
wasm-port/docs/compatibility-validation.md
wasm-port/docs/full-process-boundary-design.md
wasm-port/docs/sim-configs-coverage-matrix.md
wasm-port/tests/browser/interp_smoke.html
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/wasm/node/verify_interp_wasm.mjs
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs
```

`text5.txt` 已用 `git add --intent-to-add text5.txt` 纳入 `git status` 视图，
但当前没有实际 staged 内容，`git diff --cached --stat` 为空。

2. 拆分风险判断。

原计划的 Batch A/B/C/D 是 review 顺序，不是天然的文件级提交边界：

- Batch A 和 Batch C 都修改 `wasm-port/tests/browser/interp_smoke.html`；
- Batch A/B/D 的 docs 与 generated artifact documentation coverage gate 相互依赖；
- 若强行按 4 个提交拆，需要交互式 hunk staging，容易把 browser smoke 的
  runtime gate 和 pure interpreter guard 拆错；
- 其中部分中间提交可能无法单独通过 browser documentation coverage gate。

因此当前低风险提交策略是：

1. 做人工 review 时继续按 Batch A/B/C/D 顺序看；
2. 实际提交优先采用 2 个文件级提交，避免交互式 hunk 拆分风险；
3. 如必须拆成更细提交，再单独做 hunk-level staging，并在每个提交后复跑
   browser/inventory gate。

3. 推荐提交拆分。

推荐 Commit 1：runtime/browser/Node/interpreter gate code。

文件：

```text
wasm-port/tests/browser/interp_smoke.html
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/wasm/node/verify_interp_wasm.mjs
wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.mjs
```

建议 message：

```text
Expand WASM runtime boundary review gates
```

注意：这个提交如果不同时带 docs，browser documentation coverage 可能依赖后续
提交，因此更适合作为 review unit；若要求每个提交都独立通过 gate，应把相关
docs 一并放入 Commit 1。

推荐 Commit 2：documentation and execution log。

文件：

```text
text4.txt
text5.txt
wasm-port/docs/compatibility-validation.md
wasm-port/docs/full-process-boundary-design.md
wasm-port/docs/sim-configs-coverage-matrix.md
```

建议 message：

```text
Document blocked runtime gate review state
```

4. 更稳妥的一提交方案。

如果要求提交后立即可复跑全部 gate，当前最稳妥方案是单提交包含全部 9 个文件：

```text
Add blocked runtime gate review coverage
```

理由：

- browser generated artifact documentation coverage 与 docs 同步提交；
- Node/browser artifact surface parity 与 docs 同步提交；
- pure interpreter guard 与 browser smoke 同步提交；
- `text5.txt` 执行记录不会遗漏。

5. 下一步工作建议。

当前建议优先选择：

1. 若目标是“可 bisect、每个提交都通过 gate”：做单提交；
2. 若目标是“review 逻辑更清楚”：按上面的 2 个 review unit 审查，但提交时
   可以合并为单提交；
3. 不建议现在做 4 个 hunk-level 提交，除非明确愿意承担拆分和重复验证成本。

六十六、2026-06-12 继续执行记录：g10 pure interpreter fixture coverage guard

本轮在提交 `dcab5ea Add blocked runtime gate review coverage` 后继续推进。当前
host 仍缺 `halcmd`、`halrun`、`linuxcnc`、`milltask`，因此不执行任何
`ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 候选选择。

由于 blocked runtime 仍不能推进，本轮选择不需要 host runtime 的 pure
interpreter coverage guard。对账发现 `tests/interp/g10` 当前 5 个 `.ngc` 已在
Node/browser 中执行覆盖，但尚未像 `good`、`bad`、`m98m99`、`magic_comments`、
`rotation` 那样锁定 upstream manifest。

当前 upstream `tests/interp/g10/**/*.ngc`：

```text
g10-l1-l10/test.ngc
g10-l11/test.ngc
g10-l2-while-active/test.ngc
g10-l20-while-active/test.ngc
g10-with-g92/test.ngc
```

2. 更新。

更新：

- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

Node 新增：

- `g10RegressionFiles` 固定 5 个当前 upstream `.ngc`；
- Node smoke 要求该 manifest 与
  `interpRegressionNgcFilesRecursive("g10")` 完全一致。

Browser 新增：

- `g10RegressionFiles` 固定 `length=5` 且 duplicate-free；
- browser representative 不枚举目录，但会防止 g10 manifest 被静默删减或重复。

3. 下一步工作建议。

先复跑：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_interp_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

如果通过，做一个小提交，建议 message：

```text
Guard g10 interpreter fixture coverage
```

提交后再复跑同一组 gate。

六十七、2026-06-12 继续执行记录：INI subroutine staging manifest guard

本轮继续沿当前 host 可执行路线推进。提交后守门已通过：

```text
vendor sync up to date
standalone CNC semantics guard complete
```

当前 host 仍缺 `halcmd`、`halrun`、`linuxcnc`、`milltask`，因此不执行任何
`ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 候选选择。

选择已有 Node/browser 执行覆盖、且依赖 `[RS274NGC]SUBROUTINE_PATH` staging 的
两个 pure interpreter family：

- `tests/interp/sub-call-from-sub`
- `tests/interp/nested-sub-in-file-error`

这两个 family 不需要 HAL/task/tool DB/user-M process，只需要确认 staging helper
不会遗漏 INI subroutine 文件。

2. 更新。

更新：

- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

Node 新增：

- `subCallFromSubNgcFiles` 固定：
  - `test.ngc`
  - `subs/caller.ngc`
  - `subs/helper.ngc`
- `nestedSubInFileErrorNgcFiles` 固定：
  - `test.ngc`
  - `subs/sequential.ngc`
- Node 对上述列表分别与
  `interpRegressionNgcFilesRecursive("sub-call-from-sub")` 和
  `interpRegressionNgcFilesRecursive("nested-sub-in-file-error")` 精确对账；
- Node 还检查 `stageInterpIniContext()` 返回的 `plan.files` 中 `.ngc` 文件集合
  与上述列表一致。

Browser 新增：

- 对上述两个 fixed list 做 count 和 duplicate-free guard；
- 检查 browser `stageInterpIniContext()` 返回的 `plan.files` 中 `.ngc` 文件集合
  与 fixed list 一致；
- browser 仍不枚举目录。

3. 下一步工作建议。

先复跑：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_interp_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

如果通过，做小提交，建议 message：

```text
Guard INI subroutine staging manifests
```

六十八、2026-06-12 继续执行记录：native baseline post-guard verification

本轮按建议先做更完整的 native baseline 验证，确认最近 smoke/manifest guard 提交
没有影响 native 基线。不新增代码，不执行任何
`ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 执行命令。

```bash
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
wasm-port/tests/native/verify_nc_files.sh
wasm-port/tests/native/verify_sim_configs.sh
wasm-port/tests/native/verify_native_probes.sh
```

2. 结果。

- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `verify_sim_configs.sh` 保持：
  - `total=159`
  - `pass=151`
  - `expected_fail=8`
  - `unexpected_fail=0`
- `verify_native_probes.sh` 通过，并在聚合中保持：
  - sim-configs `159 / 151 / expected_fail 8 / unexpected_fail 0`
  - nc-files `107 / 101 / expected_fail 6 / unexpected_fail 0`
- `verify_nc_files.sh` 首次单跑出现一次 transient unexpected failure：
  - `comp-g1.ngc`
  - error：`Requested tool 4 not found in the tool table`
- 随后 `verify_native_probes.sh` 聚合内 nc-files 正常；
- 立即复跑 `verify_nc_files.sh` 后恢复正常：
  - `total=107`
  - `pass=101`
  - `expected_fail=6`
  - `unexpected_fail=0`
  - `comp-g1.ngc` summary row 为 `PASS`

3. 结论。

- 当前 native baseline 最终状态正常；
- `comp-g1.ngc` 单次 unexpected failure 未复现，按 transient harness/build-state
  drift 记录；
- 不修改 expected failure、不改 fixture、不改 vendored LinuxCNC；
- 当前 blocked runtime 仍保持 host blocked，不运行 opt-in probes。

4. 下一步工作建议。

继续当前 host 可执行路线时，优先做小范围 non-runtime guard：

1. 可继续做 `oword-unwind` 这类已有 INI-context family 的 staging manifest guard；
2. 或暂停新增 coverage，保持当前 native/Node/browser gate 绿色；
3. 若 `verify_nc_files.sh` 再次出现 `comp-g1.ngc` unexpected failure，再单独调查
   tool-table staging/build cache 顺序，而不是改 expected baseline。

六十九、2026-06-12 继续执行记录：oword-unwind staging manifest guard

本轮继续当前 host 可执行路线，选择已有 INI-context 覆盖的
`tests/interp/oword-unwind` 做小范围 staging manifest guard。不新增 runtime 面，
不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 覆盖对账。

`tests/interp/oword-unwind` 当前 upstream `.ngc` 文件：

```text
fail.ngc
test.ngc
```

该 family 已通过 `stageInterpIniContext("oword-unwind")` 在 Node/browser 中执行
覆盖，并依赖 `[RS274NGC]SUBROUTINE_PATH=.` staging `fail.ngc`。

2. 更新。

更新：

- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

Node 新增：

- `owordUnwindNgcFiles` 固定 `fail.ngc` 和 `test.ngc`；
- 与 `interpRegressionNgcFilesRecursive("oword-unwind")` 精确对账；
- 检查 `stageInterpIniContext()` 返回的 `plan.files` 中 `.ngc` 文件集合与该
  fixed list 一致。

Browser 新增：

- fixed-count 和 duplicate-free guard；
- 检查 browser `stageInterpIniContext()` 返回的 `plan.files` 中 `.ngc` 文件集合
  与 fixed list 一致；
- browser 仍不枚举目录。

3. 下一步工作建议。

先复跑：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_interp_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

如果通过，做小提交，建议 message：

```text
Guard oword-unwind staging manifest
```

七十、2026-06-12 继续执行记录：sequence/nested subroutine staging manifest guard

本轮继续当前 host 可执行路线。提交后轻量守门通过：

```text
vendor sync up to date
standalone CNC semantics guard complete
```

当前 host 仍缺 `halcmd`、`halrun`、`linuxcnc`、`milltask`，因此不执行任何
`ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 候选选择。

选择已有 Node/browser 执行覆盖、且依赖 `[RS274NGC]SUBROUTINE_PATH` staging 的
两个 INI-context family：

- `tests/interp/sequence-number`
- `tests/interp/nested-sub-error`

这两个 family 不需要 HAL/task/tool DB/user-M process，只需要确认 staging helper
不会遗漏 INI subroutine 文件。

2. 覆盖对账。

`tests/interp/sequence-number` 当前 upstream `.ngc` 文件：

```text
rm400.ngc
test.ngc
```

`tests/interp/nested-sub-error` 当前 upstream `.ngc` 文件：

```text
subs/nested.ngc
test.ngc
```

3. 更新。

更新：

- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

Node 新增：

- `sequenceNumberNgcFiles` 固定 `rm400.ngc` 和 `test.ngc`；
- `nestedSubErrorNgcFiles` 固定 `subs/nested.ngc` 和 `test.ngc`；
- 分别与 `interpRegressionNgcFilesRecursive(...)` 精确对账；
- 检查 `stageInterpIniContext()` 返回的 `plan.files` 中 `.ngc` 文件集合与
  fixed list 一致。

Browser 新增：

- fixed-count 和 duplicate-free guard；
- 检查 browser `stageInterpIniContext()` 返回的 `plan.files` 中 `.ngc` 文件集合
  与 fixed list 一致；
- browser 仍不枚举目录。

4. 下一步工作建议。

先复跑：

```bash
git diff --check
wasm-port/tests/wasm/node/verify_interp_wasm.sh
wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

如果通过，做小提交，建议 message：

```text
Guard sequence subroutine staging manifests
```

七十一、2026-06-13 继续执行记录：abort-hot-comment/m19 INI-context staging manifest guard

本轮继续按“小批已有 Node/browser 执行覆盖 + 不扩大测试面”的路线推进。当前
host 仍按 blocked runtime 规则处理，不执行任何 `ENABLE_*_RUNTIME_PROBE=1`
opt-in native probe。

1. 候选选择。

选择已有 Node/browser 执行覆盖、且通过 `stageInterpIniContext()` staging
INI-context 的两个 interpreter regression family：

- `tests/interp/abort-hot-comment`
- `tests/interp/m19`

这两个 family 都不需要 HAL/task/tool DB/Python remap/user-M process runtime。
本轮只固定 host/filesystem staging manifest 对账，不新增 CNC 语义。

2. 覆盖对账。

`tests/interp/abort-hot-comment` 当前 upstream `.ngc` 文件：

```text
test.ngc
```

`tests/interp/m19` 当前 upstream `.ngc` 文件：

```text
test.ngc
```

3. 更新。

更新：

- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

Node 新增：

- `abortHotCommentNgcFiles` 固定 `test.ngc`；
- `m19NgcFiles` 固定 `test.ngc`；
- 分别与 `interpRegressionNgcFilesRecursive(...)` 精确对账；
- 检查 `stageInterpIniContext()` 返回的 `plan.files` 中 `.ngc` 文件集合与
  fixed list 一致。

Browser 新增：

- fixed-count 和 duplicate-free guard；
- 检查 browser `stageInterpIniContext()` 返回的 `plan.files` 中 `.ngc` 文件集合
  与 fixed list 一致；
- browser 仍不枚举目录。

4. 已执行验证。

```bash
git diff --check
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `interp_wasm_node_smoke=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`

5. 下一步工作建议。

当前工作集已稳定。建议先做小提交，message：

```text
Guard abort and m19 staging manifests
```

提交后再继续下一批已有 INI-context fixture 的 staging manifest guard；仍保持每批
只选少量 pure interpreter/INI-context case，并按 native/Node/browser gate 顺序
复核，不推进 blocked runtime promotion。

七十二、2026-06-13 继续执行记录：iniparam staging manifest guard

本轮先按上一节建议提交稳定批次：

```text
4680639 Guard abort and m19 staging manifests
```

随后继续当前 host 可执行路线。当前 host 仍按 blocked runtime 规则处理，不执行
任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 候选选择。

选择已有 Node/browser 执行覆盖、且通过 `stageInterpIniContext()` staging
INI-context 的两个 interpreter regression family：

- `tests/interp/iniparam`
- `tests/interp/iniparam-failassign`

这两个 family 只验证 INI variable expansion/read-only assignment 相关解释器行为，
不需要 HAL/task/tool DB/Python remap/user-M process runtime。本轮只固定
host/filesystem staging manifest 对账，不新增 CNC 语义。

2. 覆盖对账。

`tests/interp/iniparam` 当前 upstream `.ngc` 文件：

```text
test.ngc
```

`tests/interp/iniparam-failassign` 当前 upstream `.ngc` 文件：

```text
test.ngc
```

3. 更新。

更新：

- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

Node 新增：

- `iniparamNgcFiles` 固定 `test.ngc`；
- `iniparamFailassignNgcFiles` 固定 `test.ngc`；
- 分别与 `interpRegressionNgcFilesRecursive(...)` 精确对账；
- 检查 `stageInterpIniContext()` 返回的 `plan.files` 中 `.ngc` 文件集合与
  fixed list 一致。

Browser 新增：

- fixed-count 和 duplicate-free guard；
- 检查 browser `stageInterpIniContext()` 返回的 `plan.files` 中 `.ngc` 文件集合
  与 fixed list 一致；
- browser 仍不枚举目录。

4. 已执行验证。

```bash
git diff --check
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `interp_wasm_node_smoke=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`

5. 下一步工作建议。

当前工作集已稳定。建议先做小提交，message：

```text
Guard iniparam staging manifests
```

提交后继续下一小批已有 interpreter fixture 的 staging manifest guard。优先选择
仍已具备 Node/browser coverage、且不依赖 HAL/task/tool DB/Python remap/user-M
process 的 case；不推进 blocked runtime promotion。

七十三、2026-06-13 继续执行记录：magic_comments staging path guard

本轮继续当前 host 可执行路线。当前 host 仍按 blocked runtime 规则处理，不执行
任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 候选选择。

选择已有 Node/browser 执行覆盖、且 fixture 范围很小的 interpreter regression
family：

- `tests/interp/magic_comments`

该 family 当前只覆盖 `param_format_printing/test.ngc`，不需要 INI/HAL/task/tool
DB/Python remap/user-M process runtime。本轮只固定 direct file staging path 与
fixed `.ngc` manifest 的一致性，不新增 CNC 语义。

2. 覆盖对账。

`tests/interp/magic_comments` 当前 upstream `.ngc` 文件：

```text
param_format_printing/test.ngc
```

3. 更新。

更新：

- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

Node 新增：

- 复用既有 `magicCommentsRegressionFiles` fixed list；
- 继续与 `interpRegressionNgcFilesRecursive("magic_comments")` 精确对账；
- 检查 `writeInterpRegressionFile(...)` 返回的 staged wasm path 与 fixed list
  推导出的 `/work/interp/magic_comments/...` path 一致。

Browser 新增：

- 复用既有 fixed-count 和 duplicate-free guard；
- 检查 browser `writeInterpRegressionFile(...)` 返回的 staged wasm path 去掉
  `/work/browser-interp/magic_comments/` 前缀后，与 fixed list 一致；
- browser 仍不枚举目录。

4. 已执行验证。

```bash
git diff --check
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `interp_wasm_node_smoke=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`

5. 下一步工作建议。

当前工作集已稳定。建议先做小提交，message：

```text
Guard magic comments staging path
```

提交后继续下一小批已有 interpreter fixture 的 staging manifest guard。下一步可以
开始拆 `m98m99`，但不要一次性扩全量；优先选择其中已经在 Node/browser 单独执行、
且每个子目录只需 direct file staging 的小组，按 2 到 3 个子 case 一批推进。

七十四、2026-06-13 继续执行记录：m98m99 initial direct-file staging path guard

本轮继续当前 host 可执行路线。当前 host 仍按 blocked runtime 规则处理，不执行
任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 候选选择。

开始拆 `tests/interp/m98m99`，但不一次性扩大 guard 范围。本轮只选择前三个
已经在 Node/browser 单独执行、且每个子目录只需 direct file staging 的 case：

- `m98m99/01-basics/test.ngc`
- `m98m99/02-variables/test.ngc`
- `m98m99/03-error-M98-no-P-word/test.ngc`

这些 case 不需要 INI/HAL/task/tool DB/Python remap/user-M process runtime。本轮
只固定 direct file staging path 与既有 fixed `.ngc` manifest 前三项的一致性，
不新增 CNC 语义。

2. 覆盖对账。

`tests/interp/m98m99` 当前 upstream `.ngc` manifest 已由既有 fixed list 覆盖，
本轮新增对账的前三项为：

```text
01-basics/test.ngc
02-variables/test.ngc
03-error-M98-no-P-word/test.ngc
```

3. 更新。

更新：

- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

Node 新增：

- 在创建前三个 `writeInterpRegressionFile(...)` staged path 后，检查实际 path
  与 `m98m99RegressionFiles.slice(0, 3)` 推导出的
  `/work/interp/m98m99/...` path 一致。

Browser 新增：

- 在创建前三个 browser staged path 后，去掉
  `/work/browser-interp/m98m99/` 前缀；
- 检查结果与 `m98m99RegressionFiles.slice(0, 3)` 一致；
- browser 仍不枚举目录。

4. 已执行验证。

```bash
git diff --check
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `interp_wasm_node_smoke=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`

5. 下一步工作建议。

当前工作集已稳定。建议先做小提交，message：

```text
Guard initial m98m99 staging paths
```

提交后继续拆 `m98m99`，下一小批建议选择：

```text
04-M98-but-no-sub/test.ngc
05-M98-loops/test.ngc
06-error-mixed-sub-styles/*.ngc
```

其中 `06-error-mixed-sub-styles` 有 4 个 `.ngc`，仍已在 Node/browser 分别执行；
本批只做 direct file staged path 与 fixed manifest 对账，不扩大到 blocked
runtime。

七十五、2026-06-13 继续执行记录：m98m99 mixed direct-file staging path guard

本轮继续拆 `tests/interp/m98m99`，仍保持小批量 direct file staging guard。当前
host 仍按 blocked runtime 规则处理，不执行任何 `ENABLE_*_RUNTIME_PROBE=1`
opt-in native probe。

1. 候选选择。

选择上一节建议的第二小批：

- `m98m99/04-M98-but-no-sub/test.ngc`
- `m98m99/05-M98-loops/test.ngc`
- `m98m99/06-error-mixed-sub-styles/O...-called-with-O..._call.ngc`
- `m98m99/06-error-mixed-sub-styles/O...-ended-with-O..._endsub.ngc`
- `m98m99/06-error-mixed-sub-styles/O...-sub-called-with-M98.ngc`
- `m98m99/06-error-mixed-sub-styles/O...-sub-ended-with-M99.ngc`

这些 case 已在 Node/browser 单独执行，不需要 INI/HAL/task/tool DB/Python
remap/user-M process runtime。本轮只固定 direct file staged path 与既有
fixed `.ngc` manifest 第 4 到第 9 项的一致性，不新增 CNC 语义。

2. 覆盖对账。

`tests/interp/m98m99` 当前 upstream `.ngc` manifest 已由既有 fixed list 覆盖，
本轮新增对账的 manifest slice 为：

```text
04-M98-but-no-sub/test.ngc
05-M98-loops/test.ngc
06-error-mixed-sub-styles/O...-called-with-O..._call.ngc
06-error-mixed-sub-styles/O...-ended-with-O..._endsub.ngc
06-error-mixed-sub-styles/O...-sub-called-with-M98.ngc
06-error-mixed-sub-styles/O...-sub-ended-with-M99.ngc
```

3. 更新。

更新：

- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

Node 新增：

- 收集 `06-error-mixed-sub-styles` 循环中 4 个
  `writeInterpRegressionFile(...)` 返回的 staged path；
- 与 `04`、`05` 的 staged path 一起检查，确保实际 path 与
  `m98m99RegressionFiles.slice(3, 9)` 推导出的 `/work/interp/m98m99/...`
  path 一致。

Browser 新增：

- 收集 browser `06-error-mixed-sub-styles` 循环中 4 个 staged path；
- 与 `04`、`05` 的 staged path 一起去掉 `/work/browser-interp/m98m99/`
  前缀；
- 检查结果与 `m98m99RegressionFiles.slice(3, 9)` 一致；
- browser 仍不枚举目录。

4. 已执行验证。

```bash
git diff --check
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `interp_wasm_node_smoke=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`

5. 下一步工作建议。

当前工作集已稳定。建议先做小提交，message：

```text
Guard mixed m98m99 staging paths
```

提交后继续拆 `m98m99`，下一小批建议选择：

```text
07-nested-subs/test.ngc
08-sub-follows-main/test.ngc
09-disable-fanuc-subs/test-fanuc.ngc
09-disable-fanuc-subs/test-rs274ngc.ngc
```

其中 `09-disable-fanuc-subs` 用 `writeInterpRegressionFiles(...)` staging 同一目录
下两个 `.ngc` 和两个 `.ini`。本批仍只做 staged path 与 fixed manifest 对账，
不扩大到 blocked runtime。

七十六、2026-06-13 继续执行记录：m98m99 nested/disable-fanuc staging path guard

本轮继续拆 `tests/interp/m98m99`，仍保持小批量 staging guard。当前 host 仍按
blocked runtime 规则处理，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native
probe。

1. 候选选择。

选择上一节建议的第三小批：

- `m98m99/07-nested-subs/test.ngc`
- `m98m99/08-sub-follows-main/test.ngc`
- `m98m99/09-disable-fanuc-subs/test-fanuc.ngc`
- `m98m99/09-disable-fanuc-subs/test-rs274ngc.ngc`

其中 `09-disable-fanuc-subs` 同时 staging：

```text
test-fanuc.ini
test-no-fanuc.ini
test-fanuc.ngc
test-rs274ngc.ngc
```

`.ini` 文件继续作为运行上下文 staging；本轮 `.ngc` manifest 对账只覆盖上述
两个 `.ngc`。这些 case 已在 Node/browser 单独执行，不需要 HAL/task/tool
DB/Python remap/user-M process runtime。

2. 覆盖对账。

`tests/interp/m98m99` 当前 upstream `.ngc` manifest 已由既有 fixed list 覆盖，
本轮新增对账的 manifest slice 为：

```text
07-nested-subs/test.ngc
08-sub-follows-main/test.ngc
09-disable-fanuc-subs/test-fanuc.ngc
09-disable-fanuc-subs/test-rs274ngc.ngc
```

3. 更新。

更新：

- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

Node 新增：

- 将 `09-disable-fanuc-subs` 的 staged file list 提成
  `m98m99DisableFanucSubsFiles`；
- 检查 `07`、`08` direct-file staged path，加上 `09` staged `.ngc` path，
  与 `m98m99RegressionFiles.slice(9, 13)` 推导出的
  `/work/interp/m98m99/...` path 一致。

Browser 新增：

- 同步提取 `m98m99DisableFanucSubsFiles`；
- 检查 `07`、`08` 和 `09` staged `.ngc` path 去掉
  `/work/browser-interp/m98m99/` 前缀后，与
  `m98m99RegressionFiles.slice(9, 13)` 一致；
- browser 仍不枚举目录。

4. 已执行验证。

```bash
git diff --check
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `interp_wasm_node_smoke=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`

5. 下一步工作建议。

当前工作集已稳定。建议先做小提交，message：

```text
Guard nested m98m99 staging paths
```

提交后继续拆 `m98m99`，下一小批建议选择：

```text
10-M98-P001/test.ngc
11-main-program-oword/*.ngc
```

`11-main-program-oword` 有 7 个 `.ngc`，已在 Node/browser 分组执行；下一批仍只
做 staged path 与 fixed manifest 对账，不扩大到 blocked runtime。

七十七、2026-06-13 继续执行记录：m98m99 main-program staging path guard

本轮继续拆 `tests/interp/m98m99`，仍保持小批量 staging guard。当前 host 仍按
blocked runtime 规则处理，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native
probe。

1. 候选选择。

选择上一节建议的第四小批：

- `m98m99/10-M98-P001/test.ngc`
- `m98m99/11-main-program-oword/test-illegal-end-main-with-eof.ngc`
- `m98m99/11-main-program-oword/test-illegal-no-m30-before-osub.ngc`
- `m98m99/11-main-program-oword/test-illegal-sub-after-percent.ngc`
- `m98m99/11-main-program-oword/test-legal-end-main-with-m02.ngc`
- `m98m99/11-main-program-oword/test-legal-end-main-with-m2.ngc`
- `m98m99/11-main-program-oword/test-legal-end-main-with-m30.ngc`
- `m98m99/11-main-program-oword/test-legal-end-main-with-percent.ngc`

这些 case 已在 Node/browser 单独执行，不需要 INI/HAL/task/tool DB/Python
remap/user-M process runtime。本轮只固定 staged path 与既有 fixed `.ngc`
manifest 第 14 到第 21 项的一致性，不新增 CNC 语义。

2. 覆盖对账。

`tests/interp/m98m99` 当前 upstream `.ngc` manifest 已由既有 fixed list 覆盖，
本轮新增对账的 manifest slice 为：

```text
10-M98-P001/test.ngc
11-main-program-oword/test-illegal-end-main-with-eof.ngc
11-main-program-oword/test-illegal-no-m30-before-osub.ngc
11-main-program-oword/test-illegal-sub-after-percent.ngc
11-main-program-oword/test-legal-end-main-with-m02.ngc
11-main-program-oword/test-legal-end-main-with-m2.ngc
11-main-program-oword/test-legal-end-main-with-m30.ngc
11-main-program-oword/test-legal-end-main-with-percent.ngc
```

3. 更新。

更新：

- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

Node 新增：

- 将 `11-main-program-oword` staged file list 提成
  `m98m99MainProgramOwordFiles`，并按 fixed manifest 顺序排列；
- 检查 `10-M98-P001` direct-file staged path，加上 `11` staged `.ngc` path，
  与 `m98m99RegressionFiles.slice(13, 21)` 推导出的
  `/work/interp/m98m99/...` path 一致。

Browser 新增：

- 同步提取 `m98m99MainProgramOwordFiles`；
- 检查 `10` 和 `11` staged `.ngc` path 去掉
  `/work/browser-interp/m98m99/` 前缀后，与
  `m98m99RegressionFiles.slice(13, 21)` 一致；
- browser 仍不枚举目录。

4. 已执行验证。

```bash
git diff --check
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `interp_wasm_node_smoke=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`

5. 下一步工作建议。

当前工作集已稳定。建议先做小提交，message：

```text
Guard main-program m98m99 staging paths
```

提交后继续拆 `m98m99`，下一小批建议选择：

```text
13-named-program/test-named.ngc
13-named-program/test-numbered.ngc
14-o-expression-call/test.ngc
```

这将覆盖 `m98m99` fixed manifest 的最后 3 个 `.ngc`。本批仍只做 staged path
与 fixed manifest 对账，不扩大到 blocked runtime。

七十八、2026-06-13 继续执行记录：m98m99 final direct-file staging path guard

本轮完成 `tests/interp/m98m99` fixed manifest 的最后一小批 staging guard。当前
host 仍按 blocked runtime 规则处理，不执行任何 `ENABLE_*_RUNTIME_PROBE=1`
opt-in native probe。

1. 候选选择。

选择上一节建议的最后 3 个 `.ngc`：

- `m98m99/13-named-program/test-named.ngc`
- `m98m99/13-named-program/test-numbered.ngc`
- `m98m99/14-o-expression-call/test.ngc`

这些 case 已在 Node/browser 单独执行，不需要 INI/HAL/task/tool DB/Python
remap/user-M process runtime。本轮只固定 staged path 与既有 fixed `.ngc`
manifest 最后 3 项的一致性，不新增 CNC 语义。

2. 覆盖对账。

`tests/interp/m98m99` 当前 upstream `.ngc` manifest 已由既有 fixed list 覆盖，
本轮新增对账的 manifest slice 为：

```text
13-named-program/test-named.ngc
13-named-program/test-numbered.ngc
14-o-expression-call/test.ngc
```

3. 更新。

更新：

- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

Node 新增：

- 在创建 `13` 两个 direct-file staged path 和 `14` direct-file staged path 后，
  检查实际 path 与 `m98m99RegressionFiles.slice(21, 24)` 推导出的
  `/work/interp/m98m99/...` path 一致。

Browser 新增：

- 同步检查 `13` 和 `14` staged `.ngc` path 去掉
  `/work/browser-interp/m98m99/` 前缀后，与
  `m98m99RegressionFiles.slice(21, 24)` 一致；
- browser 仍不枚举目录。

4. 已执行验证。

```bash
git diff --check
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `interp_wasm_node_smoke=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`

5. 下一步工作建议。

当前工作集已稳定。建议先做小提交，message：

```text
Guard final m98m99 staging paths
```

提交后 `m98m99` 的 24 条 fixed `.ngc` manifest 已完成分批 staged path guard。
下一步建议转向下一个已有 Node/browser 覆盖、且不依赖 blocked runtime 的 fixture
family，例如 `g10`。先从 `g10` 现有 fixed manifest 和 staging helper 对账开始，
仍保持每批只做 host/filesystem staging guard，不新增 CNC 语义。

七十九、2026-06-13 继续执行记录：g10 initial staging path guard

本轮转向 `tests/interp/g10`，仍保持小批量 staging guard。当前 host 仍按 blocked
runtime 规则处理，不执行任何 `ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 候选选择。

选择 `g10` fixed manifest 的前三个 `.ngc`：

- `g10/g10-l1-l10/test.ngc`
- `g10/g10-l11/test.ngc`
- `g10/g10-l2-while-active/test.ngc`

其中 `g10-l1-l10` 和 `g10-l11` 同时 staging `test.tbl`，并由
`writeG10RegressionFiles(...)` 生成 synthetic `test.ini` 作为运行上下文；这些
上下文文件不进入 `.ngc` manifest 对账。本轮只固定 staged `.ngc` path 与既有
fixed manifest 前三项的一致性，不新增 CNC 语义。

2. 覆盖对账。

`tests/interp/g10` 当前 upstream `.ngc` manifest 已由既有 fixed list 覆盖，本轮
新增对账的 manifest slice 为：

```text
g10-l1-l10/test.ngc
g10-l11/test.ngc
g10-l2-while-active/test.ngc
```

3. 更新。

更新：

- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

Node 新增：

- 检查前三个 `writeG10RegressionFiles(...)` 返回目录中的 `.ngc` staged path，
  与 `g10RegressionFiles.slice(0, 3)` 推导出的 `/work/interp/g10/...` path
  一致。

Browser 新增：

- 检查前三个 browser staged `.ngc` path 去掉 `/work/browser-interp/g10/`
  前缀后，与 `g10RegressionFiles.slice(0, 3)` 一致；
- browser 仍不枚举目录。

4. 已执行验证。

```bash
git diff --check
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `interp_wasm_node_smoke=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`

5. 下一步工作建议。

当前测试工作集已稳定。建议先做小提交，message：

```text
Guard initial g10 staging paths
```

提交后继续 `g10` 最后一小批：

```text
g10-l20-while-active/test.ngc
g10-with-g92/test.ngc
```

`g10-with-g92` 同时 staging `test.tbl` 并生成 synthetic `test.ini`；下一批仍只做
staged `.ngc` path 与 fixed manifest 对账，不扩大到 blocked runtime。

八十、2026-06-13 继续执行记录：g10 final staging path guard

本轮完成 `tests/interp/g10` fixed manifest 的最后一小批 staging guard，并清理
上一节重复记录。当前 host 仍按 blocked runtime 规则处理，不执行任何
`ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 候选选择。

选择 `g10` fixed manifest 的最后两项：

- `g10/g10-l20-while-active/test.ngc`
- `g10/g10-with-g92/test.ngc`

其中 `g10-with-g92` 同时 staging `test.tbl`，并由
`writeG10RegressionFiles(...)` 生成 synthetic `test.ini` 作为运行上下文；这些
上下文文件不进入 `.ngc` manifest 对账。本轮只固定 staged `.ngc` path 与既有
fixed manifest 最后两项的一致性，不新增 CNC 语义。

2. 覆盖对账。

`tests/interp/g10` 当前 upstream `.ngc` manifest 已由既有 fixed list 覆盖，本轮
新增对账的 manifest slice 为：

```text
g10-l20-while-active/test.ngc
g10-with-g92/test.ngc
```

3. 更新。

更新：

- `text5.txt`
- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

Node 新增：

- 检查最后两个 `writeG10RegressionFiles(...)` 返回目录中的 `.ngc` staged path，
  与 `g10RegressionFiles.slice(3, 5)` 推导出的 `/work/interp/g10/...` path
  一致。

Browser 新增：

- 检查最后两个 browser staged `.ngc` path 去掉 `/work/browser-interp/g10/`
  前缀后，与 `g10RegressionFiles.slice(3, 5)` 一致；
- browser 仍不枚举目录。

4. 已执行验证。

```bash
git diff --check
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `interp_wasm_node_smoke=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`

5. 下一步工作建议。

当前工作集已稳定。建议先做小提交，message：

```text
Guard final g10 staging paths
```

提交后 `g10` 的 5 项 fixed `.ngc` manifest 已完成分批 staged path 对账。下一步
建议继续选择已有 Node/browser coverage、且不依赖 blocked runtime 的 small
fixture family；优先检查 direct-file 或 staging helper 已成型的 case，仍只做
host/filesystem staging guard，不新增 CNC 语义。

八十一、2026-06-13 继续执行记录：g52/g92 staging path guard

本轮继续选择已有 Node/browser coverage、且不依赖 blocked runtime 的 small
fixture family。当前 host 仍按 blocked runtime 规则处理，不执行任何
`ENABLE_*_RUNTIME_PROBE=1` opt-in native probe。

1. 候选选择。

选择 `tests/interp/g52` 当前唯一 vendored `.ngc`：

- `g52/g52-g92-interaction/g52-g92-interaction.ngc`

该 case 已在 Node/browser 单独执行，不需要 INI/HAL/task/tool DB/Python
remap/user-M process runtime。本轮只固定 fixed manifest 与 staged path 一致性，
不新增 CNC 语义。

2. 覆盖对账。

`tests/interp/g52` 当前 upstream `.ngc` manifest：

```text
g52-g92-interaction/g52-g92-interaction.ngc
```

3. 更新。

更新：

- `wasm-port/tests/wasm/node/verify_interp_wasm.mjs`
- `wasm-port/tests/browser/interp_smoke.html`

Node 新增：

- 新增 `g52RegressionFiles` fixed list；
- 与 `interpRegressionNgcFilesRecursive("g52")` 精确对账；
- 检查 `writeInterpRegressionFile(...)` 返回的 staged path 与
  `/work/interp/g52/...` fixed manifest path 一致。

Browser 新增：

- 新增 fixed-count 和 duplicate-free guard；
- 检查 browser staged `.ngc` path 去掉 `/work/browser-interp/g52/` 前缀后，
  与 fixed manifest 一致；
- browser 仍不枚举目录。

4. 已执行验证。

```bash
git diff --check
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```

结果：

- `git diff --check` clean。
- `vendor sync up to date`
- `standalone CNC semantics guard complete`
- `interp_wasm_node_smoke=ok`
- Node inventory 保持：
  - `executed=28`
  - `passed=28`
  - `skipped=131`
  - `unexpected_fail=0`
- `browser_interp_smoke=ok`
- `host_wasm_opfs_browser_smokes=ok`

5. 下一步工作建议。

当前测试工作集已稳定。建议先做小提交，message：

```text
Guard g52 staging path
```

提交后继续选择已有 Node/browser coverage、且不依赖 blocked runtime 的 direct-file
fixture。下一步可优先检查早期单文件 cases，例如 `do-while-break`、`exists`、
`return-value` 或 `subs-follow-main`，按 2 到 3 个 case 一批补 fixed manifest 与
staged path guard。
