Validate AXIS task state flow
This commit is contained in:
@@ -6053,3 +6053,560 @@ T-034 已标为完成,下一推进指针改为 T-035。
|
||||
13. 将本轮中文执行日志追加到 `gptlog-process/gpdlog.md`。
|
||||
14. 将同一轮中文执行日志追加到 `web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md`。
|
||||
15. 接下来会将日志追加作为单独提交推送,确保云仓库包含本轮过程记录。
|
||||
## 2026-07-08 09:26 EDT
|
||||
|
||||
### 提问
|
||||
|
||||
用户要求完成 `/home/mes123456/cnc_wams/wasm-port/working` 全部工作。
|
||||
|
||||
### 结论
|
||||
|
||||
已完成并复核 `wasm-port/working` 当前全部工作。任务矩阵 T-001 到 T-055 均为完成,下一条优先任务为“无”;全量闭合脚本 `./tools/verify_task_full_closure.sh` 通过,最终输出 `task_full_closure_status=ok`。本轮未修改 runtime 或测试逻辑,只追加 working 台账、验收证据和执行日志。
|
||||
|
||||
### 完整执行过程
|
||||
|
||||
1. 从仓库根目录 `/home/mes123456/cnc_wams` 开始,列出 `wasm-port/working` 文件,确认存在 README、项目功能内容、开发步骤、推进台账、任务矩阵、验收证据、决策记录、周期蓝图、源码替换分解、NML 评估、usrmot shim 设计、WASM 核心状态机边界和 status JSON 对标方案。
|
||||
2. 执行 `git status --short`,确认本轮开始时工作树没有待处理输出。
|
||||
3. 读取 `wasm-port/working/README.md`,确认当前基线说明 task-HAL runtime 已具备 LinuxCNC 式周期骨架,RUN 文件主路径已由 staged program、`emccanon.cc` command envelope 和 `taskintf.cc` motion issue 驱动,并声明当前全部任务完成。
|
||||
4. 读取 `wasm-port/working/04-任务矩阵.md`,确认 T-001 到 T-055 均标记为“完成”,当前推进指针为“下一条优先任务:无”。
|
||||
5. 读取 `wasm-port/working/03-推进台账.md` 和 `05-验收证据.md`,确认上一轮已记录 T-051 到 T-055 status JSON contract 的实现与验收证据。
|
||||
6. 使用 `find .. -name AGENTS.md -print` 查找作用域规则,发现仓库根目录和 `wasm-port/AGENTS.md` 都适用。
|
||||
7. 读取根目录 `AGENTS.md`,确认每次执行结束后必须把中文完整执行过程日志追加到 `gptlog-process/gpdlog.md`。
|
||||
8. 读取 `wasm-port/AGENTS.md`,确认本轮还必须遵守 LinuxCNC source reuse 边界,并把执行日志追加到 `/home/mes123456/cnc_wams/web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md`。
|
||||
9. 扫描 `wasm-port/working`、`wasm-port/tools`、`wasm-port/docs`、`wasm-port/runtime`、`wasm-port/tests` 中的 `待办`、`进行中`、`阻塞`、`TODO`、`FIXME`、`未完成`、`后续`、`SJ-*`、`T-*` 等标记。扫描结果包含已闭合矩阵行、保守边界和后续新增任务入口,也包含 vendored three.js 自带 TODO,但没有当前任务矩阵中的未闭合任务行。
|
||||
10. 检查 `wasm-port/tools/verify_task_full_closure.sh`、`verify_task_working_closure.sh` 和 `verify_task_status_json_contract.sh` 的执行权限,确认均可执行。
|
||||
11. 读取 `wasm-port/tools/verify_task_full_closure.sh`,确认它会加载 emsdk,依次运行 task-HAL WASM build、WASM smoke、SDK smoke、state matrix、motion/HAL sync、StandaloneEmcStatus、no-JSON 主路径、status JSON contract、working closure、source reuse/drift docs 和 readiness contract。
|
||||
12. 在 `/home/mes123456/cnc_wams/wasm-port` 执行 `./tools/verify_task_full_closure.sh`。
|
||||
13. 验证脚本自动加载 `/home/mes123456/emsdk/emsdk_env.sh`,随后构建通过,输出 `linuxcnc_task_hal_wasm_build=ok`。
|
||||
14. WASM runtime smoke、SDK smoke、state matrix、motion/HAL sync、StandaloneEmcStatus、no-JSON 主路径、status JSON contract、working closure、source reuse/drift docs 和 readiness contract 均输出 `ok`。
|
||||
15. 全量闭合脚本最终输出 `task_full_closure_status=ok`。
|
||||
16. 执行 `git status --short`,确认验证脚本没有产生新的工作树差异。
|
||||
17. 执行 `TZ=America/New_York date '+%Y-%m-%d %H:%M %Z'`,得到本轮日志时间戳 `2026-07-08 09:26 EDT`。
|
||||
18. 在 `wasm-port/working/03-推进台账.md` 顶部追加本轮复核台账,记录读取文档、检查 AGENTS、扫描开放标记、运行 full closure 和当前结论。
|
||||
19. 在 `wasm-port/working/05-验收证据.md` 顶部追加本轮验收证据,记录 full closure 命令和关键输出摘要。
|
||||
20. 将本轮完整中文执行日志追加到 `gptlog-process/gpdlog.md`。
|
||||
21. 将同一轮完整中文执行日志追加到 `web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md`,满足 `wasm-port/AGENTS.md` 的额外日志要求。
|
||||
## 2026-07-08 09:30 EDT
|
||||
|
||||
### 提问
|
||||
|
||||
用户要求完成 `/home/mes123456/cnc_wams/wasm-port/working/11-WASM核心状态机边界与后续完善路线.md` 和 `/home/mes123456/cnc_wams/wasm-port/working/12-status-json-LinuxCNC对标方案.md` 的全部工作。
|
||||
|
||||
### 结论
|
||||
|
||||
已完成并复核这两个目标文件定义的当前全部工作。`12-status-json-LinuxCNC对标方案.md` 的 SJ-1 到 SJ-5 已对应 `04-任务矩阵.md` 的 T-051 到 T-055,状态均为完成;`11-WASM核心状态机边界与后续完善路线.md` 已记录这些 status JSON 子任务闭合。全量闭合脚本通过,最终输出 `task_full_closure_status=ok`,`git diff --check` 无输出。
|
||||
|
||||
### 完整执行过程
|
||||
|
||||
1. 从 `/home/mes123456/cnc_wams` 开始执行本轮任务。
|
||||
2. 读取用户指定的 `wasm-port/working/11-WASM核心状态机边界与后续完善路线.md`,确认该文件要求 WASM/C++ 作为核心状态机事实源,JS/SDK 和 JSON 只作为 host/browser 边界,并记录 SJ-1 到 SJ-5 已闭合。
|
||||
3. 读取用户指定的 `wasm-port/working/12-status-json-LinuxCNC对标方案.md`,确认 `status JSON` 定位为 `StandaloneEmcStatus -> write_status_snapshot() -> lctask_read_status_json()` 的外部通信格式,不承担 task/motion 状态机语义。
|
||||
4. 读取 `wasm-port/working/04-任务矩阵.md`,确认 T-051 到 T-055 分别对应 SJ-1 到 SJ-5,且均标记为完成;当前推进指针为“下一条优先任务:无”。
|
||||
5. 读取 `wasm-port/working/03-推进台账.md` 和 `wasm-port/working/05-验收证据.md`,确认此前已记录 SJ-1 到 SJ-5 的实现与验收证据。
|
||||
6. 读取 `wasm-port/tools/verify_task_status_json_contract.sh` 和 `wasm-port/tools/verify_task_full_closure.sh`,确认 status JSON contract gate 已纳入 full closure。
|
||||
7. 执行 `git status --short`,看到当前已有日志、台账和验收证据差异,未回退任何已有修改。
|
||||
8. 使用 `rg` 扫描 working、docs、tools、runtime、tests 中的 `T-051` 到 `T-055`、`SJ-1` 到 `SJ-5`、`StandaloneEmcStatus`、`emcStatus` 和 `verify_task_status_json_contract` 锚点,确认 runtime、测试、文档和 gate 均有覆盖。
|
||||
9. 在 `/home/mes123456/cnc_wams/wasm-port` 执行 `./tools/verify_task_full_closure.sh`。
|
||||
10. 脚本自动加载 emsdk,构建 task-HAL WASM 成功,输出 `linuxcnc_task_hal_wasm_build=ok`。
|
||||
11. WASM runtime smoke、SDK smoke、state matrix、motion/HAL sync、StandaloneEmcStatus、no-JSON 主路径、status JSON contract、working closure、source reuse/drift docs 和 readiness contract 均通过。
|
||||
12. 全量闭合脚本最终输出 `task_full_closure_status=ok`。
|
||||
13. 在仓库根目录执行 `git diff --check`,无输出,以 0 退出。
|
||||
14. 执行 `date '+%Y-%m-%d %H:%M %Z'`,得到日志时间戳 `2026-07-08 09:30 EDT`。
|
||||
15. 在 `wasm-port/working/03-推进台账.md` 顶部追加本轮 09:30 EDT 复核台账,记录目标、执行内容、影响文件和结论。
|
||||
16. 在 `wasm-port/working/05-验收证据.md` 顶部追加本轮 09:30 EDT 验收证据,记录 full closure 和 `git diff --check` 的输出摘要。
|
||||
17. 将本轮完整中文执行日志追加到 `gptlog-process/gpdlog.md`。
|
||||
18. 将同一轮完整中文执行日志追加到 `web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md`,满足 `wasm-port/AGENTS.md` 的额外日志要求。
|
||||
|
||||
## 2026-07-08 09:44 EDT
|
||||
|
||||
### 提问
|
||||
|
||||
用户指出 `/home/mes123456/cnc_wams/wasm-port` 中的 WASM 已进行了完善,要求项目 `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan` 进行适应性改写。
|
||||
|
||||
### 结论
|
||||
|
||||
已完成目标项目对新版 task/HAL WASM `StandaloneEmcStatus`/`emcStatus` 状态结构的适配。`linuxcnc-task-hal-runtime.js` 现在以 `emcStatus.task`、`emcStatus.motion`、`emcStatus.motion.traj`、`emcStatus.motion.axisByName`、`emcStatus.motion.joint0` 为主输入生成旧 UI 消费字段,同时保留旧 `task`/`motionStatus` 兼容。已补充 xyzbc smoke 对真实新版 WASM 状态和纯 `emcStatus` 输入的断言,并重新构建静态产物,同步 `dist` 下 task/HAL runtime 与最新 WASM 文件。验证通过。
|
||||
|
||||
### 完整执行过程
|
||||
|
||||
1. 从 `/home/mes123456/cnc_wams` 开始本轮任务,读取用户提供的根目录 `AGENTS.md` 日志要求。
|
||||
2. 使用 `find .. -name AGENTS.md -print` 检查仓库范围内的代理规则,确认根目录要求每次执行结束后追加中文日志到 `gptlog-process/gpdlog.md`。
|
||||
3. 使用 `rg --files wasm-port web-rtcp-5axis-xyzbc-trt-sim-plan` 扫描两个项目文件结构,定位 WASM SDK、runtime、测试和构建脚本。
|
||||
4. 执行 `git status --short`,确认工作区已有未提交修改,包括根日志、`wasm-port/working` 文档、`web-rtcp-5axis-sim-plan` 日志以及目标项目 `app/src/runtime/linuxcnc-task-hal-runtime.js`;未回退任何已有修改。
|
||||
5. 读取 `wasm-port/AGENTS.md`,确认 `wasm-port` 本身的独立工程规则;本轮未直接编辑 `wasm-port` 源文件。
|
||||
6. 查看目标项目 `app/src/runtime/linuxcnc-task-hal-runtime.js` 的既有差异,确认已有一部分 `emcStatus` 归一化改动。
|
||||
7. 使用 `rg` 搜索目标项目和 `wasm-port/runtime/sdk/src` 中的 `createLinuxCncTaskHalSdk`、`wrapTaskHalSdk`、`emcStatus`、`motionStatus`、`readStatus`、`sendCommand` 等引用,定位主要适配点。
|
||||
8. 读取 `wasm-port/runtime/sdk/src/linuxcnc-task-hal.js`,确认新版 SDK 仍通过 `lctask_read_status_json` 读取 JSON,但 status 内容新增 `StandaloneEmcStatus`、`schemaVersion` 和 `emcStatus`。
|
||||
9. 读取 `wasm-port/tests/wasm/node/verify_task_status_json_contract.mjs`,确认新版 WASM 对 `emcStatus.task`、`emcStatus.motion.traj`、`axis`、`joint`、`io` 等字段已有契约测试。
|
||||
10. 读取目标项目 `tests/node/verify_linuxcnc_task_hal_runtime.mjs` 和 `tests/node/verify_xyzbc_trt_web_app.mjs`,确认现有测试更多依赖兼容旧字段,缺少对新版 `emcStatus` 的目标项目断言。
|
||||
11. 运行 `node tests/node/verify_linuxcnc_task_hal_runtime.mjs`,通过,输出 `linuxcnc_task_hal_runtime_smoke=ok`、`task_hal_machine_file_smoke=ok`、`switchkins_remap_hal_sync_smoke=ok`、`browser_task_hal_worker_smoke=ok`。
|
||||
12. 运行 `node tests/node/verify_run_feedback_loop.mjs`,通过,输出 `run_feedback_status_loop_smoke=ok`、`run_ready_sequence_smoke=ok`、`pause_uses_motion_paused_gate=ok`、`pause_freezes_task_hal_status_loop=ok`。
|
||||
13. 运行 `node tests/node/verify_xyzbc_trt_web_app.mjs`,通过,输出 `xyzbc_trt_web_app_smoke=ok`。
|
||||
14. 运行 `node tests/node/verify_impeller_feed_task_hal_run.mjs`,通过,确认复杂刀路 feed task/HAL 执行仍可工作。
|
||||
15. 读取 `app/scripts/build-static.mjs` 和 `app/package.json`,确认静态构建会复制 `wasm-port/build/wasm/task-hal/linuxcnc_task_hal.js`、`.wasm` 以及 SDK 文件到 `app/dist`。
|
||||
16. 执行临时 Node 脚本,通过 `createLinuxCncTaskHalSdk` 和 `wrapTaskHalSdk` 读取真实新版 WASM status,观察到 `statusSource: StandaloneEmcStatus`、`schemaVersion: 1`、`emcStatus.task`、`emcStatus.motion.traj`、`axisByName`、`joint0` 等字段,并确认目标归一化后的 `ui` 字段可生成。
|
||||
17. 使用 `apply_patch` 修改 `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/linuxcnc-task-hal-runtime.js`:新增以 `emcStatus` 为主的 `taskRuntimeReady`、`taskMotionReady`、`halSyncReady` 推导;补全 `normalizeStatusTask` 对 task cycle、programOpen、planId、homing、line count 等字段的映射;补全 `normalizeStatusMotion` 对 motion id、queue、paused、switchkins、velocity 等字段的映射;补全 axis 从 `axisByName`、`traj.actualPosition`、`axis[]`、`traj.position` 的回退顺序;补全 joint0 从 `emcStatus.motion.joint0` 的读取。
|
||||
18. 使用 `apply_patch` 修改 `web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_xyzbc_trt_web_app.mjs`:导入 `normalizeTaskHalStatus`;在真实 task/HAL 运行后断言 `StandaloneEmcStatus`、`schemaVersion`、`emcStatus` 与兼容字段一致;新增纯 `emcStatus` 输入归一化测试,覆盖 UI task/motion/axis/joint/velocity 等字段。
|
||||
19. 重新运行 `node tests/node/verify_xyzbc_trt_web_app.mjs`,通过,输出 `xyzbc_trt_web_app_smoke=ok`。
|
||||
20. 重新运行 `node tests/node/verify_linuxcnc_task_hal_runtime.mjs`,通过,输出四个 task/HAL runtime smoke 成功标记。
|
||||
21. 重新运行 `node tests/node/verify_run_feedback_loop.mjs`,通过,输出四个 run feedback smoke 成功标记。
|
||||
22. 在 `web-rtcp-5axis-xyzbc-trt-sim-plan/app` 执行 `npm run build`,构建通过,输出 `gmoccapy_static_build=ok`,并同步更新 `app/dist/src/runtime/linuxcnc-task-hal-runtime.js` 与 `app/dist/wasm-port/build/wasm/task-hal/linuxcnc_task_hal.js/.wasm`。
|
||||
23. 运行 `bash tests/browser/verify_xyzbc_trt_browser.sh`,通过,输出 `xyzbc_trt_browser_smoke=ok`。
|
||||
24. 执行 `git status --short` 和 `git diff --stat`,确认本轮目标项目改动包括源码 runtime、测试、dist runtime 和 dist task/HAL WASM 资源;同时保留工作区原有日志与 `wasm-port/working` 修改。
|
||||
25. 执行 `date '+%Y-%m-%d %H:%M %Z'`,得到本轮日志时间戳 `2026-07-08 09:44 EDT`。
|
||||
26. 将本轮完整中文执行日志追加到 `gptlog-process/gpdlog.md`。
|
||||
|
||||
## 2026-07-08 09:52 EDT
|
||||
|
||||
### 提问
|
||||
|
||||
用户要求“继续完成剩余任务”。
|
||||
|
||||
### 结论
|
||||
|
||||
已继续完成新版 WASM 适配后的剩余闭环任务。目标项目 `working` 已新增 T-081,记录新版 `wasm-port` task/HAL WASM `StandaloneEmcStatus`/`emcStatus` 状态合同适配;Web evidence 和 compare 已刷新,最新 `compare.status=pass`、`surfaceSummary=60/60 pass`、`functionalSummary=8/8 pass`、`requiredImprovements=[]`。`git diff --check` 通过。
|
||||
|
||||
### 完整执行过程
|
||||
|
||||
1. 从 `/home/mes123456/cnc_wams` 开始执行本轮“继续完成剩余任务”。
|
||||
2. 使用 `rg` 扫描 `web-rtcp-5axis-xyzbc-trt-sim-plan/working`、`app/src`、`tests/node` 中的 `未完成`、`待完成`、`TODO`、`FIXME`、`剩余`、`fail`、`blocker`、`requiredImprovements` 等关键词,发现历史文档中旧失败已由后续通过记录覆盖。
|
||||
3. 读取 `web-rtcp-5axis-xyzbc-trt-sim-plan/working/README.md`,确认旧轮次记录到 T-080 已完成,但本轮已有新版 WASM 状态合同适配改动,需要新增任务闭环。
|
||||
4. 读取 `working/03-推进台账.md`,确认旧收口轮次为 2026-07-07 19:03 EDT,结论为 T-001 到 T-080 完成。
|
||||
5. 执行 `git status --short`,确认工作区已有本轮和此前未提交修改,未回退任何无关改动。
|
||||
6. 读取 `working/04-任务矩阵.md`,确认当前矩阵最后一项为 T-080。
|
||||
7. 读取 `working/05-验收证据.md`,确认旧验收证据记录到 2026-07-07 19:03 EDT。
|
||||
8. 读取当前 `working/evidence/compare-xyzbc-trt-evidence.json` 摘要,确认旧 evidence 为 `compare.status=pass`、`surfaceSummary=60/60 pass`、`functionalSummary=8/8 pass`。
|
||||
9. 执行 `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web`,刷新 Web evidence,输出 `web_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json`。
|
||||
10. 执行 `node wasm-port/tests/wasm/node/verify_task_status_json_contract.mjs`,通过,输出 `task_status_json_contract_runtime=ok`、`task_status_json_contract_schema=ok`、`task_status_json_contract=ok`。
|
||||
11. 执行 `node wasm-port/tests/wasm/node/verify_task_hal_sdk.mjs`,通过,输出 `linuxcnc_task_hal_sdk=ok`、`task_hal_sdk_status_snapshot=ok`、`task_hal_sdk_standalone_emc_status=ok`、`task_hal_sdk_status_json_contract=ok` 等标记。
|
||||
12. 执行 `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare`,刷新 compare evidence,输出 `compare_xyzbc_trt_status=pass`。
|
||||
13. 执行 `node web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_xyzbc_trt_web_app.mjs`,通过,输出 `xyzbc_trt_web_app_smoke=ok`。
|
||||
14. 执行 `node web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_linuxcnc_task_hal_runtime.mjs`,通过,输出 `linuxcnc_task_hal_runtime_smoke=ok`、`task_hal_machine_file_smoke=ok`、`switchkins_remap_hal_sync_smoke=ok`、`browser_task_hal_worker_smoke=ok`。
|
||||
15. 执行 `node web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_run_feedback_loop.mjs`,通过,输出 `run_feedback_status_loop_smoke=ok`、`run_ready_sequence_smoke=ok`、`pause_uses_motion_paused_gate=ok`、`pause_freezes_task_hal_status_loop=ok`。
|
||||
16. 读取刷新后的 Web/compare evidence 摘要,确认 `web.collectedAt=2026-07-08T13:50:12.039Z`、`web.blockers=[]`、`web.taskHalEquivalence.ready=true`、`web.executionPath.status=ok`、`web.executionPath.sampleCount=228`。
|
||||
17. 同一摘要确认 `compare.comparedAt=2026-07-08T13:50:23.202Z`、`compare.status=pass`、`surfaceSummary.passCount=60`、`surfaceSummary.failCount=0`、`functionalSummary.status=pass`、`functionalSummary.passCount=8`、`functionalSummary.failCount=0`、`requiredImprovements=[]`。
|
||||
18. 执行 `date '+%Y-%m-%d %H:%M %Z'`,得到工作记录时间戳 `2026-07-08 09:50 EDT`。
|
||||
19. 使用 `apply_patch` 更新 `web-rtcp-5axis-xyzbc-trt-sim-plan/working/README.md`,在当前新增关注点顶部加入 2026-07-08 09:50 EDT 的新版 WASM 状态合同适配结论。
|
||||
20. 使用 `apply_patch` 更新 `working/03-推进台账.md`,新增“2026-07-08 09:50 EDT - 新版 WASM 状态合同适配收口”条目,记录目标、已做事项、执行命令、关键结果、最新 evidence 摘要和结论。
|
||||
21. 使用 `apply_patch` 更新 `working/04-任务矩阵.md`,新增 T-081 “2026-07-08 新版 WASM `StandaloneEmcStatus` 状态合同适配”,并把当前任务范围更新为 T-001 到 T-081 均已完成。
|
||||
22. 使用 `apply_patch` 更新 `working/05-验收证据.md`,新增 2026-07-08 09:50 EDT 验收证据,记录实现文件、命令输出、Web evidence 和 compare 摘要。
|
||||
23. 使用 `rg` 检查 T-080/T-081 文档锚点,确认最新任务矩阵已包含 T-081;旧推进和验收条目中的 T-080 是历史轮次结论,未改写。
|
||||
24. 执行 `git diff --check`,无输出,检查通过。
|
||||
25. 执行 `git status --short` 和 `git diff --stat`,确认本轮新增目标项目 working 文档、Web/compare evidence 刷新,以及前一轮的 runtime/test/dist 改动;同时保留工作区原有无关未提交修改。
|
||||
26. 执行 `date '+%Y-%m-%d %H:%M %Z'`,得到本轮日志时间戳 `2026-07-08 09:52 EDT`。
|
||||
27. 将本轮完整中文执行日志追加到 `gptlog-process/gpdlog.md`。
|
||||
|
||||
## 2026-07-08 10:03 EDT
|
||||
|
||||
### 提问
|
||||
|
||||
用户要求“不保留旧字段兼容,修改程序”。
|
||||
|
||||
### 结论
|
||||
|
||||
已按要求移除旧 `task`/`motionStatus` 输入兼容。`web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/linuxcnc-task-hal-runtime.js` 的 `normalizeTaskHalStatus()` 现在必须收到新版 `StandaloneEmcStatus`/`emcStatus.task`/`emcStatus.motion`,否则直接抛错;不再从旧 `status.task`、`status.motionStatus.motion`、`status.motionStatus.axis`、`status.motionStatus.joint0` 回退。Web 内部仍输出 `task`、`motionStatus`、`ui` 派生视图,但这些字段只从 `emcStatus` 计算。目标项目新增 T-082 文档记录,验证与 compare 均通过。
|
||||
|
||||
### 完整执行过程
|
||||
|
||||
1. 从 `/home/mes123456/cnc_wams` 开始执行本轮任务。
|
||||
2. 读取 `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/linuxcnc-task-hal-runtime.js` 中 `normalizeTaskHalStatus()`、`normalizeStatusTask()`、`normalizeStatusMotion()`、`normalizeStatusAxis()`、`normalizeStatusJoint0()` 的当前实现,确认上一轮还保留旧输入回退。
|
||||
3. 使用 `rg` 搜索 `normalizeTaskHalStatus`、`taskHalStatusForSwitchkinsLine`、`motionStatus`、`emcStatus` 等引用,定位受影响测试。
|
||||
4. 执行 `git status --short`,确认工作区已有未提交修改,未回退任何无关改动。
|
||||
5. 使用 `apply_patch` 修改 `linuxcnc-task-hal-runtime.js`:
|
||||
- 新增 `requireStandaloneEmcStatus()`。
|
||||
- 缺少 `status.emcStatus`、`emcStatus.task` 或 `emcStatus.motion` 时直接抛错。
|
||||
- 移除从 `status.task`、`status.motionStatus.motion`、`status.motionStatus.axis`、`status.motionStatus.joint0` 读取兼容数据。
|
||||
- `task`、`motionStatus`、`ui` 改为完全由 `emcStatus` 派生。
|
||||
- `activeLineSource` 改为 `emc-status`。
|
||||
6. 使用 `apply_patch` 修改 `tests/node/verify_xyzbc_trt_web_app.mjs`,增加旧 `task`/`motionStatus` 输入会被拒绝的断言。
|
||||
7. 首轮运行相关测试:
|
||||
- `verify_xyzbc_trt_web_app.mjs` 通过。
|
||||
- `verify_run_feedback_loop.mjs` 因旧 `activeLineSource === "motion-status"` 断言失败。
|
||||
- `verify_linuxcnc_task_hal_runtime.mjs` 因旧 `teleopMode` 断言失败。
|
||||
- `verify_rtcp_store.mjs` 通过。
|
||||
8. 读取失败行,确认失败来自测试仍断言旧字段,不是新版 `emcStatus` 运行失败。
|
||||
9. 通过临时 Node 脚本使用真实 store 流程执行 power/home/manual/jog,读取 Jog 后状态,确认新版 `emcStatus.motion.valid=true`、`ui.taskMode=manual`、轴位置正确,但没有旧 `teleopMode` 字段。
|
||||
10. 使用 `apply_patch` 修改 `tests/node/verify_linuxcnc_task_hal_runtime.mjs`:
|
||||
- Jog 后不再断言 `motionStatus.motion.teleopMode`。
|
||||
- 改为断言 `taskHalStatus.emcStatus.motion.valid === true` 和 `taskHalStatus.ui.taskMode === "manual"`。
|
||||
- Stop 后不再断言旧 `motion.aborted`,改为断言 `emcStatus.motion.valid` 和 `ui.interpState === "idle"`。
|
||||
11. 使用 `apply_patch` 修改 `tests/node/verify_run_feedback_loop.mjs`,将 active line 来源断言从 `motion-status` 改为 `emc-status`。
|
||||
12. 重新运行 `node tests/node/verify_linuxcnc_task_hal_runtime.mjs`,通过,输出四个 task/HAL runtime smoke 标记。
|
||||
13. 重新运行 `node tests/node/verify_run_feedback_loop.mjs`,通过,输出四个 run feedback smoke 标记。
|
||||
14. 重新运行 `node tests/node/verify_xyzbc_trt_web_app.mjs`,通过,输出 `xyzbc_trt_web_app_smoke=ok`。
|
||||
15. 重新运行 `node tests/node/verify_rtcp_store.mjs`,通过,输出 `rtcp_store_smoke=ok`。
|
||||
16. 执行 `npm run build`,静态构建通过,输出 `gmoccapy_static_build=ok`,同步更新 `app/dist/src/runtime/linuxcnc-task-hal-runtime.js`。
|
||||
17. 使用 `rg` 搜索当前 T-081 文档中的“兼容旧字段”表述,确认需要更新。
|
||||
18. 使用 `apply_patch` 更新 `working/README.md`、`working/03-推进台账.md`、`working/04-任务矩阵.md`、`working/05-验收证据.md`,把 T-081/T-082 相关描述改为拒绝旧输入。
|
||||
19. 运行 `bash tests/browser/verify_xyzbc_trt_browser.sh`,通过,输出 `xyzbc_trt_browser_smoke=ok`。
|
||||
20. 运行 `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:web`,刷新 Web evidence,输出 evidence 路径。
|
||||
21. 运行 `node wasm-port/tests/wasm/node/verify_task_status_json_contract.mjs`,通过,输出 status JSON contract 三个 ok。
|
||||
22. 运行 `npm --prefix web-rtcp-5axis-xyzbc-trt-sim-plan/app run evidence:compare`,通过,输出 `compare_xyzbc_trt_status=pass`。
|
||||
23. 运行 `node wasm-port/tests/wasm/node/verify_task_hal_sdk.mjs`,通过,输出 `linuxcnc_task_hal_sdk=ok`、`task_hal_sdk_standalone_emc_status=ok`、`task_hal_sdk_status_json_contract=ok` 等标记。
|
||||
24. 运行临时 Node 检查旧格式输入,确认输出 `legacy_task_motion_status_rejected=ok`。
|
||||
25. 读取最新 evidence 摘要,确认 `web.collectedAt=2026-07-08T14:00:44.425Z`、`web.blockers=[]`、`web.executionPath.status=ok`、`web.executionPath.sampleCount=228`。
|
||||
26. 同一摘要确认 `compare.comparedAt=2026-07-08T14:00:58.972Z`、`compare.status=pass`、`surfaceSummary.passCount=60`、`surfaceSummary.failCount=0`、`functionalSummary.status=pass`、`functionalSummary.passCount=8`、`functionalSummary.failCount=0`、`requiredImprovements=[]`。
|
||||
27. 执行 `date '+%Y-%m-%d %H:%M %Z'`,得到工作记录时间戳 `2026-07-08 10:01 EDT`。
|
||||
28. 使用 `apply_patch` 在 `working/README.md` 新增 2026-07-08 10:01 EDT 关注点。
|
||||
29. 使用 `apply_patch` 在 `working/03-推进台账.md` 新增“移除旧 task/motionStatus 输入兼容”轮次。
|
||||
30. 使用 `apply_patch` 在 `working/04-任务矩阵.md` 新增 T-082,并把当前任务范围更新为 T-001 到 T-082。
|
||||
31. 使用 `apply_patch` 在 `working/05-验收证据.md` 新增 2026-07-08 10:01 EDT 验收证据。
|
||||
32. 使用 `rg` 检查 T-082、旧输入拒绝和 evidence 标记的文档锚点。
|
||||
33. 执行 `git diff --check`,无输出,检查通过。
|
||||
34. 执行 `git status --short` 和 `git diff --stat`,确认本轮改动包括 runtime、测试、dist runtime、working 文档和刷新后的 Web/compare evidence;同时保留工作区原有无关未提交修改。
|
||||
35. 执行 `date '+%Y-%m-%d %H:%M %Z'`,得到本轮日志时间戳 `2026-07-08 10:03 EDT`。
|
||||
36. 将本轮完整中文执行日志追加到 `gptlog-process/gpdlog.md`。
|
||||
## 2026-07-08 10:25 EDT
|
||||
|
||||
### 提问
|
||||
|
||||
用户要求:从源头 `/home/mes123456/cnc_wams/wasm-port` 取消“旧字段输入兼容”,并明确不保留旧字段兼容。
|
||||
|
||||
### 执行过程
|
||||
|
||||
1. 读取并遵守根目录 `AGENTS.md` 与 `wasm-port/AGENTS.md`,确认需要追加中文过程日志,并且 `wasm-port` 修改需同步维护 source reuse / drift / working 文档和验证。
|
||||
2. 复核上一轮遗留状态,确认 `linuxcnc_task_hal_wasm.cpp` 的 `status_json()` 已开始移除 `taskTopLevelStatus`、`rcsStatus`、顶层 `task`、`servoCycle` 和顶层 `motionStatus`,但测试中仍有旧字段消费和机械替换产生的自比较。
|
||||
3. 修改 `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp`:
|
||||
- `lctask_read_status_json()` 的 task/motion/io/top 状态只通过 `emcStatus` 输出。
|
||||
- 不再输出旧顶层字段 `taskTopLevelStatus`、`rcsStatus`、`task`、`servoCycle`、`motionStatus`。
|
||||
- 将旧 task/motion 视图中仍需要的字段补入 `emcStatus.task` 和 `emcStatus.motion`。
|
||||
4. 修改 Node/WASM 测试:
|
||||
- `verify_task_status_json_contract.mjs`、`verify_task_hal_sdk.mjs`、`verify_task_hal_wasm.mjs`、`verify_task_state_matrix.mjs` 均改为只读取 `emcStatus`。
|
||||
- 新增或接入 `assertNoLegacyStatusFields()`,对旧顶层字段做负向断言。
|
||||
- 修正 `emcStatus.motion.traj.id` 对应 `emcStatus.motion.motionId`,并移除无意义自比较。
|
||||
- 保留独立 `_lcmot_read_status_json()` 的 motion runtime 测试用途,不把它当 task status 兼容字段。
|
||||
5. 重建 task-HAL wasm:
|
||||
- `source /home/mes123456/emsdk/emsdk_env.sh >/dev/null && bash wasm-port/tools/build_task_hal_wasm.sh`
|
||||
- 输出 `linuxcnc_task_hal_wasm_build=ok`。
|
||||
6. 运行直接相关验证:
|
||||
- `node wasm-port/tests/wasm/node/verify_task_status_json_contract.mjs`
|
||||
- `node wasm-port/tests/wasm/node/verify_task_hal_sdk.mjs`
|
||||
- `node wasm-port/tests/wasm/node/verify_task_state_matrix.mjs`
|
||||
- `node wasm-port/tests/wasm/node/verify_task_hal_wasm.mjs`
|
||||
- 以上均通过,输出包含 `task_status_json_contract=ok`、`linuxcnc_task_hal_sdk=ok`、`task_state_matrix=ok`、`linuxcnc_task_runtime_smoke=ok`。
|
||||
7. 更新 working 文档:
|
||||
- `01-项目功能内容.md`、`02-项目程序开发详细步骤.md`、`04-任务矩阵.md`、`11-WASM核心状态机边界与后续完善路线.md`、`12-status-json-LinuxCNC对标方案.md` 均改为 `emcStatus` 唯一 task/motion/io 状态入口。
|
||||
- 新增 T-056:源头取消旧 status 字段兼容输出。
|
||||
- `03-推进台账.md` 和 `05-验收证据.md` 记录本轮 T-056 执行和验收。
|
||||
- `06-决策记录.md` 新增 D-046,覆盖 D-044 中旧字段兼容视图的旧口径。
|
||||
- `07-emctaskmain周期对标蓝图.md` 同步旧字段不再作为兼容视图的当前口径。
|
||||
8. 更新 source reuse / drift / compatibility 文档和 gate:
|
||||
- `docs/source-reuse-map.md`、`docs/drift-report.md`、`docs/compatibility-validation.md` 记录 T-056 和旧字段禁出。
|
||||
- `tools/verify_task_working_closure.sh` 增加 T-056 检查。
|
||||
- `tools/verify_task_source_reuse_drift_docs.sh` 增加 T-056 和旧字段缺失检查。
|
||||
- `tools/verify_task_standalone_emc_status.sh` 从“旧字段同源”检查改为 `emcStatus` 与旧字段负向断言检查。
|
||||
9. 运行脚本级验证:
|
||||
- `cd wasm-port && SKIP_TASK_HAL_BUILD=1 ./tools/verify_task_status_json_contract.sh`:通过,输出 `task_status_json_contract_status=ok`。
|
||||
- `cd wasm-port && ./tools/verify_task_standalone_emc_status.sh`:通过,输出 `task_standalone_emc_status_status=ok`。
|
||||
- `cd wasm-port && SKIP_TASK_HAL_BUILD=1 ./tools/verify_task_working_closure.sh`:通过,输出 `task_working_closure_status=ok`。
|
||||
- `cd wasm-port && ./tools/verify_task_source_reuse_drift_docs.sh`:通过,输出 `task_source_reuse_drift_docs_status=ok`。
|
||||
- `cd wasm-port && SKIP_TASK_HAL_BUILD=1 ./tools/verify_task_full_closure.sh`:通过,输出 `task_full_closure_status=ok`。
|
||||
- `git diff --check -- wasm-port`:无输出,以 0 退出。
|
||||
10. 最后检查:
|
||||
- `rg` 搜索确认 `linuxcnc_task_hal_wasm.cpp` 和构建产物中没有旧顶层字段字符串输出。
|
||||
- `git status --short` 确认本轮改动集中在 `wasm-port` runtime、tests、tools、docs、working 文档。
|
||||
|
||||
### 结论
|
||||
|
||||
已从 `wasm-port` 源头取消旧 task status 顶层字段兼容输出。`lctask_read_status_json()` 的 task/motion/io/top 状态入口收口为 `emcStatus`;旧字段 `taskTopLevelStatus`、`rcsStatus`、顶层 `task`、`servoCycle`、顶层 `motionStatus` 不再输出,并由测试和 gate 做负向断言。全量闭合验证通过,最终输出 `task_full_closure_status=ok`。
|
||||
|
||||
## 2026-07-08 10:42 EDT - web-rtcp-5axis-xyzbc-trt-sim-plan 删除旧字段并使用新版 emcStatus/ui
|
||||
|
||||
### 提问
|
||||
|
||||
用户要求:“`/home/mes123456/cnc_wams/wasm-port` 中已经删除旧字段,`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan` 项目也要删除旧字段,使用新方法。”
|
||||
|
||||
### 执行过程
|
||||
|
||||
1. 读取上下文与现有状态:
|
||||
- 确认当前工作目录为 `/home/mes123456/cnc_wams`。
|
||||
- 复核上一轮结论:`wasm-port` 已从源头取消旧顶层 status 字段输出,目标 Web 项目此前只完成“拒绝旧输入”,仍有部分内部路径和证据脚本残留旧字段读取。
|
||||
2. 搜索目标项目旧字段残留:
|
||||
- 执行 `rg -n "motionStatus|taskHalStatus\\.task|status\\.task|taskTopLevelStatus|rcsStatus|旧字段|legacy fields|servoCycle" web-rtcp-5axis-xyzbc-trt-sim-plan/app/src web-rtcp-5axis-xyzbc-trt-sim-plan/tests web-rtcp-5axis-xyzbc-trt-sim-plan/tools`。
|
||||
- 发现主要残留在 `tools/collect-web-xyzbc-trt-evidence.mjs`:执行采样仍从 `status.motionStatus.motion`、`status.task`、`status.motionStatus.axis`、`status.motionStatus.motion.spindleSpeed` 读取。
|
||||
- 运行时 `app/src/runtime/linuxcnc-task-hal-runtime.js` 已拒绝旧字段,但正常返回路径仍有用于剥离旧字段的解构变量。
|
||||
3. 修改 runtime:
|
||||
- 修改 `app/src/runtime/linuxcnc-task-hal-runtime.js`。
|
||||
- 保留 `rejectLegacyTaskHalStatusFields()`,继续拒绝 `taskTopLevelStatus`、`rcsStatus`、顶层 `task`、顶层 `servoCycle`、顶层 `motionStatus`。
|
||||
- 删除正常返回路径中的旧字段解构,正常返回对象直接基于新版 `status`,不再生成顶层 `task` 或 `motionStatus`。
|
||||
- 当前正常状态对象以 `emcStatus` 为事实来源,以 `ui` 为 Web UI 派生视图。
|
||||
4. 修改 Web evidence 采集:
|
||||
- 修改 `tools/collect-web-xyzbc-trt-evidence.mjs`。
|
||||
- 执行路径采样改为 `status.emcStatus.motion` 和 `status.emcStatus.task`。
|
||||
- 轴值采样改为优先读取 `status.ui.axisPose`,再回退到 `status.emcStatus.motion.axisByName` 或 `status.emcStatus.motion.traj.actualPosition`。
|
||||
- 主轴转速改为读取 `status.emcStatus.motion.spindleSpeed`,不再读取旧 `motionStatus`。
|
||||
5. 复核并保留此前已完成的目标项目改动:
|
||||
- `app/src/state/linuxcnc-task-policy.js` 已改为从 `emcStatus.task`、`emcStatus.motion` 和 `ui` 派生状态。
|
||||
- `app/src/state/store.js` 已改为在 `TASK_HAL_STATUS_APPLIED` 入口拒绝旧字段,运行反馈、状态循环、暂停、jog、queue/cycle 等读取 `emcStatus` 和 `ui`。
|
||||
- Node 测试已断言正常 `taskHalStatus` 不含顶层 `task`、`motionStatus`,并用新版 `emcStatus`/`ui` 夹具替换旧字段夹具。
|
||||
6. 执行快速检索与测试:
|
||||
- `rg` 确认源码中的旧字段只剩拒绝列表、负向测试和文档说明。
|
||||
- `node tests/node/verify_xyzbc_trt_web_app.mjs`:通过,输出 `xyzbc_trt_web_app_smoke=ok`。
|
||||
- `node tests/node/verify_run_feedback_loop.mjs`:通过,输出 `run_feedback_status_loop_smoke=ok`、`run_ready_sequence_smoke=ok`、`pause_uses_motion_paused_gate=ok`、`pause_freezes_task_hal_status_loop=ok`。
|
||||
7. 执行完整 Node/WASM 验证:
|
||||
- `node tests/node/verify_linuxcnc_task_hal_runtime.mjs`:通过,输出 `linuxcnc_task_hal_runtime_smoke=ok`、`task_hal_machine_file_smoke=ok`、`switchkins_remap_hal_sync_smoke=ok`、`browser_task_hal_worker_smoke=ok`。
|
||||
- `node tests/node/verify_rtcp_store.mjs`:通过,输出 `rtcp_store_smoke=ok`。
|
||||
- `node ../wasm-port/tests/wasm/node/verify_task_status_json_contract.mjs && node ../wasm-port/tests/wasm/node/verify_task_hal_sdk.mjs`:通过,输出 `task_status_json_contract=ok`、`linuxcnc_task_hal_sdk=ok`、`task_hal_sdk_status_snapshot=ok`、`task_hal_sdk_standalone_emc_status=ok`、`task_hal_sdk_status_json_contract=ok`。
|
||||
8. 构建和浏览器验证:
|
||||
- `npm --prefix app run build`:通过,输出 `gmoccapy_static_build=ok`,同步 `app/dist/src`。
|
||||
- `bash tests/browser/verify_xyzbc_trt_browser.sh`:通过,输出 `xyzbc_trt_browser_smoke=ok`。
|
||||
9. 刷新 evidence 和 compare:
|
||||
- `npm --prefix app run evidence:web && npm --prefix app run evidence:compare`。
|
||||
- Web evidence 输出路径为 `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json`。
|
||||
- Compare evidence 输出路径为 `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/compare-xyzbc-trt-evidence.json`。
|
||||
- 最终输出 `compare_xyzbc_trt_status=pass`。
|
||||
- 摘要:`web.status=ready-for-wasm-runtime`、`web.blockers=[]`、`web.taskHalEquivalence.ready=true`、`web.executionPath.status=ok`、`web.executionPath.sampleCount=228`、`compare.surfaceSummary.passCount=60`、`compare.surfaceSummary.failCount=0`、`compare.functionalSummary.passCount=8`、`compare.functionalSummary.failCount=0`、`compare.requiredImprovements=[]`。
|
||||
10. 更新 working 文档:
|
||||
- `working/README.md` 新增 2026-07-08 10:42 EDT 关注点,说明目标 Web 项目正常状态不再输出或消费顶层 `task`/`motionStatus`。
|
||||
- `working/03-推进台账.md` 新增 T-083 推进记录,并修正 T-082 中旧的“内部派生旧视图”表述。
|
||||
- `working/04-任务矩阵.md` 新增 T-083,当前完成范围更新为 T-001 到 T-083。
|
||||
- `working/05-验收证据.md` 新增 T-083 验收证据,记录命令、输出和最新 evidence 摘要;同时修正 T-081/T-082 旧口径,明确当前正常状态只保留 `emcStatus` 与 `ui`。
|
||||
11. 最终检查:
|
||||
- `rg` 检查确认旧字段字符串在源码中只剩旧字段拒绝列表和负向测试;文档中只作为历史说明和当前拒绝说明出现。
|
||||
- `git diff --check -- web-rtcp-5axis-xyzbc-trt-sim-plan/app/src web-rtcp-5axis-xyzbc-trt-sim-plan/app/dist/src web-rtcp-5axis-xyzbc-trt-sim-plan/tests web-rtcp-5axis-xyzbc-trt-sim-plan/tools web-rtcp-5axis-xyzbc-trt-sim-plan/working`:无输出,格式检查通过。
|
||||
- `git status --short` 显示本轮目标项目改动集中在 runtime、state、tests、evidence 采集、dist 和 working 文档;工作区还保留上一轮 `wasm-port` 改动,未回滚。
|
||||
|
||||
### 结论
|
||||
|
||||
目标 Web 项目已跟随新版 `wasm-port` 删除旧字段。正常 `taskHalStatus` 不再输出或消费顶层 `task`/`motionStatus`,程序内部和 evidence 采集统一使用 `emcStatus` 与 `ui`。旧字段只在拒绝输入的错误路径和负向测试中保留。Node、WASM 合同、SDK、build、browser smoke、Web evidence 和 compare 均通过,最终 `compare_xyzbc_trt_status=pass`。
|
||||
|
||||
## 2026-07-08 17:26 EDT - web-rtcp-5axis-xyzbc-trt-sim-plan 全功能与全按钮测试
|
||||
|
||||
### 提问
|
||||
|
||||
用户要求:“你帮我全面完整执行测试项目 `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan` 的功能。每个按钮都要全面测试。”
|
||||
|
||||
### 执行过程
|
||||
|
||||
1. 读取项目结构和测试入口:
|
||||
- 检查 `AGENTS.md`,确认根目录要求每次执行后追加中文过程日志到 `gptlog-process/gpdlog.md`。
|
||||
- 查看 `app/package.json`,确认已有 `build`、`smoke:node`、`smoke:browser`、`evidence:web`、`evidence:compare`。
|
||||
- 检索 `tests/browser/xyzbc_trt_browser_smoke.html` 和 `app/src/ui/axis-shell.js`,确认已有 browser smoke 覆盖主流程按钮,但没有独立的“每个按钮逐项测试”入口。
|
||||
2. 分析按钮清单:
|
||||
- 读取 `AXIS_BUTTON_PARITY`,确认当前 AXIS/PyVCP/菜单/工具栏/手动/MDI/override 共有 63 个按钮或动作条目。
|
||||
- 发现已有 browser smoke 会检查 `getButtonParity()` 与 DOM 来源元数据,并点击 ESTOP、Power、Home、Run、Pause/Resume、Step、Stop、PyVCP、Jog、Touch Off、主轴、冷却、视图等主路径。
|
||||
- 同时发现仍缺少独立覆盖:菜单 Stage、Save session、Restore session、Audit、Jog minus、Mist、Rapid override、Spindle override、MDI input/history 等冷门按钮。
|
||||
3. 新增全按钮浏览器测试:
|
||||
- 新增 `tests/browser/xyzbc_trt_all_buttons.html`。
|
||||
- 新增 `tests/browser/verify_xyzbc_trt_all_buttons.mjs`,使用 Playwright 和临时 HTTP server 运行真实浏览器页面。
|
||||
- 新增 `tests/browser/verify_xyzbc_trt_all_buttons.sh`。
|
||||
- 在 `app/package.json` 中新增 `smoke:buttons`。
|
||||
- 测试内容覆盖:
|
||||
- 菜单:Stage、Save session、Restore session、Reload、View X/Y/Z/P、Clear Live Plot、Audit。
|
||||
- 工具栏:ESTOP/RESET、Power on/off、AUTO/MANUAL、Reload、Run、Pause/Resume、Step、Stop、视图和清轨迹。
|
||||
- 手动区:Manual/MDI tab、joint 选择、jog increment、Jog +/−、Touch Off、Tool Touch Off。
|
||||
- MDI/PyVCP:MDI submit、MDI history、M428 TCP、M429 identity、M430 userk、vismach-clear。
|
||||
- Override/冷却/主轴:feed/rapid/spindle override +/−、spindle reverse/stop/forward、flood、mist、block delete、optional stop、ignore limits。
|
||||
4. 调试全按钮测试基础设施:
|
||||
- 初版 shell 使用 Chromium `--dump-dom`,第一次误匹配测试源码里的成功字符串,随后修正 grep 为必须匹配 `checked=[0-9]+`。
|
||||
- 发现 `--dump-dom` 虚拟时间会导致 iframe/worker/OPFS 异步时序不稳定,测试停在 `pending`、`waiting-runtimes` 或 `waiting-program`。
|
||||
- 改用 Playwright 执行器,在真实等待中运行同一个 HTML 测试页。
|
||||
- 修正 Playwright 依赖解析路径,使用 `createRequire(projectDir/app/package.json)` 从 `app/node_modules` 解析 `playwright`。
|
||||
5. 全按钮测试暴露并修复真实状态问题:
|
||||
- 新增测试失败于 PyVCP `kins-tcp`:点击按钮后 `mdiHistory[0]` 已为 `M428`,`operatorMessage` 已为 `task/HAL MDI M428`,但 `kinsType` 被 task/HAL 状态回写覆盖回 `identity`。
|
||||
- 检查 `app/src/state/store.js`,确认 `RUN_MDI` 先通过 `executeMdiCommand()` 解析 M428/M429/M430 并设置 `kinsType`,随后 `runTaskHalCommandSequence()` 派发 `TASK_HAL_STATUS_APPLIED` 时 `resolveTaskHalKinsType()` 从 task/HAL status 推导,又把当前 MDI switchkins 结果覆盖。
|
||||
- 修改 `app/src/state/store.js`:
|
||||
- MDI task/HAL 回写时把 `mdiPatch.kinsType` 和 `mdiPatch.rtcpState` 放入 `preserveMachine`。
|
||||
- `applyTaskHalStatusPatch()` 调用 `resolveTaskHalKinsType(state, status, activeLine, preserveMachine?.kinsType)`。
|
||||
- `resolveTaskHalKinsType()` 优先返回 `preserveKinsType`。
|
||||
- 重新运行全按钮测试,输出 `xyzbc_trt_all_buttons=ok checked=63`。
|
||||
6. 执行完整 Node 测试集并修正历史旧口径断言:
|
||||
- 执行 `for test_file in tests/node/*.mjs; do node "$test_file"; done`。
|
||||
- 修正 `tests/node/verify_five_axis_session.mjs`:
|
||||
- 当前目标项目默认机型为 `xyzbc-trt`,旧断言仍期望 `xyzac-trt`。
|
||||
- 将默认 session path 改为 `web-rtcp-5axis-xyzbc-trt-sim-plan/sessions/xyzbc-trt-web-session/web-rtcp-5axis-session.json`。
|
||||
- 将 demo 程序中的 A 轴改为 B 轴,符合 XYZBC。
|
||||
- 修正 `tests/node/verify_gmoccapy_trt_project_sidebar.mjs`:
|
||||
- power ESTOP 阻断文案更新为当前策略文案 `power blocked: reset ESTOP first`。
|
||||
- machineProject 根路径更新为当前项目 `web-rtcp-5axis-xyzbc-trt-sim-plan/machines/xyzac-trt`。
|
||||
- 修正 `tests/node/verify_linuxcnc_parity_matrix.mjs`:
|
||||
- 默认 active profile 从旧 `xyzac-trt` 更新为当前目标项目默认 `xyzbc-trt`。
|
||||
- 修正 `tests/node/verify_machine_file_staging.mjs`:
|
||||
- OPFS 根路径更新为当前项目根。
|
||||
- 测试仍验证 `xyzac-trt` profile 时,先显式 `SET_PROFILE xyzac-trt`,避免和默认 `xyzbc-trt` staging 比较。
|
||||
- 修正 `tests/node/verify_tool_db_web_simulation.mjs`:
|
||||
- 测试前半段显式读取 `xyzac-trt.tbl`,后半段 store 也显式 `SET_PROFILE xyzac-trt`,保持 T2/Z15 工具表预期一致。
|
||||
- 最终完整 `tests/node/*.mjs` 全部通过,输出包含:
|
||||
- `five_axis_session_smoke=ok`
|
||||
- `full_execution_boundary_smoke=ok`
|
||||
- `full_linuxcnc_5axis_source_node_smoke=ok`
|
||||
- `gmoccapy_communication_model_smoke=ok`
|
||||
- `gmoccapy_hal_model_smoke=ok`
|
||||
- `gmoccapy_icon_manifest_smoke=ok`
|
||||
- `gmoccapy_icon_registry_smoke=ok`
|
||||
- `gmoccapy_trt_project_sidebar_smoke=ok`
|
||||
- `gmoccapy_xyzab_gates_smoke=ok`
|
||||
- `gmoccapy_xyzab_profile_smoke=ok`
|
||||
- `gmoccapy_xyzac_trt_parity_smoke=ok`
|
||||
- `impeller_feed_task_hal_run=ok`
|
||||
- `linear_unit_conversion_smoke=ok`
|
||||
- `linuxcnc_ini_runtime_smoke=ok`
|
||||
- `linuxcnc_interpreter_runtime_smoke=ok`
|
||||
- `linuxcnc_kinematics_runtime_smoke=ok`
|
||||
- `linuxcnc_parity_matrix_smoke=ok`
|
||||
- `linuxcnc_task_hal_runtime_smoke=ok`
|
||||
- `machine_file_staging_smoke=ok`
|
||||
- `native_task_hal_source_artifact_audit=ok`
|
||||
- `profile_boundary_smoke=ok`
|
||||
- `real_linuxcnc_5axis_program_cases_smoke=ok`
|
||||
- `rtcp_store_smoke=ok`
|
||||
- `run_feedback_status_loop_smoke=ok`
|
||||
- `run_preconditions_machine_file_smoke=ok`
|
||||
- `tool_db_user_m_simulation_smoke=ok`
|
||||
- `tool_db_web_simulation_smoke=ok`
|
||||
- `xyzbc_trt_web_app_smoke=ok`。
|
||||
7. 执行 WASM 合同和 SDK 验证:
|
||||
- `node wasm-port/tests/wasm/node/verify_task_status_json_contract.mjs`:通过,输出 `task_status_json_contract=ok`。
|
||||
- `node wasm-port/tests/wasm/node/verify_task_hal_sdk.mjs`:通过,输出 `linuxcnc_task_hal_sdk=ok`、`task_hal_sdk_status_snapshot=ok`、`task_hal_sdk_standalone_emc_status=ok`、`task_hal_sdk_status_json_contract=ok`。
|
||||
8. 执行构建、浏览器和全按钮验证:
|
||||
- `npm --prefix app run build`:通过,输出 `gmoccapy_static_build=ok`。
|
||||
- `npm --prefix app run smoke:buttons`:通过,输出 `xyzbc_trt_all_buttons=ok checked=63`。
|
||||
- `npm --prefix app run smoke:browser`:通过,输出 `xyzbc_trt_browser_smoke=ok`。
|
||||
- 曾经并行执行 `smoke:buttons` 与 `smoke:browser`,两个入口都会触发 build,导致 `app/dist` 清理互相踩踏,出现 `ENOTEMPTY` 和页面 API 未加载;随后改为串行执行,两个入口均通过。该问题属于测试执行方式冲突,不是功能失败。
|
||||
9. 刷新 evidence 和 compare:
|
||||
- `npm --prefix app run evidence:web`:输出 `web_xyzbc_trt_evidence=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/evidence/web-xyzbc-trt-evidence.json`。
|
||||
- `npm --prefix app run evidence:compare`:输出 `compare_xyzbc_trt_status=pass`。
|
||||
- 最新摘要:
|
||||
- `web.status=ready-for-wasm-runtime`
|
||||
- `web.collectedAt=2026-07-08T21:25:01.630Z`
|
||||
- `web.blockers=[]`
|
||||
- `web.taskHalEquivalence.ready=true`
|
||||
- `web.executionPath.status=ok`
|
||||
- `web.executionPath.sampleCount=228`
|
||||
- `compare.status=pass`
|
||||
- `compare.comparedAt=2026-07-08T21:25:02.164Z`
|
||||
- `surfaceSummary.passCount=60`
|
||||
- `surfaceSummary.failCount=0`
|
||||
- `functionalSummary.passCount=8`
|
||||
- `functionalSummary.failCount=0`
|
||||
- `requiredImprovements=[]`。
|
||||
10. 更新 working 文档:
|
||||
- `working/README.md` 新增 2026-07-08 17:26 EDT 关注点,记录全按钮测试和完整验收。
|
||||
- `working/03-推进台账.md` 新增 T-084 推进记录。
|
||||
- `working/04-任务矩阵.md` 新增 T-084,并将当前完成范围更新为 T-001 到 T-084。
|
||||
- `working/05-验收证据.md` 新增 T-084 验收证据,记录命令、输出和 evidence 摘要。
|
||||
11. 最终检查:
|
||||
- 执行 `git diff --check -- web-rtcp-5axis-xyzbc-trt-sim-plan/app/src web-rtcp-5axis-xyzbc-trt-sim-plan/app/package.json web-rtcp-5axis-xyzbc-trt-sim-plan/app/dist/src web-rtcp-5axis-xyzbc-trt-sim-plan/tests web-rtcp-5axis-xyzbc-trt-sim-plan/working web-rtcp-5axis-xyzbc-trt-sim-plan/tools`:无输出,格式检查通过。
|
||||
- `git status --short` 显示本轮新增全按钮测试文件,修改 store、package、dist、Node 测试、working 文档和 evidence JSON;工作区还保留前序 `wasm-port` 相关改动,未回滚。
|
||||
|
||||
### 结论
|
||||
|
||||
已完成目标项目全功能和全按钮测试。新增可重复入口 `npm run smoke:buttons`,真实浏览器覆盖 63 个按钮/动作条目,并修复全按钮测试发现的 M428/M429/M430 MDI 后 `kinsType` 被 task/HAL 状态回写覆盖的问题。完整 Node 测试集、WASM status contract、Task/HAL SDK、build、browser smoke、全按钮 smoke、Web evidence 和 compare 均通过,最终结果为 `xyzbc_trt_all_buttons=ok checked=63`、`xyzbc_trt_browser_smoke=ok`、`compare_xyzbc_trt_status=pass`。
|
||||
|
||||
## 2026-07-09 13:36 执行日志
|
||||
|
||||
### 提问
|
||||
|
||||
用户要求 `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan` 完全对标 `/home/mes123456/cnc_wams/linuxcnc`,重点分析 AXIS 主界面“急停、上电、Home、执行、暂停、单步执行”的详细调用链条和状态机制,包括 C++ task、motion、状态记录方式、按钮先决条件和执行后状态记录方式;并对基本流程 `ESTOP -> 上电 -> Home All -> Run -> 执行5秒 -> 暂停5秒 -> 继续5秒 -> 暂停5秒 -> 继续5秒` 做严格测试,要求 G 代码执行过程正确、数据变化合理。
|
||||
|
||||
### 执行过程
|
||||
|
||||
1. 读取 Web 项目文件结构,确认已有 AXIS 按钮分析文档、运行时、状态策略、测试脚本和截图证据目录。
|
||||
2. 检索 LinuxCNC 源码:
|
||||
- `share/axis/tcl/axis.tcl`:确认工具栏按钮、菜单命令和 `update_state` 的启用条件。`machine_estop` 绑定 `estop_clicked`,`machine_power` 绑定 `onoff_clicked`,Run/Step/Pause/Resume/Stop 的启用依赖 `task_state`、`interp_state`、`taskfile`。
|
||||
- `src/emc/usr_intf/axis/scripts/axis.py`:确认前端调用链。`estop_clicked()` 在 `STATE_ESTOP` 与 `STATE_ESTOP_RESET` 间切换;`onoff_clicked()` 在 `STATE_ESTOP_RESET -> STATE_ON` 和其它状态到 `STATE_OFF` 间切换;`home_all_joints()` 要求 `manual_ok()`,切 MANUAL 后 `go_home(-1)`;`task_run()` 切 AUTO 后 `c.auto(AUTO_RUN, program_start_line)`;`task_pause()` 只允许 AUTO 且 interp 为 READING/WAITING 后 `AUTO_PAUSE`;`task_resume()` 要求 paused 且 AUTO/MDI 后 `AUTO_RESUME`;`task_step()` 切 AUTO 后 `AUTO_STEP`。
|
||||
- `src/emc/task/emctask.cc`:确认 `emcTaskSetState()` 的 C++ 状态语义。`ON` 调用 `emcTrajEnable()`;`ESTOP_RESET` 调用 `emcAuxEstopOff()`、`emcTaskAbort()`、`emcIoAbort()`、`emcAbortCleanup()`、`emcTaskPlanSynch()`;`ESTOP` 调用 `emcMotionAbort()`、`emcAuxEstopOn()`、`emcTrajDisable()`、`emcTaskAbort()`、`emcIoAbort()`、volatile home 清除和 plan synch。`determineState()` 根据 IO estop 和 traj enabled 派生 `ESTOP/ESTOP_RESET/ON`。
|
||||
- `src/emc/task/emctaskmain.cc`:确认 `EMC_TASK_PLAN_RUN` 检查 homed 后设置 `interpState=READING`、`task_paused=0`、清 single stepping;`EMC_TASK_PLAN_PAUSE` 调 `emcTrajPause()`,保存 `interpResumeState`,写 `interpState=PAUSED`、`task_paused=1`;`EMC_TASK_PLAN_RESUME` 调 `emcTrajResume()`,恢复 `interpResumeState`,清 `task_paused` 和 single stepping;`EMC_TASK_PLAN_STEP` 写 `motion.traj.single_stepping` 并驱动 step。
|
||||
- `src/emc/nml_intf/emc_nml.hh` 与 `emc.cc`:确认 NML 命令类型和字段,包括 `EMC_TASK_SET_STATE.state`、`EMC_TASK_PLAN_RUN.line`、`EMC_TASK_PLAN_PAUSE/STEP/RESUME`、`EMC_JOINT_HOME`。
|
||||
3. 检查 Web 项目:
|
||||
- `app/src/state/linuxcnc-task-policy.js` 已表达 LinuxCNC 先决条件:上电不能在 estop 中执行;Home 要 ON/MANUAL/IDLE;RUN 要 ON/AUTO/已 homed/IDLE;PAUSE 要 ON/AUTO 且 READING/WAITING;RESUME 要 ON/AUTO 或 MDI 且 paused;STEP 要 ON/AUTO/已 homed/有程序。
|
||||
- `app/src/state/store.js` 的按钮 case 已将 ESTOP/RESET/POWER/HOME/RUN/PAUSE/RESUME/STEP 映射到 task/HAL 命令,并维护 `taskState`、`interpState`、`taskPaused`、`motionPaused`、`singleStepping`、`taskHalPauseLock`、`programRuntimeFeedback` 等状态。
|
||||
4. 首次运行严格浏览器测试:
|
||||
- 命令:`node web-rtcp-5axis-xyzbc-trt-sim-plan/tools/verify-estop-power-home-run-pause-50ms.mjs`
|
||||
- 结果失败:`verification_status=failed`,manifest 为 `working/screenshots/estop-power-home-run-pause-50ms-20260709T171326Z/manifest.json`。
|
||||
- 失败点:Run 后 60 秒未进入 `running/reading`,状态停在 `runState=stopped`、`interpState=idle`。
|
||||
5. 编写短 Playwright 探针定位原因:
|
||||
- 确认 Run 按钮确实触发,`operatorMessage` 变为 `task/HAL program run xyzbc-trt xyzbc-trt`。
|
||||
- 读取完整 `taskHalStatus` 后发现根因:`emcStatus.task.execState=ERROR`、`errorText=MOTION_ABORTED`,`emcStatus.motion.aborted=true`。说明 ESTOP 后 motion abort latch 没有在 ESTOP_RESET/ON 后清除,导致后续 RUN 立刻被 task 同步为 motion abort 错误。
|
||||
6. 修复 C/WASM motion 状态:
|
||||
- 修改 `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c`。
|
||||
- 新增 `clear_motion_fault_latch(LcmotRuntime *state)`,清除 `aborted`、`motion_error`、`on_soft_limit` 和错误 FIFO。
|
||||
- 在 `LCMOT_CMD_ENABLE` 分支调用该 helper,使上电/使能后不继承历史 ESTOP abort latch,符合 LinuxCNC ESTOP_RESET/ON 后 abort cleanup/synch 的运行语义。
|
||||
7. 重建 WASM:
|
||||
- 命令:`source /home/mes123456/emsdk/emsdk_env.sh >/tmp/emsdk-env.log && ./tools/build_task_hal_wasm.sh`
|
||||
- 结果:`linuxcnc_task_hal_wasm_build=ok`。
|
||||
8. 修复后短探针验证:
|
||||
- RUN 后状态为 `runState=running`、`machine.interpState=reading`、`task.execState=WAITING_FOR_MOTION`、`motion.aborted=false`、`motion.programLine=13`、`currentVelocity=33.2756`,说明 G 代码行号、速度和轴位姿开始推进。
|
||||
9. 重新运行严格浏览器测试:
|
||||
- 命令:`node /home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/tools/verify-estop-power-home-run-pause-50ms.mjs`
|
||||
- 结果:`verification_status=passed`
|
||||
- 证据目录:`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/screenshots/estop-power-home-run-pause-50ms-20260709T173206Z`
|
||||
- manifest:`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/screenshots/estop-power-home-run-pause-50ms-20260709T173206Z/manifest.json`
|
||||
- 采集帧:18 张 full-page 截图;脚本 50ms 定时器受 full-page screenshot 速度限制,但 5 秒 hold 断言按实时状态轮询完成。
|
||||
- manifest 摘要:`runningFrameCount=6`、`pausedFrameCount=5`、`framesWithSourceCount=6`、`minSampleIndex=48`、`maxSampleIndex=479`、`maxRunningVelocity=1999.998`、`sourceRel=configs/sim/axis/vismach/5axis/table-rotary-tilting/demos/xyzbc_switchkins.ngc`、`gcodeDataChecks.passed=true`。
|
||||
- 关键流程结果:Run 后进入 `running/reading`;第一次暂停和第二次暂停均进入 `paused` 且速度为 0;两次恢复后重新进入 `running/reading`;最终状态 `runState=running`、`interpState=reading`、`taskPaused=false`、`line=17`、`sampleIndex=484`、`axisPose=(-11.1042, 15.4442, 7.62555, B=20, C=45)`、`currentVelocity=996.516`。
|
||||
10. 运行低层 WASM 回归:
|
||||
- 命令:`source /home/mes123456/emsdk/emsdk_env.sh >/tmp/emsdk-env.log && SKIP_TASK_HAL_BUILD=1 ./tests/wasm/node/verify_task_hal_wasm.sh`
|
||||
- 结果全部通过,包括 `pause_freezes_motion_queue=ok`、`resume_restores_interp_resume_state=ok`、`step_returns_to_paused=ok`、`motion_abort_drives_task_error=ok`、`task_status_json_contract=ok`、`task_hal_no_json_main_path_status=ok`。
|
||||
11. 检查差异:
|
||||
- 本轮核心源码改动为 `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c` 增加 14 行 fault latch 清理逻辑。
|
||||
- 工作树中存在大量先前改动和未跟踪证据目录,未回滚用户或历史改动。
|
||||
|
||||
### 结论
|
||||
|
||||
已完成 LinuxCNC AXIS 主按钮调用链和 C++ task/motion 状态机制核对,并修复 Web/WASM task-HAL 在 `ESTOP -> RESET/ON -> RUN` 后错误继承 motion abort latch 的问题。修复后,严格流程 `ESTOP -> 上电 -> Home All -> Run -> 执行5秒 -> 暂停5秒 -> 继续5秒 -> 暂停5秒 -> 继续5秒` 通过真实浏览器 Playwright 验证,G 代码来源、行号、sampleIndex、速度、位姿变化和暂停冻结均合理;低层 task-HAL WASM 回归也全部通过。
|
||||
|
||||
## 2026-07-09 13:40 执行日志
|
||||
|
||||
### 提问
|
||||
|
||||
用户要求继续严格验证执行过程是否合理、正确。
|
||||
|
||||
### 执行过程
|
||||
|
||||
1. 在不修改源码的前提下,继续执行一轮状态级高频验证。验证仍通过真实浏览器 Playwright 打开 Web AXIS 界面,并实际点击界面按钮完成:
|
||||
- 置入 ESTOP;
|
||||
- 解除 ESTOP;
|
||||
- 上电;
|
||||
- Home All;
|
||||
- 切 AUTO;
|
||||
- Run;
|
||||
- 运行 5 秒;
|
||||
- 暂停 5 秒;
|
||||
- 恢复运行 5 秒;
|
||||
- 再暂停 5 秒;
|
||||
- 再恢复运行 5 秒。
|
||||
2. 本轮验证不依赖 full-page screenshot 速度,而是每 100ms 直接读取 `window.webRtcp5AxisSimulation.getState()`,记录:
|
||||
- `runState`、`taskState`、`mode`、`interpState`;
|
||||
- `taskPaused`、`motionPaused`、`singleStepping`;
|
||||
- `activeLine`、`programExecutionSampleIndex`、`programExecutionMotionIndex`;
|
||||
- `axisPose`、`tcpPose`、`feed.currentVelocity`;
|
||||
- `programUiExecution.sourceFile/line/statement/operation/activeKinematics`;
|
||||
- task/HAL UI 中的 `activeLine`、`motionProgramLine`、`halProgramLine`、`activeLineHalSynced`、`execState`、`motionQueueDepth`、`currentVelocity`。
|
||||
3. 生成独立 JSON 证据:
|
||||
- 路径:`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/state-traces/estop-power-home-run-pause-state-trace-20260709T173931Z/trace.json`
|
||||
- 输出:`state_trace_verification=passed`
|
||||
- 阶段数:5 个阶段,分别为 `run1`、`pause1`、`run2`、`pause2`、`run3`
|
||||
- 状态样本数:231
|
||||
- 断言数:20
|
||||
4. 严格断言内容:
|
||||
- 每个运行段必须满足 `runState=running`、`interpState=reading`、`taskPaused=false`、`motionPaused=false`;
|
||||
- 每个运行段 `sampleIndex` 必须推进至少 10;
|
||||
- 每个运行段轴位姿必须发生明显变化;
|
||||
- 每个运行段必须出现正速度;
|
||||
- 每个运行段必须有 G 代码 sourceFile、line、statement;
|
||||
- 每个暂停段必须满足 `runState=paused`、`interpState=paused`、`taskPaused=true`;
|
||||
- 每个暂停段速度必须为 0;
|
||||
- 每个暂停段 `sampleIndex` 必须冻结;
|
||||
- 每个暂停段轴位姿最大漂移必须为 0;
|
||||
- `resume1` 后的起始 sampleIndex 不得小于 `pause1` 的末尾 sampleIndex;
|
||||
- `resume2` 后的起始 sampleIndex 不得小于 `pause2` 的末尾 sampleIndex。
|
||||
5. 关键数据结果:
|
||||
- `run1`:46 个样本,`sampleIndex 1 -> 134`,增量 133,最大位姿变化 45,首末位姿距离 52.87116035911828,速度范围 `203.7696 -> 1999.998`,覆盖 `xyzbc_switchkins_sub.ngc:18` 和 `helix_bc.ngc:13/16/17`。
|
||||
- `pause1`:47 个样本,`sampleIndex 137 -> 137`,增量 0,最大位姿漂移 0,首末位姿距离 0,速度恒为 0,暂停在 `helix_bc.ngc:17`。
|
||||
- `run2`:45 个样本,`sampleIndex 137 -> 268`,增量 131,最大位姿变化 26.527776387160294,首末位姿距离 25.687888243579252,最大速度 996.516,继续执行 `helix_bc.ngc:17`。
|
||||
- `pause2`:47 个样本,`sampleIndex 271 -> 271`,增量 0,最大位姿漂移 0,首末位姿距离 0,速度恒为 0,暂停在 `helix_bc.ngc:17`。
|
||||
- `run3`:46 个样本,`sampleIndex 271 -> 406`,增量 135,最大位姿变化 55.78684622297291,首末位姿距离 37.991445762692194,最大速度 1999.998,覆盖 `helix_bc.ngc:17/19/20`、`xyzbc_switchkins_sub.ngc:23/25`、`helix_bc.ngc:13/16`,说明继续运行后进入后续 G 代码段。
|
||||
6. 最终状态:
|
||||
- `runState=running`
|
||||
- `interpState=reading`
|
||||
- `taskPaused=false`
|
||||
- `sampleIndex=409`
|
||||
- `line=17`
|
||||
- `statement=f#<frate> g2i#<r>z#<zmin> p#<n>`
|
||||
- `axisPose={x:-10.8658,y:15.9434,z:9.27753,a:0,b:20,c:45}`
|
||||
- `currentVelocity=996.516`
|
||||
|
||||
### 结论
|
||||
|
||||
新增的高频状态级验证进一步证明执行过程合理正确:运行段持续推进 G 代码、sampleIndex、位姿和速度;暂停段 task/interp 状态正确进入 paused,速度为 0,sampleIndex 和轴位姿完全冻结;恢复后从暂停位置之后继续,不发生回到起点或状态重置。该验证与上一轮截图/manifest 严格流程验证结论一致。
|
||||
|
||||
Reference in New Issue
Block a user