项目整体完成情况与后续执行计划 生成时间:2026-06-14 CST 本文件接替 `text9.txt`。后续工作按 `text10.txt` 执行;除非明确要求审计旧记录, 不要再回到 `text1/text2/text3/text4/text5/text6/text7/text8/text9` 扩展进度。 `text9.txt` 作为历史归档保留。 一、续接状态与防重规则 1. 当前续接点。 `text9.txt` 已推进到: ```text 五十一、2026-06-14 继续执行记录:browser ini-named readback path groups guard ``` 该批已提交并推送: ```text 0b7771b 继续推进浏览器 ini-named readback path 组 guard ``` 本文件从 `text10.txt` 重新开始记录后续进度。 2. 每轮开始前必须先执行。 ```bash git status --short git log -5 --oneline tail -n 120 text10.txt awk '/^[一二三四五六七八九十百]+、/ {print}' text10.txt | sort | uniq -d ``` 执行规则: - 如果 `git status --short` 是 clean,且最新提交已经包含当前建议工作,不要重复追加记录; - 每轮只追加一个新的中文编号记录;提交前再次检查标题唯一性; - `text10.txt` 只记录新的后续进度,不复制 `text9.txt` 的长历史; - 每批完成后,如果要写记录,先写 `text10.txt`,再提交该批代码和记录; - 如果发现重复记录,先做 dedupe 清理并提交,再继续新功能或新 guard; - `text9.txt` 不再追加新进度,除非明确要求审计或修正历史记录。 二、当前项目纪律 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. 当前工作树状态。 切换到 `text10.txt` 前已确认: ```text git status --short: clean text9.txt duplicate Chinese headings: none ``` 当前最近提交: ```text 0b7771b 继续推进浏览器 ini-named readback path 组 guard c0bce74 继续推进浏览器 custom saved staging 断言组 guard 32aeba7 继续推进浏览器 saved staging 断言组 guard 7d9cf88 继续推进浏览器 random session path 断言组 guard cba210b 继续推进浏览器 session path 断言组 guard ``` 2. WASM port 基础架构稳定。 `wasm-port` 仍按独立移植工作区组织,包含 vendor、runtime/core、runtime/sdk、 runtime/opfs、runtime/ui、native/wasm/browser tests、docs 和 tools。 3. 关键基线保持稳定。 - `linuxcnc/nc_files` native Layer 1: - `total 107` - `pass 101` - `expected_fail 6` - `unexpected_fail 0` - `linuxcnc/configs/sim` native Layer 2: - `total 159` - `pass 151` - `expected_fail 8` - `unexpected_fail 0` - Node sim-config inventory: - `executed=28` - `passed=28` - `skipped=131` - `unexpected_fail=0` 4. blocked runtime family 仍未 promotion。 仍 blocked,不允许 promotion: - `L4-USER-M-PROCESS` - `L4-TOOL-DB` - `L4-PYTHON-REMAP` 当前 host 仍按缺少 LinuxCNC host runtime 处理,不执行任何: ```bash ENABLE_MILLTURN_USER_M_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_millturn_user_m_runtime.sh ENABLE_TOOL_DB_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_tool_db_runtime.sh ENABLE_PYTHON_REMAP_RUNTIME_PROBE=1 bash wasm-port/tests/native/probe_python_remap_runtime.sh ``` 5. `text9.txt` 最新收敛方向。 `text9.txt` 后半段继续沿 browser/OPFS boundary guard 小批量推进,最近完成的重点包括: - browser-random/direct-random saved tool-table expected line groups; - browser-random/direct-random tool-table load/save result line groups; - browser-interp/direct tool-table load/save result line groups; - browser-interp/direct parameter restore/save/readback/backup groups; - ini-named/explicit session parameter/tool-table result/backing text groups; - invalid INI session reject input/error groups; - browser-interp、browser-random、ini-named、explicit session path assertion groups; - browser-interp/browser-random saved file staging groups; - ini-named/explicit custom session saved file staging groups; - ini-named parameter/tool-table readback path groups。 这些改动均只收敛 browser/OPFS test glue 与 boundary guard,未改变 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。 四、当前必须保持通过的验证入口 每批后续改动至少运行: ```bash git diff --check wasm-port/tools/verify_vendor_sync.sh wasm-port/tools/verify_no_standalone_cnc_semantics.sh SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh wasm-port/tests/host/verify_host_smokes.sh ``` 涉及 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. 当前第一候选批次。 继续小批量 browser test glue guard。优先扫描 explicit session saved readback path groups, 看是否能像 ini-named session 一样局部常量化: - `loadedIniOverrideSession.parameters.opfsPath`; - `savedExplicitParameters.backupOpfsPath`; - `loadedIniOverrideSession.toolTable.opfsPath`。 执行目标: - 只处理 `wasm-port/tests/browser/interp_smoke.html` 内的 browser/OPFS test glue; - 优先让 explicit session saved parameter/tool-table readback path groups 使用局部常量; - 保持 expected readback text、OPFS path、WASM path、machine id、filename 与 save/load 行为不变; - 不改变参数值、tool-table 值、INI 内容、OPFS path、WASM path 字符串; - 不改变 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter、 INI、tool、parameter 或 LinuxCNC-owned runtime semantics。 2. 第一候选批次验证。 执行: ```bash git diff --check SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh wasm-port/tools/verify_vendor_sync.sh wasm-port/tools/verify_no_standalone_cnc_semantics.sh SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh wasm-port/tests/host/verify_host_smokes.sh ``` 如果通过,提交建议: ```text 继续推进浏览器 explicit readback path 组 guard ``` 3. 后续候选。 如果 explicit readback path group 收益不明显,转向 machine text store path assertion groups,重点检查 `saveMachineTextFiles(...)` 相关输入是否已有可复用局部常量或 helper。 继续只选: - browser/OPFS test glue; - path/readback/staging/result/expected line 的局部常量化; - 已有 helper 的复用; - 不改变行为的小批量 guard。 避免: - 新增抽象过度包装; - 把 save API 输入对象提成无用常量; - 触碰 runtime、SDK、OPFS bridge 或 LinuxCNC-owned semantics。 二、2026-06-14 继续执行记录:browser OPFS session snapshot manifest helper 本轮按“暂停性能测试,进行实质性功能推进”的要求,补充了一个新的 OPFS/runtime 能力:生成可恢复的机器会话快照清单,范围仍局限在 `runtime/opfs` 与对应 smoke。 完成内容: - 在 `wasm-port/runtime/opfs/snapshot-store.js` 新增 `createMachineSessionSnapshotPayload(machineId, options)`; - 该 helper 基于现有 `path-model` 生成机器级 session snapshot payload,默认包含 `ini`、`parameters`、`toolTable`,可选包含 `gcode`; - 支持自定义 `iniOpfsPath`、`parameterOpfsPath`、`toolTableOpfsPath`、`gcodeOpfsPath`; - 支持自定义 `iniFilename`、`parameterFilename`、`toolTableFilename`、`gcodeFilename`; - 在 Node OPFS smoke 与 browser INI panel smoke 中补了覆盖,验证默认路径、自定义 文件名和 G-code 路径均能按预期生成; - 未改变 session snapshot 的格式、版本、存储位置或既有 save/load 行为; - 未改变 OPFS bridge behavior、file-service、SDK planner、interpreter、INI、tool、 parameter 或 LinuxCNC-owned runtime semantics。 验证已通过: ```bash git diff --check wasm-port/tests/opfs/node/verify_file_service.sh SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_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 opfs_file_service_node_smoke=ok browser_ini_opfs_smoke=ok vendor sync up to date standalone CNC semantics guard complete interp_wasm_node_smoke=ok sim_configs_wasm_node_inventory_executed=28 sim_configs_wasm_node_inventory_passed=28 sim_configs_wasm_node_inventory_skipped=131 sim_configs_wasm_node_inventory_unexpected_fail=0 browser_interp_smoke=ok host_wasm_opfs_browser_smokes=ok ``` 下一步建议: 继续把这个 helper 扩到更明确的实际入口,优先扫描 browser/Node 里已有的 session snapshot 调用是否能复用它,或者把 machine session 生成入口整理到更显式的 API; 只做 OPFS/filesystem/browser boundary 相关功能推进,不碰 CNC 语义。 一、2026-06-14 继续执行记录:browser explicit readback path groups guard 本轮按 `text10.txt` 第一候选批次继续收敛 explicit session saved readback path groups, 范围仍只触及 `wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。 完成内容: - 新增 `explicitSavedParameterTextPath` 局部常量,承载 explicit parameter saved text readback path; - 新增 `explicitSavedParameterBackupPath` 局部常量,承载 explicit parameter backup text readback path; - 新增 `explicitSavedToolTableTextPath` 局部常量,承载 explicit tool-table saved text readback path; - explicit parameter/tool-table saved readback 断言改为复用上述 path groups; - 保持 explicit saved file expected OPFS path、WASM path、machine id、filename 与 readback text 不变; - 未改变任何 expected 字符串、输入、OPFS path、WASM path 字符串或 load/save/read 行为; - 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、 interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。 验证已通过: ```bash git diff --check SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh wasm-port/tools/verify_vendor_sync.sh wasm-port/tools/verify_no_standalone_cnc_semantics.sh SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh wasm-port/tests/host/verify_host_smokes.sh ``` 关键输出: ```text vendor sync up to date standalone CNC semantics guard complete interp_wasm_node_smoke=ok sim_configs_wasm_node_inventory_executed=28 sim_configs_wasm_node_inventory_passed=28 sim_configs_wasm_node_inventory_skipped=131 sim_configs_wasm_node_inventory_unexpected_fail=0 browser_interp_smoke=ok host_wasm_opfs_browser_smokes=ok ``` 下一步建议: 继续小批量 browser test glue guard。优先扫描 machine text store path assertion groups 或剩余 OPFS readback path groups 是否还能进一步局部常量化或复用 existing helpers; 只改测试胶水,不改变输入、OPFS path、WASM path 字符串或保存/读取行为。