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

生成时间：2026-06-14 CST

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

一、续接状态与防重规则

1. 当前续接点。

`text7.txt` 已推进到：

```text
四十六、2026-06-14 继续执行记录：browser OPFS machine file readback helper guard
```

该批已提交：

```text
c35b8bb Guard browser OPFS machine file readback helper
```

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

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

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

执行规则：

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

切换到 `text8.txt` 前已确认：

```text
git status --short: clean
text7.txt duplicate Chinese headings: none
```

当前最近提交：

```text
c35b8bb Guard browser OPFS machine file readback helper
caa6fd9 Guard browser OPFS session wasm map helper
1a339be Guard browser OPFS random session path constants
ded533e Guard browser OPFS ordinary session path constants
06f4316 Guard browser OPFS custom session INI wasm paths
```

2. WASM port 基础架构稳定。

`wasm-port` 仍按独立移植工作区组织，包含 vendor、runtime/core、runtime/sdk、
runtime/opfs、runtime/ui、native/wasm/browser tests、docs 和 tools。

3. 关键基线保持稳定。

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

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

5. `text7.txt` 最新收敛方向。

`text7.txt` 后半段已经把 staged path guard inventory 从 interpreter/fixture staging
推进到 browser OPFS boundary，最近完成的重点包括：

- custom/ordinary/random OPFS session path constants；
- custom session INI/WASM path helpers；
- OPFS session WASM map helper；
- OPFS saved machine-file readback helper；
- 这些改动均只收敛 browser/OPFS boundary guard，未改变 OPFS bridge behavior、
  file-service、path-model、SDK planner、interpreter 或 LinuxCNC-owned runtime semantics。

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

每批后续改动至少运行：

```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 第四十二轮，优先扫描 OPFS saved parameter/tool-table
readback expected text 是否还存在可安全收敛的 fixture text helper。

执行目标：

- 只处理 `wasm-port/tests/browser/interp_smoke.html` 内的 browser/OPFS test glue；
- 如果 saved parameter/tool-table readback 的 expected text 重复形态明确，则抽出小 helper；
- helper 必须继续通过 `verifyExpectedOutput(...)` 做精确文本校验；
- 保持 custom session 的 direct OPFS readback 语义不变；
- 不改变 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter、
  INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

2. 第一候选批次验证。

执行：

```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 saved text helper
```

3. 后续候选。

如果 saved text helper 收益不明显，转向 OPFS save result
`verifyExpectedOutput(...)` 的重复 result verification 小批收敛。

继续只选：

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

七、2026-06-14 继续执行记录：browser OPFS saved text helper guard

本轮按第一候选批次继续 staged path guard inventory 第四十二轮，范围只触及
`wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。

完成内容：

- 新增 `verifyOpfsSavedText(...)`，统一 saved text readback 的精确文本校验入口；
- `verifyOpfsReadback(...)` 和 `verifyOpfsMachineFileReadback(...)` 均继续通过
  `verifyExpectedOutput(...)` 做精确比对；
- 将 custom INI-named / explicit session 中 saved parameter backup 与 saved
  tool-table direct OPFS readback 调用收敛到统一 helper；
- 保持默认 machine-file readback 与 custom direct OPFS readback 的语义边界清晰；
- 未改变 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter、
  INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

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

关键输出：

```text
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
browser_interp_smoke=ok
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量推进 OPFS save result 的 `verifyExpectedOutput(...)` 重复 result
verification helper。优先只收敛 `wasm-port/tests/browser/interp_smoke.html` 中
`saveMachineParametersToOpfs(...)` / `saveMachineToolTableToOpfs(...)` 的 result
校验胶水，不改变 expected text，不触碰 runtime bridge 与 LinuxCNC 语义。

八、2026-06-14 继续执行记录：browser OPFS save result helper guard

本轮按上一条下一步建议继续推进 OPFS save result verification 小批收敛，范围仍只触及
`wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。

完成内容：

- 新增 `verifyOpfsSaveResult(...)`，统一 OPFS save helper result 的
  `verifyExpectedOutput(...)` 精确校验入口；
- 收敛 `saveMachineParametersToOpfs(...)` / `saveMachineToolTableToOpfs(...)`
  后续 7 个 result 校验调用；
- expected output 行内容未改，只把 `.result` 读取和 `join("\n")` 胶水放入 helper；
- 未改变 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter、
  INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

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

关键输出：

```text
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
browser_interp_smoke=ok
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续沿 browser/OPFS boundary guard 方向小批量推进。优先扫描
`wasm-port/tests/browser/interp_smoke.html` 里 OPFS load result 的重复
`verifyExpectedOutput(...)` 调用，若 `loadedSession.parameters.result` /
`loadedSession.toolTable.result` 等形态足够一致，可抽一个只处理 result 精确校验的
helper。仍不改变 expected text，不触碰 runtime bridge、file-service 或 LinuxCNC
语义。

九、2026-06-14 继续执行记录：browser OPFS load result helper guard

本轮按上一条下一步建议继续推进 OPFS load result verification 小批收敛，范围仍只触及
`wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。

完成内容：

- 新增 `verifyOpfsLoadResult(...)`，统一 OPFS load helper result 的
  `verifyExpectedOutput(...)` 精确校验入口；
- 收敛 7 个 `loadedSession.*.result` / `loadedIni*Session.*.result` 的 load 校验调用；
- expected output 行内容未改，只把 `.result` 读取和 `join("\n")` 胶水放入 helper；
- 未改变 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter、
  INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

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

关键输出：

```text
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
browser_interp_smoke=ok
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续沿 browser/OPFS boundary guard 方向推进，但进入更细一层的 load/save 对称收敛审视：
检查 `opfs_saved_*_text` 与 `opfs_load_*` 附近是否还能抽出更小的 pair helper，前提是
不让 helper 掩盖 expected text 或改变 direct-file 与 machine-file 的边界。

十、2026-06-14 继续执行记录：browser OPFS saved text expected lines guard

本轮按上一条下一步建议审视 load/save pair helper。结论是暂不抽更大的 pair helper，
避免掩盖 parameter/tool-table、direct-file/machine-file 的边界；改为继续小范围收敛
saved text 校验胶水。

完成内容：

- 将 `verifyOpfsSavedText(...)`、`verifyOpfsReadback(...)`、
  `verifyOpfsMachineFileReadback(...)` 统一为接收 expected lines 数组；
- 移除 10 个 saved text/readback 调用点上的重复 `join("\n")` 胶水；
- expected output 行内容仍全部外显，direct OPFS readback 与 machine-file readback
  helper 边界保持不变；
- 未改变 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter、
  INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

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

关键输出：

```text
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
browser_interp_smoke=ok
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续保持小批量 browser/OPFS boundary guard。优先扫描 `interp_smoke.html` 中
OPFS invalid INI session rejection helper 周边，确认是否还有重复的 invalid filename
fixture 构造或 path guard 可收敛；只处理 browser test glue，不改变错误语义或
runtime bridge。

十一、2026-06-14 继续执行记录：browser OPFS invalid INI lines helper guard

本轮按上一条下一步建议扫描 OPFS invalid INI session rejection helper 周边，范围仍只触及
`wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。

完成内容：

- 新增 `opfsInvalidIniLines(...)`，统一 invalid INI fixture 的基础结构构造；
- 收敛 invalid `PARAMETER_FILE` 与 invalid `TOOL_TABLE` 两个 rejection fixture；
- invalid assignment 与 expected regex 仍在调用点外显；
- 未改变错误匹配语义、OPFS bridge behavior、file-service、path-model、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

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

关键输出：

```text
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
browser_interp_smoke=ok
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续保持 browser/OPFS boundary guard 小批量推进。优先扫描
`interp_smoke.html` 中 `verifyOpfsInvalidIniSessionRejects(...)` 内部的 path literal
是否还能用既有 `opfsMachineFilePath(...)` helper 收敛，前提是只改 test glue，
不改变 reject 行为或 path model 实现。

十二、2026-06-14 继续执行记录：browser OPFS invalid INI path helper guard

本轮按上一条下一步建议继续收敛 OPFS invalid INI session rejection helper 内部 path
literal，范围仍只触及 `wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS
test glue。

完成内容：

- 在 `verifyOpfsInvalidIniSessionRejects(...)` 中复用既有
  `opfsMachineFilePath(machineId, "machine.ini")` 生成 expected INI OPFS path；
- 移除 invalid INI rejection helper 内部重复的
  `linuxcnc/machines/${machineId}/machine.ini` literal；
- WASM staging path、reject label、expected regex 与 invalid INI fixture 均未改变；
- 未改变 reject 行为、path model 实现、OPFS bridge behavior、file-service、
  SDK planner、interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

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

关键输出：

```text
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
browser_interp_smoke=ok
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续保持小批量 browser/OPFS boundary guard。优先扫描
`interp_smoke.html` 中 OPFS custom session helpers 周边是否还有硬编码
`machine.ini`、`linuxcnc.var`、`tool.tbl` default path literal 可安全接入既有
path helper；只改测试胶水，不改变 path model 或 runtime bridge。

十三、2026-06-14 继续执行记录：browser OPFS default machine path helper guard

本轮按上一条下一步建议继续扫描 OPFS custom/default session helper 周边的 default
machine file path literal，范围仍只触及 `wasm-port/tests/browser/interp_smoke.html`
的 browser/OPFS test glue。

完成内容：

- 在 `assertMachineTextStorePaths(...)` 中复用 `opfsMachineFilePath(...)` 生成默认
  `machine.ini`、`tool.tbl`、`linuxcnc.var` expected OPFS paths；
- 在 `assertOpfsSessionStaging(...)` 中复用同一 helper 生成默认 INI、parameter、
  tool-table OPFS paths；
- custom session override 仍通过 `expectedPaths.opfs` 显式覆盖，路径模型行为未改；
- 未改变 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter、
  INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

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

关键输出：

```text
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
browser_interp_smoke=ok
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续保持小批量 browser/OPFS boundary guard。优先扫描 OPFS default filename
`machine.ini`、`linuxcnc.var`、`tool.tbl` 是否值得抽成局部常量，只限
`interp_smoke.html` test glue；如果收益不明显，转向其它 browser staging path
literal guard。

十四、2026-06-14 继续执行记录：browser OPFS default filename constants guard

本轮按上一条下一步建议扫描 OPFS default filename 重复形态，确认收益明确后继续在
`wasm-port/tests/browser/interp_smoke.html` 内做小范围 test glue 收敛。

完成内容：

- 新增 `OPFS_DEFAULT_INI_FILENAME`、`OPFS_DEFAULT_PARAMETER_FILENAME`、
  `OPFS_DEFAULT_TOOL_TABLE_FILENAME` 三个局部常量；
- 将默认 machine file path helper、default session staging helper、invalid INI
  path guard、default save staging 调用改为复用这些常量；
- custom fixture filename 仍保持在测试输入处外显；
- 未改变 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter、
  INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

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

关键输出：

```text
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
browser_interp_smoke=ok
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

转向其它 browser staging path literal guard。优先扫描 `interp_smoke.html` 中
`/work/browser-*` WASM path 常量是否还有成组重复可收敛；只做测试胶水 helper 或
常量，不改变 staging path 模型、OPFS bridge 或 LinuxCNC 语义。

十五、2026-06-14 继续执行记录：browser OPFS machine INI wasm path helper guard

本轮按上一条下一步建议扫描 browser WASM staging path literal，优先选择最小且明确的
重复形态：invalid INI rejection helper 内部的 `/work/${machineId}.ini`。

完成内容：

- 新增 `opfsMachineIniWasmPath(machineId)`，统一 machine-id derived INI WASM path；
- 将 `verifyOpfsInvalidIniSessionRejects(...)` 内的 session option 与 staging guard
  expected path 改为复用该 helper；
- 未改变 `/work/...` staging path 内容、reject label、expected regex 或 invalid INI fixture；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

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

关键输出：

```text
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
browser_interp_smoke=ok
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续扫描 `/work/browser-*` staging literal。优先看 direct parameter/tool-table fixture
的 `writeGenerated*Fixture(..., wasmPath, expectedWasmPath, ...)` 双参数重复是否还能
用小 helper 或局部常量收敛；只改 browser test glue，不改变 generated file path。

十六、2026-06-14 继续执行记录：browser generated fixture wasm path helper guard

本轮按上一条下一步建议继续扫描 direct parameter/tool-table fixture 重复形态，范围仍只触及
`wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。

完成内容：

- 将 `writeGeneratedParameterFixture(...)`、`writeGeneratedToolTableFixture(...)`
  的 `expectedWasmPath` 参数设为可选，默认等于 `wasmPath`；
- 收敛 5 个 direct fixture 调用点上的重复 `wasmPath` / `expectedWasmPath`
  双参数传递；
- 路径 drift guard 仍保留，直接写入的 fixture 内容未改；
- 未改变 generated file path、OPFS bridge behavior、file-service、path-model、
  SDK planner、interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

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

关键输出：

```text
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
browser_interp_smoke=ok
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续保持小批量 browser staging path literal guard。优先扫描 `/work/browser-*`
的 direct session WASM path 常量，看是否还能把 `browserInterp*` 与 `browserRandom*`
分组的重复前缀抽成局部 helper；只改 browser test glue，不改变 staging model。

十七、2026-06-14 继续执行记录：browser OPFS session wasm path group helper guard

本轮按上一条下一步建议继续扫描 direct session WASM path 常量，范围仍只触及
`wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。

完成内容：

- 新增 `opfsBrowserSessionWasmPaths(prefix)`，统一生成 direct browser session 的
  INI、parameter、tool-table WASM paths；
- 将 `browserInterp*WasmPath` 三元组收敛为 `browserInterpWasmPaths`；
- 将 `browserRandom*WasmPath` 三元组收敛为 `browserRandomWasmPaths`；
- 未改变实际 `/work/browser-*` staging path、OPFS bridge behavior、file-service、
  path-model、SDK planner、interpreter、INI、tool、parameter 或 LinuxCNC-owned
  runtime semantics。

验证已通过：

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

关键输出：

```text
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
browser_interp_smoke=ok
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量扫描 browser staging path literal。优先看 custom INI-named / explicit session
的 `iniFileIniWasmPath`、`iniOverrideIniWasmPath` 是否能复用一个 session INI WASM
path helper；只改测试胶水，不改变 staging path 字符串或 custom filename 输入。

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

本轮按上一条下一步建议继续扫描 custom INI-named / explicit session 的 INI WASM path
literal，范围仍只触及 `wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS
test glue。

完成内容：

- 将 `iniFileIniWasmPath` 改为复用 `opfsMachineIniWasmPath(iniFileMachineId)`；
- 将 `iniOverrideIniWasmPath` 改为复用 `opfsMachineIniWasmPath(iniOverrideMachineId)`；
- 未改变实际 `/work/browser-ini-file-session.ini`、
  `/work/browser-ini-override-session.ini` staging path 字符串；
- custom parameter/tool-table filename 输入仍在测试处外显；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

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

关键输出：

```text
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
browser_interp_smoke=ok
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量扫描 browser staging path literal。优先看 custom session 中
`opfsCustomSessionWasmPath(...)` 调用是否还有重复 filename-derived WASM path 可用
局部变量收敛；只改测试胶水，不改变 custom filename 输入或 path 字符串。

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

本轮按上一条下一步建议继续扫描 custom session 中 filename-derived WASM path 的重复调用，
范围仍只触及 `wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。

完成内容：

- 为 INI-named session 增加 `iniFileParameterWasmPath`、
  `iniFileToolTableWasmPath` 局部变量；
- 为 explicit session 增加 `explicitParameterWasmPath`、
  `explicitToolTableWasmPath` 局部变量；
- 收敛 load/save staging 调用中重复的 `opfsCustomSessionWasmPath(...)` 调用；
- custom parameter/tool-table filename 输入仍在测试处外显，实际 `/work/<filename>`
  staging path 字符串未改变；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

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

关键输出：

```text
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
browser_interp_smoke=ok
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser staging path literal guard。优先扫描 `interp_smoke.html` 中
OPFS custom session load/save blocks 是否还有重复的 OPFS path locals 可收敛；
只改测试胶水，不改变 custom filename 输入、OPFS path 或 WASM path 字符串。

二十、2026-06-14 继续执行记录：browser OPFS custom session path locals guard

本轮按上一条下一步建议继续扫描 OPFS custom session load/save blocks 中的重复 path
派生，范围仍只触及 `wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test
glue。

完成内容：

- 扩展 `opfsCustomSessionPaths(...)`，让它接收调用方已经计算好的
  parameter/tool-table WASM path；
- INI-named session 与 explicit session 的 staging 断言均复用现有
  `iniFileParameterWasmPath` / `iniFileToolTableWasmPath` 与
  `explicitParameterWasmPath` / `explicitToolTableWasmPath`；
- 收敛 custom session path helper 内重复的 `opfsCustomSessionWasmPath(...)`
  filename-derived WASM path 派生；
- custom parameter/tool-table filename 输入、OPFS path、WASM path 字符串均未改变；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 `interp_smoke.html` 中
custom session saved parameter/tool-table readback blocks 是否还能统一为
`verifyOpfsReadback(...)` 或已有 saved-text helper 调用；只改测试胶水，不改变
custom filename 输入、OPFS path、WASM path 字符串或保存/读取行为。

二十一、2026-06-14 继续执行记录：browser OPFS custom session readback helper guard

本轮按上一条下一步建议继续收敛 custom session saved parameter/tool-table readback
blocks，范围仍只触及 `wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test
glue。

完成内容：

- 将 INI-named session 的 saved parameter backup readback 改为复用
  `verifyOpfsReadback(...)`；
- 将 INI-named session 的 saved tool-table readback 改为复用
  `verifyOpfsReadback(...)`；
- 将 explicit session 的 saved parameter、parameter backup、tool-table readback
  改为复用 `verifyOpfsReadback(...)`；
- 所有 readback 仍通过 `verifyExpectedOutput(...)` 做精确文本校验；
- custom parameter/tool-table filename 输入、OPFS path、WASM path 字符串与
  save/read 行为均未改变；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 `interp_smoke.html` 中
custom session load/save blocks 的 expected output arrays 是否还有重复的
parameter/tool-table key lines 可安全抽成局部常量或小 helper；只改测试胶水，保持
精确文本校验，不改变 custom filename 输入、OPFS path、WASM path 字符串或保存/读取行为。

二十二、2026-06-14 继续执行记录：browser OPFS custom session result lines helper guard

本轮按上一条下一步建议继续收敛 custom session load/save blocks 的 expected output
arrays，范围仍只触及 `wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test
glue。

完成内容：

- 新增 `opfsParameterResultLines(...)`，统一 custom session parameter
  restore/save result 中 5161、5162、5221、5399 的 expected lines；
- 新增 `opfsToolTableResultLines(...)`，统一 custom session tool-table
  load/save result 中 toolno/pocketno 以及可选附加字段的 expected lines；
- INI-named session 与 explicit session 的 parameter load/save 校验改为复用
  `opfsParameterResultLines(...)`；
- INI-named session 与 explicit session 的 tool-table load/save 校验改为复用
  `opfsToolTableResultLines(...)`；
- 所有 load/save result 仍通过 `verifyExpectedOutput(...)` 做精确文本校验；
- custom parameter/tool-table filename 输入、OPFS path、WASM path 字符串与
  save/read 行为均未改变；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 custom session saved parameter
readback 与 backup readback expected text 是否还能用只读 expected-lines helper 收敛；
只改测试胶水，保持精确文本校验，不改变 custom filename 输入、OPFS path、WASM path
字符串或保存/读取行为。

二十三、2026-06-14 继续执行记录：browser OPFS custom session parameter text helper guard

本轮按上一条下一步建议继续收敛 custom session saved parameter readback 与 backup
readback expected text，范围仍只触及 `wasm-port/tests/browser/interp_smoke.html` 的
browser/OPFS test glue。

完成内容：

- 新增 `opfsParameterTextLines(...)`，统一 custom session saved parameter text 中
  5161、5162、5221、5399 的 expected lines；
- INI-named session 的 saved parameter readback 与 backup readback 均复用
  `opfsParameterTextLines(...)`；
- explicit session 的 saved parameter readback 与 backup readback 均复用
  `opfsParameterTextLines(...)`；
- tab 分隔的 saved parameter text 与 space 分隔的 backup text 仍在调用处显式区分；
- 所有 readback 仍通过 `verifyExpectedOutput(...)` 做精确文本校验；
- custom parameter/tool-table filename 输入、OPFS path、WASM path 字符串与
  save/read 行为均未改变；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 custom session tool-table saved
text expected lines 是否还能用只读 expected-lines helper 收敛；只改测试胶水，保持
精确文本校验，不改变 custom filename 输入、OPFS path、WASM path 字符串或保存/读取行为。

二十四、2026-06-14 继续执行记录：browser OPFS custom session tool text helper guard

本轮按上一条下一步建议继续收敛 custom session saved tool-table readback expected
text，范围仍只触及 `wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test
glue。

完成内容：

- 新增 `opfsToolTableTextLines(...)`，统一 custom session saved tool-table text 中
  tool、pocket、Z offset、diameter、comment 的 expected lines；
- INI-named session 的 saved tool-table readback 复用
  `opfsToolTableTextLines(...)`；
- explicit session 的 saved tool-table readback 复用
  `opfsToolTableTextLines(...)`；
- 所有 readback 仍通过 `verifyExpectedOutput(...)` 做精确文本校验；
- custom parameter/tool-table filename 输入、OPFS path、WASM path 字符串与
  save/read 行为均未改变；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 custom session fixture input text
写入处是否还能用只读 expected-lines/helper 收敛，例如 parameter seed text 或
tool-table seed text；只改测试胶水，保持精确文本校验，不改变 custom filename 输入、
OPFS path、WASM path 字符串或保存/读取行为。

二十五、2026-06-14 继续执行记录：browser OPFS custom session parameter seed helper guard

本轮按上一条下一步建议继续收敛 custom session fixture input text 写入处，范围仍只
触及 `wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。

完成内容：

- 新增 `opfsParameterSeedText(...)`，统一 custom session parameter seed text 中
  5161、5162、5220、5221、5399 的写入文本；
- INI-named session 的 custom parameter seed 写入复用
  `opfsParameterSeedText(...)`；
- explicit session 的 custom parameter seed 写入复用
  `opfsParameterSeedText(...)`；
- seed text 仍保留 `5220 1` 和末尾空行，实际写入内容不变；
- custom parameter/tool-table filename 输入、OPFS path、WASM path 字符串与
  save/read 行为均未改变；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 custom session fixture input text
写入处的 tool-table seed text 是否还能用只读 helper 收敛；只改测试胶水，保持精确
文本校验，不改变 custom filename 输入、OPFS path、WASM path 字符串或保存/读取行为。

二十六、2026-06-14 继续执行记录：browser OPFS custom session tool seed helper guard

本轮按上一条下一步建议继续收敛 custom session fixture input text 写入处的
tool-table seed text，范围仍只触及 `wasm-port/tests/browser/interp_smoke.html` 的
browser/OPFS test glue。

完成内容：

- 新增 `opfsToolTableSeedText(...)`，统一 custom session tool-table seed text 中
  tool、pocket、Z offset、diameter、comment 的写入文本；
- INI-named session 的 custom tool-table seed 写入复用
  `opfsToolTableSeedText(...)`；
- explicit session 的 custom tool-table seed 写入复用
  `opfsToolTableSeedText(...)`；
- seed text 仍保留单行 LinuxCNC tool-table 输入格式和末尾换行，实际写入内容不变；
- custom parameter/tool-table filename 输入、OPFS path、WASM path 字符串与
  save/read 行为均未改变；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 custom session INI seed text 是否
还能用只读 helper 收敛，例如 MACHINE、PARAMETER_FILE、TOOL_TABLE 的 INI lines；
只改测试胶水，保持精确文本校验，不改变 custom filename 输入、OPFS path、WASM path
字符串或保存/读取行为。

二十七、2026-06-14 继续执行记录：browser OPFS custom session INI seed helper guard

本轮按上一条下一步建议继续收敛 custom session INI seed text，范围仍只触及
`wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。

完成内容：

- 新增 `opfsCustomSessionIniText(...)`，统一 custom session INI seed text 中
  `[EMC]`、`MACHINE`、`[RS274NGC]`、`PARAMETER_FILE`、`[EMCIO]`、
  `TOOL_TABLE` 的写入文本；
- INI-named session 的 custom INI seed 写入复用
  `opfsCustomSessionIniText(...)`；
- explicit override session 的 ignored INI filename seed 写入复用
  `opfsCustomSessionIniText(...)`；
- INI seed text 仍保留各 section 间空行和末尾空行，实际写入内容不变；
- custom parameter/tool-table filename 输入、OPFS path、WASM path 字符串与
  save/read 行为均未改变；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 custom session 中
`loadMachineSessionFromOpfs(...)` options object 是否还能用 helper/locals 收敛；
只改测试胶水，不改变 custom filename 输入、OPFS path、WASM path 字符串或保存/读取行为。

二十八、2026-06-14 继续执行记录：browser OPFS custom session load options helper guard

本轮按上一条下一步建议继续收敛 custom session 的
`loadMachineSessionFromOpfs(...)` options object，范围仍只触及
`wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。

完成内容：

- 新增 `opfsCustomSessionLoadOptions(...)`，统一 custom session load options 中
  `iniSdk`、`iniWasmPath`、`parameterWasmPath`、`toolTableWasmPath` 的构造；
- INI-named session 的 load options 复用 `opfsCustomSessionLoadOptions(...)`；
- explicit override session 的 load options 复用 `opfsCustomSessionLoadOptions(...)`，
  并继续显式传入 `parameterFilename` 与 `toolTableFilename` overrides；
- custom parameter/tool-table filename 输入、OPFS path、WASM path 字符串与
  save/read 行为均未改变；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 custom session 的 save
parameter/tool-table options object 是否还能用 locals/helper 收敛；只改测试胶水，
不改变 custom filename 输入、OPFS path、WASM path 字符串或保存/读取行为。

二十九、2026-06-14 继续执行记录：browser OPFS custom session save options helper guard

本轮按上一条下一步建议继续收敛 custom session 的 save parameter/tool-table options
object，范围仍只触及 `wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test
glue。

完成内容：

- 新增 `opfsLoadedFileSaveOptions(...)`，统一从 loaded session file entry 派生
  `{ opfsPath, wasmPath }` save options；
- INI-named session 的 parameter save options 复用 `opfsLoadedFileSaveOptions(...)`；
- INI-named session 的 tool-table save options 复用 `opfsLoadedFileSaveOptions(...)`；
- explicit override session 的 parameter save options 复用
  `opfsLoadedFileSaveOptions(...)`；
- explicit override session 的 tool-table save options 复用
  `opfsLoadedFileSaveOptions(...)`；
- custom parameter/tool-table filename 输入、OPFS path、WASM path 字符串与
  save/read 行为均未改变；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 custom session 中 saved
parameter value object 是否还能用 helper/locals 收敛；只改测试胶水，不改变参数值、
custom filename 输入、OPFS path、WASM path 字符串或保存/读取行为。

三十、2026-06-14 继续执行记录：browser OPFS custom session parameter values helper guard

本轮按上一条下一步建议继续收敛 custom session 中 saved parameter value object，
范围仍只触及 `wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。

完成内容：

- 新增 `opfsParameterValues(...)`，统一 custom session save parameter 时
  5161、5162、5220、5221、5399 的 value object 构造；
- INI-named session 的 saved parameter value object 复用
  `opfsParameterValues(...)`；
- explicit override session 的 saved parameter value object 复用
  `opfsParameterValues(...)`；
- `5220` 仍固定为 `1.0`，实际保存参数值不变；
- custom parameter/tool-table filename 输入、OPFS path、WASM path 字符串与
  save/read 行为均未改变；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 custom session 中 repeated
parameter value groups 是否还能和 result/readback expected helper 对齐为 locals；
只改测试胶水，不改变参数值、custom filename 输入、OPFS path、WASM path 字符串或
保存/读取行为。

三十一、2026-06-14 继续执行记录：browser OPFS custom session parameter value locals guard

本轮按上一条下一步建议继续收敛 custom session 中 repeated parameter value groups，
范围仍只触及 `wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。

完成内容：

- 为 INI-named session 增加 `iniNamedParameterValues`、
  `iniNamedParameterExpectedValues`、`iniNamedParameterReadbackValues` 局部常量；
- INI-named session 的 save value object、save result expected lines、saved
  parameter readback expected lines 均复用这些局部常量；
- 为 explicit override session 增加 `explicitParameterValues`、
  `explicitParameterExpectedValues`、`explicitParameterReadbackValues` 局部常量；
- explicit override session 的 save value object、save result expected lines、saved
  parameter readback expected lines 均复用这些局部常量；
- 数字保存值与字符串 expected/readback 值仍分开显式声明，未新增格式转换逻辑；
- `5220` 仍固定为 `1.0`，实际保存参数值不变；
- custom parameter/tool-table filename 输入、OPFS path、WASM path 字符串与
  save/read 行为均未改变；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 custom session 中 initial
parameter seed/load/backup expected value groups 是否还能对齐为 locals；只改测试胶水，
不改变参数值、custom filename 输入、OPFS path、WASM path 字符串或保存/读取行为。

三十二、2026-06-14 继续执行记录：browser OPFS custom session initial parameter locals guard

本轮按上一条下一步建议继续收敛 custom session 中 initial parameter
seed/load/backup expected value groups，范围仍只触及
`wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。

完成内容：

- 为 INI-named session 增加 `iniNamedInitialParameterValues` 局部常量；
- INI-named session 的 parameter seed text、restore result expected lines、backup
  readback expected lines 均复用 `iniNamedInitialParameterValues`；
- 为 explicit override session 增加 `explicitInitialParameterValues` 局部常量；
- explicit override session 的 parameter seed text、restore result expected lines、
  backup readback expected lines 均复用 `explicitInitialParameterValues`；
- initial values 仍保持字符串形式显式声明，未新增格式转换逻辑；
- custom parameter/tool-table filename 输入、OPFS path、WASM path 字符串与
  save/read 行为均未改变；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 custom session 中 tool-table
value groups 是否还能和 load/save/readback helper 对齐为 locals；只改测试胶水，
不改变 tool-table 输入、custom filename 输入、OPFS path、WASM path 字符串或保存/读取行为。

三十三、2026-06-14 继续执行记录：browser OPFS custom session tool-table value locals guard

本轮按上一条下一步建议继续收敛 custom session 中 tool-table value groups，范围仍只
触及 `wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。

完成内容：

- 为 INI-named session 增加 `iniNamedToolTableValues`、
  `iniNamedToolTableLoadValues`、`iniNamedToolTableReadbackValues` 局部常量；
- INI-named session 的 tool-table seed text、load result expected lines、save
  result expected lines、saved tool-table readback expected lines 均复用这些局部常量；
- 为 explicit override session 增加 `explicitToolTableValues`、
  `explicitToolTableLoadValues`、`explicitToolTableReadbackValues` 局部常量；
- explicit override session 的 tool-table seed text、load result expected lines、
  save result expected lines、saved tool-table readback expected lines 均复用这些局部常量；
- seed、load、readback 的 tool-table value 字符串仍分开显式声明，未新增格式转换逻辑；
- custom parameter/tool-table filename 输入、OPFS path、WASM path 字符串与
  save/read 行为均未改变；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 custom session 中 filename groups
是否还能和 path/load/staging helper 对齐为 locals；只改测试胶水，不改变 custom
filename 输入、OPFS path、WASM path 字符串或保存/读取行为。

三十四、2026-06-14 继续执行记录：browser OPFS INI-named session file group helper guard

本轮按上一条下一步建议继续收敛 custom session filename groups，范围仍只触及
`wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。

完成内容：

- 新增 `opfsCustomSessionFiles(...)`，统一 custom session parameter/tool-table
  filename 与对应 WASM path 的派生；
- INI-named session 的 `browser-custom.var` 与 `browser-custom-tool.tbl` 改为通过
  `opfsCustomSessionFiles(...)` 生成 filename group；
- INI-named session 的 parameter/tool-table WASM paths 改为复用该 filename group
  派生出的 `/work/<filename>` paths；
- 实际 custom filename 输入、OPFS path、WASM path 字符串与 save/read 行为均未改变；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 explicit override session 的
filename group 是否也能复用 `opfsCustomSessionFiles(...)`；只改测试胶水，不改变
custom filename 输入、OPFS path、WASM path 字符串或保存/读取行为。

三十五、2026-06-14 继续执行记录：browser OPFS explicit session file group helper guard

本轮按上一条下一步建议继续收敛 explicit override session filename groups，范围仍只
触及 `wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。

完成内容：

- explicit override session 的 `browser-explicit.var` 与
  `browser-explicit-tool.tbl` 改为通过 `opfsCustomSessionFiles(...)` 生成
  filename group；
- explicit override session 的 parameter/tool-table filename locals 改为复用
  该 filename group；
- explicit override session 的 parameter/tool-table WASM paths 改为复用该
  filename group 派生出的 `/work/<filename>` paths；
- 实际 custom filename 输入、OPFS path、WASM path 字符串与 save/read 行为均未
  改变；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 OPFS save result
`verifyExpectedOutput(...)` 的重复 result verification 是否还能收敛为小 helper；
只改测试胶水，不改变保存结果内容、OPFS path、WASM path 字符串或保存/读取行为。

三十六、2026-06-14 继续执行记录：browser OPFS direct session load options helper guard

本轮按防重检查确认 save/load result helper 已存在，避免重复做旧批次；改为继续收敛
direct browser session 的 `loadMachineSessionFromOpfs(...)` options object，范围仍只
触及 `wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。

完成内容：

- 新增 `opfsSessionLoadOptions(...)`，统一 direct browser session 中
  `iniWasmPath`、`parameterWasmPath`、`toolTableWasmPath` 的 load options 构造；
- `browser-interp` session 的 load options 改为复用
  `opfsSessionLoadOptions(browserInterpWasmPaths)`；
- `browser-random-toolchanger` session 的 load options 改为复用
  `opfsSessionLoadOptions(browserRandomWasmPaths, { iniSdk: ini })`；
- custom session override 继续保留 `opfsCustomSessionLoadOptions(...)`，未混合
  custom filename override 边界；
- 实际 OPFS path、WASM path 字符串、save/read/load 行为均未改变；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 direct browser session 的
parameter fixture value groups 是否能像 custom session 一样收敛为局部常量或复用
现有 parameter helper；只改测试胶水，不改变参数值、OPFS path、WASM path 字符串或
保存/读取行为。

三十七、2026-06-14 继续执行记录：browser OPFS direct session parameter seed helper guard

本轮按上一条下一步建议继续收敛 direct browser session 的 parameter fixture value
groups，范围仍只触及 `wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS
test glue。

完成内容：

- 新增 `browserDirectParameterSeedLines(...)`，统一 direct browser session parameter
  seed fixture 中 5161、5162、5220、5221、5399 的写入 lines；
- `browser-interp` session 的 parameter seed text 改为复用
  `browserDirectParameterSeedLines(true)`，仍保留 `<_named_param> 123`；
- `browser-random-toolchanger` session 的 parameter seed text 改为复用
  `browserDirectParameterSeedLines()`；
- seed text 仍保留 `5220 1` 和末尾空行，实际写入内容不变；
- 未改变参数值、OPFS path、WASM path 字符串、save/read/load 行为；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 direct `browser-interp` session 的
saved parameter value object、save result expected lines、saved/readback expected
lines 是否能对齐为 locals 或复用现有 `opfsParameter*` helpers；只改测试胶水，不改变
参数值、OPFS path、WASM path 字符串或保存/读取行为。

三十八、2026-06-14 继续执行记录：browser OPFS direct session parameter value locals guard

本轮按上一条下一步建议继续收敛 direct `browser-interp` session 的 saved parameter
value groups，范围仍只触及 `wasm-port/tests/browser/interp_smoke.html` 的
browser/OPFS test glue。

完成内容：

- 为 direct `browser-interp` session 增加 `browserInterpParameterValues`、
  `browserInterpParameterExpectedValues`、`browserInterpParameterReadbackValues`
  局部常量；
- saved parameter value object 改为复用既有 `opfsParameterValues(...)`；
- save result expected lines 改为复用既有 `opfsParameterResultLines(...)`；
- saved parameter machine-file readback expected lines 改为复用既有
  `opfsParameterTextLines(...)`，并继续显式保留 `absent=<_named_param>`；
- 数字保存值与字符串 expected/readback 值仍分开显式声明，未新增格式转换逻辑；
- `5220` 仍由 `opfsParameterValues(...)` 固定为 `1.0`，实际保存参数值不变；
- 未改变参数值、OPFS path、WASM path 字符串、save/read/load 行为；
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
  interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。

验证已通过：

```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
browser_interp_smoke=ok
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
host_wasm_opfs_browser_smokes=ok
```

下一步建议：

继续小批量 browser OPFS test glue guard。优先扫描 direct `browser-interp` session 的
initial parameter load result 与 backup readback expected lines 是否能复用
`browserDirectParameterSeedLines(...)` 或现有 `opfsParameter*` helpers；只改测试胶水，
不改变参数值、OPFS path、WASM path 字符串或保存/读取行为。
