# 05-验收证据

## 证据索引

| 证据编号 | 任务编号 | 类型 | 命令/页面/文件 | 结果 |
| --- | --- | --- | --- | --- |
| EV-W5-001 | W5-001 | 文件 | `/home/meswork/cnc_wams/work/working5` | 已创建 README 和 01-06 工作控制文件 |
| EV-W5-020 | W5-020/W5-100/W5-110/W5-120/W5-130/W5-140 | 命令 | `cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app && npm run smoke:node` | 通过，输出包含 `gmoccapy_xyzab_gates_smoke=ok`、`gmoccapy_hal_model_smoke=ok`、`real_linuxcnc_5axis_program_cases_smoke=ok`、`linear_unit_conversion_smoke=ok` |
| EV-W5-030 | W5-030 | 命令 | `cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app && npm run build` | 通过，输出 `gmoccapy_static_build=ok` |
| EV-W5-040 | W5-040/W5-150 | 命令 | `cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app && npm run smoke` | 通过，输出 `gmoccapy_shell_smoke=ok`、`gmoccapy_dist_smoke=ok` |
| EV-W5-110 | W5-110/W5-150 | 命令 | `node ../tests/node/verify_gmoccapy_xyzab_gates.mjs && node ../tests/node/verify_run_preconditions.mjs && bash ../tests/browser/verify_gmoccapy_shell_browser.sh` | 通过，验证下电禁用 Manual/Jog/MDI/Auto，上电未回零只允许 Manual/Jog，回零后允许 Auto/MDI |
| EV-W5-160 | W5-120/W5-160 | 命令 | `node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_profile_boundary.mjs` | 通过，验证 `gmoccapy_postgui.hal` 换刀策略为 `iocontrol-loopback`、手动 gmoccapy 换刀 GUI pins 未连接、3 个 POSTGUI `unlinkp` 被记录 |
| EV-W5-161 | W5-020/W5-030/W5-040/W5-160 | 命令 | `npm run smoke:node`、`npm run build && npm run smoke` | 通过，完整 Node、静态构建、浏览器 gmoccapy shell/dist smoke 均覆盖新增换刀诊断 |
| EV-W5-170 | W5-150/W5-170 | 命令 | `node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_communication_model.mjs && node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_gmoccapy_xyzab_gates.mjs` | 通过，验证 hard-button 模型、通信路径、profile pin 顺序和 `GMOCAPY_HARDWARE_BUTTON` gate 行为 |
| EV-W5-171 | W5-020/W5-030/W5-040/W5-170 | 命令 | `npm run smoke:node`、`npm run build && npm run smoke` | 通过，完整 Node、静态构建、浏览器 gmoccapy shell/dist smoke 均覆盖 hard-button DOM 映射和诊断 |
| EV-W5-180 | W5-150/W5-180 | 命令 | `node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_communication_model.mjs && node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_gmoccapy_xyzab_gates.mjs && bash ../tests/browser/verify_gmoccapy_shell_browser.sh` | 通过，验证 `GMOCAPY_HAL_PIN` 对 ignore-limits、optional-stop、blockdelete、override counts/direct-value/reset pins 的映射和 UI 诊断 |
| EV-W5-181 | W5-020/W5-030/W5-040/W5-180 | 命令 | `npm run smoke:node`、`npm run build && npm run smoke` | 通过，完整 Node、静态构建、浏览器 gmoccapy shell/dist smoke 均覆盖新增 HAL input/override 诊断和 Web 控件 |
| EV-W5-190 | W5-150/W5-190 | 命令 | `node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_communication_model.mjs`、`node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_gmoccapy_xyzab_gates.mjs`、`bash ../tests/browser/verify_gmoccapy_shell_browser.sh` | 通过，验证 `GMOCAPY_HAL_PIN` 对 jog axis press/release、jog increment rising-edge、turtle jog、delete-message、warning-confirm pins 的映射和 UI 诊断 |
| EV-W5-191 | W5-020/W5-030/W5-040/W5-190 | 命令 | `npm run smoke:node`、`npm run build && npm run smoke` | 通过，完整 Node、静态构建、浏览器 gmoccapy shell/dist smoke 均覆盖新增 jog/message HAL pin 诊断和 Web 行为 |
| EV-W5-200 | W5-150/W5-200 | 命令 | `node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_communication_model.mjs && node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_gmoccapy_xyzab_gates.mjs`、`bash ../tests/browser/verify_gmoccapy_shell_browser.sh` | 通过，验证 `gmoccapy.unlock-settings`、tool measurement HAL_OUT pins、动态 `messages.*` pin 边界和 UI 诊断 |
| EV-W5-201 | W5-020/W5-030/W5-040/W5-200 | 命令 | `npm run smoke:node`、`npm run build && npm run smoke` | 通过，完整 Node、静态构建、浏览器 gmoccapy shell/dist smoke 均覆盖新增 settings/tool/user-message 低频 HAL pin 诊断和 Web 行为 |
| EV-W5-900 | W5-900 | 命令 | `npm run smoke:node`、`npm run build`、`npm run smoke` | 通过，最终复核确认 working5 当前任务矩阵闭环，Node、静态构建、浏览器冒烟均在当前工作区通过 |

## 命令记录

### 2026-06-26 R2

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run smoke:node
```

结果：通过。

关键输出摘要：

- `linuxcnc_kinematics_runtime_smoke=ok`
- `linuxcnc_interpreter_runtime_smoke=ok`
- `linuxcnc_task_hal_runtime_smoke=ok`
- `full_linuxcnc_5axis_source_node_smoke=ok`
- `real_linuxcnc_5axis_program_cases_smoke=ok`
- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_communication_model_smoke=ok`
- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`
- `linear_unit_conversion_smoke=ok`

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run build
```

结果：通过，输出 `gmoccapy_static_build=ok`。

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run smoke
```

结果：通过，输出：

- `gmoccapy_shell_smoke=ok`
- `gmoccapy_dist_smoke=ok`

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
node ../tests/node/verify_gmoccapy_xyzab_gates.mjs && node ../tests/node/verify_run_preconditions.mjs && bash ../tests/browser/verify_gmoccapy_shell_browser.sh
```

结果：通过，输出：

- `gmoccapy_xyzab_gates_smoke=ok`
- `run_preconditions_ini_profile_smoke=ok`
- `run_preconditions_kinematics_smoke=ok`
- `run_preconditions_machine_file_smoke=ok`
- `gmoccapy_shell_smoke=ok`

### 2026-06-26 R3

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_profile_boundary.mjs
```

结果：通过，输出：

- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_xyzab_profile_smoke=ok`
- `profile_boundary_smoke=ok`

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run smoke:node
```

结果：通过。

关键输出摘要：

- `linuxcnc_task_hal_runtime_smoke=ok`
- `profile_boundary_smoke=ok`
- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`
- `linear_unit_conversion_smoke=ok`

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run build && npm run smoke
```

结果：通过，输出：

- `gmoccapy_static_build=ok`
- `gmoccapy_shell_smoke=ok`
- `gmoccapy_dist_smoke=ok`

本轮新增浏览器断言：

- `data-gmoccapy-hal="tool-change"` 必须包含 `iocontrol-loopback`。
- 同一诊断行必须包含 `manual GUI pins disconnected`。
- 同一诊断行必须包含 `3 postgui unlinkp`。

### 2026-06-26 R4

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_communication_model.mjs && node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_gmoccapy_xyzab_gates.mjs
```

结果：通过，输出：

- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_communication_model_smoke=ok`
- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run smoke:node
```

结果：通过。

关键输出摘要：

- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_communication_model_smoke=ok`
- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`
- `linear_unit_conversion_smoke=ok`

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run build && npm run smoke
```

结果：通过，输出：

- `gmoccapy_static_build=ok`
- `gmoccapy_shell_smoke=ok`
- `gmoccapy_dist_smoke=ok`

本轮新增 Node 断言：

- `gmoccapy.v-button.button-0..6` 对应 `tbtn_estop`、`tbtn_on`、`rbt_manual`、`rbt_mdi`、`rbt_auto`、`tbtn_user_tabs`、`tbtn_setup`。
- `gmoccapy.h-button.button-0` 对应底部主页面 `btn_homing`，Web dispatch 为 `HOME`。
- `GMOCAPY_HARDWARE_BUTTON` 忽略 falling edge；rising edge 复用现有 Web gate；未映射或诊断-only pin 给出明确 operator message。

本轮新增浏览器断言：

- 侧边 `estop`、`power`、`mode-manual`、`mode-mdi`、`mode-auto`、`mode-jog` 按钮必须带有对应 `data-gmoccapy-hal-pin="gmoccapy.v-button.button-N"`。
- 底部 `HOME` 按钮必须带有 `data-gmoccapy-hal-pin="gmoccapy.h-button.button-0"`。
- `data-gmoccapy-hal="hard-buttons"` 必须包含 `7 right v-button pins`、`4 bottom h-button main refs`、`7 mapped Web buttons`、`rising-edge-only` 和 `insensitive ignored`。

### 2026-06-27 R5

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_communication_model.mjs && node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_gmoccapy_xyzab_gates.mjs && bash ../tests/browser/verify_gmoccapy_shell_browser.sh
```

结果：通过，输出：

- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_communication_model_smoke=ok`
- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`
- `gmoccapy_shell_smoke=ok`

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run smoke:node
```

结果：通过。

关键输出摘要：

- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_communication_model_smoke=ok`
- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`
- `linear_unit_conversion_smoke=ok`

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run build && npm run smoke
```

结果：通过，输出：

- `gmoccapy_static_build=ok`
- `gmoccapy_shell_smoke=ok`
- `gmoccapy_dist_smoke=ok`

本轮新增 Node 断言：

- `gmoccapy.ignore-limits` 设置 `gmoccapyGui.ignoreLimits`，active 时记录 `command.override_limits()` 请求语义。
- `gmoccapy.optional-stop` 按源码 `_optional_blocks()` 交叉驱动 `optionalBlocks`/block delete；`gmoccapy.blockdelete` 按 `_blockdelete()` 交叉驱动 `optionalStop`。
- override counts 在 count-enable 为 false 时只同步 counts；count-enable 为 true 时按 `gmoccapy_XYZAB.pref` 中 scale 调整 feed/rapid/spindle/jog velocity。
- direct-value 在 analog-enable 为 false 时忽略；analog-enable 为 true 时按 0..1 比例映射滑块范围。
- reset pins 忽略 falling edge，rising edge 将 feed/rapid/spindle override 复位到 100。

本轮新增浏览器断言：

- `data-gmoccapy-hal="operator-inputs"` 必须包含 `3 operator pins`、`optional-stop -> block delete`、`blockdelete -> optional stop`。
- `data-gmoccapy-hal="override-inputs"` 必须包含 `4 override targets`、`counts require enable`、`direct-value requires analog-enable`、`reset rising-edge-only`。
- Web override 面板的 feed/spindle 100% reset、ignore limits、block delete、optional stop 控件必须更新 store 状态和最后一次 HAL input DOM。
- 通过 `window.webRtcp5AxisSimulation.dispatch({ type: "GMOCAPY_HAL_PIN", ... })` 验证浏览器内 optional/blockdelete 交叉 pin 行为。

### 2026-06-27 R6

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_communication_model.mjs
```

结果：通过，输出：

- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_communication_model_smoke=ok`

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_gmoccapy_xyzab_gates.mjs
```

结果：通过，输出：

- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
bash ../tests/browser/verify_gmoccapy_shell_browser.sh
```

结果：通过，输出：

- `gmoccapy_shell_smoke=ok`

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run smoke:node
```

结果：通过。

关键输出摘要：

- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_communication_model_smoke=ok`
- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`
- `linear_unit_conversion_smoke=ok`

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run build && npm run smoke
```

结果：通过，输出：

- `gmoccapy_static_build=ok`
- `gmoccapy_shell_smoke=ok`
- `gmoccapy_dist_smoke=ok`

本轮新增 Node 断言：

- `gmoccapy.jog.axis.jog-x/y/z/a/b-{plus,minus}` 共 10 个 axis jog pins 按 press/release 电平进入和退出 jog 状态。
- `gmoccapy.jog.jog-inc-0..5` 只响应 true/rising edge，`jog-inc-0` 为连续点动，`jog-inc-5` 按 `1.2345 in` 映射为 31.3563 mm。
- `gmoccapy.jog.turtle-jog` 为 level-driven 状态。
- `gmoccapy.delete-message` falling edge 忽略，true 时删除消息并清除 alert/error 语义。
- `gmoccapy.warning-confirm` 记录 active warning dialog 的 confirm pin level。

本轮新增浏览器断言：

- `data-gmoccapy-hal="jog-inputs"` 必须包含 `10 axis jog pins`、`6 jog-inc pins`、`press/release level`、`jog-inc rising-edge-only`、`jog-inc-0 continuous`。
- `data-gmoccapy-hal="message-inputs"` 必须包含 `3 message pins`、`delete-message rising-edge-only`、`warning-confirm level-polled`。
- 通过 `window.webRtcp5AxisSimulation.dispatch({ type: "GMOCAPY_HAL_PIN", ... })` 验证浏览器内 jog increment、axis jog press/release、turtle jog、delete-message 和 warning-confirm 状态。

### 2026-06-27 R7

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
node ../tests/node/verify_gmoccapy_hal_model.mjs && node ../tests/node/verify_gmoccapy_communication_model.mjs && node ../tests/node/verify_gmoccapy_xyzab_profile.mjs && node ../tests/node/verify_gmoccapy_xyzab_gates.mjs
```

结果：通过，输出：

- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_communication_model_smoke=ok`
- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
bash ../tests/browser/verify_gmoccapy_shell_browser.sh
```

结果：通过，输出：

- `gmoccapy_shell_smoke=ok`

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run smoke:node
```

结果：通过。

关键输出摘要：

- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_communication_model_smoke=ok`
- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`
- `linear_unit_conversion_smoke=ok`

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run build && npm run smoke
```

结果：通过，输出：

- `gmoccapy_static_build=ok`
- `gmoccapy_shell_smoke=ok`
- `gmoccapy_dist_smoke=ok`

```bash
cd /home/meswork/cnc_wams
git diff --check -- web-rtcp-5axis-sim-plan work/working5
```

结果：通过，无输出。

本轮新增 Node 断言：

- `gmoccapy.unlock-settings` 是 settings pin；默认 `unlock_way=use` 时只记录 pin level，不锁定 setup；显式 HAL unlock 模式下按 level 控制 setup sensitive。
- `gmoccapy.probeheight`、`gmoccapy.blockheight`、`gmoccapy.toolmeasurement`、`gmoccapy.searchvel`、`gmoccapy.probevel` 记录为 HAL_OUT tool measurement pins。
- `gmoccapy_XYZAB.ini` 无 `[TOOLSENSOR]`，所以 auto tool measurement 默认禁用；`gmoccapy_XYZAB.pref` 默认 `use_toolmeasurement=False`、`blockheight=0.0`。
- `gmoccapy_XYZAB.ini` 无 `[DISPLAY] MESSAGE_*`，所以动态 `gmoccapy.messages.*` pins 不创建；Web 对 `messages.*` dispatch 返回明确 operator message。

本轮新增浏览器断言：

- `data-gmoccapy-hal="settings-inputs"` 必须包含 `1 settings pins`、`unlock-settings level-driven`、`unlock-way use`、`setup sensitive`。
- `data-gmoccapy-hal="tool-user-inputs"` 必须包含 `5 tool measurement HAL_OUT pins`、`XYZAB no TOOLSENSOR`、`0 user message pins`、`no MESSAGE_*`。
- 通过 `window.webRtcp5AxisSimulation.dispatch({ type: "GMOCAPY_HAL_PIN", ... })` 验证浏览器内 `unlock-settings` 默认忽略和 HAL unlock level 行为、`blockheight` 诊断记录、`messages.*` 无配置提示。

### 2026-06-27 R8

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run smoke:node
```

结果：通过。

关键输出摘要：

- `linuxcnc_kinematics_runtime_smoke=ok`
- `linuxcnc_interpreter_runtime_smoke=ok`
- `linuxcnc_ini_runtime_smoke=ok`
- `linuxcnc_task_hal_runtime_smoke=ok`
- `real_linuxcnc_5axis_program_cases_smoke=ok`
- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_communication_model_smoke=ok`
- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`
- `linear_unit_conversion_smoke=ok`

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run build
```

结果：通过，输出 `gmoccapy_static_build=ok`。

```bash
cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app
npm run smoke
```

结果：通过，输出：

- `gmoccapy_shell_smoke=ok`
- `gmoccapy_dist_smoke=ok`

本轮复核结论：

- `04-任务矩阵.md` 中 W5-001 到 W5-900 均为完成。
- 当前源码、测试和文档状态可通过完整 Node、构建和浏览器冒烟验收。

## 页面/截图/report/job 记录

本轮未生成截图、PDF、job_id 或 report_id。浏览器验收由 headless Chromium smoke 脚本完成。
