feat: complete working8 pause semantics
This commit is contained in:
@@ -3109,3 +3109,97 @@ Pause 修复已提交并推送到云仓库 `master`,提交号为 `58854f9`。
|
||||
### 结论
|
||||
|
||||
已完成 `/home/mes123456/cnc_wams/work/working8` 文档体系建设,新增 README 索引和 01 至 06 六个要求文档。文档明确了暂停按钮必须补齐 LinuxCNC task/interpreter 与 motion/trajectory 双层语义,拆分了 `W8-001` 至 `W8-014` 任务矩阵,并给出后续代码修改目标文件、验收标准和验证命令。本轮未修改业务代码,未运行测试。
|
||||
|
||||
## 2026-07-07 09:41 EDT
|
||||
|
||||
### 提问
|
||||
|
||||
用户要求提交到云仓库,并提供云仓库地址 `http://154.8.160.151:3000`、用户名 `wangdequan`、密码 `wangdequan123`。
|
||||
|
||||
### 执行过程
|
||||
|
||||
1. 查看 `git status --short` 和当前分支,确认当前分支为 `master`,工作区存在本轮 `work/working8` 文档、日志追加,以及此前已有的暂停按钮前端、文档、证据、截图等大量未提交改动。
|
||||
2. 查看 `git remote -v`,确认 `origin` 已配置为 `http://wangdequan:wangdequan123@154.8.160.151:3000/wangdequan/cnc_wams.git`。
|
||||
3. 查看最近提交,确认当前本地历史最新远端提交为 `6cecd28 docs: record final artifact push`。
|
||||
4. 执行 `git fetch origin master`,成功连接云仓库并获取 `origin/master`。
|
||||
5. 执行 `git rev-list --left-right --count origin/master...HEAD`,输出 `0 0`,确认本地 `master` 与远端 `origin/master` 推送前没有分叉。
|
||||
6. 统计未跟踪文件数量,确认未跟踪文件约 `3282` 个,主要是暂停验证 trace 和 50ms 截图证据目录;考虑用户要求提交云仓库,决定整体纳入提交,避免文档引用的证据缺失。
|
||||
7. 执行 `git add -A`,暂存全部当前工作区改动。
|
||||
8. 执行 `git commit -m "docs: record pause wasm implementation plan"`,成功创建提交 `83402c5`,提交包含 `3299` 个文件变更,包括 `work/working8` 文档体系、暂停按钮分析文档、暂停验证工具、暂停测试报告、trace、截图证据、日志和此前已有前端相关改动。
|
||||
9. 执行 `git push origin master`,推送过程中等待远端处理,最终成功输出 `6cecd28..83402c5 master -> master`。
|
||||
10. 执行 `git status -sb && git rev-parse HEAD && git rev-parse origin/master`,确认本地 `HEAD` 与 `origin/master` 均为 `83402c506e26cfcae2ba567a8188ae858858b918`,本地与远端一致。
|
||||
|
||||
### 结论
|
||||
|
||||
已成功提交并推送到云仓库 `origin/master`。提交哈希为 `83402c506e26cfcae2ba567a8188ae858858b918`,提交信息为 `docs: record pause wasm implementation plan`。本次日志是在推送完成后按规则追加,因此日志文件本身会产生新的未推送工作区改动。
|
||||
|
||||
## 2026-07-07 10:16 EDT
|
||||
|
||||
### 提问
|
||||
|
||||
用户要求完成 `/home/mes123456/cnc_wams/work/working8` 的全部任务。
|
||||
|
||||
### 执行过程
|
||||
|
||||
1. 读取 `work/working8/README.md`、`01-项目功能内容.md`、`02-项目程序开发详细步骤.md`、`03-推进台账.md`、`04-任务矩阵.md`、`05-验收证据.md`、`06-决策记录.md`,确认本工作包目标是补齐 `wasm-port` 的 LinuxCNC task/motion/TP 暂停语义,并让 `web-rtcp-5axis-xyzbc-trt-sim-plan` 的 AXIS 风格暂停按钮具备真实底层暂停/恢复/单步行为。
|
||||
2. 查看 `git status --short`,确认开始前已有 `gptlog-process/gpdlog.md` 和 `web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md` 未提交修改;本轮未回退这些既有修改。
|
||||
3. 读取 `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp`,确认原实现中 `EMC_TASK_PLAN_PAUSE` 会设置 `interp_state=PAUSED` 和 `task_paused=true`,但缺少 `interpResumeState` 保存和输出,`RESUME` 固定近似恢复到 `READING`。
|
||||
4. 读取 `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c`,确认原 motion pause 仍作为普通队列命令处理,`STEP` 近似普通 resume,缺少 motion id/idForStep/stepping 跟踪和“只推进一个 motion 后自动回暂停”语义。
|
||||
5. 读取 `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_tp_wasm.c` 和 `wasm-port/tests/wasm/node/verify_tp_wasm.mjs`,确认已有 TP line/arc/queue probe,但没有 `tpPause()/tpResume()` 专门验证。
|
||||
6. 读取 Web 侧 `app/src/runtime/linuxcnc-task-hal-runtime.js`、`app/src/state/linuxcnc-task-policy.js`、`app/src/state/store.js`、`app/src/ui/axis-shell.js` 和 `tests/node/verify_run_feedback_loop.mjs`,确认前端 resume gate 主要依赖 `interpState === paused`,尚未完整接入 motion paused。
|
||||
7. 修改 `linuxcnc_task_hal_wasm.cpp`:在 `TaskRuntime` 增加 `interp_resume_state`;status JSON 输出 `task.interpResumeState`;session init、open program、run、pause、step、resume、abort、MDI、jog、home、program complete 等路径同步维护该字段;pause 时保存暂停前状态,resume 时按保存状态恢复;step 保持外部 `PAUSED`,仅在 `lctask_run_cycles()` 内部允许推进一条。
|
||||
8. 修改 `linuxcnc_motion_runtime.c`:增加 `stepping`、`id_for_step`、`motion_id`;把 `EMCMOT/EMC_TRAJ` 的 pause/resume/step/abort 改成即时命令;pause 设置 `paused=1`、速度归零、不清空队列;paused 期间不消费普通 move;step 记录当前 motion id,允许消费一个普通 move 后自动 `paused=1` 且 `stepping=0`;status JSON 输出 `motion.stepping`、`motion.idForStep`、`motion.motionId`、`motion.commandQueueDepth` 和根级 `commandQueueDepth`。
|
||||
9. 修改 `linuxcnc_tp_wasm.c`:新增 pause/resume probe,创建 TP、加入两段 line、运行后调用 vendored LinuxCNC `tpPause()`,等待速度归零并保持位置,再调用 `tpResume()` 验证队列继续完成;输出 `tp_pause_rc=0`、`tp_resume_rc=0`、`tp_paused_velocity_zero=1`、`tp_paused_position_frozen=1`、`tp_resume_done=1` 等字段。
|
||||
10. 修改 `verify_task_hal_wasm.mjs`:扩展为四行程序运行中 pause/resume/step 验证;断言 pause 后 `interpState=PAUSED`、`interpResumeState=READING`、`taskPaused=true`、`motion.paused=true`、连续 cycles 不推进 task line/motion line/axis/motion id;resume 后恢复读取并继续;task STEP 后回到 paused;直接调用 motion C ABI 验证 queued moves 在 pause 后 queue 保留、step 只消费一个、resume 后继续消费。
|
||||
11. 修改 `verify_tp_wasm.mjs`:增加对 TP pause/resume probe 输出的断言,并输出 `tp_pause_resume_smoke=ok`。
|
||||
12. 修改 Web runtime normalize:在 `normalizeTaskHalStatus()` 中映射 `ui.interpResumeState`、`ui.taskPaused`、`ui.singleStepping`、`ui.motionPaused`、`ui.motionStepping`、`ui.motionId`、`ui.idForStep`、`ui.motionQueueDepth`。
|
||||
13. 修改 `linuxcnc-task-policy.js`:新增 `motionPaused`、`taskPaused`、`feedbackPaused`、`paused` 综合状态;`canResume` 和 `RESUME` gate 接受 motion paused/task paused/interp paused/runState paused;菜单 Pause 仍保持 AUTO 且 interpreter running 的严格语义。
|
||||
14. 修改 `store.js`:初始 `machine` 增加 `motionPaused`;`PAUSE`、`RESUME`、`STEP`、task-hal status apply、normalizeMachine、runtime feedback、shouldContinueTaskHalStatusLoop 等路径同步维护和使用 motion paused;`PAUSE_RESUME` 优先用 `machine.motionPaused` 判断是否触发 resume;`programRuntimeFeedback` 增加 `paused` 字段。
|
||||
15. 修改 `axis-shell.js`:暂停按钮 active/title/data-paused 判断接入 `machine.motionPaused` 和 `programRuntimeFeedback.paused`。
|
||||
16. 修改 `verify_run_feedback_loop.mjs`:新增 Web Node 暂停断言,点击 `PAUSE_RESUME` 后检查 `machine.motionPaused=true`、`taskHalStatus.ui.motionPaused=true`、`taskHalStatus.motionStatus.motion.paused=true`、`programRuntimeFeedback.paused=true`,并确认 active line、motion program line、motion axis 不推进;再次点击同一按钮恢复;同时修正 Run Ready 测试,使其只验证程序准备,然后显式执行 power/home/auto/run。
|
||||
17. 修改 `verify-estop-power-home-run-pause-50ms.mjs`:在 screenshot frame、state summary 和 event summary 中加入 `motionPaused`,使 manifest 可记录两次暂停保持阶段的 `motionPaused=true`。
|
||||
18. 首次执行 `./tools/build_task_hal_wasm.sh` 失败,错误为当前 shell 找不到 `emcc`;查找发现 `/home/mes123456/emsdk/emsdk_env.sh` 和 `/home/mes123456/emsdk/upstream/emscripten/emcc`。
|
||||
19. 执行 `source /home/mes123456/emsdk/emsdk_env.sh >/dev/null && ./tools/build_task_hal_wasm.sh`,构建通过,输出 `linuxcnc_task_hal_wasm_build=ok`。
|
||||
20. 执行 `node tests/wasm/node/verify_task_hal_wasm.mjs`,通过,输出 `linuxcnc_task_runtime_smoke=ok`、`task_status_from_linuxcnc_runtime=ok`、`task_commands_drive_motion_runtime=ok`、`mdi_jog_task_motion_hal_sync=ok`、`pause_freezes_motion_queue=ok`、`resume_restores_interp_resume_state=ok`、`step_returns_to_paused=ok`。
|
||||
21. 执行 `source /home/mes123456/emsdk/emsdk_env.sh >/dev/null && ./tools/build_tp_wasm.sh`,TP WASM 构建完成。
|
||||
22. 执行 `node tests/wasm/node/verify_tp_wasm.mjs`,通过,输出 `tp_wasm_node_smoke=ok`、`tp_pause_resume_smoke=ok`。
|
||||
23. 执行 `npm --prefix app run build`,通过,输出 `gmoccapy_static_build=ok`,并更新 `app/dist` 中静态产物和 WASM artifact。
|
||||
24. 执行 `node tests/node/verify_run_feedback_loop.mjs`,第一次失败在新增暂停断言中直接比较 UI `axisPose`,发现该字段会受异步 RTCP/kinematics 刷新影响而符号变化;将断言改为比较底层 `taskHalStatus.motionStatus.axis`。
|
||||
25. 再次执行 `node tests/node/verify_run_feedback_loop.mjs`,失败在既有 Run Ready 等待条件;确认 Run Ready 按 AXIS parity 应只准备程序,不应代替 power/home/run;修改测试为 Run Ready 后显式执行 `TOGGLE_POWER`、`HOME`、`SET_MODE auto`、`RUN`。
|
||||
26. 再次执行 `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`。
|
||||
27. 执行 `APP_URL_PATH=/web-rtcp-5axis-xyzbc-trt-sim-plan/app/dist/index.html node tools/trace-pause-position-json.mjs`,通过,输出 `pause_position_status=passed-position-frozen`、`position_changed=false`、`changed_fields=`,trace 文件为 `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/pause-position-traces/pause-position-20260707T140646Z/trace.json`。
|
||||
28. 执行 `RUN_STABLE_BEFORE_FIRST_PAUSE_MS=3000 node tools/verify-estop-power-home-run-pause-50ms.mjs`,首次通过并生成截图目录 `estop-power-home-run-pause-50ms-20260707T140708Z`,随后发现 manifest 缺少 `motionPaused` 字段,因此补工具后重跑。
|
||||
29. 重新执行 `RUN_STABLE_BEFORE_FIRST_PAUSE_MS=3000 node 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-20260707T141219Z`,manifest 为 `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/screenshots/estop-power-home-run-pause-50ms-20260707T141219Z/manifest.json`,采集 `459` 帧,采样周期 `50ms`。
|
||||
30. 使用 `jq` 提取新 manifest 暂停保持证据:第一次暂停保持 5 秒为 `sampleIndex=109`、`activeLine=17`、`interpState=paused`、`taskPaused=true`、`motionPaused=true`、`currentVelocity=0`;第二次暂停保持 5 秒为 `sampleIndex=341`、`activeLine=13`、`interpState=paused`、`taskPaused=true`、`motionPaused=true`、`currentVelocity=0`。
|
||||
31. 更新 `work/working8/04-任务矩阵.md`,将 `W8-001` 至 `W8-014` 全部标记为 `已完成`。
|
||||
32. 更新 `work/working8/05-验收证据.md`,追加本轮 WASM task/motion、TP、Web Node、浏览器 trace、50ms 长流程截图验证的命令、关键输出、生成文件路径和结论。
|
||||
33. 更新 `work/working8/03-推进台账.md`,追加 2026-07-07 轮次 2 的用户目标、本轮实现、修改文件、验证结果、证据路径、遗留问题和下一步。
|
||||
34. 更新 `work/working8/06-决策记录.md`,新增 `DR-W8-007`,明确 Run Ready 只准备程序,不代替 ESTOP/Power/Home/Run,避免污染暂停按钮验收。
|
||||
35. 执行 `git diff --check`,通过,无空白错误。
|
||||
36. 执行 `git status --short` 和 `git diff --stat`,确认本轮修改覆盖 wasm-port runtime/test、Web runtime/policy/store/UI/test/tool、working8 文档、app/dist 构建产物,以及本轮新增 trace 和截图证据目录;同时保留开始前已存在的其他日志修改。
|
||||
37. 按根目录 AGENTS.md 要求,将本轮完整中文执行过程追加到 `gptlog-process/gpdlog.md`。
|
||||
|
||||
### 结论
|
||||
|
||||
`work/working8` 的 `W8-001` 至 `W8-014` 已全部完成。底层 task/motion 暂停恢复和 STEP 可观测语义已补齐,TP pause/resume probe 已验证 vendored LinuxCNC API,Web task policy/store/UI 已接入 motion paused,Node/WASM/Web/browser trace/50ms 长流程截图验收全部通过。主要证据路径为 trace `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/pause-position-traces/pause-position-20260707T140646Z/trace.json` 和 50ms manifest `/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/screenshots/estop-power-home-run-pause-50ms-20260707T141219Z/manifest.json`。
|
||||
|
||||
## 2026-07-07 10:25 EDT
|
||||
|
||||
### 提问
|
||||
|
||||
用户要求提交到云仓库,并提供云仓库地址 `http://154.8.160.151:3000`、用户名 `wangdequan`、密码 `wangdequan123`。
|
||||
|
||||
### 执行过程
|
||||
|
||||
1. 查看 `git status --short` 和当前分支,确认当前分支为 `master`,工作区包含本轮 `working8` 实现、验证证据、构建产物、过程日志,以及一个既有修改文件 `备忘/16备用暂停按钮实现详细过程.txt`。
|
||||
2. 查看 `git remote -v`,确认 `origin` 已配置为 `http://wangdequan:wangdequan123@154.8.160.151:3000/wangdequan/cnc_wams.git`,与用户提供的云仓库地址和账号信息一致。
|
||||
3. 查看最近提交,确认当前最新提交为 `83402c5 docs: record pause wasm implementation plan`。
|
||||
4. 执行 `git fetch origin master`,成功从云仓库获取 `origin/master`。
|
||||
5. 执行 `git rev-list --left-right --count origin/master...HEAD`,输出 `0 0`,确认本地 `master` 与远端 `origin/master` 没有分叉。
|
||||
6. 执行 `git diff --stat`,确认待提交内容覆盖 wasm-port task/motion/TP 暂停语义、WASM/TP/Web 测试、Web runtime/policy/store/UI、working8 文档、trace/截图证据、构建产物和日志。
|
||||
7. 执行 `git diff --check`,通过,无空白错误。
|
||||
8. 按项目日志规则,先将本次云仓库提交过程中文日志追加到 `gptlog-process/gpdlog.md`,随后将执行 `git add -A`、`git commit` 和 `git push origin master`,确保日志也随本次提交进入云仓库。
|
||||
|
||||
### 结论
|
||||
|
||||
本次云仓库提交前检查通过:远端可访问,本地与远端无分叉,工作区改动可提交,空白检查通过。下一步将提交全部当前改动并推送到 `origin/master`。
|
||||
|
||||
Reference in New Issue
Block a user