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

生成时间：2026-06-13 CST

本文件接替 `text6.txt`。后续工作按 `text7.txt` 执行；除非明确要求审计旧记录，
不要再回到 `text1/text2/text3/text4/text5/text6` 扩展进度。`text6.txt` 作为历史
归档保留。

一、续接状态与防重规则

1. 当前续接点。

`text6.txt` 已推进到：

```text
四十九、2026-06-13 继续执行记录：remap generated-file staging helper inventory
```

该批已提交：

```text
bea8320 Guard remap generated file staging
```

本文件从 `text7.txt` 重新开始记录后续进度。

2. 每轮开始前必须先执行。

```bash
git status --short
git log -5 --oneline
tail -n 120 text7.txt
awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

执行规则：

- 如果 `git status --short` 是 clean，且最新提交已经包含当前建议工作，不要重复追加记录；
- 每轮只追加一个新的中文编号记录；提交前再次检查标题唯一性；
- `text7.txt` 只记录新的后续进度，不复制 `text6.txt` 的长历史；
- 每批完成后，如果要写记录，先写 `text7.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 当前收敛状态。

`text6.txt` 已完成并提交的主要收敛包括：

- ordinary interp direct-file / multi-file staged path guard；
- `oword-bug315`、`oword-bug315-p2`、`namedparam-bug424` 等 early direct-file guard；
- `cam-nisley`、`cam-nisley-bare`、`flowsnake`、`inside-corners`、
  `inverse-time-with-comp` 等 interp guard；
- `bad`、`good`、`g33.1`、`g6164`、`g71`、`g72`、`g76`、rotation、INI-context
  fixture guard；
- `m98m99` fixed `.ngc` manifest guard；
- `g10` fixed `.ngc/.tbl` manifest guard；
- `g52/g92` direct-file guard；
- ccomp per-file staging helper guard；
- remap aggregate staging helper 已收敛为 coverage helper + per-file staging helper；
- `nested-remaps-oword` 保留 expected-unstaged overlap guard；
- `remap-io/simpockets.tbl` 已切换为 generated-file staging helper；
- Node/browser 侧已删除无调用的 remap aggregate helper。

5. 当前最近提交。

当前最近提交包括：

```text
bea8320 Guard remap generated file staging
e039cac Guard final special remap staging paths
76aa9fb Guard final simple remap staging paths
fe07e2f Guard more remap per-file staging paths
d7cd116 Guard initial remap per-file 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. 当前第一候选批次。

继续 staged path guard inventory 第二轮，优先处理 INI-context helper 内的 inline prefix
strip：

```text
assertInterpIniContextNgcStaging(...)
```

当前已知位置：

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

执行目标：

- Node 侧将 `file.wasmPath.replace(`/work/interp/${name}/`, "")` 收敛为专用 helper；
- browser 侧将 `file.wasmPath.replace(`/work/browser-interp/${name}/`, "")` 同步收敛；
- helper 必须检查 staged path 确实带有期望前缀，避免普通 `replace(...)` 静默放过
  错误路径；
- 保持 browser 不枚举目录；
- 只整理 host/filesystem staging guard，不改变 INI、O-word、parameter、remap 或
  interpreter 语义。

2. 第一候选批次验证。

执行：

```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_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.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 staged prefix stripping
```

3. 后续候选原则。

继续只选：

- 已有 Node/browser coverage；
- 不依赖 HAL/task/tool DB/Python remap/user-M process；
- direct-file、generated-file 或 staging helper 已成型；
- 每批小范围收敛；
- 只做 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 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

七、2026-06-13 继续执行记录：staged prefix stripping guard

1. 本批目标。

按本文件第一候选批次继续 staged path guard inventory 第二轮，收敛 INI-context helper
内的 inline prefix strip：

```text
assertInterpIniContextNgcStaging(...)
```

2. 已完成改动。

- Node 侧新增 `stripInterpIniContextStagingPrefix(...)`；
- browser 侧新增 `stripInterpIniContextStagingPrefix(...)`；
- 两侧均先检查 staged `wasmPath` 带有期望前缀，再用 `slice(...)` 取相对路径；
- 删除两侧 `file.wasmPath.replace(...)` 的静默前缀剥离；
- 保持 browser 不枚举目录；
- 未修改 INI、O-word、parameter、remap 或 interpreter 语义。

涉及文件：

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

3. 本批建议验证。

```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_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.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 staged prefix stripping
```

4. 下一步工作建议。

继续 staged path guard inventory 第三轮，优先扫描剩余 `wasmPath` 字符串拼接、prefix
strip 或 helper 旁路点，只选择已有 Node/browser coverage 且不依赖 HAL/task/tool
DB/Python remap/user-M process 的小批次。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

八、2026-06-13 继续执行记录：fiveaxis staging manifest guard

1. 本批目标。

继续 staged path guard inventory 第三轮，收敛 fiveaxis 三组 helper 的 staged 文件写入：

```text
writeFiveAxisTrtMachineFiles(...)
writeFiveAxisTdrMachineFiles(...)
writeFiveAxisBridgeMillMachineFiles(...)
```

2. 已完成改动。

- Node 侧新增 fiveaxis 固定 manifest 写入 helper；
- Node 侧为 `remap_subs` 和 `demos` 的 `.ngc` 子集增加 upstream coverage drift
  断言；
- Node 侧移除 fiveaxis helper 里的 ad hoc `readdirSync(remap_subs)` 写入；
- browser 侧新增 fiveaxis 固定 manifest 写入 helper；
- browser 侧增加 duplicate-free 和 staged root/path parity 断言；
- browser 侧仍不枚举目录；
- 未修改 INI、remap、kinematics、HAL 或 interpreter 语义。

涉及文件：

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

3. 已完成的目标验证。

```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
```

4. 本批剩余建议验证。

```bash
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 fiveaxis staging manifests
```

5. 下一步工作建议。

继续 staged path guard inventory 第四轮，优先扫描 `verify_interp_wasm.mjs` 和
`interp_smoke.html` 中剩余的 direct literal `/work/...` 写入点，选择已有
Node/browser 成对覆盖、且可以用 fixed manifest 或 single-file staging helper
收敛的小批次。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

九、2026-06-13 继续执行记录：local gcode fixture staging guard

1. 本批目标。

继续 staged path guard inventory 第四轮，优先处理已有 Node/browser 成对覆盖的 local
fixture direct `/work/...` 写入点：

```text
coordinate_offsets.ngc
position_params.ngc
```

2. 已完成改动。

- 修正 `text7.txt` 中第七/第八条记录顺序，避免后续记录继续乱序；
- Node 侧新增 `writeLocalGcodeFixture(...)`；
- browser 侧新增 `writeLocalGcodeFixture(...)`；
- `coordinate_offsets` 和 `position_params` 两侧均改为 helper 写入；
- helper 显式检查 staged `wasmPath` 与期望路径一致；
- browser 侧仍不枚举目录；
- 未修改 G-code、canon expected、parameter、tool table 或 interpreter 语义。

涉及文件：

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

3. 已完成的目标验证。

```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
```

4. 本批剩余建议验证。

```bash
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 local gcode fixture staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第五轮，优先处理 `runVendorNcFile(...)` /
`runVendorNcFileWithToolTable(...)` 这类 vendor `nc_files` direct/context helper，
增加 single-file root parity 和 context file manifest guard；仍暂不碰 parameter/tool
table runtime state tests。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

十、2026-06-13 继续执行记录：browser nc-files staging guard

1. 本批目标。

继续 staged path guard inventory 第五轮，处理 browser 侧 vendor `nc_files` helper：

```text
runVendorNcFile(...)
runVendorNcFileWithToolTable(...)
```

2. 已完成改动。

- browser 侧新增 `assertVendorNcFileStaging(...)`；
- browser 侧新增 `assertVendorNcFileContextStaging(...)`；
- direct `nc_files` helper 增加 `/work/browser-nc-files/<file>` root parity guard；
- context helper 增加固定 manifest guard：
  - `<file>`
  - `tool.tbl`
  - `nc_files_context.ini`
- context helper 增加 staged root/path parity guard；
- browser 侧仍不枚举目录；
- 未修改 vendor `nc_files`、tool table 内容、INI 内容或 interpreter 语义。

涉及文件：

```text
wasm-port/tests/browser/interp_smoke.html
```

3. 已完成的目标验证。

```bash
git diff --check
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
```

4. 本批剩余建议验证。

```bash
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
wasm-port/tests/host/verify_host_smokes.sh
```

如果通过，提交建议：

```text
Guard browser nc-files staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第六轮，优先处理 browser/Node 中剩余的单文件
direct `/work/...` 写入点，例如 `disable_fanuc_style_sub_m98.ngc` 或 spindle-orient
INI fixture staging；继续避开 parameter/tool table runtime state tests 和 blocked
runtime promotion。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

十一、2026-06-13 继续执行记录：local INI/direct fixture staging guard

1. 本批目标。

继续 staged path guard inventory 第六轮，处理 Node/browser 成对覆盖的 local INI 与
direct G-code fixture staging：

```text
spindle_orient_offset.ini
disable_fanuc_style_sub.ini
spindle_orient_offset.ngc
disable_fanuc_style_sub_m98.ngc
```

2. 已完成改动。

- Node 侧新增 `writeLocalIniFixture(...)`；
- browser 侧新增 `writeLocalIniFixture(...)`；
- `spindle_orient_offset.ini` 和 `disable_fanuc_style_sub.ini` 两侧均改为 helper 写入；
- `spindle_orient_offset.ngc` 和 `disable_fanuc_style_sub_m98.ngc` 两侧均改为
  `writeLocalGcodeFixture(...)` 写入；
- helper 显式检查 staged `wasmPath` 与期望路径一致；
- browser 侧仍不枚举目录；
- 未修改 INI 内容、G-code 内容、canon expected、tool table 或 interpreter 语义。

涉及文件：

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

3. 已完成的目标验证。

```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
```

4. 本批剩余建议验证。

```bash
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 local INI/direct fixture staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第七轮，优先处理 `INTERP_FILE_FIXTURES` /
`INTERP_BROWSER_FILE_FIXTURES` 和 `INTERP_ERROR_FIXTURES` 这类循环写入点，增加
loop-level single-file staging helper 或 manifest parity guard；继续避开
parameter/tool table runtime state tests 和 blocked runtime promotion。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

十二、2026-06-13 继续执行记录：fixture loop staging guard

1. 本批目标。

继续 staged path guard inventory 第七轮，处理 Node/browser 成对覆盖的 fixture loop
staging 写入点：

```text
INTERP_ERROR_FIXTURES
INTERP_FILE_FIXTURES
INTERP_BROWSER_FILE_FIXTURES
```

2. 已完成改动。

- Node 侧新增 `writeLocalErrorGcodeFixture(...)`；
- browser 侧新增 `writeLocalErrorGcodeFixture(...)`；
- `INTERP_ERROR_FIXTURES` 的 file-error loop 两侧均改为 helper 写入；
- `INTERP_FILE_FIXTURES` / `INTERP_BROWSER_FILE_FIXTURES` 的 file loop 两侧均改为
  `writeLocalGcodeFixture(...)` 写入；
- helper 显式检查 staged `wasmPath` 与期望路径一致；
- browser 侧仍不枚举目录；
- 未修改 G-code 内容、canon expected、error expected 或 interpreter 语义。

涉及文件：

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

3. 已完成的目标验证。

```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
```

4. 本批剩余建议验证。

```bash
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 fixture loop staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第八轮，优先处理 `namedparam_semantics` /
`namedparam_ini_semantics` 等 INI-context 单文件 direct `/work/...` 写入点，或
`ini_tool_table` 固定三文件 staging manifest；继续避开 parameter/tool table runtime
state tests 和 blocked runtime promotion。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

十三、2026-06-13 继续执行记录：INI context direct fixture staging guard

1. 本批目标。

继续 staged path guard inventory 第八轮，处理 Node/browser 成对覆盖的 INI-context
direct file 与 fixed manifest staging：

```text
namedparam_semantics.ngc
namedparam_ini_semantics.ngc
ini_tool_table.ini
ini_tool_table.tbl
ini_tool_table.ngc
```

2. 已完成改动。

- `namedparam_semantics.ngc` 两侧均改为 `writeLocalGcodeFixture(...)` 写入；
- `namedparam_ini_semantics.ngc` 两侧均改为 `writeLocalGcodeFixture(...)` 写入；
- Node 侧新增 `writeIniToolTableFixtureStaging(...)`；
- browser 侧新增 `writeIniToolTableFixtureStaging(...)`；
- `ini_tool_table` 三文件 staging 增加 fixed manifest、duplicate-free 和 root/path
  parity guard；
- browser 侧仍不枚举目录；
- 未修改 INI 内容、G-code 内容、tool table 内容、canon expected 或 interpreter
  语义。

涉及文件：

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

3. 已完成的目标验证。

```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
```

4. 本批剩余建议验证。

```bash
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 INI context fixture staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第九轮，优先处理剩余 direct `/work/...` run-step
代表路径，例如 `minimal_linear_run_steps` 直接使用 `/work/minimal_linear.ngc` 的调用
点，或继续扫描 `verify_interp_wasm.mjs` / `interp_smoke.html` 中未被 helper 覆盖的
单文件 staging；继续避开 parameter/tool table runtime state tests 和 blocked
runtime promotion。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

十四、2026-06-13 继续执行记录：minimal linear run-step staging guard

1. 本批目标。

继续 staged path guard inventory 第九轮，处理 Node/browser 成对覆盖的 run-step
代表 direct path：

```text
minimal_linear_run_steps
browser_minimal_linear_run_steps
```

2. 已完成改动。

- Node 侧将 `interp.runFile("/work/minimal_linear.ngc")` 改为使用
  `writeLocalGcodeFixture(...)` 返回的 guarded path；
- browser 侧将 `interp.runFile("/work/minimal_linear.ngc")` 改为使用
  `writeLocalGcodeFixture(...)` 返回的 guarded path；
- 两侧均显式检查 staged `wasmPath` 与期望路径一致；
- browser 侧仍不枚举目录；
- 未修改 G-code 内容、run-step expected 或 interpreter 语义。

涉及文件：

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

3. 已完成的目标验证。

```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
```

4. 本批剩余建议验证。

```bash
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 minimal linear run-step staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第十轮，优先处理 `cam-nisley-bare` direct
`runFile(...)` 路径，或 `g52/g92-persistence` 这类固定 staging directory；继续避开
parameter/tool table runtime state tests 和 blocked runtime promotion。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

十五、2026-06-13 继续执行记录：cam-nisley bare direct staging guard

1. 本批目标。

继续 staged path guard inventory 第十轮，处理 Node/browser 成对覆盖的
`cam-nisley-bare` direct `runFile(...)` 路径：

```text
/work/interp/cam-nisley-bare/cam.ngc
/work/browser-interp/cam-nisley-bare/cam.ngc
```

2. 已完成改动。

- Node 侧将 bare `cam.ngc` staged path 提取为 `camNisleyBarePath`；
- Node 侧使用 `assertInterpRegressionFileStaging(...)` 检查 staged path；
- browser 侧将 bare `cam.ngc` staged path 提取为 `camNisleyBarePath`；
- browser 侧使用 `assertInterpRegressionFileStaging(...)` 检查 staged path；
- 写入和 `runFile(...)` 均使用同一个 guarded path；
- browser 侧仍不枚举目录；
- 未修改 upstream `cam.ngc`、expected output 或 interpreter 语义。

涉及文件：

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

3. 已完成的目标验证。

```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
```

4. 本批剩余建议验证。

```bash
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 cam-nisley bare staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第十一轮，优先处理 `g52/g92-persistence` 固定
staging directory，增加 fixed manifest/root parity guard；继续避开 parameter/tool
table runtime state tests 和 blocked runtime promotion。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

十六、2026-06-13 继续执行记录：G92 persistence staging manifest guard

1. 本批目标。

继续 staged path guard inventory 第十一轮，处理 Node/browser 成对覆盖的
`g52/g92-persistence` 固定 staging directory：

```text
test.ngc
startup.var
persist.ini
disabled.ini
```

2. 已完成改动。

- Node 侧新增 `writeG92PersistenceStaging(...)`；
- browser 侧新增 `writeG92PersistenceStaging(...)`；
- 四个 generated fixture 文件增加 fixed manifest、duplicate-free 和 root/path
  parity guard；
- enabled/disabled 两个 G92 persistence 验证均改为使用 helper 返回的 guarded path；
- browser 侧仍不枚举目录；
- 未修改 generated fixture 内容、expected output、parameter semantics 或 interpreter
  语义。

涉及文件：

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

3. 已完成的目标验证。

```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
```

4. 本批剩余建议验证。

```bash
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 G92 persistence staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第十二轮，优先扫描剩余 generated/direct staging
点；可选候选包括 user-M helper staging 或 restore-parameter negative fixtures，但继续
避开 parameter/tool table runtime state semantics 和 blocked runtime promotion。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

十七、2026-06-13 继续执行记录：user-M helper staging manifest guard

1. 本批目标。

继续 staged path guard inventory 第十二轮，处理 Node 侧 generated user-M helper
staging：

```text
writeUserMCodeFixture(...)
```

2. 已完成改动。

- Node 侧新增 `assertUserMCodeFixtureStaging(...)`；
- generated user-M fixture 增加 fixed manifest、duplicate-free 和 root/path parity
  guard：
  - `test.ini`
  - `test.ngc`
  - `M110` / `M111`
- `writeUserMCodeFixture(...)` 写入前先校验 staging root 与 manifest；
- 未修改 generated INI、G-code、M-code 内容、expected output 或 interpreter 语义；
- 未提升 `L4-USER-M-PROCESS`，也未改变 blocked runtime promotion 状态。

涉及文件：

```text
wasm-port/tests/wasm/node/verify_interp_wasm.mjs
```

3. 已完成的目标验证。

```bash
git diff --check
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
```

4. 本批剩余建议验证。

```bash
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.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 user-M helper staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第十三轮，优先扫描剩余 generated/direct staging
点；较安全候选是 restore-parameter negative fixtures 的 path guard，但仍需明确只做
filesystem staging guard，不改变 parameter runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

十八、2026-06-13 继续执行记录：restore-parameter negative staging guard

1. 本批目标。

继续 staged path guard inventory 第十三轮，处理 Node/browser 成对覆盖的
restore-parameter negative fixture paths：

```text
missing.var
out-of-order.var
missing-required.var
```

2. 已完成改动。

- Node 侧新增 `generatedParameterPath(...)`；
- Node 侧新增 `writeGeneratedParameterFixture(...)`；
- browser 侧新增 `generatedParameterPath(...)`；
- browser 侧新增 `writeGeneratedParameterFixture(...)`；
- missing-file、out-of-order、missing-required 三类 restore-parameter path 均增加
  explicit path parity guard；
- 未修改 generated parameter fixture 内容、expected output 或 parameter runtime
  semantics。

涉及文件：

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

3. 已完成的目标验证。

```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
```

4. 本批剩余建议验证。

```bash
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 restore-parameter negative staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第十四轮，优先扫描剩余 direct generated staging
点；可选择普通 restore-parameter direct fixture 或 tool-table direct fixture，但仍需
只加 filesystem path guard，不改变 parameter/tool table runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

十九、2026-06-13 继续执行记录：restore-parameter direct staging guard

1. 本批目标。

继续 staged path guard inventory 第十四轮，处理 Node/browser 成对覆盖的普通
restore/save parameter direct fixture path：

```text
rs274ngc.var
browser-direct.var
```

2. 已完成改动。

- Node 侧普通 `parameterFilePath` 初始写入改为 `writeGeneratedParameterFixture(...)`；
- browser 侧 `browserParameterFilePath` 初始写入改为
  `writeGeneratedParameterFixture(...)`；
- 两侧 direct restore/save parameter path 均复用 explicit path parity guard；
- 未修改 generated parameter fixture 内容、save/restore expected output、backup
  验证或 parameter runtime semantics。

涉及文件：

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

3. 已完成的目标验证。

```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
```

4. 本批剩余建议验证。

```bash
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 restore-parameter direct staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第十五轮，优先处理 tool-table direct fixture path
guard，例如 `tool.tbl` / `random-tool.tbl` 和 browser direct tool-table paths；仍只加
filesystem path guard，不改变 tool table runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

二十、2026-06-13 继续执行记录：tool-table direct staging guard

1. 本批目标。

继续 staged path guard inventory 第十五轮，处理 Node/browser 成对覆盖的 direct
tool table fixture path：

```text
tool.tbl
random-tool.tbl
browser-direct-tool.tbl
browser-direct-random-tool.tbl
```

2. 已完成改动。

- Node 侧新增 `generatedToolTablePath(...)` 与
  `writeGeneratedToolTableFixture(...)`；
- Node 侧 direct `tool.tbl` 与 `random-tool.tbl` 初始写入改为走显式 path parity
  guard；
- browser 侧同步新增 direct tool-table fixture path guard helper；
- browser 侧 `browser-direct-tool.tbl` 与 `browser-direct-random-tool.tbl` 初始写入改为
  走显式 path parity guard；
- 未修改 tool table fixture 内容、load/save expected output、random tool changer
  配置或 tool table runtime semantics。

涉及文件：

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

3. 已完成的目标验证。

```bash
git diff --check
node --check wasm-port/tests/wasm/node/verify_interp_wasm.mjs
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
```

4. 本批剩余建议验证。

```bash
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 tool-table direct staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第十六轮，优先处理 browser OPFS/session tool-table
path guard，例如 `/work/browser-tool.tbl`、`/work/browser-random-tool.tbl`、
`/work/browser-custom-tool.tbl`、`/work/browser-explicit-tool.tbl`；仍只加
filesystem/OPFS path guard，不改变 tool table、INI 或 session runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

二十一、2026-06-13 继续执行记录：browser OPFS tool-table staging guard

1. 本批目标。

继续 staged path guard inventory 第十六轮，处理 browser OPFS/session tool-table
boundary path：

```text
/work/browser-tool.tbl
/work/browser-random-tool.tbl
/work/browser-custom-tool.tbl
/work/browser-explicit-tool.tbl
```

2. 已完成改动。

- browser 侧新增 `assertOpfsToolTableStaging(...)`；
- 默认 machine session 的 load/save tool table 均检查 OPFS path 与 WASM path；
- random toolchanger session 的 load/save tool table 均检查 OPFS path 与 WASM path；
- INI `TOOL_TABLE` 命名 session 的 load/save tool table 均检查 OPFS path 与 WASM path；
- explicit override session 的 load/save tool table 均检查 OPFS path 与 WASM path；
- 复用 `generatedToolTablePath(...)` 校验 WASM staged path；
- 未修改 OPFS 存储内容、tool table 内容、INI 解析、random toolchanger 行为或 session
  runtime semantics。

涉及文件：

```text
wasm-port/tests/browser/interp_smoke.html
```

3. 已完成的目标验证。

```bash
git diff --check
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
```

4. 本批剩余建议验证。

```bash
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
wasm-port/tests/host/verify_host_smokes.sh
```

如果通过，提交建议：

```text
Guard browser OPFS tool-table staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第十七轮，优先处理 browser OPFS/session parameter
path guard，例如 `/work/browser-linuxcnc.var`、`/work/browser-random-linuxcnc.var`、
`/work/browser-custom.var`、`/work/browser-explicit.var`；仍只加 filesystem/OPFS path
guard，不改变 parameter、INI 或 session runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

二十二、2026-06-13 继续执行记录：browser OPFS parameter staging guard

1. 本批目标。

继续 staged path guard inventory 第十七轮，处理 browser OPFS/session parameter
boundary path：

```text
/work/browser-linuxcnc.var
/work/browser-random-linuxcnc.var
/work/browser-custom.var
/work/browser-explicit.var
```

2. 已完成改动。

- browser 侧新增 `assertOpfsParameterStaging(...)`；
- 默认 machine session 的 restore/save parameter 均检查 OPFS path 与 WASM path；
- 默认 save parameter 同步检查 `.bak` OPFS path；
- random toolchanger session 的 restore parameter 检查 OPFS path 与 WASM path；
- INI `PARAMETER_FILE` 命名 session 的 restore/save parameter 均检查 OPFS path 与
  WASM path，并检查 `.bak` OPFS path；
- explicit override session 的 restore/save parameter 均检查 OPFS path 与 WASM path，
  并检查 `.bak` OPFS path；
- 复用 `generatedParameterPath(...)` 校验 WASM staged path；
- 未修改 OPFS 存储内容、parameter 内容、INI 解析、backup 写入或 session runtime
  semantics。

涉及文件：

```text
wasm-port/tests/browser/interp_smoke.html
```

3. 已完成的目标验证。

```bash
git diff --check
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
```

4. 本批剩余建议验证。

```bash
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
wasm-port/tests/host/verify_host_smokes.sh
```

如果通过，提交建议：

```text
Guard browser OPFS parameter staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第十八轮，优先处理 browser OPFS/session INI path
guard，例如 `/work/browser-machine.ini`、`/work/browser-random-machine.ini`、
`/work/browser-ini-file-session.ini`、`/work/browser-ini-override-session.ini`；仍只加
filesystem/OPFS path guard，不改变 INI parsing、parameter/tool table 或 session
runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

二十三、2026-06-13 继续执行记录：browser OPFS INI staging guard

1. 本批目标。

继续 staged path guard inventory 第十八轮，处理 browser OPFS/session INI boundary
path：

```text
/work/browser-machine.ini
/work/browser-random-machine.ini
/work/browser-ini-file-session.ini
/work/browser-ini-override-session.ini
```

2. 已完成改动。

- browser 侧新增 `assertOpfsIniStaging(...)`；
- 默认 machine session 的 INI OPFS path 与 WASM path 增加显式 guard；
- random toolchanger session 的 INI OPFS path 与 WASM path 增加显式 guard；
- INI `PARAMETER_FILE`/`TOOL_TABLE` 命名 session 的 INI OPFS path 与 WASM path 增加
  显式 guard；
- explicit override session 的 INI OPFS path 与 WASM path 增加显式 guard；
- 未修改 INI 内容、INI parsing、parameter/tool table staging、OPFS 存储内容或
  session runtime semantics。

涉及文件：

```text
wasm-port/tests/browser/interp_smoke.html
```

3. 已完成的目标验证。

```bash
git diff --check
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
```

4. 本批剩余建议验证。

```bash
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
wasm-port/tests/host/verify_host_smokes.sh
```

如果通过，提交建议：

```text
Guard browser OPFS INI staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第十九轮，优先扫描 browser OPFS/session invalid
INI-path negative cases，例如 `/work/browser-invalid-param-file-session.ini` 与
`/work/browser-invalid-tool-file-session.ini`；仍只加 filesystem/OPFS path guard，不改变
INI validation、path-model 或 session runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

二十四、2026-06-13 继续执行记录：browser invalid INI staging guard

1. 本批目标。

继续 staged path guard inventory 第十九轮，处理 browser OPFS/session invalid INI
negative cases 的 INI boundary path：

```text
/work/browser-invalid-param-file-session.ini
/work/browser-invalid-tool-file-session.ini
```

2. 已完成改动。

- invalid `PARAMETER_FILE = ../escape.var` negative case 改为先构造 options；
- invalid parameter-file negative case 复用 `assertOpfsIniStaging(...)` 检查 INI OPFS
  path 与 WASM path；
- invalid `TOOL_TABLE = nested/tool.tbl` negative case 改为先构造 options；
- invalid tool-table negative case 复用 `assertOpfsIniStaging(...)` 检查 INI OPFS path
  与 WASM path；
- `verifyRejects(...)` 的 expected error pattern 保持不变；
- 未修改 INI validation、path-model、invalid fixture 内容、OPFS 存储内容或 session
  runtime semantics。

涉及文件：

```text
wasm-port/tests/browser/interp_smoke.html
```

3. 已完成的目标验证。

```bash
git diff --check
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
```

4. 本批剩余建议验证。

```bash
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
wasm-port/tests/host/verify_host_smokes.sh
```

如果通过，提交建议：

```text
Guard browser invalid INI staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第二十轮，优先扫描 browser OPFS/machine text store
边界，例如 `saveMachineTextFiles(...)` / `loadMachineTextFiles(...)` 中 machine 文件的
默认 OPFS path 对账；仍只加 filesystem/OPFS path guard，不改变 OPFS file-service、
machine-file-store 或 session runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

二十五、2026-06-13 继续执行记录：browser machine text-store staging guard

1. 本批目标。

继续 staged path guard inventory 第二十轮，处理 browser OPFS/machine text store 默认
OPFS path 对账：

```text
linuxcnc/machines/<machine>/machine.ini
linuxcnc/machines/<machine>/tool.tbl
linuxcnc/machines/<machine>/linuxcnc.var
```

2. 已完成改动。

- browser 侧新增 `assertMachineTextStorePaths(...)`；
- `browser-interp` 的 `saveMachineTextFiles(...)` 返回 path map 增加默认 OPFS path
  guard；
- `browser-random-toolchanger` 的 `saveMachineTextFiles(...)` 返回 path map 增加默认
  OPFS path guard；
- `browser-ini-file-session` 与 `browser-ini-override-session` 的 machine text-store
  path map 增加默认 OPFS path guard；
- invalid parameter/tool INI negative session 的 machine text-store path map 增加默认
  OPFS path guard；
- 未修改 OPFS file-service、machine-file-store、path-model、machine file 内容或
  session runtime semantics。

涉及文件：

```text
wasm-port/tests/browser/interp_smoke.html
```

3. 已完成的目标验证。

```bash
git diff --check
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
```

4. 本批剩余建议验证。

```bash
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
wasm-port/tests/host/verify_host_smokes.sh
```

如果通过，提交建议：

```text
Guard browser machine text-store staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第二十一轮，优先扫描 OPFS gcode program storage
边界，例如 `saveGcodeProgram(...)` / `loadGcodeProgram(...)` 与
`linuxcnc/gcode/<filename>` path 对账；仍只加 filesystem/OPFS path guard，不改变
gcode storage、file-service 或 interpreter runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

二十六、2026-06-13 继续执行记录：OPFS gcode program staging guard

1. 本批目标。

继续 staged path guard inventory 第二十一轮，处理 OPFS gcode program storage path：

```text
linuxcnc/gcode/fixture.ngc
linuxcnc/gcode/custom-fixture.ngc
```

2. 已完成改动。

- Node OPFS smoke 新增 `assertGcodeProgramStoragePath(...)`；
- `gcodeProgramPath(...)` 的 fixture 与 custom fixture 路径改为走专用 path guard；
- `saveGcodeProgram(...)` 的 fixture 与 custom fixture 返回路径改为走专用 path guard；
- `loadGcodeProgram(...)` 的读取内容验证保持不变；
- invalid gcode filename rejection 验证保持不变；
- 未修改 OPFS file-service、machine-file-store、path-model、gcode 内容或 interpreter
  runtime semantics。

涉及文件：

```text
wasm-port/tests/opfs/node/verify_file_service.mjs
```

3. 已完成的目标验证。

```bash
git diff --check
wasm-port/tests/opfs/node/verify_file_service.sh
```

4. 本批剩余建议验证。

```bash
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
```

如果通过，提交建议：

```text
Guard OPFS gcode program staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第二十二轮，优先扫描 OPFS snapshot storage path
边界，例如 `sessionSnapshotPath(...)` / `saveSessionSnapshot(...)` 与
`linuxcnc/sessions/<session>/snapshot.json` 或 custom snapshot filename 对账；仍只加
filesystem/OPFS path guard，不改变 snapshot schema、file-service 或 session runtime
semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

二十七、2026-06-13 继续执行记录：OPFS snapshot staging guard

1. 本批目标。

继续 staged path guard inventory 第二十二轮，处理 OPFS session snapshot storage
path：

```text
linuxcnc/sessions/session-1/snapshot.json
linuxcnc/sessions/session-1/custom-snapshot.json
```

2. 已完成改动。

- Node OPFS smoke 新增 `assertSessionSnapshotStoragePath(...)`；
- `sessionSnapshotPath(...)` 的默认 snapshot 与 custom snapshot 路径改为走专用 path
  guard；
- `saveSessionSnapshot(...)` 的默认 snapshot 与 custom snapshot 后增加 path guard；
- `loadSessionSnapshot(...)` 的 snapshot 内容验证保持不变；
- invalid snapshot filename、bad JSON、bad format/version/session-id rejection 验证保持
  不变；
- 未修改 OPFS file-service、snapshot schema、snapshot-store、path-model 或 session
  runtime semantics。

涉及文件：

```text
wasm-port/tests/opfs/node/verify_file_service.mjs
```

3. 已完成的目标验证。

```bash
git diff --check
wasm-port/tests/opfs/node/verify_file_service.sh
```

4. 本批剩余建议验证。

```bash
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
```

如果通过，提交建议：

```text
Guard OPFS snapshot staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第二十三轮，优先扫描 OPFS preview-cache path 边界，
例如 `previewCachePath(...)` 与 `linuxcnc/preview-cache/<cache>/preview.json` 或 custom
preview filename 对账；仍只加 filesystem/OPFS path guard，不改变 preview cache、
file-service 或 runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

二十八、2026-06-13 继续执行记录：OPFS preview-cache staging guard

1. 本批目标。

继续 staged path guard inventory 第二十三轮，处理 OPFS preview-cache storage path：

```text
linuxcnc/preview-cache/fixture/preview.json
linuxcnc/preview-cache/fixture/custom-preview.json
```

2. 已完成改动。

- Node OPFS smoke 新增 `assertPreviewCacheStoragePath(...)`；
- `previewCachePath(...)` 的默认 preview filename 改为走专用 path guard；
- `previewCachePath(...)` 增加 custom preview filename path guard；
- 未修改 OPFS file-service、path-model、preview cache 内容或 runtime semantics。

涉及文件：

```text
wasm-port/tests/opfs/node/verify_file_service.mjs
```

3. 已完成的目标验证。

```bash
git diff --check
wasm-port/tests/opfs/node/verify_file_service.sh
```

4. 本批剩余建议验证。

```bash
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
```

如果通过，提交建议：

```text
Guard OPFS preview-cache staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第二十四轮，优先扫描 OPFS negative path guards 的
剩余散点，例如 `previewCachePath(...)` custom invalid filename、`machineFilePaths(...)`
或 bridge default path helpers；仍只加 filesystem/OPFS path guard，不改变 path-model、
file-service 或 runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

二十九、2026-06-13 继续执行记录：OPFS path helper staging guard

1. 本批目标。

继续 staged path guard inventory 第二十四轮，处理 OPFS path helper 剩余散点：

```text
defaultMachinePaths("xyzab-tdr")
machineFilePaths("xyzab-tdr")
previewCachePath("fixture", "nested/preview.json")
```

2. 已完成改动。

- Node OPFS smoke 新增 `assertMachineFileStoragePaths(...)`；
- `defaultMachinePaths(...)` 的默认 machine file path map 改为走专用 path guard；
- `machineFilePaths(...)` 的默认 machine file path map 改为走专用 path guard；
- 增加 `previewCachePath(...)` custom invalid filename rejection；
- 未修改 OPFS file-service、machine-file-store、path-model、preview cache 或 runtime
  semantics。

涉及文件：

```text
wasm-port/tests/opfs/node/verify_file_service.mjs
```

3. 已完成的目标验证。

```bash
git diff --check
wasm-port/tests/opfs/node/verify_file_service.sh
```

4. 本批剩余建议验证。

```bash
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
```

如果通过，提交建议：

```text
Guard OPFS path helper staging
```

5. 下一步工作建议。

继续 staged path guard inventory 第二十五轮，优先扫描 OPFS bridge default path helpers，
例如 `restoreMachineParametersFromOpfs(...)`、`loadMachineToolTableFromOpfs(...)`、
`saveMachineToolTableToOpfs(...)` 的默认 OPFS path 与 custom WASM path 对账；仍只加
filesystem/OPFS path guard，不改变 bridge behavior、file-service 或 runtime
semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

三十、2026-06-13 继续执行记录：OPFS bridge path staging guard

1. 本批目标。

继续 staged path guard inventory 第二十五轮，处理 OPFS bridge default path helpers：

```text
restoreMachineParametersFromOpfs(...)
saveMachineParametersToOpfs(...)
loadMachineToolTableFromOpfs(...)
saveMachineToolTableToOpfs(...)
loadMachineSessionFromOpfs(...)
```

2. 已完成改动。

- Node OPFS smoke 新增 `assertParameterBridgePaths(...)`；
- Node OPFS smoke 新增 `assertToolTableBridgePaths(...)`；
- Node OPFS smoke 新增 `assertSessionBridgePaths(...)`；
- `restoreMachineParametersFromOpfs(...)` 覆盖 custom WASM path 与默认
  `/work/linuxcnc.var` path guard；
- `saveMachineParametersToOpfs(...)` 覆盖 custom WASM path 与默认
  `/work/linuxcnc.var` path guard；
- `loadMachineToolTableFromOpfs(...)` 覆盖 custom WASM path 与默认 `/work/tool.tbl`
  path guard；
- `saveMachineToolTableToOpfs(...)` 覆盖 custom WASM path 与默认 `/work/tool.tbl`
  path guard；
- `loadMachineSessionFromOpfs(...)` 覆盖 custom WASM path 与默认
  `/work/machine.ini`、`/work/linuxcnc.var`、`/work/tool.tbl` path guard；
- 未修改 OPFS bridge behavior、file-service、path-model 或 runtime semantics。

涉及文件：

```text
wasm-port/tests/opfs/node/verify_file_service.mjs
```

3. 已完成验证。

```bash
git diff --check
wasm-port/tests/opfs/node/verify_file_service.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_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
```

提交建议：

```text
Guard OPFS bridge path staging
```

4. 下一步工作建议。

继续 staged path guard inventory 第二十六轮，优先扫描 SDK staging helpers 与 OPFS bridge
之间的边界散点，例如 SDK sim-config staging artifact 中的 path map、machine config
staging helper 或 browser smoke 中仍存在的 inline path strip；仍只加 filesystem/OPFS/
SDK boundary guard，不改变 LinuxCNC-owned interpreter、INI、tool、parameter 或 runtime
semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

三十一、2026-06-13 继续执行记录：SDK sim-config staging path guard

1. 本批目标。

继续 staged path guard inventory 第二十六轮，处理 SDK sim-config staging plan 在 Node
inventory 与 browser smoke 边界的 path map：

```text
planSimConfigStaging(...)
simMachine(...)
loadSimMachineFiles(...)
```

2. 已完成改动。

- Node sim-config inventory 新增 `assertSimConfigStagingPlan(...)`；
- Node `simMachine(...)` 将 `/work/sim-inventory/<machineRel>` 收敛为 expected root 并
  检查 `plan.wasmDir`、`iniPath`、`programPath`、`file.path === file.wasmPath`、source
  root 和 duplicate staged path；
- browser smoke 新增同名 `assertSimConfigStagingPlan(...)`；
- browser `loadSimMachineFiles(...)` 将 `/work/browser-sim/<machineRel>` 收敛为 expected
  root 并同步检查 `plan.wasmDir`、`iniPath`、`programPath`、`file.path === file.wasmPath`、
  source root 和 duplicate staged path；
- 未修改 SDK planner、interpreter、INI、tool、parameter、OPFS bridge 或 LinuxCNC-owned
  runtime semantics。

涉及文件：

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

3. 已完成验证。

```bash
git diff --check
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/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
wasm-port/tests/host/verify_host_smokes.sh
```

提交建议：

```text
Guard SDK sim-config staging paths
```

4. 下一步工作建议。

继续 staged path guard inventory 第二十七轮，优先扫描 browser OPFS smoke 中仍以
inline string 形式散落的 `opfs_*_staging` 断言，挑选 machine text/session/default-path
相关的小批次收敛为专用 helper；仍只加 browser/OPFS/SDK boundary guard，不改变
LinuxCNC-owned interpreter、INI、tool、parameter 或 runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

三十二、2026-06-13 继续执行记录：browser OPFS session staging guard

1. 本批目标。

继续 staged path guard inventory 第二十七轮，收敛 browser OPFS smoke 中普通 session
与 random toolchanger session 的重复 inline staging 断言：

```text
loadMachineSessionFromOpfs(...)
browser-interp
browser-random-toolchanger
```

2. 已完成改动。

- browser smoke 新增 `assertOpfsSessionStaging(...)`；
- 普通 `browser-interp` session 的 INI、tool table、parameter path 断言改为走 session
  helper；
- `browser-random-toolchanger` session 的 INI、tool table、parameter path 断言改为走
  session helper；
- 保留既有 `assertOpfsIniStaging(...)`、`assertOpfsToolTableStaging(...)`、
  `assertOpfsParameterStaging(...)` 单项 helper；
- 未修改 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter 或
  LinuxCNC-owned runtime semantics。

涉及文件：

```text
wasm-port/tests/browser/interp_smoke.html
```

3. 已完成验证。

```bash
git diff --check
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_interp_wasm.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 browser OPFS session staging
```

4. 下一步工作建议。

继续 staged path guard inventory 第二十八轮，优先把 browser OPFS smoke 中 INI-derived
和 explicit override session 的 `assertOpfsIniStaging(...)`、`assertOpfsToolTableStaging(...)`、
`assertOpfsParameterStaging(...)` 三件套收敛到 session-aware helper，但保留 custom
filename 的显式 expected OPFS path；仍只加 browser/OPFS boundary guard，不改变
LinuxCNC-owned interpreter、INI、tool、parameter 或 runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

三十三、2026-06-13 继续执行记录：browser OPFS custom session staging guard

1. 本批目标。

继续 staged path guard inventory 第二十八轮，收敛 browser OPFS smoke 中 custom session
路径三件套：

```text
browser-ini-file-session
browser-ini-override-session
```

2. 已完成改动。

- 扩展 browser smoke 的 `assertOpfsSessionStaging(...)`，支持默认 OPFS path 加 custom
  `opfs` override；
- 普通/default session 调用改为显式 `wasm` path map；
- INI-derived `browser-ini-file-session` 的 INI、custom parameter、custom tool table
  staging 断言改为走 session helper；
- explicit override `browser-ini-override-session` 的 INI、explicit parameter、explicit
  tool table staging 断言改为走 session helper；
- 保留 custom filename 的显式 expected OPFS path；
- 未修改 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter 或
  LinuxCNC-owned runtime semantics。

涉及文件：

```text
wasm-port/tests/browser/interp_smoke.html
```

3. 已完成验证。

```bash
git diff --check
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_interp_wasm.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 browser OPFS custom session staging
```

4. 下一步工作建议。

继续 staged path guard inventory 第二十九轮，优先扫描 browser OPFS smoke 中 invalid
INI parameter/tool-table rejection 的 staging guard，收敛为 invalid-session helper；
仍只加 browser/OPFS boundary guard，不改变 LinuxCNC-owned interpreter、INI、tool、
parameter 或 runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

三十四、2026-06-13 继续执行记录：browser OPFS invalid session staging guard

1. 本批目标。

继续 staged path guard inventory 第二十九轮，收敛 browser OPFS smoke 中 invalid INI
parameter/tool-table rejection 的重复 staging guard：

```text
browser-invalid-param-file-session
browser-invalid-tool-file-session
```

2. 已完成改动。

- browser smoke 新增 `verifyOpfsInvalidIniSessionRejects(...)`；
- invalid parameter-file session 改为通过 helper 保存 machine text、校验默认 OPFS
  machine text paths、校验 INI staging path，再验证 expected rejection；
- invalid tool-table session 改为通过同一 helper 走相同 staging/rejection guard；
- 保留 LinuxCNC-owned INI filename validation 的错误期望，不改变 OPFS bridge behavior、
  file-service、path-model、SDK planner、interpreter 或 runtime semantics。

涉及文件：

```text
wasm-port/tests/browser/interp_smoke.html
```

3. 已完成验证。

```bash
git diff --check
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_interp_wasm.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 browser OPFS invalid session staging
```

4. 下一步工作建议。

继续 staged path guard inventory 第三十轮，优先扫描 browser OPFS smoke 中 save
parameter/tool-table 后的 explicit `assertOpfsParameterStaging(...)`、
`assertOpfsToolTableStaging(...)` 是否还能按 save-operation helper 小批收敛；仍只加
browser/OPFS boundary guard，不改变 LinuxCNC-owned interpreter、INI、tool、parameter
或 runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

三十五、2026-06-13 继续执行记录：browser OPFS save operation staging guard

1. 本批目标。

继续 staged path guard inventory 第三十轮，收敛 browser OPFS smoke 中 save
parameter/tool-table 后的重复 explicit staging 断言。

2. 已完成改动。

- browser smoke 新增 `opfsMachineFilePath(...)`；
- 新增 `assertOpfsSavedParameterStaging(...)`，统一校验 saved parameter OPFS path、
  WASM path 和 `.bak` backup path；
- 新增 `assertOpfsSavedToolTableStaging(...)`，统一校验 saved tool-table OPFS/WASM
  path；
- 普通 `browser-interp`、random toolchanger、INI-derived custom session、explicit
  override session 的 save parameter/tool-table staging 断言改为走 save-operation
  helper；
- 未修改 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter 或
  LinuxCNC-owned runtime semantics。

涉及文件：

```text
wasm-port/tests/browser/interp_smoke.html
```

3. 已完成验证。

```bash
git diff --check
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_interp_wasm.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 browser OPFS save operation staging
```

4. 下一步工作建议。

继续 staged path guard inventory 第三十一轮，优先扫描 browser OPFS smoke 中
`loadTextFile(...)` 对 saved parameter/tool-table backup 或 saved file text 的 inline
path 使用，挑选仍可收敛为 readback helper 的小批次；仍只加 browser/OPFS boundary
guard，不改变 LinuxCNC-owned interpreter、INI、tool、parameter 或 runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

三十六、2026-06-13 继续执行记录：browser OPFS readback staging guard

1. 本批目标。

继续 staged path guard inventory 第三十一轮，收敛 browser OPFS smoke 中 saved
parameter/tool-table readback 的重复 `loadTextFile(...)` 验证。

2. 已完成改动。

- browser smoke 新增 `verifyOpfsReadback(...)`；
- saved parameter backup、INI-derived parameter text、INI-derived parameter backup、INI-derived
  tool-table text、explicit parameter text、explicit parameter backup、explicit tool-table text
  的读回验证改为走 readback helper；
- helper 只包装 `loadTextFile(...)` + `verifyExpectedOutput(...)`，不改变 readback 语义；
- 未修改 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter 或
  LinuxCNC-owned runtime semantics。

涉及文件：

```text
wasm-port/tests/browser/interp_smoke.html
```

3. 已完成验证。

```bash
git diff --check
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_interp_wasm.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 browser OPFS readback staging
```

4. 下一步工作建议。

继续 staged path guard inventory 第三十二轮，优先扫描 browser OPFS smoke 中
saved backup path 的 explicit variable names、backup file naming、以及 file-content text
fixture 的 inline path 重复，挑选仍可收敛为更小的 readback/path helper；仍只加
browser/OPFS boundary guard，不改变 LinuxCNC-owned interpreter、INI、tool、parameter
或 runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

三十七、2026-06-13 继续执行记录：browser OPFS machine file write helper guard

1. 本批目标。

继续 staged path guard inventory 第三十二轮，收敛 browser OPFS smoke 中 custom
session 机器文件写入的 inline OPFS path：

```text
browser-ini-file-session
browser-ini-override-session
```

2. 已完成改动。

- browser smoke 新增 `writeOpfsMachineFile(...)`；
- INI-derived custom session 的 custom parameter/tool-table 写入改为走 helper；
- explicit override custom session 的 custom parameter/tool-table 写入改为走 helper；
- helper 只包装 `opfsMachineFilePath(...)` + `saveTextFile(...)`，不改变写入语义；
- 未修改 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter 或
  LinuxCNC-owned runtime semantics。

涉及文件：

```text
wasm-port/tests/browser/interp_smoke.html
```

3. 已完成验证。

```bash
git diff --check
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_interp_wasm.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 browser OPFS machine file write helper
```

4. 下一步工作建议。

继续 staged path guard inventory 第三十三轮，优先扫描 browser OPFS smoke 中
`browser-ini-file-session` 和 `browser-ini-override-session` 的 session path/backup path
组合是否还能再收敛为更小的 session-file helper；仍只加 browser/OPFS boundary guard，
不改变 LinuxCNC-owned interpreter、INI、tool、parameter 或 runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

三十八、2026-06-13 继续执行记录：browser OPFS custom session path helper guard

1. 本批目标。

继续 staged path guard inventory 第三十三轮，收敛 browser OPFS smoke 中 custom
session 的 session path/backup path 组合重复：

```text
browser-ini-file-session
browser-ini-override-session
```

2. 已完成改动。

- browser smoke 新增 `opfsCustomSessionPaths(...)`；
- INI-derived custom session 和 explicit override session 的 session staging path
  map 改为走 helper；
- helper 统一生成 custom parameter/tool-table OPFS path 与对应 WASM path map；
- 保留 `browser-custom.var` / `browser-explicit.var` 等文件名显式可见；
- 未修改 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter 或
  LinuxCNC-owned runtime semantics。

涉及文件：

```text
wasm-port/tests/browser/interp_smoke.html
```

3. 已完成验证。

```bash
git diff --check
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_interp_wasm.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 browser OPFS custom session path helper
```

4. 下一步工作建议。

继续 staged path guard inventory 第三十四轮，优先扫描 browser OPFS smoke 中
saved parameter/tool-table readback 的 backup path 命名、以及 custom session session-path
组合是否还能进一步分层为更小的 path helper；仍只加 browser/OPFS boundary guard，
不改变 LinuxCNC-owned interpreter、INI、tool、parameter 或 runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

三十九、2026-06-13 继续执行记录：browser OPFS custom session wasm path helper guard

1. 本批目标。

继续 staged path guard inventory 第三十四轮，进一步收敛 browser OPFS smoke 中 custom
session 的 session-path 组合，让 helper 同时生成 custom file 的 WASM path。

2. 已完成改动。

- 扩展 `opfsCustomSessionPaths(...)`，由 helper 根据 custom filename 生成
  `/work/<filename>` WASM path；
- INI-derived custom session 和 explicit override session 的 staging map 调用改为只传
  `machineId`、custom parameter filename、custom tool-table filename 和 INI WASM path；
- 保留 `parameterWasmPath`、`toolTableWasmPath` 的 runtime input 显式可见；
- 未修改 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter 或
  LinuxCNC-owned runtime semantics。

涉及文件：

```text
wasm-port/tests/browser/interp_smoke.html
```

3. 已完成验证。

```bash
git diff --check
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_interp_wasm.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 browser OPFS custom session wasm paths
```

4. 下一步工作建议。

继续 staged path guard inventory 第三十五轮，优先扫描 browser OPFS smoke 中
custom session 的 `parameterWasmPath`、`toolTableWasmPath` runtime input 和 helper
生成 path 是否还能通过 shared constants 小范围收敛；仍只加 browser/OPFS boundary
guard，不改变 LinuxCNC-owned interpreter、INI、tool、parameter 或 runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

四十、2026-06-13 继续执行记录：browser OPFS custom session wasm path input guard

1. 本批目标。

继续 staged path guard inventory 第三十五轮，收敛 browser OPFS smoke 中 custom
session 的 `parameterWasmPath`、`toolTableWasmPath` runtime input 与 helper 生成 path
的重复规则。

2. 已完成改动。

- browser smoke 新增 `opfsCustomSessionWasmPath(...)`；
- `opfsCustomSessionPaths(...)` 改为复用该 helper 生成 custom parameter/tool-table
  WASM path；
- INI-derived custom session 和 explicit override session 的 runtime input
  `parameterWasmPath` / `toolTableWasmPath` 改为走同一 helper；
- save parameter/tool-table staging 断言的 expected WASM path 同步改为走同一 helper；
- 未修改 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter 或
  LinuxCNC-owned runtime semantics。

涉及文件：

```text
wasm-port/tests/browser/interp_smoke.html
```

3. 已完成验证。

```bash
git diff --check
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_interp_wasm.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 browser OPFS custom session wasm input paths
```

4. 下一步工作建议。

继续 staged path guard inventory 第三十六轮，优先扫描 browser OPFS smoke 中 custom
session 的 repeated filename literals，判断是否值得用局部 constants 收敛；仍只加
browser/OPFS boundary guard，不改变 LinuxCNC-owned interpreter、INI、tool、parameter
或 runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

四十一、2026-06-13 继续执行记录：browser OPFS custom session filename constants guard

1. 本批目标。

继续 staged path guard inventory 第三十六轮，收敛 browser OPFS smoke 中 custom
session 的 repeated filename literals。

2. 已完成改动。

- INI-derived custom session block 新增局部 constants：
  `iniFileMachineId`、`iniFileParameterFilename`、`iniFileToolTableFilename`；
- explicit override custom session block 新增局部 constants：
  `iniOverrideMachineId`、`explicitParameterFilename`、`explicitToolTableFilename`；
- machine text、custom OPFS write、runtime input、session staging、save staging 均改为
  复用对应局部 constants；
- 常量只保留在 browser smoke 对应测试 block 内，避免扩大抽象范围；
- 未修改 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter 或
  LinuxCNC-owned runtime semantics。

涉及文件：

```text
wasm-port/tests/browser/interp_smoke.html
```

3. 已完成验证。

```bash
git diff --check
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_interp_wasm.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 browser OPFS custom session filename constants
```

4. 下一步工作建议。

继续 staged path guard inventory 第三十七轮，优先扫描 browser OPFS smoke 中 custom
session 的 INI WASM path (`/work/browser-ini-file-session.ini` 与
`/work/browser-ini-override-session.ini`) 是否值得同样局部常量化；仍只加 browser/OPFS
boundary guard，不改变 LinuxCNC-owned interpreter、INI、tool、parameter 或 runtime
semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```

四十二、2026-06-13 继续执行记录：browser OPFS custom session INI wasm path constants guard

1. 本批目标。

继续 staged path guard inventory 第三十七轮，收敛 browser OPFS smoke 中 custom
session 的 INI WASM path 重复 literal。

2. 已完成改动。

- INI-derived custom session block 新增 `iniFileIniWasmPath`；
- explicit override custom session block 新增 `iniOverrideIniWasmPath`；
- `loadMachineSessionFromOpfs(...)` runtime input 与 `opfsCustomSessionPaths(...)`
  staging expected path 均改为复用对应局部 constant；
- 未修改 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter 或
  LinuxCNC-owned runtime semantics。

涉及文件：

```text
wasm-port/tests/browser/interp_smoke.html
```

3. 已完成验证。

```bash
git diff --check
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_interp_wasm.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 browser OPFS custom session INI wasm paths
```

4. 下一步工作建议。

继续 staged path guard inventory 第三十八轮，优先扫描 browser OPFS smoke 中 custom
session block 是否还有 path-only 重复；如果已基本收敛，转向 OPFS ordinary/random
session 的 machine id、file names、WASM paths 是否也能用同样小范围 helper 收敛；
仍只加 browser/OPFS boundary guard，不改变 LinuxCNC-owned interpreter、INI、tool、
parameter 或 runtime semantics。

下一轮第一条命令仍保持：

```bash
git status --short && git log -5 --oneline && tail -n 120 text7.txt && awk '/^[一二三四五六七八九十百]+、/ {print}' text7.txt | sort | uniq -d
```
