Make machine configuration authoritative and restore native checkpoints exactly

This commit is contained in:
2026-09-18 09:09:41 +08:00
parent 6a69511276
commit 4a568f1f4c
94 changed files with 10882 additions and 301 deletions

48
nextTask-hardcoding.md Normal file
View File

@@ -0,0 +1,48 @@
# 配置驱动与恢复改造接续入口
更新时间:2026-09-18。用户已确认清理自有代码的机床参数、轴配置、路径、可调界面设置硬编码,保留数学/协议常量和上游 LinuxCNC;之后要求接续 CFG-R01、TRT-R01。以上专项均已收口。
## 当前状态
- 任务矩阵:`docs/trt-parametric/04-任务矩阵.md`;CFG-01/02/03、CFG-R01、TRT-R01 均为已验收。
- 最新台账 R08(仓库保存)、证据 E08/E09/E10、决策 D13/D14/D15;R06 配置改造的历史证据仍保留。
- 用户已于 2026-09-18 授权将 **R06 配置改造与 R07 精确恢复的完整依赖** 保存到指定仓库 main;本轮为该保存提交,实际提交 ID 以 Git 记录为准。
- 验收汇总:`coverage/recovery/acceptance.report.json`;包含真实 WASM SHA、native 构建指纹和证据文件 SHA。
- 本专项暂无未完成任务。后续按新需求推进;不要重跑已通过整轮测试,也不要自动认领其他历史发布轨道的阻塞任务。
## 实现与验证落点
1. 配置:`web/workspace/machine-catalog.json`、`simulation-resources.json`、`web-settings.json` 和 `trt-configuration.mjs`;完整说明见 `07-配置驱动改造.md`。INI 输入包含运行参数及回零信息的完整 hash;Worker 从文件重新解析。
2. 三轴:`web/app/axis-contract.mjs` 和 `test_axis3_selected_case.mjs`。工具准备/换刀在开机、空闲、操作者模式、队列为空时交由 IO 状态机处理;运行、急停、故障等拒绝,未删除旧断言。
3. 恢复:自有 C 适配层新增 TP/TC、解释器/程序、HAL、核心及协议/事件快照 API;`web/worker/native-checkpoint.mjs` 做带构建指纹、长度/hash 校验的稀疏块编解码;数学计算仍来自 WASM。
4. 程序恢复:保存参数、调用栈及冻结子程序源,验证候选程序后替换;TP 原生队列/进度/混合状态直接恢复。`sim-session.mjs` 保存待处理运动/切换等交接信息;HAL 不再重复 step。
5. 幂等/内存:checkpoint 回执剔除递归旧快照,保留操作身份;恢复后重复 M428 不重新执行,返回当前机床投影。
6. 浏览器:OPFS 按机型隔离,只有冷启动自动采用兼容缓存;配置重载不覆盖当前输入。省去可重建预览,重建后验证 hash;App 保留恢复出来的程序而非重新加载船体示例。
7. 新发现并修复:identity Jog 的增量响应使用当前 WASM 规划器关节,避免最后采样落后。
## 已完成验证
- `bash scripts/build-wasm.sh`:WASM 测试通过,native 23/23;native TP 保存后继续 100 个伺服步逐步对比,HAL tick/函数计数和字节恢复验证。日志 `coverage/recovery/build.log`。
- `node web/worker/test_trt_checkpoint_exact.mjs`:两机型五阶段共120个连续任务tick全状态hash一致,另12个 Jog 样本;覆盖不同堆地址、暂停/子程序/圆弧/结束、空程序、trace、新传输会话、冻结子程序、损坏块和不同构建拒绝。
- `node web/worker/test_xyzac_recovery.mjs`:同一恢复点完整hash相同,实际重发 M428 不重复切换。
- `node web/worker/test_axis3_selected_case.mjs`、`node web/app/test_axis_contract.mjs`、`node web/worker/test_wasm_motion_checkpoint.mjs`:通过。
- `node web/worker/test_xyzac_runtime_followups.mjs`、`node web/worker/test_opfs_ui_state.mjs`、`node web/worker/test_opfs_worker_bridge.mjs`、`node web/worker/test_trt_configuration.mjs`:通过。
- `scripts/test_checkpoint_reload_browser.mjs`:真实 OPFS 关机保存/页面重载恢复,两机型位置严格相同,原程序/预览保留,之后 Jog 正常。XYZBC 使用 `RECOVERY_MACHINE=xyzbc-trt`。
- `scripts/test_trt_rtcp_jog_browser.mjs`:两机型 A/B/C Jog 回归通过;产物已归档 `coverage/recovery/`。
- `npm --prefix web/react run build`:通过,已有大 chunk 提示保留。
- Playwright 环境:`PLAYWRIGHT_MODULE=/home/mes006/.npm/_npx/e41f203b7505f1fb/node_modules/playwright/index.mjs`;Chrome `/usr/bin/google-chrome`。
## 已确定的恢复边界
- 原生记录只允许匹配构建和配置。旧缺失原生状态的记录不能近似恢复;自动缓存不兼容时提示并按当前配置启动,原缓存不删除。
- TRT checkpoint 后的事件不能静默忽略:须恢复后显式执行后续命令。公开 RECOVER 向更早逻辑tick回退需要新传输会话,避免改写历史;原生状态可在新会话重设传输序号后继续执行。
- OPFS 原有1MiB限制仍在,超限须报告quota;不宣称物理断电崩溃和全浏览器矩阵完成。
- 本次是专项验收,不等于全 LinuxCNC parity,不更改历史 release gate/context lock。
## 工作区与保存
- 开发地址 `http://127.0.0.1:5174/`;不存在时运行 `npm --prefix web/react run dev -- --port 5174 --strictPort`。
- 最新代码必须与重建的 WASM 配套;构建产物在 Git ignore 中,保存源码后其他环境需运行 build-wasm.sh。
- `coverage/configuration/`、`coverage/recovery/` 是本轮证据;`coverage/trt-parametric/` 保持先前已提交历史版本,不破坏历史哈希。
- 两份大型 tick trace、linuxcnc 子模块原有本地改动、`scripts/.tmp_test_nc_files_xyzac.mjs`、用户 Copy.png 不属于本轮,保留原样,不混入提交。
- 指定远程为 `https://gitea.meswork.com/wangdequan/linuxcncWebWASM.git`。本轮保存已获授权,推送后核验远端 main 与本地 HEAD 一致;账号口令不写入仓库。