feat: sync axis task state parity work

This commit is contained in:
wangdequan
2026-07-07 18:45:26 -04:00
parent 16484afce6
commit 8ef67f94c2
562 changed files with 175971 additions and 248 deletions

View File

@@ -3428,3 +3428,191 @@ Pause 修复已提交并推送到云仓库 `master`,提交号为 `58854f9`。
### 结论
主工作提交 `39b495c docs: add axis run process working set` 已成功推送到云仓库 `origin/master`。本次推送包含当前工作区成果暂停按钮实现相关代码和证据、working8 重命名目录、working9 执行过程按钮文档体系、AXIS 按钮调用链分析文档、备忘文件和过程日志。随后会将本条日志作为独立记录提交并推送。
---
## 2026-07-07 17:43 EDT 执行日志
### 提问
用户要求:
1. 分析 `/home/mes123456/cnc_wams/linuxcnc` 源程序中 AXIS 主界面的“急停、上电、Home、执行、暂停、单步执行”的详细调用链条和状态机制。
2. 覆盖 C++ task、motion、状态记录方式以及 LinuxCNC 系统中这些功能的实现链条。
3. 分析每个按钮的先决条件、执行后的状态记录方式。
4. 指导完善 `/home/mes123456/cnc_wams/wasm-port` 的 LinuxCNC WASM。
5. 指导完善 `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan` 程序。
6. 参考 `项目分析/AXIS主控制按钮调用链与WASM完善指南.md``项目分析/AXIS主界面按钮调用链与WASM完善建议.md`,再创建新的单独文档指导完善 `web-rtcp-5axis-xyzbc-trt-sim-plan` 项目。
### 执行过程
1. 读取根目录 `AGENTS.md`,确认本次必须在执行结束后将完整过程日志用中文追加到 `gptlog-process/gpdlog.md`,时间戳精确到分钟。
2. 使用 `rg --files` 检查 `linuxcnc``wasm-port``web-rtcp-5axis-xyzbc-trt-sim-plan``项目分析` 的文件结构,确认已有两份 AXIS 分析文档和 Web 项目 working 文档体系。
3. 读取 `项目分析/AXIS主控制按钮调用链与WASM完善指南.md`,确认已有总体调用链、状态字段、急停和上电分析。
4. 读取 `项目分析/AXIS主界面按钮调用链与WASM完善建议.md`,确认已有 AXIS Tcl/Python、emcmodule、task、motion、homing 的分层说明和按钮可执行条件。
5. 检索并读取 `linuxcnc/share/axis/tcl/axis.tcl``update_state()`,确认 AXIS UI 层对急停、上电、Home、Run、Step、Pause、Resume、Stop 的可点条件。
6. 检索并读取 `linuxcnc/bin/axis``manual_ok()``ensure_mode()``estop_clicked()``onoff_clicked()``task_run()``task_step()``task_pause()``task_resume()``task_pauseresume()``home_all_joints()``home_joint()`,确认 Python 回调二次门禁和 `linuxcnc.command()` 调用方式。
7. 检索并读取 `linuxcnc/src/emc/usr_intf/axis/extensions/emcmodule.cc``mode()``state()``home()``emcauto()`,确认 Python API 到 `EMC_TASK_SET_MODE``EMC_TASK_SET_STATE``EMC_JOINT_HOME``EMC_TASK_PLAN_RUN/PAUSE/RESUME/STEP` 的 NML 命令映射。
8. 检索并读取 `linuxcnc/src/emc/task/emctask.cc``emcTaskAbort()``emcTaskSetMode()``emcTaskSetState()``determineMode()``determineState()``emcTaskUpdate()`,确认 task 状态并不是按钮直接保存,而是由 IO 急停和 motion enable 状态周期推导。
9. 检索并读取 `linuxcnc/src/emc/task/emctaskmain.cc``emcTaskPlan()``emcTaskIssueCommand()``EMC_TASK_PLAN_RUN/PAUSE/RESUME/STEP` 分支和 `STEPPING_CHECK()`,确认 ON/MANUAL、ON/AUTO/IDLE、ON/AUTO/READING、ON/AUTO/PAUSED、ON/AUTO/WAITING 下的命令门禁。
10. 读取 `linuxcnc/src/emc/task/taskintf.cc``emcJointHome()``emcTrajEnable()``emcTrajDisable()``emcTrajPause()``emcTrajStep()``emcTrajResume()`,确认 task 到 motion 的 `EMCMOT_*` 命令写入点。
11. 读取 `linuxcnc/src/emc/motion/command.c``EMCMOT_PAUSE``EMCMOT_RESUME``EMCMOT_STEP``EMCMOT_ENABLE``EMCMOT_DISABLE``EMCMOT_JOINT_HOME``EMCMOT_JOINT_UNHOME`,确认 motion 层暂停、恢复、单步、使能、回零的实际状态位。
12. 读取 `linuxcnc/src/emc/motion/control.c``linuxcnc/src/emc/motion/homing.c` 的关键片段,确认 homing 的 `H[jno].home_state``homing``homed``homing_active` 状态机,以及 motion status 对 `homing/homed``motion.is-all-homed` 的记录方式。
13. 读取 `web-rtcp-5axis-xyzbc-trt-sim-plan/working/README.md``working/15-20260706-AXIS主控制按钮严格对标补齐.md`,确认 Web 项目已有按钮对标任务和暂停修复记录。
14. 检查 Web 项目文件结构,读取 `app/src/state/linuxcnc-task-policy.js`,确认当前已有 `taskState``taskMode``interpState``canHome``canRunAuto``canPause``canResume` 等策略字段。
15. 读取 `app/src/state/store.js` 的初始状态和 `TOGGLE_POWER``ESTOP``RESET``PAUSE``PAUSE_RESUME``RESUME``STEP``HOME` 等 dispatch 分支,确认当前 Web 状态已有 `taskPaused``motionPaused``interpResumeState`,但仍需要补齐更严格的 `singleStepping``homed[]`、task/motion 派生状态。
16. 读取 `app/src/runtime/linuxcnc-task-hal-runtime.js`,确认 Task/HAL runtime 已标准化 `interpResumeState``taskPaused``singleStepping``motionPaused``allHomed``homing` 等 status 字段,是后续对齐 LinuxCNC task/motion 状态的核心位置。
17. 读取 `tools/verify-estop-power-home-run-pause-50ms.mjs``tests/node/verify_xyzbc_trt_web_app.mjs``tests/node/verify_rtcp_store.mjs` 关键片段,确认已有 ESTOP、上电、Home、Run、Pause/Resume 的浏览器与 Node 验证基础。
18. 读取 `wasm-port/README.md``wasm-port/SKILL.md`,确认 WASM port 的原则是 LinuxCNC 源码为语义真源JS/SDK 只能做适配,不能重写 G-code、planner、kinematics、task/motion 语义。
19. 使用 `apply_patch` 新增文档 `web-rtcp-5axis-xyzbc-trt-sim-plan/working/18-20260707-AXIS主控制按钮调用链与Web完善指南.md`
20. 新文档按“文档目标、总体结论、AXIS UI 按钮门禁、急停、上电/下电、Home、Run、暂停/恢复、Step、WASM-port 完善方向、web-rtcp 落地清单、验收矩阵、推荐实施顺序、当前判断”组织,共 449 行。
21. 使用 `apply_patch` 更新 `web-rtcp-5axis-xyzbc-trt-sim-plan/working/README.md`,在 working 索引中加入新文档说明。
22. 使用 `sed` 检查新文档开头和 README 索引,确认内容可读且索引已更新。
23. 使用 `wc -l` 确认新文档为 449 行。
24. 使用 `git status --short` 检查本次相关变更,确认新增新指南文档并修改 working README。
25. 使用 `date '+%Y-%m-%d %H:%M %Z'` 获取日志时间戳为 `2026-07-07 17:43 EDT`
26. 使用 `apply_patch` 将本次中文执行日志追加到 `gptlog-process/gpdlog.md`
### 结论
已创建新的单独指导文档:
`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/18-20260707-AXIS主控制按钮调用链与Web完善指南.md`
该文档详细整理了 LinuxCNC AXIS “急停、上电、Home、执行、暂停、单步执行”的 UI、Python、C++ task、taskintf、motion、homing 调用链和状态机制,并给出了 `wasm-port``web-rtcp-5axis-xyzbc-trt-sim-plan` 后续完善清单、状态字段建议、核心文件责任和验收矩阵。同时已更新 `working/README.md` 索引,便于后续继续实施。
---
## 2026-07-07 18:21 EDT 执行日志
### 提问
用户要求:“按 `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working` 完成全部工作”。
### 执行过程
1. 读取根目录 `AGENTS.md``wasm-port/AGENTS.md`,确认本轮结束后需要分别追加中文执行日志到根目录日志和 `web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md`
2. 读取 `working/README.md``18-20260707-AXIS主控制按钮调用链与Web完善指南.md`,确认本轮目标是完成 AXIS 主控制按钮状态链路收敛。
3. 检查工作区,确认已有前序或用户改动,未回退无关文件。
4. 修改 `app/src/state/linuxcnc-task-policy.js`,新增 `deriveLinuxCncTaskState()`,由 `estopActive + motionEnabled/powerOn` 派生 `estop``estop-reset``on`
5. 在 policy 中补齐 `motionEnabled``homed[]``singleStepping``motionStepping``resumeInhibit``canPowerToggle``powerAction``canStepStrict`,并收紧 ESTOP、Power、Home、Run、Step、Resume 门禁。
6. 修改 `app/src/state/store.js`,补齐 machine 状态字段,并重整 `ESTOP``RESET``TOGGLE_POWER``SET_MODE``LOAD_PROGRAM``RUN``STOP/ABORT``PAUSE``RESUME``STEP``RUN_FRAME``HOME``UNHOME` 的状态清理和设置。
7. 为 Home All 增加 `homing -> homed` 瞬态;下电映射为 `estop-reset`,并清理 motion/home/pause/step 状态。
8. 修改 `app/src/runtime/linuxcnc-task-hal-runtime.js`,标准化 Task/HAL status 中的 `motionEnabled``homed[]``resumeInhibit`
9. 修改 `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp`TaskRuntime 增加 `homed` 数组status JSON 输出 `motionEnabled``homed[]`
10. 在 Task/HAL WASM 中让 `EMC_JOINT_HOME` 产生 homing 到 homed 的状态变化,并让 `EMC_TASK_PLAN_RUN` 增加 ON、AUTO、IDLE、非 homing、已 Home、程序打开、motion plan 已加载门禁。
11. 更新 WASM 测试,`verify_task_hal_wasm.mjs` 增加 `homed[]` 断言,并新增 `verify_task_state_matrix.mjs` 覆盖非法和合法 Run 状态矩阵。
12. 更新 Web Node/browser 测试,覆盖 ESTOP+Power 阻断、ON->OFF、Home、Run、Step、Pause/Resume 等新语义。
13. 首次构建 Task/HAL WASM 时发现 `emcc` 不在 PATH加载 `/home/mes123456/emsdk/emsdk_env.sh` 后重新执行 `wasm-port/tools/build_task_hal_wasm.sh`,输出 `linuxcnc_task_hal_wasm_build=ok`
14. 执行 WASM 测试、状态矩阵、SDK 测试、Node 专项、build、Node smoke、browser smoke均通过。
15. 执行 Web evidence/compare 时首次出现 `fail_count=7`,定位为 evidence 采集仍按旧的 `ON -> AUTO -> PLAN_RUN` 运行序列,被新门禁拒绝。
16. 修改 `tools/collect-web-xyzbc-trt-evidence.mjs`,将 Task/HAL evidence 采集前置改为 `ON -> EMC_JOINT_HOME -> runCycles -> AUTO -> PLAN_RUN`
17. 重新执行 Web evidence/compare输出 `compare_xyzbc_trt_status=pass`
18. 检索旧测试中直接 `PLAN_RUN` 的路径,更新 `verify_task_hal_sdk.mjs`,增加 `prepareHomedAuto()` 并为首个程序补 motion plan。
19. 更新 `verify_impeller_feed_task_hal_run.mjs`,增加 Home 前置,并把固定 `F159/F636` 断言改为基于实际 G93 逆时间 feed 段的动态验证。
20. 最终回归执行 Task/HAL WASM、状态矩阵、SDK、Node 专项、build、Node smoke、browser smoke、Web evidence、compare全部通过。
21. 使用 `jq` 确认 `web.executionPath.sampleCount=228``taskHalEquivalence.ready=true``basicSimEquivalent.ready=true``compare.failCount=0``blockers=[]``requiredImprovements=[]`
22. 更新 `working/README.md``03-推进台账.md``04-任务矩阵.md``05-验收证据.md``18-20260707-AXIS主控制按钮调用链与Web完善指南.md`,记录本轮完成结果,并新增完成任务 T-078。
23. 执行 `git diff --check`,无空白错误;检查 `git status --short``git diff --stat`确认最终变更包括源码、WASM、测试、dist、evidence 和 working 文档。
### 结论
已按 `working` 完成 AXIS 主控制按钮状态链路收敛。Web 仿真的 `ESTOP/RESET/Power/Home/Run/Pause/Resume/Step` 已统一到 LinuxCNC `task.state + task.mode + interpState + motion/home status` 事实来源Task/HAL WASM 暴露并验证 `motionEnabled``homed[]``singleStepping``motionStepping`Web evidence 采集已使用合法 LinuxCNC 运行前置。最终 build、Node smoke、browser smoke、WASM 测试、专项 Node 测试、Web evidence 和 compare 均成功,最新 compare 为 `60/60 pass``blockers=[]``requiredImprovements=[]`。working 任务矩阵已新增并完成 T-078。
---
## 2026-07-07 18:29 EDT 执行日志
### 提问
用户要求项目 `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan` 完全对标 `/home/mes123456/cnc_wams/linuxcnc`,并详细分析 LinuxCNC AXIS 主界面“急停、上电、Home、执行、暂停、单步执行”的调用链条、C++ task/motion 状态机制、状态记录方式、每个按钮的先决条件以及执行后如何记录状态。
### 执行过程
1. 读取并遵守根目录 `AGENTS.md` 要求:每次执行后需要把完整过程以中文追加到 `gptlog-process/gpdlog.md`,时间戳精确到分钟。
2. 检查仓库结构,确认源码目录为 `/home/mes123456/cnc_wams/linuxcnc`,目标 Web 项目目录为 `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan`
3. 使用 `rg` 检索 AXIS UI 中 `estop``home``AUTO_RUN``AUTO_PAUSE``AUTO_STEP``STATE_ON``STATE_ESTOP` 等关键符号,定位到 `src/emc/usr_intf/axis/scripts/axis.py``src/emc/usr_intf/axis/extensions/emcmodule.cc`
4. 阅读 `axis.py``manual_ok()``ensure_mode()``go_home()``estop_clicked()``onoff_clicked()``task_run()``task_step()``task_pause()``task_resume()``task_pauseresume()``home_all_joints()``home_joint()` 和快捷键绑定,确认 AXIS UI 层的按钮先决条件和命令入口。
5. 阅读 `emcmodule.cc``Stat_members``mode()``state()``home()``emcauto()` 和常量导出,确认 Python 调用如何转换为 `EMC_TASK_SET_STATE``EMC_TASK_SET_MODE``EMC_JOINT_HOME``EMC_TASK_PLAN_RUN/PAUSE/RESUME/STEP`
6. 阅读 `src/emc/nml_intf/emc.hh``src/emc/nml_intf/emc_nml.hh`,确认 `EMC_TASK_STATE``EMC_TASK_MODE``EMC_TASK_INTERP``EMC_TASK_EXEC` 枚举,以及 NML 命令对象和 task status 字段。
7. 阅读 `src/emc/task/emctaskmain.cc`,重点分析 `all_homed()``emcTaskPlan()``emcTaskIssueCommand()``EMC_TASK_SET_MODE``EMC_TASK_SET_STATE``EMC_TASK_PLAN_RUN``EMC_TASK_PLAN_PAUSE``EMC_TASK_PLAN_RESUME``EMC_TASK_PLAN_STEP``STEPPING_CHECK()``emcTaskExecute()`、状态发布和 `emcStatusBuffer->write(emcStatus)`
8. 阅读 `src/emc/task/emctask.cc`,确认 `emcTaskSetMode()``emcTaskSetState()` 对 MANUAL/AUTO/MDI、ESTOP/ESTOP_RESET/OFF/ON 的实际动作,包含 abort、traj enable/disable、IO abort、spindle abort、volatile home 清理和解释器同步。
9. 阅读 `src/emc/task/taskintf.cc`,确认 `emcJointHome()``emcTrajPause()``emcTrajStep()``emcTrajResume()` 如何封装为 `EMCMOT_*` motion 命令。
10. 阅读 `src/emc/motion/command.c`,确认 `EMCMOT_PAUSE``EMCMOT_RESUME``EMCMOT_STEP``EMCMOT_ENABLE``EMCMOT_JOINT_HOME` 的实时 motion 处理逻辑和硬门禁。
11. 阅读 `src/emc/motion/control.c``src/emc/motion/homing.c`,确认 servo 周期如何推进 homing、如何写 HAL/motion status、如何把 `homing/homed` 状态从 `H[jno]` 写回 joint status以及单步如何在 motion id 改变后再次暂停。
12. 检索目标 Web 项目,确认已有 `app/src/state/linuxcnc-task-policy.js``app/src/state/store.js``app/src/runtime/linuxcnc-task-hal-runtime.js` 等文件承担 LinuxCNC 状态门禁和 Task/HAL 回写职责。
13. 发现目标项目已有未跟踪文档 `working/18-20260707-AXIS主控制按钮调用链与Web完善指南.md`,先阅读其内容,确认它已覆盖总体 Web 完善清单,但对 C++ task/motion 状态记录、NML、`execState``determineState`、motion/homing 发布链条仍可补充。
14. 为避免覆盖既有未跟踪文档,新增 `web-rtcp-5axis-xyzbc-trt-sim-plan/working/19-20260707-AXIS按钮LinuxCNC-task-motion状态机制源码分析.md`
15. 新文档按章节整理了统一调用链、状态记录与发布机制、急停、上电/下电、Home、Run、暂停/恢复、单步 Step、按钮先决条件汇总、Web 对标状态字段和源码索引。
16. 检查新增文档,确认文件 560 行,包含用户要求的 AXIS UI、Python C++ 扩展、C++ task、motion、homing、状态记录和 Web 对标要求。
17. 检查 `git status --short`,确认本次新增文件为 `working/19-20260707-AXIS按钮LinuxCNC-task-motion状态机制源码分析.md`,并按要求追加本日志到根目录 `gptlog-process/gpdlog.md`
### 结论
已完成本次源码分析并形成中文文档:`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/19-20260707-AXIS按钮LinuxCNC-task-motion状态机制源码分析.md`。文档明确说明 AXIS 主界面按钮从 Python/Tk 进入 `linuxcnc.command()`,再经 `emcmodule.cc` 发送 NML 命令,由 C++ `emctaskmain.cc``emctask.cc``taskintf.cc` 和 motion 层 `command.c/control.c/homing.c` 完成状态判定、执行和发布。每个按钮的先决条件、执行后 task/motion 状态记录、Web 项目必须对标的状态字段也已整理完成。本轮未修改业务代码,未运行测试,属于源码分析和文档补充工作。
---
## 2026-07-07 18:35 EDT 执行日志
### 提问
用户要求:
1.`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/19-20260707-AXIS按钮LinuxCNC-task-motion状态机制源码分析.md` 拆分成详细的实施步骤和验收测试文档。
2. 明确“compare 仍是 60/60 pass 只是表面 pass”必须以真实程序功能为准真实对标“linuxcnc 系统的 C++ 都是如何实现”。
### 执行过程
1. 读取 `19-20260707-AXIS按钮LinuxCNC-task-motion状态机制源码分析.md`,确认其中已经包含 AXIS、emcmodule、NML、C++ task、taskintf、motion、homing、按钮先决条件和 Web 对标字段。
2. 读取 `working/README.md`,确认当前索引已有 18 号文档但未登记 19 号文档也没有将“60/60 pass 只是表面 pass”写成后续验收原则。
3. 检查当前时间为 `2026-07-07 18:35 EDT`,并检查工作区状态,确认已有前序/用户改动,未回退任何无关文件。
4. 新增 `working/20-20260707-AXIS按钮LinuxCNC真实C++对标实施步骤.md`,把 19 号源码分析拆成可执行实施步骤。
5. 20 号文档明确写入实施原则:不能以 `compare 60/60 pass` 作为功能完成依据,真实合格标准必须是 Web 项目的按钮、状态、Task/HAL/WASM、evidence 和 UI 行为逐项符合 LinuxCNC C++ task/motion/homing 的真实实现。
6. 20 号文档按阶段拆分:固定 LinuxCNC C++ 源码事实、建立状态字段对应关系、实现 Task/HAL/WASM 真实状态机、实现 Home 状态机、实现 Pause/Resume/Step 真实 motion 语义、收敛 Web 状态与 UI 门禁、重构 evidence 与 compare、测试实现顺序和完成判定。
7. 在 20 号文档中明确核心 C++ 权威文件:`emctaskmain.cc``emctask.cc``taskintf.cc``motion/command.c``motion/control.c``motion/homing.c``emc.hh``emc_nml.hh`
8. 在 20 号文档中明确 compare 必须新增 `surfaceSummary``functionalSummary`,且 `surfaceSummary 60/60 pass``functionalSummary` 失败时,结论必须是失败。
9. 新增 `working/21-20260707-AXIS按钮LinuxCNC真实C++对标验收测试.md`,把 19 号源码分析拆成验收测试文档。
10. 21 号文档明确写入验收原则:`compare 60/60 pass` 不是最终验收结论,只是旧 compare 摘要;只有 `functionalSummary.status == "pass"` 才允许写“真实通过”。
11. 21 号文档定义 Native LinuxCNC、Web、Compare 的准备命令和必须采集字段,包括 `task.state/mode/interpState/execState/currentLine/readLine/motionLine`、motion enabled/paused/single stepping/queue、joint homing/homed、真实 G-code line、motion id、axis pose、tcp pose、tool axis。
12. 21 号文档按功能拆分验收:基础状态枚举、急停、上电/下电、Home、Run、Pause/Resume、Step、非法命令矩阵、真实程序功能验收、Compare 硬通过标准和验收记录模板。
13. 21 号文档新增硬规则名称:`cppTaskStateMachineParity``cppModeGateParity``cppHomingParity``cppRunGateParity``cppPauseResumeParity``cppStepParity``illegalCommandParity``realProgramExecutionParity`
14. 21 号文档明确最终判定规则legacy compare `60/60 pass` 但任一 `cpp*Parity``realProgramExecutionParity` 失败,则整体验收失败;截图正常或 smoke 通过也不能替代 C++ 状态机验收。
15. 更新 `working/README.md`,新增 19、20、21 号文档索引。
16.`working/README.md` 当前关注点中新增说明:后续结论必须区分 `surfaceSummary``functionalSummary``compare 60/60 pass` 只代表表面规则通过,真实通过必须证明 Web 行为符合 LinuxCNC C++ 状态机和真实程序执行结果。
17. 检查新增文档20 号文档 294 行21 号文档 576 行;使用 `rg` 确认 `60/60``functionalSummary``真实通过``LinuxCNC C++``非法命令``realProgramExecutionParity` 等关键要求均已落入文档。
18. 检查 `git status --short`,确认本次新增 20、21 号文档并修改 README同时按规则追加本日志。
### 结论
已将 19 号源码分析拆分成两份详细文档:
- `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/20-20260707-AXIS按钮LinuxCNC真实C++对标实施步骤.md`
- `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/21-20260707-AXIS按钮LinuxCNC真实C++对标验收测试.md`
两份文档均明确:`compare 60/60 pass` 只是表面通过,不是最终完成依据。真实对标必须以 LinuxCNC C++ `emctaskmain.cc``emctask.cc``taskintf.cc``motion/command.c``control.c``homing.c` 的状态机、命令门禁、状态记录和真实 G-code 程序执行结果为准。README 已同步新增索引和当前关注点。本轮未修改业务代码,未运行测试,属于文档拆分和验收标准强化工作。
---
## 2026-07-07 18:42 EDT 执行日志
### 提问
用户要求:分析 `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working` 还有哪些工作需要做。
### 执行过程
1. 按工作目录 `/home/mes123456/cnc_wams` 执行检查,使用 `rg --files` 列出 `web-rtcp-5axis-xyzbc-trt-sim-plan/working` 下的文档、证据、截图和 trace 文件。
2. 查找 README、TODO、PLAN、STATUS、NOTES 类文件,确认核心入口是 `working/README.md`,并且目录中已有 18、19、20、21 号最新文档。
3. 执行 `git status --short -- web-rtcp-5axis-xyzbc-trt-sim-plan/working gptlog-process/gpdlog.md`,确认工作区已有未提交修改和未跟踪文档;本轮只读取分析并追加日志,不回退、不覆盖这些改动。
4. 阅读 `working/README.md`,确认当前索引写明 T-001 到 T-078 已完成,但新增关注点明确要求后续区分 `surfaceSummary``functionalSummary`,并说明 `compare 60/60 pass` 只代表表面规则通过。
5. 使用 `rg` 检索 `TODO``待办``未完成``缺失``差异``失败``下一步``functionalSummary``cppTaskStateMachineParity` 等关键词,定位主要后续工作集中在 20 号实施步骤和 21 号验收测试,而不是旧 T-001 到 T-078。
6. 阅读 `working/20-20260707-AXIS按钮LinuxCNC真实C++对标实施步骤.md`,确认其中要求补齐 C++ 源码行为映射、Web 状态字段、Task/HAL/WASM 命令 ABI、硬门禁测试、真实程序执行证据和 compare 功能级硬检查。
7. 阅读 `working/21-20260707-AXIS按钮LinuxCNC真实C++对标验收测试.md`,确认最终硬检查包括 `cppTaskStateMachineParity``cppModeGateParity``cppHomingParity``cppRunGateParity``cppPauseResumeParity``cppStepParity``illegalCommandParity``realProgramExecutionParity`,并要求输出 `surfaceSummary``functionalSummary`
8. 阅读 `working/04-任务矩阵.md`,确认当前任务矩阵只登记到 T-078且 T-001 到 T-078 均标记完成20/21 号文档提出的新功能级验收尚未作为后续任务编号落入矩阵。
9. 阅读 `working/03-推进台账.md`,确认最近完成轮次是 2026-07-07 18:18 EDT 的 AXIS 主控制按钮状态链路收敛,结论仍是旧 compare `60/60 pass`
10. 使用 Node 读取 `working/evidence/compare-xyzbc-trt-evidence.json`,确认当前 compare 顶层字段包含旧 `summary/checks/strictComparison`,状态为 pass、60 项检查全通过,但没有 `surfaceSummary``functionalSummary` 字段。
11. 使用 Node 读取 `working/evidence/web-xyzbc-trt-evidence.json``native-xyzbc-trt-evidence.json`,确认二者没有 20 号文档要求的 `taskMotionStateTrace``buttonCommandTrace``homingTrace``pauseFreezeTrace``stepMotionIdTrace``illegalCommandTrace``cppParityAssertions` 等新证据段。
12. 使用 `rg` 在项目源码中检索 `functionalSummary``surfaceSummary``cppTaskStateMachineParity``taskMotionStateTrace` 等符号,确认这些符号目前只出现在 working 文档中尚未落入采集脚本、compare 脚本或业务代码。
13. 检索 `tools/collect-native-xyzbc-trt-evidence.py``tools/collect-web-xyzbc-trt-evidence.mjs``tools/compare-xyzbc-trt-evidence.mjs` 相关输出,确认现有 compare 脚本仍围绕旧 60 项 summary 和 strictComparison 工作。
14. 根据以上证据归纳剩余工作:将 20/21 号文档转成任务矩阵项;补 native/Web 功能级状态 trace补 compare 的 `surfaceSummary/functionalSummary` 与 C++ 硬规则补非法命令矩阵、Home/Run/Pause/Resume/Step 真实程序执行验收;最后重新跑 native/Web/compare/build/smoke/browser 并按 21 号模板形成验收结论。
### 结论
当前 `working` 目录中旧任务 T-001 到 T-078 已标记完成,旧证据为 `compare.status=pass``60/60 pass``blockers=[]`。但最新 20/21 号文档已经把旧 `60/60 pass` 明确降级为表面通过,真正还需要做的是落地 LinuxCNC C++ task/motion/homing 状态机的功能级验收:采集 native/Web 同名 C++ 行为 trace新增 `functionalSummary` 和八项硬检查验证非法命令、Home、Run、Pause/Resume、Step、真实 G-code line/motion/path/status 对齐。由于当前 evidence 和 compare JSON 尚无这些字段,现阶段不能宣称“真实通过”,只能说“旧矩阵完成,新增 C++ 功能级验收待实现和复验”。