项目整体完成情况与后续执行计划 生成时间: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/` root parity guard; - context helper 增加固定 manifest guard: - `` - `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.ini linuxcnc/machines//tool.tbl linuxcnc/machines//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/` 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//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//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/` 收敛为 expected root 并 检查 `plan.wasmDir`、`iniPath`、`programPath`、`file.path === file.wasmPath`、source root 和 duplicate staged path; - browser smoke 新增同名 `assertSimConfigStagingPlan(...)`; - browser `loadSimMachineFiles(...)` 将 `/work/browser-sim/` 收敛为 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/` 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 ``` 四十五、2026-06-14 继续执行记录:browser OPFS session wasm map helper guard 1. 本批目标。 继续 staged path guard inventory 第四十轮,收敛 ordinary/random OPFS session 的 session staging WASM path map。 2. 已完成改动。 - browser smoke 新增 `opfsSessionWasmPaths(...)`; - ordinary `browser-interp` session staging 的 `wasm` map 改为走 helper; - random toolchanger session staging 的 `wasm` map 改为走同一 helper; - runtime input 仍保留显式局部 constants; - 未修改 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 wasm map helper ``` 4. 下一步工作建议。 继续 staged path guard inventory 第四十一轮,优先扫描 OPFS saved machine-file readback 的重复 `verifyExpectedOutput(...)` text verification,判断是否适合按 parameter/tool-table saved 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-14 继续执行记录:browser OPFS machine file readback helper guard 1. 本批目标。 继续 staged path guard inventory 第四十一轮,收敛 OPFS saved machine-file readback 的重复 `loadMachineTextFiles(...)` + `verifyExpectedOutput(...)` 形态。 2. 已完成改动。 - browser smoke 新增 `verifyOpfsMachineFileReadback(...)`; - ordinary session saved parameter text readback 改为走 helper; - ordinary session saved tool-table text readback 改为走 helper; - random toolchanger saved tool-table text readback 改为走 helper; - custom session 的 direct OPFS readback 仍保留 `verifyOpfsReadback(...)`; - 未修改 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 readback helper ``` 4. 下一步工作建议。 继续 staged path guard inventory 第四十二轮,优先扫描 OPFS saved parameter/tool-table readback expected text 是否还存在可安全收敛的 fixture text helper;如果收益不明显, 转向 OPFS save result `verifyExpectedOutput(...)` 的重复 result 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 ```