# 06 RUN 实施完成情况矩阵与接续工作

生成时间：2026-06-22

## 1. 本轮执行范围

按 `05-run-program-implementation-detailed-steps.md` 核对并补强当前实现，本轮完成：

```text
1. 建立 05 阶段完成情况矩阵。
2. 补强 INI definition contract validation。
3. 修正普通 RUN 的 EMC_TASK_PLAN_RUN 起始行为 line=0。
4. 补充 INI runtime 测试断言。
5. 执行 node smoke 验证。
6. 记录剩余接续工作。
```

## 2. 本轮代码改动

### 2.1 INI contract validation 补强

更新：

```text
app/src/runtime/linuxcnc-ini-runtime.js
tests/node/verify_linuxcnc_ini_runtime.mjs
```

补强内容：

```text
1. parseLinuxCncIni() 现在保留 sourceText。
2. 解析并输出 emcmot.module / emcmot.servoPeriodNs。
3. 解析并输出 task.module / task.cycleTimeSeconds。
4. emcio.toolTable 保持结构化输出。
5. applyIniConfigToProfile() 将 emcmot/task/emcio 写入 profile。
6. validateIniConfig() 增加 05 要求的关键 gate：
   - required sections: [EMC], [DISPLAY], [RS274NGC], [KINS], [HAL], [HALUI], [TRAJ], [EMCMOT], [TASK], [EMCIO]
   - COORDINATES 必须是 XYZAC 或 XYZBC
   - JOINTS 必须是 5
   - JOINT_0..JOINT_4 必须存在
   - KINEMATICS 必须包含 sparm=identityfirst
   - M428/M429/M430 remap 必须完整
   - HAL_PIN_VARS=1 必须存在
   - HALCMD 必须连接 motion.analog-out-03 与 motion.switchkins-type
   - SERVO_PERIOD / CYCLE_TIME / TOOL_TABLE 必须存在
```

### 2.2 RUN 起始行修正

更新：

```text
app/src/state/store.js
```

修正：

```text
普通 RUN 发送 EMC_TASK_PLAN_RUN line=0。
不再用 activeLine - programStartLine 推导普通 RUN 起始行。
run-from-line 后续应作为独立功能处理。
```

## 3. 完成情况矩阵

| 05 阶段 | 状态 | 证据 | 备注 |
| --- | --- | --- | --- |
| 阶段 0：建立当前状态基线 | 完成 | `smoke:node` 完整通过 | 当前基线可复现 |
| 阶段 1：INI definition contract | 完成 | `verify_linuxcnc_ini_runtime.mjs` | 本轮补强 section/字段 validation |
| 阶段 2：绑定 kinematics runtime | 完成 | `verify_linuxcnc_kinematics_runtime.mjs`, `verify_run_preconditions.mjs` | RUN gate 检查 module/frame source |
| 阶段 3：machine-file staging | 完成 | `verify_machine_file_staging.mjs` | selected G-code 与 wasmProgramPath 同步 |
| 阶段 4：初始化 task/HAL session | 完成 | `verify_linuxcnc_task_hal_runtime.mjs` | openProgram/session/status 链路通过 |
| 阶段 5：RUN preconditions gate | 完成 | `verify_run_preconditions.mjs` | 仍可继续扩展更细 ON/AUTO/homed 阻断文案 |
| 阶段 6：RUN command sequence | 完成 | `verify_run_feedback_loop.mjs` | 本轮修正普通 RUN line=0 |
| 阶段 7：taskHalStatusLoop | 完成 | `verify_run_feedback_loop.mjs` | tick/history/STOP 断言通过 |
| 阶段 8：统一 TASK_HAL_STATUS_APPLIED | 完成 | `verify_run_feedback_loop.mjs`, `verify_rtcp_store.mjs` | feedback history 保留 task/HAL/motion source |
| 阶段 9：STOP/ABORT/PAUSE/RESUME/STEP | 部分完成 | `verify_linuxcnc_task_hal_runtime.mjs` | PAUSE/RESUME 有测试；STOP 有 feedback-loop 测试；STEP/ABORT 仍需专门断言 |
| 阶段 10：UI 显示与交互 | 部分完成 | 现有 browser smoke 未在本轮执行 | 仍需 07 浏览器证据 case |
| 阶段 11：full execution boundary | 完成 | `verify_full_execution_boundary.mjs`, native audit | web simulation boundary 通过 |
| 阶段 12：Node smoke 集成 | 完成 | `npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node` | 完整通过 |
| 阶段 13：浏览器证据采集 | 未完成 | 无新 JSON/截图 | 下一步工作 |

## 4. 本轮验证结果

通过：

```bash
node web-rtcp-5axis-sim-plan/tests/node/verify_linuxcnc_ini_runtime.mjs
npm --prefix web-rtcp-5axis-sim-plan/app run build
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
```

关键输出：

```text
linuxcnc_ini_runtime_smoke=ok
gmoccapy_static_build=ok
run_feedback_status_loop_smoke=ok
linuxcnc_task_hal_runtime_smoke=ok
full_execution_boundary_smoke=ok
machine_file_staging_smoke=ok
rtcp_store_smoke=ok
profile_boundary_smoke=ok
```

`smoke:node` 已完整通过。

## 5. 剩余接续工作

下一步建议优先做浏览器证据采集：

```text
1. 扩展 qa/web-rtcp-5axis-site-test/capture-toolpath-preview-cases.mjs。
2. 新增 07-run-preconditions-and-feedback case。
3. 浏览器执行 POWER/HOME/AUTO/RUN。
4. 采集 t=0.2s / 0.5s / 1.0s / 2.0s / 5.0s state。
5. 断言 taskHalStatusLoop.tickCount 和 programRuntimeFeedbackHistory 增长。
6. 断言 feedback sourceMode 不含 fixture-line-playback。
7. 输出 JSON 与截图：
   qa/web-rtcp-5axis-site-test/output/run-preconditions-feedback.json
   qa/web-rtcp-5axis-site-test/screenshots/run-preconditions-feedback/*.png
```

随后补强控制类测试：

```text
1. ABORT 后 loop active=false，runState/stopped status 正确。
2. STEP 在 task/HAL loaded 时 sourceMode 仍是 linuxcnc-task-motion-hal-wasm。
3. RUN gate 对 machine ON / AUTO / homed / opened-file 增加更细粒度失败断言。
4. taskHalStatusLoop 的 taskPeriodNs/servoPeriodNs 从 INI CYCLE_TIME/SERVO_PERIOD 派生，而不是只使用默认值。
5. xyzbc-trt 增加对称 RUN status loop 测试。
```

## 6. 当前结论

当前 RUN 主链路已经满足 05 的 node 侧核心完成标准：

```text
INI contract ready
-> profile/INI/kinematics 一致
-> machine files staged
-> selected G-code opened by task/HAL session
-> RUN sends LinuxCNC task commands
-> taskHalStatusLoop continuously runCycles/readStatus
-> UI/store consumes TASK_HAL_STATUS_APPLIED snapshots
```

尚未完成的是浏览器端 JSON/截图证据，以及 ABORT/STEP/xyzbc 对称测试的补强。
