# 04-任务矩阵

## 状态说明

- Done：已实现并有测试证据。
- Partial：部分实现，需要继续扩展。
- Pending：未开始。
- Done-with-blocker：验收报告已完成，且明确记录当前主机/外部条件阻塞，不再作为本轮未完成项。

## 任务矩阵

| 编号 | 任务 | 状态 | 验收标准 | 验收证据 |
|---|---|---|---|---|
| BTN-001 | Run blocked 时仍可点击 | Done | Run 按钮不被 HTML disabled；`data-command-ready=false`；点击后出现 blocked 原因 | `gmoccapy_shell_smoke.html`；`verify_gmoccapy_shell_browser.sh` |
| BTN-002 | Run 执行条件检查 | Done | 未上电、未 AUTO、未 Home、runtime 未就绪、未选 G-code 等条件会阻止执行并提示 | `verify_run_preconditions.mjs`；`verify_rtcp_store.mjs` |
| BTN-003 | Run 正常执行 | Done | 条件满足后进入 task/HAL run，产生 runtime feedback，状态来自 `linuxcnc-task-motion-hal-wasm` | `verify_linuxcnc_task_hal_runtime.mjs`；browser smoke |
| BTN-004 | Stop 功能 | Done | 点击 Stop 后发送 `EMC_TASK_ABORT`，runState 为 stopped，motion aborted 为 true | `verify_linuxcnc_task_hal_runtime.mjs` |
| BTN-005 | Pause 功能 | Done | 点击 Pause 后 task/HAL interpState 为 paused，motion paused 为 true | `verify_linuxcnc_task_hal_runtime.mjs`；browser smoke |
| BTN-006 | Resume 功能 | Done | 点击 Resume 后发送 `EMC_TASK_PLAN_RESUME`；仅在状态允许时恢复 status loop | `verify_linuxcnc_task_hal_runtime.mjs`；browser smoke |
| BTN-007 | Step 功能 | Done | 点击 Step 后发送 `EMC_TASK_PLAN_STEP`，singleStepping 为 true，状态保持 paused | `verify_linuxcnc_task_hal_runtime.mjs` |
| BTN-008 | Home 功能 | Done | 点击 Home 后发送 `EMC_JOINT_HOME`，Web/task gate 保留 allHomed，快速切模式不丢状态 | `verify_linuxcnc_task_hal_runtime.mjs`；`verify_run_preconditions.mjs` |
| BTN-009 | 按钮 UI 状态标识 | Done | 按钮根据 gate 输出 `data-command-ready`、`aria-disabled`、title | `gmoccapy-shell.js`；browser smoke |
| BTN-010 | LinuxCNC 源码语义映射 | Done | 文档和实现引用 LinuxCNC task command 语义，不新增独立 CNC 行为 | `linuxcnc-task-policy.js` sourceReferences；本工作文档 |
| RUNTIME-001 | task/HAL paused 状态输出 | Done | status JSON 输出 `taskPaused` | `linuxcnc_task_hal_wasm.cpp`；WASM/Node 测试 |
| RUNTIME-002 | task/HAL single stepping 状态输出 | Done | status JSON 输出 `singleStepping` | `verify_linuxcnc_task_hal_runtime.mjs` |
| RUNTIME-003 | motion runtime 支持 step | Done | `EMC_TRAJ_STEP` / `EMCMOT_STEP` 可进入 queue 并在 paused 时通过 | `linuxcnc_motion_runtime.c`；WASM/Node 测试 |
| TEST-001 | WASM runtime 测试 | Done | `verify_task_hal_wasm.mjs` 通过 | 命令输出 |
| TEST-002 | Node task/HAL 测试 | Done | `verify_linuxcnc_task_hal_runtime.mjs` 通过 | 命令输出 |
| TEST-003 | Run precondition 测试 | Done | `verify_run_preconditions.mjs` 通过 | 命令输出 |
| TEST-004 | Browser smoke 测试 | Done | `verify_gmoccapy_shell_browser.sh` 通过 | 命令输出 |
| TEST-005 | Browser 按钮流程截图取证 | Done | Home/Run/Pause/Resume/Step/Stop 点击前后状态截图和 JSON 报告生成，检查项全部 PASS | `capture-button-control-evidence.mjs`；`button-control-evidence-report.json`；`screenshots/button-control-evidence/` |
| TEST-006 | 云端按钮流程截图取证 | Done | `https://82.156.24.101:8092/` 页面 Home/Run/Pause/Resume/Step/Stop 流程 PASS，生成 job_id/report_id/PDF/截图 | `cloud-button-control-evidence-report.json`；`cloud-button-control-evidence-report.pdf`；`screenshots/cloud-button-control-evidence/` |
| TEST-007 | LinuxCNC native task/HAL 对照报告 | Done-with-blocker | source/phase0/native readiness audit 通过；opt-in host-native runtime probe 的阻塞原因被记录 | `native-task-hal-comparison-report.json`；`native-task-hal-comparison-report.md` |
| DOC-001 | 过程日志 | Done | 追加到 `gptlog-process/gpdlog.md` | `gpdlog.md` |
| DOC-002 | 工作交付文档 | Done | 在 `work/working1` 创建 6 份文档 | 本目录 |

## 防重复规则

1. 后续如果继续改这些按钮，先检查 BTN-001 到 BTN-010 的状态，避免重复实现已有 gate。
2. 不要重新写一套 JavaScript CNC 状态机替代 LinuxCNC task/HAL command。
3. 新增按钮时必须先建立 LinuxCNC command/source mapping，再接入 store 和 tests。
4. 修改 runtime 行为时必须同时更新 WASM/Node/browser 至少一层测试。

## 后续可扩展任务

| 编号 | 任务 | 状态 | 验收标准 |
|---|---|---|---|
| BTN-011 | 云端页面验收截图 | Done | `https://82.156.24.101:8092/` 部署后截图和报告证明按钮行为 |
| BTN-012 | Stop/Pause/Resume/Step/Home 浏览器截图证据 | Done | 浏览器报告包含每个按钮点击前后状态截图 |
| BTN-013 | 更完整 LinuxCNC native 对照 | Done-with-blocker | native/source 对照和 opt-in host-native runtime blocker 报告完成；当前主机不能生成 native task 状态转换日志 |
