# working1 修复执行记录 D1-D2-D3 生成时间:2026-06-22 ## Batch ```text Batch: working1-implementation-d1-d2-d3 Date: 2026-06-22 Owner: Codex Problem IDs: D1, D2, D3 Branch: current worktree Commit: not committed ``` ## 1. 修复目标 ```text D1: kinematics worker ready 后,页面自动保持 LinuxCNC source-derived kinematics frame,不被临时 fixture frame 永久覆盖。 D2: 首屏和路径清空后仍显示可见五轴参考机床、坐标轴、旋转轴、刀具/TCP;canvas dataset 和像素测试可验证。 D3: HOME 后执行 task/HAL JOG,DRO/work pose 保持连续增量,不被 task-local/local-zero 轴位覆盖。 ``` ## 2. 修改文件 | 文件 | 修改内容 | 原因 | | --- | --- | --- | | `app/src/state/store.js` | 增加 `desiredFrameSourceMode`、`pendingJogCommand`;调整 async kinematics refresh;新增 `resolveTaskHalAxisPose()` | 分离“期望 frame source”和“当前 frame source”;保护 HOME 后 JOG 坐标连续性 | | `app/src/main.js` | profile kinematics runtime attach 完成后再次调用 `refreshKinematicsFrame()` | 满足 profile/INI 变更后的自动 frame 刷新要求 | | `app/src/runtime/linuxcnc-task-hal-runtime.js` | `ui.axisPoseFrame` 标记 JOG 为 `task-local`,非 JOG 为 `work` | 让 store 能区分 task/HAL 轴位坐标系 | | `app/src/visualization/five-axis-scene.js` | 新增 WebGL 五轴参考机床模型和 2D fallback 参考绘制;路径清空时仍显示 TCP | 修复 3D 预览黑屏/不可见和 fallback 信息不足 | | `tests/browser/gmoccapy_shell_smoke.html` | 更新 reference model dataset 断言;新增 canvas pixel stats 检查 | 防止只通过 DOM dataset 误判可见性 | | `tests/node/verify_linuxcnc_task_hal_runtime.mjs` | 增加 HOME 后 JOG X+/Y- 连续性断言 | 覆盖 D3 复现路径 | ## 3. 关键实现说明 ```text 状态字段变化: - desiredFrameSourceMode: 保留用户/运行时希望的 frame source。 - pendingJogCommand: 记录 task/HAL JOG 的 axis、direction、increment、basePose。 核心函数变化: - buildFrameForState(): 优先读取 desiredFrameSourceMode。 - scheduleAsyncKinematicsRefresh(): 以 desiredFrameSourceMode + runtime loaded 作为刷新条件。 - refreshAsyncKinematicsFrame(): 成功后写回 source/frame/desired 均为 source-derived-kinematics-wasm,失败显示 operatorMessage 并保留重试能力。 - resolveTaskHalAxisPose(): work pose 直接合并,axis delta 累加,pending JOG 用 basePose + increment。 UI/可视化变化: - WebGL scene 增加 table/base、XYZ axis、A/C rotary ring、tool holder。 - 2D fallback 始终绘制工作台、XYZ 轴、旋转中心、TCP 点。 - canvas dataset 输出 machine-reference-and-toolpath / webgl-five-axis-reference。 ``` ## 4. LinuxCNC/项目溯源 ```text 参考项目文档: - working1/03-implementation-steps.md - working1/04-traceability-matrix.md - docs/traceability-matrix.md 参考 LinuxCNC 边界: - kinematics frame 仍来自 LinuxCNC kinematics WASM C ABI。 - task/HAL JOG 仍通过 EMC_JOG_INCR 模拟 runtime 执行;UI 只处理坐标系归并,不重写 CNC 运动语义。 - Three.js 只消费 runtime frame/canonical motion/task-HAL feedback,不生成 G-code 或 CNC 语义。 ``` ## 5. 测试记录 ### 5.1 已通过命令 ```bash npm --prefix web-rtcp-5axis-sim-plan/app run build node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs node web-rtcp-5axis-sim-plan/tests/node/verify_rtcp_store.mjs node web-rtcp-5axis-sim-plan/tests/node/verify_five_axis_session.mjs node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_kinematics_runtime.mjs bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_dist_browser.sh ``` ### 5.2 关键输出 ```text gmoccapy_static_build=ok linuxcnc_task_hal_runtime_smoke=ok rtcp_store_smoke=ok five_axis_session_smoke=ok linuxcnc_kinematics_runtime_smoke=ok gmoccapy_shell_smoke=ok gmoccapy_dist_smoke=ok ``` ### 5.3 未通过/阻塞命令 ```bash npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node ``` 结果: ```text 前置 kinematics/interpreter/INI/task-HAL 均通过。 失败位置: verify_native_task_hal_audit.mjs -> wasm-port/tests/native/verify_task_hal_phase0.sh 失败原因: verify_task_hal_source_manifest.sh 返回非零,manifest ready=0。 证据: wasm-port/build/task-hal/verify_task_hal_source_manifest.stdout.log 关键字段: - task_hal_reference_source_ready=0 - task_hal_vendor_source_ready=0 - task_hal_missing_reference_source_count=20 ``` 该失败属于 native LinuxCNC reference source/probe 前置条件,不是本轮 Web D1/D2/D3 代码回归。 ## 6. 回归范围 | 功能 | 是否回归 | 结果 | | --- | --- | --- | | D1 kinematics auto refresh | 是 | PASS | | D2 preview visible | 是 | PASS | | D3 jog continuity | 是 | PASS | | POWER/E-STOP/RESET | 是 | PASS via browser smoke | | MDI M428/M429/M430 | 是 | PASS via browser/node smoke | | Load/Run/Step/Stop | 是 | PASS via browser smoke | | Save/Restore Session | 是 | PASS via browser/node smoke | | Native source manifest/probe | 是 | BLOCKED: missing native reference sources | ## 7. 剩余风险 ```text 1. native task/HAL source manifest 仍未 ready,缺少 20 个 native reference source,完整 smoke:node 不能全绿。 2. WebGL reference model 已通过 smoke,但仍建议后续保留人工截图复核首屏和 clear-preview 后视觉效果。 3. task/HAL axisPoseFrame 当前按 JOG/non-JOG 推断;长期方案仍应由 runtime 输出更细的 work/task-local/axisPoseDelta 元数据。 ``` ## 8. 下一步 ```text Next: - 补齐或恢复 wasm-port/tools/task-hal-source-manifest.txt 对应的 native LinuxCNC reference sources。 - native source manifest ready 后重跑 npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node。 - 部署到 https://82.156.24.101:8092/ 后重跑 QA 站点测试,更新 Word 测试报告。 Blockers: - wasm-port/build/task-hal/verify_task_hal_source_manifest.stdout.log 显示 native reference source 缺失。 ```