Files
cnc_wams/text7.txt

2633 lines
83 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
项目整体完成情况与后续执行计划
生成时间2026-06-13 CST
本文件接替 `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
```
四十三、2026-06-14 继续执行记录browser OPFS ordinary session path constants guard
1. 本批目标。
继续 staged path guard inventory 第三十八轮,转向 ordinary OPFS session收敛
`browser-interp` 的 machine id 与 WASM path 重复 literal。
2. 已完成改动。
- ordinary OPFS session block 新增 `browserInterpMachineId`
- 新增 `browserInterpIniWasmPath`、`browserInterpParameterWasmPath`、
`browserInterpToolTableWasmPath`
- machine text save、session load、session staging、save parameter/tool-table、readback
均改为复用对应局部 constants
- custom session 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 ordinary session path constants
```
4. 下一步工作建议。
继续 staged path guard inventory 第三十九轮,优先扫描 OPFS random toolchanger session
的 machine id、INI/parameter/tool-table WASM 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-14 继续执行记录browser OPFS random session path constants guard
1. 本批目标。
继续 staged path guard inventory 第三十九轮,收敛 OPFS random toolchanger session
的 machine id 与 WASM path 重复 literal。
2. 已完成改动。
- random OPFS session block 新增 `browserRandomMachineId`
- 新增 `browserRandomIniWasmPath`、`browserRandomParameterWasmPath`、
`browserRandomToolTableWasmPath`
- machine text save、session load、session staging、save tool-table、readback 均改为
复用对应局部 constants
- ordinary/custom session 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 random session path constants
```
4. 下一步工作建议。
继续 staged path guard inventory 第四十轮,优先扫描 ordinary/random OPFS session
是否还能共用一个 session path map helper或转向 OPFS saved machine-file readback 的
重复 text verification仍只加 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
```