feat: complete working8 pause semantics
This commit is contained in:
@@ -60,3 +60,92 @@
|
||||
2. 扩展 WASM status JSON 和 SDK 映射。
|
||||
3. 增加 Node WASM 测试,证明 pause/resume 恢复暂停前解释器状态。
|
||||
|
||||
## 2026-07-07 轮次 2:暂停语义代码实现、回归验证与任务关闭
|
||||
|
||||
### 用户目标
|
||||
|
||||
完成 `/home/mes123456/cnc_wams/work/working8` 的全部任务。
|
||||
|
||||
### 本轮做了什么
|
||||
|
||||
1. 补齐 `wasm-port` task runtime 的 LinuxCNC 风格暂停恢复状态:
|
||||
- 增加 `interpResumeState`;
|
||||
- pause 保存暂停前解释器状态;
|
||||
- resume 按保存状态恢复;
|
||||
- abort/home/program complete 同步清理状态。
|
||||
2. 补齐 motion runtime immediate pause/resume/step:
|
||||
- pause/resume/step/abort 改为即时命令;
|
||||
- pause 不清空 queue;
|
||||
- paused 时不消费普通 move;
|
||||
- STEP 只消费一个普通 motion 后自动恢复 paused;
|
||||
- status JSON 输出 `motion.stepping`、`motion.idForStep`、`motion.motionId`、`commandQueueDepth`。
|
||||
3. 增加 TP pause/resume probe:
|
||||
- 直接调用 vendored LinuxCNC `tpPause()`、`tpResume()`;
|
||||
- 验证暂停速度归零、位置保持、恢复后队列完成。
|
||||
4. Web 侧接入 motion paused:
|
||||
- runtime normalize 输出 `ui.interpResumeState`、`ui.taskPaused`、`ui.singleStepping`、`ui.motionPaused`、`ui.motionStepping`、`ui.motionQueueDepth`;
|
||||
- task policy 的 resume gate 接受 motion paused/task paused/interp paused;
|
||||
- store 的 `PAUSE_RESUME` 优先用 `machine.motionPaused` 判断 resume;
|
||||
- UI pause 按钮 active/title/data-paused 接入 `motionPaused`。
|
||||
5. 扩展测试:
|
||||
- WASM task-hal Node 覆盖 pause freeze、resume restore、step returns paused、motion queue preserved;
|
||||
- Web Node 覆盖 motion paused gate 和暂停期间 active line/motion line 不推进;
|
||||
- 50ms 截图 manifest 增加 `motionPaused` 证据字段。
|
||||
6. 运行全部验收命令并关闭 `W8-001` 至 `W8-014`。
|
||||
|
||||
### 本轮新增或修改文件
|
||||
|
||||
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp`
|
||||
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c`
|
||||
- `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_tp_wasm.c`
|
||||
- `wasm-port/tests/wasm/node/verify_task_hal_wasm.mjs`
|
||||
- `wasm-port/tests/wasm/node/verify_tp_wasm.mjs`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/linuxcnc-task-hal-runtime.js`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/linuxcnc-task-policy.js`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/store.js`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/ui/axis-shell.js`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_run_feedback_loop.mjs`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/tools/verify-estop-power-home-run-pause-50ms.mjs`
|
||||
- `web-rtcp-5axis-xyzbc-trt-sim-plan/app/dist/**` 中本轮重新构建的静态产物和 WASM artifact
|
||||
- `work/working8/03-推进台账.md`
|
||||
- `work/working8/04-任务矩阵.md`
|
||||
- `work/working8/05-验收证据.md`
|
||||
- `work/working8/06-决策记录.md`
|
||||
|
||||
### 本轮验证
|
||||
|
||||
已通过:
|
||||
|
||||
```text
|
||||
linuxcnc_task_hal_wasm_build=ok
|
||||
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
|
||||
tp_wasm_node_smoke=ok
|
||||
tp_pause_resume_smoke=ok
|
||||
gmoccapy_static_build=ok
|
||||
run_feedback_status_loop_smoke=ok
|
||||
run_ready_sequence_smoke=ok
|
||||
pause_uses_motion_paused_gate=ok
|
||||
pause_freezes_task_hal_status_loop=ok
|
||||
pause_position_status=passed-position-frozen
|
||||
verification_status=passed
|
||||
```
|
||||
|
||||
生成证据:
|
||||
|
||||
- trace:`/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/pause-position-traces/pause-position-20260707T140646Z/trace.json`
|
||||
- screenshots:`/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`
|
||||
|
||||
### 遗留问题
|
||||
|
||||
本轮 `working8` 任务矩阵内任务均已完成。底层 task-hal motion runtime 仍是 wrapper 级可观测语义补齐,完整将 task-hal motion 执行迁移到 vendored TP runtime 仍属于后续架构演进,不再阻塞本轮 AXIS 暂停按钮验收。
|
||||
|
||||
### 下一步
|
||||
|
||||
无本轮阻塞项。后续如果继续推进,可把 task-hal motion runtime 的手写队列逐步替换为 vendored TP 队列执行路径。
|
||||
|
||||
@@ -9,20 +9,20 @@
|
||||
|
||||
| 任务编号 | 状态 | 任务 | 目标文件 | 验收标准 |
|
||||
|---|---|---|---|---|
|
||||
| W8-001 | 待办 | task runtime 增加 `interpResumeState` 保存与恢复 | `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp` | pause 前状态为 `READING/WAITING` 时被保存;resume 后恢复原状态;status JSON 输出该字段。 |
|
||||
| W8-002 | 待办 | 扩展 task-hal SDK 和 Web runtime 映射 | `wasm-port/runtime/sdk/src/linuxcnc-task-hal.js`、`web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/linuxcnc-task-hal-runtime.js` | Web state 可读取小写 `interpResumeState`、`motionPaused`、`singleStepping`。 |
|
||||
| W8-003 | 待办 | motion runtime 实现 immediate pause/resume | `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c` | pause 后连续 cycles 不消费普通 move;queue 保留;resume 后继续消费。 |
|
||||
| W8-004 | 待办 | motion runtime 增加 stepping/id 追踪 | `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c` | STEP 只推进一个 motion id 或一行,并自动回到 paused。 |
|
||||
| W8-005 | 待办 | task STEP 与 motion STEP 对齐 | `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp` | STEP 完成后 task 仍为 `PAUSED`、`taskPaused=true`,resume 可继续运行。 |
|
||||
| W8-006 | 待办 | 扩展 WASM task-hal Node 测试 | `wasm-port/tests/wasm/node/verify_task_hal_wasm.mjs` | 覆盖 pause freeze、resume restore、step one motion、queue preserved。 |
|
||||
| W8-007 | 待办 | TP wasm 增加 pause/resume probe | `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_tp_wasm.c`、`wasm-port/tests/wasm/node/verify_tp_wasm.mjs` | `verify_tp_wasm.mjs` 可证明 `tpPause()/tpResume()` 生效。 |
|
||||
| W8-008 | 待办 | Web task policy 接入 motion paused | `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/linuxcnc-task-policy.js` | `canResume` 使用 motion paused/task paused/interp paused 综合判断;菜单 Pause 仍保持 AXIS 严格条件。 |
|
||||
| W8-009 | 待办 | Store 暂停恢复分发优先使用 motion paused | `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/store.js` | `PAUSE_RESUME` 在 motion paused 时触发 resume;pause 后写入 `machine.motionPaused`。 |
|
||||
| W8-010 | 待办 | UI 暂停按钮 active 状态接入 motion paused | `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/ui/axis-shell.js` | motion paused 同步窗口内按钮显示 Resume,`data-paused=true`。 |
|
||||
| W8-011 | 待办 | Web Node 回归增加暂停底层状态断言 | `web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_run_feedback_loop.mjs` | pause 后断言 `taskHalStatus.motionStatus.motion.paused=true` 且 active line 不推进。 |
|
||||
| W8-012 | 待办 | 浏览器暂停冻结证据重跑 | `web-rtcp-5axis-xyzbc-trt-sim-plan/tools/trace-pause-position-json.mjs` | 输出 `pause_position_status=passed-position-frozen`,trace 写入 working evidence。 |
|
||||
| W8-013 | 待办 | 50ms 长流程暂停/恢复截图重跑 | `web-rtcp-5axis-xyzbc-trt-sim-plan/tools/verify-estop-power-home-run-pause-50ms.mjs` | 输出 `verification_status=passed`,截图 manifest 记录两次暂停保持。 |
|
||||
| W8-014 | 待办 | 更新验收证据与推进台账 | `work/working8/03-推进台账.md`、`work/working8/05-验收证据.md` | 每个完成任务都有命令、输出和路径证据。 |
|
||||
| W8-001 | 已完成 | task runtime 增加 `interpResumeState` 保存与恢复 | `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp` | pause 前状态为 `READING/WAITING` 时被保存;resume 后恢复原状态;status JSON 输出该字段。 |
|
||||
| W8-002 | 已完成 | 扩展 task-hal SDK 和 Web runtime 映射 | `wasm-port/runtime/sdk/src/linuxcnc-task-hal.js`、`web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/runtime/linuxcnc-task-hal-runtime.js` | Web state 可读取小写 `interpResumeState`、`motionPaused`、`singleStepping`。 |
|
||||
| W8-003 | 已完成 | motion runtime 实现 immediate pause/resume | `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c` | pause 后连续 cycles 不消费普通 move;queue 保留;resume 后继续消费。 |
|
||||
| W8-004 | 已完成 | motion runtime 增加 stepping/id 追踪 | `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_motion_runtime.c` | STEP 只推进一个 motion id 或一行,并自动回到 paused。 |
|
||||
| W8-005 | 已完成 | task STEP 与 motion STEP 对齐 | `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_task_hal_wasm.cpp` | STEP 完成后 task 仍为 `PAUSED`、`taskPaused=true`,resume 可继续运行。 |
|
||||
| W8-006 | 已完成 | 扩展 WASM task-hal Node 测试 | `wasm-port/tests/wasm/node/verify_task_hal_wasm.mjs` | 覆盖 pause freeze、resume restore、step one motion、queue preserved。 |
|
||||
| W8-007 | 已完成 | TP wasm 增加 pause/resume probe | `wasm-port/runtime/core/linuxcnc_wrap/linuxcnc_tp_wasm.c`、`wasm-port/tests/wasm/node/verify_tp_wasm.mjs` | `verify_tp_wasm.mjs` 可证明 `tpPause()/tpResume()` 生效。 |
|
||||
| W8-008 | 已完成 | Web task policy 接入 motion paused | `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/linuxcnc-task-policy.js` | `canResume` 使用 motion paused/task paused/interp paused 综合判断;菜单 Pause 仍保持 AXIS 严格条件。 |
|
||||
| W8-009 | 已完成 | Store 暂停恢复分发优先使用 motion paused | `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/state/store.js` | `PAUSE_RESUME` 在 motion paused 时触发 resume;pause 后写入 `machine.motionPaused`。 |
|
||||
| W8-010 | 已完成 | UI 暂停按钮 active 状态接入 motion paused | `web-rtcp-5axis-xyzbc-trt-sim-plan/app/src/ui/axis-shell.js` | motion paused 同步窗口内按钮显示 Resume,`data-paused=true`。 |
|
||||
| W8-011 | 已完成 | Web Node 回归增加暂停底层状态断言 | `web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_run_feedback_loop.mjs` | pause 后断言 `taskHalStatus.motionStatus.motion.paused=true` 且 active line 不推进。 |
|
||||
| W8-012 | 已完成 | 浏览器暂停冻结证据重跑 | `web-rtcp-5axis-xyzbc-trt-sim-plan/tools/trace-pause-position-json.mjs` | 输出 `pause_position_status=passed-position-frozen`,trace 写入 working evidence。 |
|
||||
| W8-013 | 已完成 | 50ms 长流程暂停/恢复截图重跑 | `web-rtcp-5axis-xyzbc-trt-sim-plan/tools/verify-estop-power-home-run-pause-50ms.mjs` | 输出 `verification_status=passed`,截图 manifest 记录两次暂停保持。 |
|
||||
| W8-014 | 已完成 | 更新验收证据与推进台账 | `work/working8/03-推进台账.md`、`work/working8/05-验收证据.md` | 每个完成任务都有命令、输出和路径证据。 |
|
||||
|
||||
## 防重复规则
|
||||
|
||||
@@ -30,4 +30,3 @@
|
||||
2. Node smoke 只检查 `motion.paused` true/false 不等于 STEP 对标完成。
|
||||
3. 未记录 trace 或截图路径,不得关闭浏览器验收任务。
|
||||
4. 任何 task/motion pause 行为变化必须同步更新 task matrix 和验收证据。
|
||||
|
||||
|
||||
@@ -167,3 +167,184 @@ manifest=...
|
||||
- manifest 文件;
|
||||
- 两次暂停保持阶段的 `sampleIndex`、`interpState`、`taskPaused`、`motionPaused`、`currentVelocity`。
|
||||
|
||||
## 2026-07-07 10:16 EDT 本轮完成证据
|
||||
|
||||
### WASM task/motion 验收
|
||||
|
||||
对应任务:
|
||||
|
||||
- `W8-001`
|
||||
- `W8-002`
|
||||
- `W8-003`
|
||||
- `W8-004`
|
||||
- `W8-005`
|
||||
- `W8-006`
|
||||
|
||||
命令:
|
||||
|
||||
```bash
|
||||
cd /home/mes123456/cnc_wams/wasm-port
|
||||
source /home/mes123456/emsdk/emsdk_env.sh >/dev/null && ./tools/build_task_hal_wasm.sh
|
||||
node tests/wasm/node/verify_task_hal_wasm.mjs
|
||||
```
|
||||
|
||||
关键输出:
|
||||
|
||||
```text
|
||||
linuxcnc_task_hal_wasm_build=ok
|
||||
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
|
||||
```
|
||||
|
||||
结论:
|
||||
|
||||
- task status 已输出并维护 `interpResumeState`。
|
||||
- pause 后 `interpState=PAUSED`、`taskPaused=true`、`motion.paused=true`,连续 cycles 不推进 task line、motion line、axis pose 和 motion id。
|
||||
- resume 后恢复 `interpResumeState=READING` 并继续推进。
|
||||
- motion direct queue 验证 pause 即时生效、queue 保留、STEP 只消费一个 motion 后自动回 paused。
|
||||
|
||||
### WASM TP pause/resume 验收
|
||||
|
||||
对应任务:
|
||||
|
||||
- `W8-007`
|
||||
|
||||
命令:
|
||||
|
||||
```bash
|
||||
cd /home/mes123456/cnc_wams/wasm-port
|
||||
source /home/mes123456/emsdk/emsdk_env.sh >/dev/null && ./tools/build_tp_wasm.sh
|
||||
node tests/wasm/node/verify_tp_wasm.mjs
|
||||
```
|
||||
|
||||
关键输出:
|
||||
|
||||
```text
|
||||
tp_wasm_node_smoke=ok
|
||||
tp_pause_resume_smoke=ok
|
||||
```
|
||||
|
||||
新增 probe 断言:
|
||||
|
||||
```text
|
||||
tp_pause_rc=0
|
||||
tp_resume_rc=0
|
||||
tp_paused_velocity_zero=1
|
||||
tp_paused_position_frozen=1
|
||||
tp_resume_done=1
|
||||
tp_pause_resume_final_depth=0
|
||||
tp_pause_resume_final_pos_near_end=1
|
||||
```
|
||||
|
||||
结论:
|
||||
|
||||
- `linuxcnc_tp_wasm.c` 通过 vendored LinuxCNC `tpPause()`、`tpResume()` 验证暂停减速到零、暂停保持位置、恢复后完成队列。
|
||||
|
||||
### Web Node 集成验收
|
||||
|
||||
对应任务:
|
||||
|
||||
- `W8-008`
|
||||
- `W8-009`
|
||||
- `W8-010`
|
||||
- `W8-011`
|
||||
|
||||
命令:
|
||||
|
||||
```bash
|
||||
cd /home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan
|
||||
npm --prefix app run build
|
||||
node tests/node/verify_run_feedback_loop.mjs
|
||||
```
|
||||
|
||||
关键输出:
|
||||
|
||||
```text
|
||||
gmoccapy_static_build=ok
|
||||
run_feedback_status_loop_smoke=ok
|
||||
run_ready_sequence_smoke=ok
|
||||
pause_uses_motion_paused_gate=ok
|
||||
pause_freezes_task_hal_status_loop=ok
|
||||
```
|
||||
|
||||
结论:
|
||||
|
||||
- Web runtime `ui` 可读取 `interpResumeState`、`taskPaused`、`singleStepping`、`motionPaused`、`motionStepping`、`motionQueueDepth`。
|
||||
- `canResume` 与 `PAUSE_RESUME` 已接入 motion paused/task paused/interp paused 综合判断。
|
||||
- Node 集成断言 pause 后 `taskHalStatus.motionStatus.motion.paused=true`、`machine.motionPaused=true`、active line 和 motion program line 不推进。
|
||||
|
||||
### 浏览器暂停冻结 trace 验收
|
||||
|
||||
对应任务:
|
||||
|
||||
- `W8-012`
|
||||
|
||||
命令:
|
||||
|
||||
```bash
|
||||
cd /home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan
|
||||
APP_URL_PATH=/web-rtcp-5axis-xyzbc-trt-sim-plan/app/dist/index.html node tools/trace-pause-position-json.mjs
|
||||
```
|
||||
|
||||
关键输出:
|
||||
|
||||
```text
|
||||
pause_position_status=passed-position-frozen
|
||||
trace=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/pause-position-traces/pause-position-20260707T140646Z/trace.json
|
||||
app_url_path=/web-rtcp-5axis-xyzbc-trt-sim-plan/app/dist/index.html
|
||||
position_changed=false
|
||||
changed_fields=
|
||||
```
|
||||
|
||||
结论:
|
||||
|
||||
- 浏览器 trace 证明暂停后 position 未变化。
|
||||
|
||||
### 50ms 长流程暂停/恢复截图验收
|
||||
|
||||
对应任务:
|
||||
|
||||
- `W8-013`
|
||||
|
||||
命令:
|
||||
|
||||
```bash
|
||||
cd /home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan
|
||||
RUN_STABLE_BEFORE_FIRST_PAUSE_MS=3000 node tools/verify-estop-power-home-run-pause-50ms.mjs
|
||||
```
|
||||
|
||||
关键输出:
|
||||
|
||||
```text
|
||||
verification_status=passed
|
||||
screenshots=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/screenshots/estop-power-home-run-pause-50ms-20260707T141219Z
|
||||
captured_frames=459
|
||||
sample_period_ms=50
|
||||
manifest=/home/mes123456/cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/working/screenshots/estop-power-home-run-pause-50ms-20260707T141219Z/manifest.json
|
||||
```
|
||||
|
||||
manifest 暂停保持关键字段:
|
||||
|
||||
```text
|
||||
第一次暂停保持 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
|
||||
```
|
||||
|
||||
结论:
|
||||
|
||||
- 50ms 截图验证通过,两次暂停保持阶段 `sampleIndex`、`activeLine`、`interpState`、`taskPaused`、`motionPaused`、`currentVelocity` 均符合暂停冻结要求。
|
||||
|
||||
### 记录与关闭
|
||||
|
||||
对应任务:
|
||||
|
||||
- `W8-014`
|
||||
|
||||
结论:
|
||||
|
||||
- 本轮已更新 `03-推进台账.md`、`04-任务矩阵.md`、`05-验收证据.md`、`06-决策记录.md`。
|
||||
|
||||
@@ -104,3 +104,23 @@ LinuxCNC motion 中 `EMCMOT_STEP` 会记录 `idForStep`,短暂恢复 TP,检
|
||||
|
||||
任务矩阵把 `W8-001` 至 `W8-006` 作为短期必要任务,把 `W8-007` 作为向 LinuxCNC TP 真实语义收敛的关键任务。
|
||||
|
||||
## DR-W8-007:Run Ready 验证不代替 ESTOP/Power/Home/Run
|
||||
|
||||
日期:2026-07-07
|
||||
|
||||
决策:
|
||||
|
||||
Web Node 回归中的 `RUN_READY` 保持 AXIS 风格“准备并打开程序”的语义,不把上电、Home All、切 AUTO 或 Run 混入 Run Ready。需要运行程序时,测试显式执行:
|
||||
|
||||
- `TOGGLE_POWER`
|
||||
- `HOME`
|
||||
- `SET_MODE auto`
|
||||
- `RUN`
|
||||
|
||||
原因:
|
||||
|
||||
AXIS toolbar/menu 的 Run Ready 入口不是 LinuxCNC task run 命令,也不能替用户绕过机床状态前置条件。把 power/home/run 混进 Run Ready 会污染暂停按钮验收,因为后续 pause/resume gate 无法区分“程序准备”与“任务正在运行”。
|
||||
|
||||
影响:
|
||||
|
||||
`verify_run_feedback_loop.mjs` 先断言 Run Ready 已准备 task/HAL session,再显式走 power/home/auto/run 流程;暂停恢复验收只在真实 running 状态下执行。
|
||||
|
||||
Reference in New Issue
Block a user