Files
cnc_wams/text6.txt

1165 lines
44 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
项目整体完成情况与后续执行计划
生成时间2026-06-13 CST
本文件接替 `text5.txt`。后续工作按 `text6.txt` 执行;除非明确要求审计旧记录,
不要再回到 `text1/text2/text3/text4/text5` 扩展进度。`text5.txt` 作为历史归档
保留。
一、text5 重复记录问题处理结果
1. 问题原因。
`text5.txt` 后段出现过重复进度记录,主要发生在快速连续执行时:
- 工作已经在提交中完成,但继续轮次又根据旧上下文重复追加同名记录;
- 未先核对 `git status --short`、`git log -n`、`tail text5.txt` 和标题唯一性;
- 在记录 `m98m99`、`g10`、`g52`、early direct-file guard 时,曾出现同编号或同主题
重复段。
2. 已完成清理。
当前 `text5.txt` 已完成重复记录清理:
- 当前记录范围到 `八十三、2026-06-13 继续执行记录more direct-file staging path guard`
- 标题唯一性核查命令:
```bash
awk '/^[一二三四五六七八九十百]+、/ {print}' text5.txt | sort | uniq -d
```
当前输出为空,表示没有重复标题。
3. 后续防重规则。
从 `text6.txt` 开始,每轮执行必须先做下面四步:
```bash
git status --short
git log -5 --oneline
tail -n 120 text6.txt
awk '/^[一二三四五六七八九十百]+、/ {print}' text6.txt | sort | uniq -d
```
执行规则:
- 如果 `git status --short` 是 clean且最新提交已经包含当前建议工作不要重复追加记录。
- 每轮只追加一个新的中文编号记录;提交前再次检查标题唯一性。
- `text6.txt` 只记录新的后续进度,不复制 `text5.txt` 的长历史。
- 每批完成后,如果要写记录,先写 `text6.txt`,再提交该批代码和记录。
- 如果发现重复记录,先做 dedupe 清理并提交,再继续新功能或新 guard。
二、当前项目纪律
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 都按顺序通过;
- browser 不能依赖目录枚举。
三、当前完成情况
1. WASM port 基础架构已稳定。
`wasm-port` 已按独立移植工作区组织,包含 vendor、runtime/core、runtime/sdk、
runtime/opfs、runtime/ui、native/wasm/browser tests、docs 和 tools。
2. 关键基线保持稳定。
- `linuxcnc/nc_files` native Layer 1
- `total 107`
- `pass 101`
- `expected_fail 6`
- `unexpected_fail 0`
- `linuxcnc/configs/sim` native Layer 2
- `total 159`
- `pass 151`
- `expected_fail 8`
- `unexpected_fail 0`
- Node sim-config inventory
- `executed=28`
- `passed=28`
- `skipped=131`
- `unexpected_fail=0`
3. blocked runtime family 仍未 promotion。
仍 blocked不允许 promotion
- `L4-USER-M-PROCESS`
- `L4-TOOL-DB`
- `L4-PYTHON-REMAP`
当前 host 仍按缺少 LinuxCNC host runtime 处理,不执行任何:
```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
```
4. 近期已完成的 staged path guard。
已完成并提交的近期批次包括:
- `m98m99` 24 项 fixed `.ngc` manifest 的 staged path guard
- `g10` 5 项 fixed `.ngc` manifest 的 staged path guard
- `g52/g92` direct-file staged path guard
- early direct-file staged path guard
- `do-while-break`
- `exists`
- `return-value`
- `subs-follow-main`
- `fractional-linenumbers`
- `crazy-paths`
- INI-context/staging helper guard
- `oword-unwind`
- `sequence-number`
- `nested-sub-error`
- `abort-hot-comment`
- `m19`
- `iniparam`
- `iniparam-failassign`
5. 当前最新提交。
当前最近提交包括:
```text
6899195 Guard more direct-file staging paths
4e9ca73 Deduplicate early fixture progress note
675ee5f Guard early direct-file staging paths
17df47d Guard g52 staging path
bf17469 Guard final g10 staging paths
```
四、当前必须保持通过的验证入口
每批后续改动至少运行:
```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
```
涉及 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
```
五、下一步执行计划
1. 当前第一候选批次。
继续 early direct-file fixture staged path guard小批量选择
```text
oword-bug315/test.ngc
oword-bug315-p2/test.ngc
namedparam-bug424/test.ngc
```
执行目标:
- Node 侧增加 fixed `.ngc` manifest
- Node 侧与 `interpRegressionNgcFilesRecursive(...)` 精确对账;
- Node 侧检查 staged path 与 fixed manifest 一致;
- browser 侧增加 fixed-count 和 duplicate-free guard
- browser 侧检查 staged path 去掉 `/work/browser-interp/.../` 前缀后与 fixed manifest
一致;
- browser 仍不枚举目录。
2. 第一候选批次验证。
执行:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
如果通过,提交建议:
```text
Guard oword/namedparam staging paths
```
3. 后续候选原则。
继续只选:
- 已有 Node/browser coverage
- 不依赖 HAL/task/tool DB/Python remap/user-M process
- direct-file 或 staging helper 已成型;
- 每批 2 到 3 个 case
- 只做 host/filesystem staging guard不新增 CNC 语义。
暂不推进:
- blocked runtime promotion
- browser full 159 sim-config inventory
- full-process/HAL/UI/Python/tool DB 执行;
- upstream intake 大批量扩面。
六、下一次开始执行时的第一条命令
从这里继续:
```bash
git status --short
git log -5 --oneline
tail -n 120 text6.txt
awk '/^[一二三四五六七八九十百]+、/ {print}' text6.txt | sort | uniq -d
```
如果输出显示工作区 clean 且 `text6.txt` 无重复标题,再执行第五部分第一候选批次。
七、2026-06-13 继续执行记录oword/namedparam staging path guard
本批按第五部分第一候选批次完成 3 个 early direct-file fixture 的 staged path guard
- `oword-bug315/test.ngc`
- `oword-bug315-p2/test.ngc`
- `namedparam-bug424/test.ngc`
完成内容:
- Node 侧为上述 3 个 fixture 增加 fixed `.ngc` manifest
- Node 侧用 `interpRegressionNgcFilesRecursive(...)` 与 upstream vendored fixture
精确对账;
- Node 侧检查 staged path 与 fixed manifest 一致;
- browser 侧增加 fixed-count 与 duplicate-free guard
- browser 侧检查 staged path 去掉 `/work/browser-interp/.../` 前缀后与 fixed
manifest 一致;
- browser 仍不依赖目录枚举。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
继续按“小批量 direct-file/staging helper guard”原则推进。优先从已有 Node/browser
coverage、且不依赖 HAL/task/tool DB/Python remap/user-M process 的 interp fixture 中,
再选择 2 到 3 个只需要 host/filesystem staging 对账的 case。不要推进 blocked runtime
promotion也不要扩展 browser full 159 sim-config inventory。
八、2026-06-13 继续执行记录flowsnake/inside-corners staging path guard
本批继续按“小批量 direct-file fixture staged path guard”推进完成 3 个已有
Node/browser coverage 的 interp fixture
- `flowsnake/flowsnake.ngc`
- `inside-corners/test.ngc`
- `inverse-time-with-comp/inverse.ngc`
完成内容:
- Node 侧为上述 3 个 fixture 增加 fixed `.ngc` manifest
- Node 侧用 `interpRegressionNgcFilesRecursive(...)` 与 upstream vendored fixture
精确对账;
- Node 侧检查 staged path 与 fixed manifest 一致;
- browser 侧增加 fixed-count 与 duplicate-free guard
- browser 侧检查 staged path 去掉 `/work/browser-interp/.../` 前缀后与 fixed
manifest 一致;
- browser 仍不依赖目录枚举。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
继续沿 interp direct-file coverage 向后补 guard但优先选择短小、单文件、
无 INI/工具表依赖的 case。下一批可考虑 `g33.1/g33.1.ngc`、`g6164/test.ngc`
再搭配一个已明确 expected-error 或 direct-file loop case如果 case 属于目录集合
或带参数化循环,先检查是否已有固定 manifest 风格,避免扩大执行面。
九、2026-06-13 继续执行记录g33/g6164 staging path guard
本批继续按“小批量 direct-file fixture staged path guard”推进完成 2 个短小、
单文件、无 INI/工具表依赖的 interp fixture
- `g33.1/g33.1.ngc`
- `g6164/test.ngc`
完成内容:
- Node 侧为上述 2 个 fixture 增加 fixed `.ngc` manifest
- Node 侧用 `interpRegressionNgcFilesRecursive(...)` 与 upstream vendored fixture
精确对账;
- Node 侧检查 staged path 与 fixed manifest 一致;
- browser 侧增加 fixed-count 与 duplicate-free guard
- browser 侧检查 staged path 去掉 `/work/browser-interp/.../` 前缀后与 fixed
manifest 一致;
- browser 仍不依赖目录枚举。
本批没有纳入 `g72` loop 组;该组在测试代码中是参数化循环,后续应按整组或
明确固定 manifest 风格处理,避免为了凑数量拆出不自然的单项 guard。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
继续推进时优先处理已经有固定 manifest 或自然成组的 direct-file fixtures。候选
`good` arc 6 项可按已有 fixed fixture list 补 staged path 对账;或者 `g72` 两项、
`g71` 四项按 loop manifest 成组补 guard。继续避免 blocked runtime promotion、
browser full inventory 扩面,以及任何 JS CNC 语义实现。
十、2026-06-13 继续执行记录good arc staging path guard
本批按“自然成组 direct-file fixture staged path guard”推进完成 `good` arc 目录
6 个已有 Node/browser coverage 的 `.ngc` fixture
- `good/good-arc.big.imperial.center-format.ngc`
- `good/good-arc.big.metric.center-format.ngc`
- `good/good-arc.medium.imperial.center-format.ngc`
- `good/good-arc.medium.metric.center-format.ngc`
- `good/good-arc.small.imperial.center-format.ngc`
- `good/good-arc.small.metric.center-format.ngc`
完成内容:
- Node 侧复用既有 `goodArcFixtures` fixed manifest
- Node 侧继续用 `interpRegressionNgcFiles("good")` 与 upstream vendored fixture
精确对账;
- Node 侧收集实际 staged path并检查与 fixed manifest 一致;
- browser 侧复用既有 fixed-count 与 duplicate-free guard
- browser 侧收集实际 staged path去掉 `/work/browser-interp/good/` 前缀后与
fixed manifest 一致;
- browser 仍不依赖目录枚举。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
继续处理自然成组 direct-file fixtures。优先候选`g72` 两项或 `g71` 四项按
loop manifest 成组补 staged path guard如果选择 `bad` expected-error 目录,
需要按现有 `badInterpFixtures` fixed list 做 staged path 对账,不改变 expected-error
语义。继续避免 blocked runtime promotion、browser full inventory 扩面和 JS CNC
语义实现。
十一、2026-06-13 继续执行记录g72 staging path guard
本批按“自然成组 direct-file fixture staged path guard”推进完成 `g72` loop 组
2 个已有 Node/browser coverage 的 `.ngc` fixture
- `g72-facing/g72-iterations-present.ngc`
- `g72-missing-iteration/g72-iterations-missing.ngc`
完成内容:
- Node 侧将 `g72` inline loop 提成 `g72Fixtures` fixed manifest
- Node 侧用 `interpRegressionNgcFilesRecursive(...)` 分别与 upstream vendored
fixture 目录精确对账;
- Node 侧检查 staged path 与 fixed manifest 一致;
- browser 侧增加 fixed-count 与 duplicate-free guard
- browser 侧检查 staged path 去掉 `/work/browser-interp/` 前缀后与
`dir/file` fixed manifest 一致;
- browser 仍不依赖目录枚举。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
继续处理自然成组 direct-file fixtures。优先候选`g71` 四项按现有 loop manifest
补 staged path guard或者处理 `bad` expected-error 目录,只做 fixed list 与
staged path 对账,不改变 expected-error 语义。继续避免 blocked runtime promotion、
browser full inventory 扩面和 JS CNC 语义实现。
十二、2026-06-13 继续执行记录g71 staging path guard
本批按“自然成组 direct-file fixture staged path guard”推进完成 `g71` loop 组
4 个已有 Node/browser coverage 的 `.ngc` fixture
- `g71-endless-loop/g71-endless-loop.ngc`
- `g71-endless-loop2/g71-endless-loop2.ngc`
- `g71-endless-loop_2/g71-endless-loop_2.ngc`
- `g71-with-g70/g71-with-g70.ngc`
完成内容:
- Node 侧将 `g71` inline loop 提成 `g71Fixtures` fixed manifest
- Node 侧用 `interpRegressionNgcFilesRecursive(...)` 分别与 upstream vendored
fixture 目录精确对账;
- Node 侧检查 staged path 与 fixed manifest 一致;
- browser 侧增加 fixed-count 与 duplicate-free guard
- browser 侧检查 staged path 去掉 `/work/browser-interp/` 前缀后与
`dir/file` fixed manifest 一致;
- browser 仍不依赖目录枚举。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
继续处理已有 fixed manifest 的 direct-file fixtures。优先候选`bad` expected-error
目录,按现有 `badInterpFixtures` fixed list 补 staged path 对账;只校验文件清单
和 staging 路径,不改变 expected-error 语义。也可以继续找短小单文件 case但仍需
保持每批 2 到 3 个或自然成组,不推进 blocked runtime promotion。
十三、2026-06-13 继续执行记录bad expected-error staging path guard
本批按“已有 fixed manifest 的 direct-file fixture staged path guard”推进完成
`bad` expected-error 目录 21 个已有 Node/browser coverage 的 `.ngc` fixture。
完成内容:
- Node 侧复用既有 `badInterpFixtures` fixed manifest
- Node 侧继续用 `interpRegressionNgcFiles("bad")` 与 upstream vendored fixture
精确对账;
- Node 侧收集实际 staged path并检查与 fixed manifest 一致;
- browser 侧复用既有 fixed-count 与 duplicate-free guard
- browser 侧收集实际 staged path去掉 `/work/browser-interp/bad/` 前缀后与
fixed manifest 一致;
- 仅校验文件清单与 staging 路径,不改变 expected-error 语义;
- browser 仍不依赖目录枚举。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
继续找已有 Node/browser coverage 且可自然成组的 fixture。优先候选`g76` 这种
需要工具表/INI 的目录可按 `writeInterpRegressionFiles(...)` 现有 file list 做 staged
path 对账;或者继续挑选短小单文件 direct-file case。仍不要推进 blocked runtime
promotion、browser full inventory 扩面或任何 JS CNC 语义实现。
十四、2026-06-13 继续执行记录g76 file-list staging path guard
本批按“已有明确 file list 的 fixture staged path guard”推进完成 `g76` 目录
现有 Node/browser coverage 使用的 2 个 staged 文件:
- `g76/g76only.ngc`
- `g76/test.tbl`
完成内容:
- Node 侧新增 `g76Files` fixed manifest
- Node 侧用 `interpRegressionNgcFilesRecursive("g76")` 与 upstream vendored `.ngc`
fixture 精确对账;
- Node 侧检查 `writeInterpRegressionFiles(...)` 目标 staged path 与 fixed manifest
一致;
- browser 侧增加 fixed-count 与 duplicate-free guard
- browser 侧检查 staged path 去掉 `/work/browser-interp/g76/` 前缀后与 fixed
manifest 一致;
- 仅校验文件清单与 staging 路径,不改变工具表/INI 语义;
- browser 仍不依赖目录枚举。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
继续处理已有 Node/browser coverage 且 file list 明确的 fixture。优先候选
`cam-nisley` 同样使用 `writeInterpRegressionFiles(...)` staging `cam.ngc` 与
`test.tbl`,可按本批模式补 file-list guard或者继续挑选短小单文件 direct-file
case。仍不要推进 blocked runtime promotion、browser full inventory 扩面或 JS CNC
语义实现。
十五、2026-06-13 继续执行记录cam-nisley file-list staging path guard
本批按“已有明确 file list 的 fixture staged path guard”推进完成
`cam-nisley` 目录现有 Node/browser coverage 使用的 2 个 staged 文件:
- `cam-nisley/cam.ngc`
- `cam-nisley/test.tbl`
完成内容:
- Node 侧新增 `camNisleyFiles` fixed manifest
- Node 侧用 `interpRegressionNgcFilesRecursive("cam-nisley")` 与 upstream vendored
`.ngc` fixture 精确对账;
- Node 侧检查 `writeInterpRegressionFiles(...)` 目标 staged path 与 fixed manifest
一致;
- browser 侧增加 fixed-count 与 duplicate-free guard
- browser 侧检查 staged path 去掉 `/work/browser-interp/cam-nisley/` 前缀后与
fixed manifest 一致;
- 仅校验文件清单与 staging 路径,不改变工具表/INI 语义;
- browser 仍不依赖目录枚举。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
继续选择已有 Node/browser coverage 且清单稳定的 fixture。优先候选`rotation`
组三项已有 fixed manifest可补 staged path 对账;或者继续挑选短小单文件
direct-file case。仍不要推进 blocked runtime promotion、browser full inventory
扩面或 JS CNC 语义实现。
十六、2026-06-13 继续执行记录rotation staging path guard
本批按“已有 fixed manifest 的 direct-file fixture staged path guard”推进完成
`rotation` 组现有 Node/browser coverage 使用的 3 个 staged `.ngc` 文件:
- `rotation/abs-pts/test.ngc`
- `rotation/g28/g28.ngc`
- `rotation/g53/g53.ngc`
完成内容:
- Node 侧复用既有 `rotationRegressionFiles` fixed manifest
- Node 侧继续用 `interpRegressionNgcFilesRecursive("rotation")` 与 upstream
vendored `.ngc` fixture 精确对账;
- Node 侧检查实际 staged path 与 fixed manifest 一致;
- browser 侧复用既有 fixed-count 与 duplicate-free guard
- browser 侧检查 staged path 去掉 `/work/browser-interp/rotation/` 前缀后与
fixed manifest 一致;
- 不扩大 staging 到 `rotation/abs-pts/test.tbl`,保持现有 direct-file coverage
- browser 仍不依赖目录枚举。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
继续选择已有 Node/browser coverage 且清单稳定的 fixture。优先候选`g10`、`g52`
之外的 remaining direct-file 单项,或已经有 fixed list 的分组;若涉及工具表/INI
只按现有 `writeInterpRegressionFiles(...)` 或 staging helper 输出做路径 guard。
继续避免 blocked runtime promotion、browser full inventory 扩面和 JS CNC 语义实现。
十七、2026-06-13 继续执行记录ccomp staging path guard
本批按“已有 staging helper 的 fixture staged path guard”推进完成现有
Node/browser ccomp coverage 使用的 4 个目录:
- `ccomp/lathe-comp`
- `ccomp/mill-g90g91g92`
- `ccomp/mill-line-arc-entry`
- `ccomp/mill-zchanges`
完成内容:
- Node 侧新增 `ccompRegressionFiles` fixed manifest`test.ngc`、`test.tbl`
- Node 侧新增 `assertCcompRegressionStaging(...)`,与 upstream vendored
`.ngc/.tbl` fixture 精确对账;
- Node 侧检查 `writeCcompRegressionFiles(...)` 目标 staged path 与 fixed manifest
一致;
- browser 侧新增同名 fixed manifest 与 staged path guard
- browser 侧检查 staged path 去掉 `/work/browser-ccomp/<name>/` 前缀后与 fixed
manifest 一致;
- 仅校验文件清单与 staging 路径,不改变 cutter-comp、工具表或 INI 语义;
- browser 仍不依赖目录枚举。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
继续选择已有 Node/browser coverage 且 staging helper/file list 明确的 fixture。
优先候选:继续扫描剩余 `write*RegressionFiles(...)` helper 输出,或挑选短小单文件
direct-file case。仍不要推进 blocked runtime promotion、browser full inventory
扩面或 JS CNC 语义实现。
十八、2026-06-13 继续执行记录initial remap file-list staging path guard
本批按“已有明确 file list 的 remap fixture staged path guard”推进完成现有
Node/browser remap coverage 的 6 个小目录:
- `remap/duplicate-o-word`
- `remap/fail/args.0`
- `remap/fail/args.1`
- `remap/fail/args.2`
- `remap/fail/body-ngc`
- `remap/m30-interaction`
完成内容:
- Node 侧新增 `assertRemapRegressionStaging(...)`
- Node 侧将上述 6 个 inline remap file list 提成 fixed manifest
- Node 侧用 upstream vendored `.ini/.ngc` 文件清单与 fixed manifest 精确对账;
- Node 侧检查 `writeRemapRegressionFiles(...)` 目标 staged path 与 fixed manifest
一致;
- browser 侧新增同名 staged path guard
- browser 侧检查 staged path 去掉 `/work/browser-remap/<name>/` 前缀后与 fixed
manifest 一致;
- 仅校验文件清单与 staging 路径,不改变 remap 执行语义;
- browser 仍不依赖目录枚举。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
继续按小批量处理剩余 `writeRemapRegressionFiles(...)` file list例如
`nested-remaps-oword`、`posargs.0`、`sequencing`、`remap-io`。注意 `remap-io`
会额外生成 `simpockets.tbl`,如处理该项应明确区分 vendored file list 与运行时
生成文件。继续避免 blocked runtime promotion、browser full inventory 扩面和
JS CNC 语义实现。
十九、2026-06-13 继续执行记录posargs/sequencing remap staging path guard
本批继续按“小批量 remap file-list staged path guard”推进完成现有 Node/browser
remap coverage 的 2 个目录:
- `remap/posargs.0`
- `remap/sequencing`
完成内容:
- Node 侧将 `posargs.0` 与 `sequencing` 的 inline remap file list 提成 fixed
manifest
- Node 侧复用 `assertRemapRegressionStaging(...)`,用 upstream vendored `.ini/.ngc`
文件清单与 fixed manifest 精确对账;
- Node 侧检查 `writeRemapRegressionFiles(...)` 目标 staged path 与 fixed manifest
一致;
- browser 侧复用同名 staged path guard
- browser 侧检查 staged path 去掉 `/work/browser-remap/<name>/` 前缀后与 fixed
manifest 一致;
- 未处理 `nested-remaps-oword`,因为该目录含当前 smoke 未 staging 的
`testsub.ngc`,应单独判断是否扩展 file list
- 仅校验文件清单与 staging 路径,不改变 remap 执行语义;
- browser 仍不依赖目录枚举。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
继续处理剩余 remap file-list guard。优先候选`remap-io`,但需要明确把 vendored
file list 与运行时生成的 `simpockets.tbl` 分开校验;`nested-remaps-oword` 也可处理,
但需先决定是否把未 staging 的 `testsub.ngc` 纳入 fixed manifest。继续避免 blocked
runtime promotion、browser full inventory 扩面和 JS CNC 语义实现。
二十、2026-06-13 继续执行记录remap-io staging path guard
本批继续按“remap file-list staged path guard”推进完成现有 Node/browser
`remap-io` coverage
- vendored staged files
- `remap-io/test-ngc.ini`
- `remap-io/io_input_m66.ngc`
- `remap-io/io_output_m62.ngc`
- `remap-io/io_output_m63.ngc`
- `remap-io/io_output_m64.ngc`
- `remap-io/io_output_m65.ngc`
- `remap-io/io_output_m67.ngc`
- `remap-io/io_output_m68.ngc`
- runtime generated file
- `remap-io/simpockets.tbl`
完成内容:
- Node 侧将 `remap-io` inline remap file list 提成 `remapIoFiles` fixed manifest
- Node 侧复用 `assertRemapRegressionStaging(...)` 校验 vendored `.ini/.ngc` 文件清单
与 staged path
- Node 侧单独检查运行时生成的 `simpockets.tbl` staged path
- browser 侧复用同名 staged path guard
- browser 侧同样单独检查运行时生成的 `simpockets.tbl` staged path
- 明确区分 vendored file list 与运行时生成文件,不改变 remap-io 执行语义;
- browser 仍不依赖目录枚举。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
`nested-remaps-oword` 是剩余 remap 候选,但目录包含当前 smoke 未 staging 的
`testsub.ngc`,下一步应先判断是否应扩展 file list若不扩展则需要专门记录
“vendored extra fixture intentionally unstaged”的 guard。继续避免 blocked runtime
promotion、browser full inventory 扩面和 JS CNC 语义实现。
二十一、2026-06-13 继续执行记录nested remaps oword unstaged fixture guard
本批继续按“remap file-list staged path guard”推进完成剩余
`nested-remaps-oword` coverage 的 staged/unstaged 文件清单对账。
完成内容:
- Node 侧将 `nested-remaps-oword` inline remap file list 提成
`nestedRemapsOwordFiles` fixed manifest
- Node 侧新增 `expectedUnstagedFiles` 参数,用 upstream vendored `.ini/.ngc`
文件清单与 staged manifest 加 expected-unstaged manifest 精确对账;
- Node 侧显式记录 `testsub.ngc` 为 vendored extra fixture、当前 smoke 不 staging
- Node 侧检查 expected-unstaged 文件不得与 staged manifest 重叠;
- browser 侧新增同名 fixed manifest 与 expected-unstaged overlap guard
- browser 侧继续只校验 fixed staged path不依赖目录枚举
- 仅校验文件清单与 staging 路径,不改变 remap 执行语义。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
remap file-list guard 的当前显性剩余项已基本收束。下一批建议回到
`write*RegressionFiles(...)` helper 扫描,优先选择已有 Node/browser coverage、
文件清单固定且不涉及 HAL/task/tool DB/Python remap/user-M process 的 2 到 3 个
fixture若没有合适小批次转向补齐 staging guard 的文档索引或生成一个
machine-readable fixture coverage manifest。继续避免 blocked runtime promotion、
browser full inventory 扩面和 JS CNC 语义实现。
二十二、2026-06-13 继续执行记录interp fixture staging helper guard
本批回到 `writeInterpRegressionFiles(...)` helper先整理已有 Node/browser coverage
里的两个固定 `.ngc/.tbl` fixture
- `interp/cam-nisley`
- `interp/g76`
完成内容:
- Node 侧新增 `assertInterpRegressionStaging(...)`
- Node 侧对 upstream vendored `.ini/.ngc/.tbl` 文件清单与 fixed manifest 精确对账;
- Node 侧检查 staged path 与 `/work/interp/<name>/...` fixed manifest 一致;
- browser 侧新增同名 `assertInterpRegressionStaging(...)`
- browser 侧检查 fixed manifest duplicate-free并检查 staged path 去掉
`/work/browser-interp/<name>/` 前缀后与 fixed manifest 一致;
- `cam-nisley` 与 `g76` 改用该 helper去掉内联重复 guard
- 仅整理 host/filesystem staging guard不改变 G-code、tool table 或 threading 语义。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
继续复用 `assertInterpRegressionStaging(...)` 处理已有 `writeInterpRegressionFiles(...)`
调用里的小批次。优先候选:
- `m98m99/09-disable-fanuc-subs`
- `m98m99/11-main-program-oword`
这两个已有固定 file list 和 Node/browser coverage适合把现有 m98m99 aggregate
slice guard 拆出更直接的 per-directory staged path guard。仍不推进 blocked runtime
promotion、browser full inventory 扩面或 JS CNC 语义实现。
二十三、2026-06-13 继续执行记录m98m99 interp directory staging guard
本批继续复用 `assertInterpRegressionStaging(...)`,把两个已有 m98m99 目录从
aggregate slice guard 拆成更直接的 per-directory staged path guard
- `m98m99/09-disable-fanuc-subs`
- `m98m99/11-main-program-oword`
完成内容:
- Node 侧对 `09-disable-fanuc-subs` 的 `.ini/.ngc` fixed manifest 与 vendored
文件清单精确对账;
- Node 侧对 `11-main-program-oword` 的 `.ngc` fixed manifest 与 vendored 文件清单
精确对账;
- Node 侧保留相邻 direct-file smoke 的 slice guard但不再让该 slice 夹带目录
file-list 对账;
- browser 侧复用同名 helper 检查 fixed manifest duplicate-free
- browser 侧检查 staged path 去掉 `/work/browser-interp/<name>/` 前缀后与 fixed
manifest 一致;
- browser 侧仍不枚举目录;
- 仅整理 host/filesystem staging guard不改变 Fanuc sub、main-program oword 或
interpreter 语义。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
继续扫描 `writeInterpRegressionFiles(...)` 与 m98m99 剩余 direct-file aggregate guard。
优先候选是把 `m98m99/13-named-program` 的 fixed file list 提成 per-directory guard
同时保留 `m98m99/14-o-expression-call` direct-file slice guard如继续小批量
也可处理 `m98m99/09`、`11` 后续文档索引。继续避免 blocked runtime promotion、
browser full inventory 扩面和 JS CNC 语义实现。
二十四、2026-06-13 继续执行记录m98m99 named-program staging guard
本批继续复用 `assertInterpRegressionStaging(...)`,把
`m98m99/13-named-program` 从 final aggregate direct-file guard 中拆成
per-directory staged path guard同时保留 `m98m99/14-o-expression-call` 的
direct-file slice guard。
完成内容:
- Node 侧将 `13-named-program` 的 `test-named.ngc` 与 `test-numbered.ngc` 提成
fixed manifest
- Node 侧用 upstream vendored `.ngc` 文件清单与 fixed manifest 精确对账;
- Node 侧检查 staged path 与 `/work/interp/m98m99/13-named-program/...` 一致;
- Node 侧将 final direct-file slice 收缩为只覆盖 `14-o-expression-call/test.ngc`
- browser 侧新增同名 fixed manifest guard
- browser 侧检查 staged path 去掉
`/work/browser-interp/m98m99/13-named-program/` 前缀后与 fixed manifest 一致;
- browser 侧仍不枚举目录;
- 仅整理 host/filesystem staging guard不改变 named-program 或 o-expression call
语义。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
m98m99 目录级 staged path guard 已基本收束。下一批建议扫描 `writeInterpRegressionFile(...)`
的剩余单文件 direct-file guard优先选择仍由 aggregate slice 间接覆盖的短小 case
把它们改成局部 fixed path guard如果继续保持小步提交可从 `g10` 之后的
direct-file families 或 `writeInterpRegressionFiles(...)` 其他调用点继续收敛。仍不推进
blocked runtime promotion、browser full inventory 扩面或 JS CNC 语义实现。
二十五、2026-06-13 继续执行记录m98m99 direct-file staging helper guard
本批按“剩余单文件 direct-file guard 收敛”推进,新增 single-file staging helper
并先替换 m98m99 里短小且已由 aggregate slice 间接覆盖的 4 个 direct-file case
- `m98m99/01-basics/test.ngc`
- `m98m99/02-variables/test.ngc`
- `m98m99/03-error-M98-no-P-word/test.ngc`
- `m98m99/14-o-expression-call/test.ngc`
完成内容:
- Node 侧新增 `assertInterpRegressionFileStaging(...)`
- Node 侧检查 staged path 与 `/work/interp/<name>/<filename>` 精确一致;
- Node 侧将 m98m99 initial aggregate slice 替换为 3 个局部 direct-file guard
- Node 侧将 final `14-o-expression-call` aggregate slice 替换为局部 direct-file guard
- browser 侧新增同名 single-file staging helper
- browser 侧检查 staged path 与 `/work/browser-interp/<name>/<filename>` 精确一致;
- browser 侧仍不枚举目录;
- 仅整理 host/filesystem staging guard不改变 Fanuc sub、变量作用域、M98 error 或
o-expression call 语义。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
继续复用 `assertInterpRegressionFileStaging(...)` 收敛 m98m99 剩余 direct-file slice。
优先候选:
- `m98m99/04-M98-but-no-sub/test.ngc`
- `m98m99/05-M98-loops/test.ngc`
- `m98m99/07-nested-subs/test.ngc`
- `m98m99/08-sub-follows-main/test.ngc`
- `m98m99/10-M98-P001/test.ngc`
其中 `06-error-mixed-sub-styles` 有 4 个同目录文件,可单独作为一批继续处理。继续避免
blocked runtime promotion、browser full inventory 扩面和 JS CNC 语义实现。
二十六、2026-06-13 继续执行记录m98m99 remaining direct-file staging guard
本批继续复用 `assertInterpRegressionFileStaging(...)`,收敛 m98m99 剩余短小
single-file direct-file guard
- `m98m99/04-M98-but-no-sub/test.ngc`
- `m98m99/05-M98-loops/test.ngc`
- `m98m99/07-nested-subs/test.ngc`
- `m98m99/08-sub-follows-main/test.ngc`
- `m98m99/10-M98-P001/test.ngc`
完成内容:
- Node 侧为上述 5 个 direct-file case 增加局部 staged path guard
- Node 侧将 `06-error-mixed-sub-styles` 的 aggregate slice 收缩为只覆盖该目录
4 个 mixed-sub-style 文件;
- Node 侧移除 `07/08` 和 `10` 的临近 aggregate slice guard
- browser 侧同步增加 5 个局部 staged path guard
- browser 侧同步收缩 mixed-sub-style slice并移除 `07/08` 和 `10` 的临近 slice
- browser 侧仍不枚举目录;
- 仅整理 host/filesystem staging guard不改变 M98 no-sub、loop、nested sub、
sub-follows-main 或 M98-P001 执行语义。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
`m98m99` 剩余显性 aggregate slice 只剩 `06-error-mixed-sub-styles`。下一批可把这
4 个文件改成固定 manifest 加 per-directory guard或逐个使用 single-file helper
完成后 m98m99 direct-file staging guard 基本收束。之后建议转向其他
`writeInterpRegressionFile(...)` families例如 `bad`、`good`、`g71/g72` 或
`rotation` 的 aggregate direct-file guard。继续避免 blocked runtime promotion、
browser full inventory 扩面和 JS CNC 语义实现。
二十七、2026-06-13 继续执行记录m98m99 mixed-sub-style staging guard
本批完成 m98m99 最后一个显性 aggregate slice 的收束,将
`m98m99/06-error-mixed-sub-styles` 改为 fixed manifest 加 per-directory staged path
guard。
完成内容:
- Node 侧新增 `m98m99MixedSubStyleFiles` fixed manifest包含该目录 4 个 `.ngc`
fixture
- Node 侧改用 `writeInterpRegressionFiles(...)` 一次 staging 该目录;
- Node 侧复用 `assertInterpRegressionStaging(...)`,用 upstream vendored `.ngc`
文件清单与 fixed manifest 精确对账;
- Node 侧移除最后的 m98m99 mixed aggregate slice
- browser 侧新增同名 fixed manifest
- browser 侧复用 `assertInterpRegressionStaging(...)` 检查 duplicate-free 与 staged path
- browser 侧仍不枚举目录;
- 仅整理 host/filesystem staging guard不改变 mixed Fanuc/RS274NGC sub-style 错误语义。
已运行验证:
```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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_sim_configs_inventory_wasm.sh
wasm-port/tests/host/verify_host_smokes.sh
```
结果:全部通过。
下一步建议:
m98m99 direct-file 与目录级 staging guard 已基本收束。下一批建议转向其他
`writeInterpRegressionFile(...)` aggregate direct-file family小批量优先候选
- `rotation/abs-pts`
- `rotation/g28`
- `rotation/g53`
这三个已有 Node/browser coverage 且属于同一 direct-file family适合复用
`assertInterpRegressionFileStaging(...)` 替换当前 rotation aggregate slice。继续避免
blocked runtime promotion、browser full inventory 扩面和 JS CNC 语义实现。