500 lines
17 KiB
Plaintext
500 lines
17 KiB
Plaintext
项目整体完成情况与后续执行计划
|
||
|
||
生成时间:2026-06-13 CST
|
||
|
||
本文件接替 `text5.txt`。后续工作按 `text6.txt` 执行;除非明确要求审计旧记录,
|
||
不要再回到 `text1/text2/text3/text4/text5` 扩展进度。`text5.txt` 作为历史归档
|
||
保留。
|
||
|
||
一、text5 重复记录问题处理结果
|
||
|
||
1. 问题原因。
|
||
|
||
`text5.txt` 后段出现过重复进度记录,主要发生在快速连续执行时:
|
||
|
||
- 工作已经在提交中完成,但继续轮次又根据旧上下文重复追加同名记录;
|
||
- 未先核对 `git status --short`、`git log -n`、`tail text5.txt` 和标题唯一性;
|
||
- 在记录 `m98m99`、`g10`、`g52`、early direct-file guard 时,曾出现同编号或同主题
|
||
重复段。
|
||
|
||
2. 已完成清理。
|
||
|
||
当前 `text5.txt` 已完成重复记录清理:
|
||
|
||
- 当前记录范围到 `八十三、2026-06-13 继续执行记录:more direct-file staging path guard`;
|
||
- 标题唯一性核查命令:
|
||
|
||
```bash
|
||
awk '/^[一二三四五六七八九十百]+、/ {print}' text5.txt | sort | uniq -d
|
||
```
|
||
|
||
当前输出为空,表示没有重复标题。
|
||
|
||
3. 后续防重规则。
|
||
|
||
从 `text6.txt` 开始,每轮执行必须先做下面四步:
|
||
|
||
```bash
|
||
git status --short
|
||
git log -5 --oneline
|
||
tail -n 120 text6.txt
|
||
awk '/^[一二三四五六七八九十百]+、/ {print}' text6.txt | sort | uniq -d
|
||
```
|
||
|
||
执行规则:
|
||
|
||
- 如果 `git status --short` 是 clean,且最新提交已经包含当前建议工作,不要重复追加记录。
|
||
- 每轮只追加一个新的中文编号记录;提交前再次检查标题唯一性。
|
||
- `text6.txt` 只记录新的后续进度,不复制 `text5.txt` 的长历史。
|
||
- 每批完成后,如果要写记录,先写 `text6.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。
|
||
|
||
已完成并提交的近期批次包括:
|
||
|
||
- `m98m99` 24 项 fixed `.ngc` manifest 的 staged path guard;
|
||
- `g10` 5 项 fixed `.ngc` manifest 的 staged path guard;
|
||
- `g52/g92` direct-file staged path guard;
|
||
- early direct-file staged path guard:
|
||
- `do-while-break`
|
||
- `exists`
|
||
- `return-value`
|
||
- `subs-follow-main`
|
||
- `fractional-linenumbers`
|
||
- `crazy-paths`
|
||
- INI-context/staging helper guard:
|
||
- `oword-unwind`
|
||
- `sequence-number`
|
||
- `nested-sub-error`
|
||
- `abort-hot-comment`
|
||
- `m19`
|
||
- `iniparam`
|
||
- `iniparam-failassign`
|
||
|
||
5. 当前最新提交。
|
||
|
||
当前最近提交包括:
|
||
|
||
```text
|
||
6899195 Guard more direct-file staging paths
|
||
4e9ca73 Deduplicate early fixture progress note
|
||
675ee5f Guard early direct-file staging paths
|
||
17df47d Guard g52 staging path
|
||
bf17469 Guard final g10 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. 当前第一候选批次。
|
||
|
||
继续 early direct-file fixture staged path guard,小批量选择:
|
||
|
||
```text
|
||
oword-bug315/test.ngc
|
||
oword-bug315-p2/test.ngc
|
||
namedparam-bug424/test.ngc
|
||
```
|
||
|
||
执行目标:
|
||
|
||
- Node 侧增加 fixed `.ngc` manifest;
|
||
- Node 侧与 `interpRegressionNgcFilesRecursive(...)` 精确对账;
|
||
- Node 侧检查 staged path 与 fixed manifest 一致;
|
||
- browser 侧增加 fixed-count 和 duplicate-free guard;
|
||
- browser 侧检查 staged path 去掉 `/work/browser-interp/.../` 前缀后与 fixed manifest
|
||
一致;
|
||
- browser 仍不枚举目录。
|
||
|
||
2. 第一候选批次验证。
|
||
|
||
执行:
|
||
|
||
```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
|
||
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 oword/namedparam staging paths
|
||
```
|
||
|
||
3. 后续候选原则。
|
||
|
||
继续只选:
|
||
|
||
- 已有 Node/browser coverage;
|
||
- 不依赖 HAL/task/tool DB/Python remap/user-M process;
|
||
- direct-file 或 staging helper 已成型;
|
||
- 每批 2 到 3 个 case;
|
||
- 只做 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 text6.txt
|
||
awk '/^[一二三四五六七八九十百]+、/ {print}' text6.txt | sort | uniq -d
|
||
```
|
||
|
||
如果输出显示工作区 clean 且 `text6.txt` 无重复标题,再执行第五部分第一候选批次。
|
||
|
||
七、2026-06-13 继续执行记录:oword/namedparam staging path guard
|
||
|
||
本批按第五部分第一候选批次完成 3 个 early direct-file fixture 的 staged path guard:
|
||
|
||
- `oword-bug315/test.ngc`
|
||
- `oword-bug315-p2/test.ngc`
|
||
- `namedparam-bug424/test.ngc`
|
||
|
||
完成内容:
|
||
|
||
- Node 侧为上述 3 个 fixture 增加 fixed `.ngc` manifest;
|
||
- Node 侧用 `interpRegressionNgcFilesRecursive(...)` 与 upstream vendored fixture
|
||
精确对账;
|
||
- Node 侧检查 staged path 与 fixed manifest 一致;
|
||
- browser 侧增加 fixed-count 与 duplicate-free guard;
|
||
- browser 侧检查 staged path 去掉 `/work/browser-interp/.../` 前缀后与 fixed
|
||
manifest 一致;
|
||
- browser 仍不依赖目录枚举。
|
||
|
||
已运行验证:
|
||
|
||
```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
|
||
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
|
||
```
|
||
|
||
结果:全部通过。
|
||
|
||
下一步建议:
|
||
|
||
继续按“小批量 direct-file/staging helper guard”原则推进。优先从已有 Node/browser
|
||
coverage、且不依赖 HAL/task/tool DB/Python remap/user-M process 的 interp fixture 中,
|
||
再选择 2 到 3 个只需要 host/filesystem staging 对账的 case。不要推进 blocked runtime
|
||
promotion,也不要扩展 browser full 159 sim-config inventory。
|
||
|
||
八、2026-06-13 继续执行记录:flowsnake/inside-corners staging path guard
|
||
|
||
本批继续按“小批量 direct-file fixture staged path guard”推进,完成 3 个已有
|
||
Node/browser coverage 的 interp fixture:
|
||
|
||
- `flowsnake/flowsnake.ngc`
|
||
- `inside-corners/test.ngc`
|
||
- `inverse-time-with-comp/inverse.ngc`
|
||
|
||
完成内容:
|
||
|
||
- Node 侧为上述 3 个 fixture 增加 fixed `.ngc` manifest;
|
||
- Node 侧用 `interpRegressionNgcFilesRecursive(...)` 与 upstream vendored fixture
|
||
精确对账;
|
||
- Node 侧检查 staged path 与 fixed manifest 一致;
|
||
- browser 侧增加 fixed-count 与 duplicate-free guard;
|
||
- browser 侧检查 staged path 去掉 `/work/browser-interp/.../` 前缀后与 fixed
|
||
manifest 一致;
|
||
- browser 仍不依赖目录枚举。
|
||
|
||
已运行验证:
|
||
|
||
```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
|
||
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
|
||
```
|
||
|
||
结果:全部通过。
|
||
|
||
下一步建议:
|
||
|
||
继续沿 interp direct-file coverage 向后补 guard,但优先选择短小、单文件、
|
||
无 INI/工具表依赖的 case。下一批可考虑 `g33.1/g33.1.ngc`、`g6164/test.ngc`,
|
||
再搭配一个已明确 expected-error 或 direct-file loop case;如果 case 属于目录集合
|
||
或带参数化循环,先检查是否已有固定 manifest 风格,避免扩大执行面。
|
||
|
||
九、2026-06-13 继续执行记录:g33/g6164 staging path guard
|
||
|
||
本批继续按“小批量 direct-file fixture staged path guard”推进,完成 2 个短小、
|
||
单文件、无 INI/工具表依赖的 interp fixture:
|
||
|
||
- `g33.1/g33.1.ngc`
|
||
- `g6164/test.ngc`
|
||
|
||
完成内容:
|
||
|
||
- Node 侧为上述 2 个 fixture 增加 fixed `.ngc` manifest;
|
||
- Node 侧用 `interpRegressionNgcFilesRecursive(...)` 与 upstream vendored fixture
|
||
精确对账;
|
||
- Node 侧检查 staged path 与 fixed manifest 一致;
|
||
- browser 侧增加 fixed-count 与 duplicate-free guard;
|
||
- browser 侧检查 staged path 去掉 `/work/browser-interp/.../` 前缀后与 fixed
|
||
manifest 一致;
|
||
- browser 仍不依赖目录枚举。
|
||
|
||
本批没有纳入 `g72` loop 组;该组在测试代码中是参数化循环,后续应按整组或
|
||
明确固定 manifest 风格处理,避免为了凑数量拆出不自然的单项 guard。
|
||
|
||
已运行验证:
|
||
|
||
```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
|
||
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
|
||
```
|
||
|
||
结果:全部通过。
|
||
|
||
下一步建议:
|
||
|
||
继续推进时优先处理已经有固定 manifest 或自然成组的 direct-file fixtures。候选:
|
||
`good` arc 6 项可按已有 fixed fixture list 补 staged path 对账;或者 `g72` 两项、
|
||
`g71` 四项按 loop manifest 成组补 guard。继续避免 blocked runtime promotion、
|
||
browser full inventory 扩面,以及任何 JS CNC 语义实现。
|
||
|
||
十、2026-06-13 继续执行记录:good arc staging path guard
|
||
|
||
本批按“自然成组 direct-file fixture staged path guard”推进,完成 `good` arc 目录
|
||
6 个已有 Node/browser coverage 的 `.ngc` fixture:
|
||
|
||
- `good/good-arc.big.imperial.center-format.ngc`
|
||
- `good/good-arc.big.metric.center-format.ngc`
|
||
- `good/good-arc.medium.imperial.center-format.ngc`
|
||
- `good/good-arc.medium.metric.center-format.ngc`
|
||
- `good/good-arc.small.imperial.center-format.ngc`
|
||
- `good/good-arc.small.metric.center-format.ngc`
|
||
|
||
完成内容:
|
||
|
||
- Node 侧复用既有 `goodArcFixtures` fixed manifest;
|
||
- Node 侧继续用 `interpRegressionNgcFiles("good")` 与 upstream vendored fixture
|
||
精确对账;
|
||
- Node 侧收集实际 staged path,并检查与 fixed manifest 一致;
|
||
- browser 侧复用既有 fixed-count 与 duplicate-free guard;
|
||
- browser 侧收集实际 staged path,去掉 `/work/browser-interp/good/` 前缀后与
|
||
fixed manifest 一致;
|
||
- browser 仍不依赖目录枚举。
|
||
|
||
已运行验证:
|
||
|
||
```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
|
||
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
|
||
```
|
||
|
||
结果:全部通过。
|
||
|
||
下一步建议:
|
||
|
||
继续处理自然成组 direct-file fixtures。优先候选:`g72` 两项或 `g71` 四项按
|
||
loop manifest 成组补 staged path guard;如果选择 `bad` expected-error 目录,
|
||
需要按现有 `badInterpFixtures` fixed list 做 staged path 对账,不改变 expected-error
|
||
语义。继续避免 blocked runtime promotion、browser full inventory 扩面和 JS CNC
|
||
语义实现。
|
||
|
||
十一、2026-06-13 继续执行记录:g72 staging path guard
|
||
|
||
本批按“自然成组 direct-file fixture staged path guard”推进,完成 `g72` loop 组
|
||
2 个已有 Node/browser coverage 的 `.ngc` fixture:
|
||
|
||
- `g72-facing/g72-iterations-present.ngc`
|
||
- `g72-missing-iteration/g72-iterations-missing.ngc`
|
||
|
||
完成内容:
|
||
|
||
- Node 侧将 `g72` inline loop 提成 `g72Fixtures` fixed manifest;
|
||
- Node 侧用 `interpRegressionNgcFilesRecursive(...)` 分别与 upstream vendored
|
||
fixture 目录精确对账;
|
||
- Node 侧检查 staged path 与 fixed manifest 一致;
|
||
- browser 侧增加 fixed-count 与 duplicate-free guard;
|
||
- browser 侧检查 staged path 去掉 `/work/browser-interp/` 前缀后与
|
||
`dir/file` fixed manifest 一致;
|
||
- browser 仍不依赖目录枚举。
|
||
|
||
已运行验证:
|
||
|
||
```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
|
||
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
|
||
```
|
||
|
||
结果:全部通过。
|
||
|
||
下一步建议:
|
||
|
||
继续处理自然成组 direct-file fixtures。优先候选:`g71` 四项按现有 loop manifest
|
||
补 staged path guard;或者处理 `bad` expected-error 目录,只做 fixed list 与
|
||
staged path 对账,不改变 expected-error 语义。继续避免 blocked runtime promotion、
|
||
browser full inventory 扩面和 JS CNC 语义实现。
|
||
|
||
十二、2026-06-13 继续执行记录:g71 staging path guard
|
||
|
||
本批按“自然成组 direct-file fixture staged path guard”推进,完成 `g71` loop 组
|
||
4 个已有 Node/browser coverage 的 `.ngc` fixture:
|
||
|
||
- `g71-endless-loop/g71-endless-loop.ngc`
|
||
- `g71-endless-loop2/g71-endless-loop2.ngc`
|
||
- `g71-endless-loop_2/g71-endless-loop_2.ngc`
|
||
- `g71-with-g70/g71-with-g70.ngc`
|
||
|
||
完成内容:
|
||
|
||
- Node 侧将 `g71` inline loop 提成 `g71Fixtures` fixed manifest;
|
||
- Node 侧用 `interpRegressionNgcFilesRecursive(...)` 分别与 upstream vendored
|
||
fixture 目录精确对账;
|
||
- Node 侧检查 staged path 与 fixed manifest 一致;
|
||
- browser 侧增加 fixed-count 与 duplicate-free guard;
|
||
- browser 侧检查 staged path 去掉 `/work/browser-interp/` 前缀后与
|
||
`dir/file` fixed manifest 一致;
|
||
- browser 仍不依赖目录枚举。
|
||
|
||
已运行验证:
|
||
|
||
```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
|
||
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
|
||
```
|
||
|
||
结果:全部通过。
|
||
|
||
下一步建议:
|
||
|
||
继续处理已有 fixed manifest 的 direct-file fixtures。优先候选:`bad` expected-error
|
||
目录,按现有 `badInterpFixtures` fixed list 补 staged path 对账;只校验文件清单
|
||
和 staging 路径,不改变 expected-error 语义。也可以继续找短小单文件 case,但仍需
|
||
保持每批 2 到 3 个或自然成组,不推进 blocked runtime promotion。
|