# 05 验收证据

生成日期：2026-06-26

## 1. 证据规则

每个功能完成时必须至少提供一种证据：

- 命令输出：Node、npm build、browser smoke、QA capture。
- 页面证据：本地 URL、云端 URL、页面状态说明。
- JSON：机器可读 PASS/FAIL 报告。
- 截图：关键页面状态。
- PDF/DOCX/Markdown 报告：适合人工归档的报告。
- job_id/report_id：如果由 CI、云端任务或报告生成器产生，必须记录。

本目录先由文档规划创建；后续 W4-IMPL-001、W4-IMPL-002 和收口检查已补齐实现、QA 证据和最新
job_id/report_id。

注：QA JSON 内部字段使用 camelCase：`jobId`、`reportId`；控制台输出和本归档表使用
`job_id`、`report_id` 标签，两者指向同一组编号。

## 2. 本轮文档证据

本轮输入资料确认：

```bash
find /home/meswork/cnc_wams/work/working3 -maxdepth 3 -type f | sort
find /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan -maxdepth 3 -type f | sort
find /home/meswork/cnc_wams/work/working4 -maxdepth 2 -type f -print | sort
```

本轮读取的核心资料：

```text
/home/meswork/cnc_wams/work/working3/gmoccapy_XYZAB_execution_analysis.md
/home/meswork/cnc_wams/work/working3/gmoccapy_button_icons/README.md
/home/meswork/cnc_wams/work/working3/gmoccapy_button_icons/button_icon_inventory.md
/home/meswork/cnc_wams/work/working3/gmoccapy_button_icons/button_icon_inventory.csv
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/README.md
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/docs/technical-roadmap.md
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/docs/traceability-matrix.md
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/main.js
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/state/store.js
```

本轮输出文件：

```text
/home/meswork/cnc_wams/work/working4/README.md
/home/meswork/cnc_wams/work/working4/01-function-content.md
/home/meswork/cnc_wams/work/working4/02-program-development-steps.md
/home/meswork/cnc_wams/work/working4/03-progress-ledger.md
/home/meswork/cnc_wams/work/working4/04-task-matrix.md
/home/meswork/cnc_wams/work/working4/05-acceptance-evidence.md
/home/meswork/cnc_wams/work/working4/06-decision-records.md
/home/meswork/cnc_wams/work/working4/07-final-closure.md
```

## 3. 可复用的现有项目证据

### 3.1 Node 和 build 命令

项目已有命令：

```bash
npm --prefix web-rtcp-5axis-sim-plan/app run build
npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_dist_browser.sh
```

`smoke:node` 当前覆盖：

```text
verify_linuxcnc_kinematics_runtime.mjs
verify_linuxcnc_interpreter_runtime.mjs
verify_linuxcnc_ini_runtime.mjs
verify_run_preconditions.mjs
verify_run_feedback_loop.mjs
verify_linuxcnc_task_hal_runtime.mjs
verify_native_task_hal_audit.mjs
verify_full_linuxcnc_5axis_source.mjs
verify_real_linuxcnc_5axis_program_cases.mjs
verify_full_execution_boundary.mjs
verify_machine_file_staging.mjs
verify_five_axis_session.mjs
verify_rtcp_store.mjs
verify_profile_boundary.mjs
verify_linear_unit_conversion.mjs
```

### 3.2 项目内已有 JSON/截图/PDF/DOCX

可复用证据路径：

```text
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/build/readiness/native-task-hal-readiness.json
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/working_run/run-feedback-evidence/run-feedback-local.json
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/working_run/run-feedback-evidence/run-feedback-local.png
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/toolpath-preview-cases.json
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/run-preconditions-feedback.json
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/meter-scene-evidence.json
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/native-task-hal-comparison-report.json
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/native-task-hal-comparison-report.md
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/button-control-evidence-report.json
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/button-control-evidence-report.pdf
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/cloud-button-control-evidence-report.json
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/cloud-button-control-evidence-report.pdf
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/test-linuxcnc-source-run-report.json
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/test-linuxcnc-source-run-report-2026-06-22.docx
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/test-linuxcnc-source-run-report-2026-06-23.docx
```

云端 RUN 截图目录：

```text
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/cloud-run-after-deploy/
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/cloud-run-stop-after-deploy/
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/cloud-run-debug/
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/cloud-run-debug-current/
```

## 4. working4 已生成的证据

| 任务 | 证据类型 | 目标路径 | 状态 |
| --- | --- | --- | --- |
| W4-A02 icon manifest | JSON | `web-rtcp-5axis-sim-plan/app/src/ui-reference/gmoccapy-button-icons.json` | 已生成，211 行清单 |
| W4-P01 XYZAB profile | Node output | `tests/node/verify_gmoccapy_xyzab_profile.mjs` 控制台输出 | 已通过 |
| W4-P03 communication model | Node output | `tests/node/verify_gmoccapy_communication_model.mjs` 控制台输出 | 已通过 |
| W4-P04 HAL model | Node output | `tests/node/verify_gmoccapy_hal_model.mjs` 控制台输出 | 已通过 |
| W4-U01 icon registry | Node output | `tests/node/verify_gmoccapy_icon_registry.mjs` 控制台输出 | 已通过 |
| W4-G01 到 W4-G05 gate | Node output | `tests/node/verify_gmoccapy_xyzab_gates.mjs` 控制台输出 | 已通过 |
| W4-U02 到 W4-U05 UI | Browser screenshot | `qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab/*.png` | 已生成 6 张截图 |
| W4-T07 QA report | JSON/PDF | `qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab-function-report.json`、`.pdf` | 已生成，PASS |
| W4-V01 build | 命令输出 | `npm --prefix ... run build` | 已通过 |
| W4-V02 node smoke | 命令输出 | `npm --prefix ... run smoke:node` | 已通过 |
| W4-V03 browser smoke | 命令输出和截图 | `verify_gmoccapy_shell_browser.sh` | 已通过 |
| W4-V04 dist browser smoke | 命令输出 | `verify_gmoccapy_dist_browser.sh` | 已通过 |
| W4-V05 whitespace check | 命令输出 | `git diff --check -- web-rtcp-5axis-sim-plan qa/web-rtcp-5axis-site-test work/working4` | 已通过 |

## 5. W4-IMPL-001 实施证据

日期：2026-06-26

本轮新增和更新的关键产物：

```text
web-rtcp-5axis-sim-plan/docs/gmoccapy-xyzab-reference.md
web-rtcp-5axis-sim-plan/app/src/ui-reference/gmoccapy-button-icons.json
web-rtcp-5axis-sim-plan/app/src/assets/gmoccapy-icons/
web-rtcp-5axis-sim-plan/app/src/profiles/gmoccapy-xyzab.js
web-rtcp-5axis-sim-plan/app/src/runtime/gmoccapy-communication-model.js
web-rtcp-5axis-sim-plan/app/src/runtime/gmoccapy-hal-model.js
web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_profile.mjs
web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_icon_manifest.mjs
web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_communication_model.mjs
web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_hal_model.mjs
```

资产证据：

```bash
find web-rtcp-5axis-sim-plan/app/src/assets/gmoccapy-icons -maxdepth 1 -type f | wc -l
# 112

node -e "const m=JSON.parse(require('fs').readFileSync('web-rtcp-5axis-sim-plan/app/src/ui-reference/gmoccapy-button-icons.json','utf8')); console.log(m.rowCount,m.copiedIconCount)"
# 211 112
```

新增 Node 测试证据：

```bash
node web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_profile.mjs
# gmoccapy_xyzab_profile_smoke=ok

node web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_icon_manifest.mjs
# gmoccapy_icon_manifest_smoke=ok

node web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_communication_model.mjs
# gmoccapy_communication_model_smoke=ok

node web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_hal_model.mjs
# gmoccapy_hal_model_smoke=ok
```

全局验收命令：

```bash
npm --prefix web-rtcp-5axis-sim-plan/app run build
# gmoccapy_static_build=ok

npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node
# linear_unit_conversion_smoke=ok
# 全链路返回 0，并包含 gmoccapy_xyzab_profile/icon_manifest/communication_model/hal_model smoke。

bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh
# gmoccapy_shell_smoke=ok

bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_dist_browser.sh
# gmoccapy_dist_smoke=ok

git diff --check -- web-rtcp-5axis-sim-plan work/working4
# 返回 0
```

## 6. job_id 和 report_id 台账

### 6.1 W4-IMPL-002 UI/gate/QA 证据

日期：2026-06-26

本轮新增和更新的关键产物：

```text
web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-icon-registry.js
web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js
web-rtcp-5axis-sim-plan/app/src/styles/gmoccapy.css
web-rtcp-5axis-sim-plan/app/src/state/linuxcnc-task-policy.js
web-rtcp-5axis-sim-plan/app/src/state/store.js
web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_icon_registry.mjs
web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_gates.mjs
web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html
qa/web-rtcp-5axis-site-test/capture-gmoccapy-xyzab-function-cases.mjs
```

新增 Node 测试证据：

```bash
node web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_icon_registry.mjs
# gmoccapy_icon_registry_smoke=ok

node web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_gates.mjs
# gmoccapy_xyzab_gates_smoke=ok

node web-rtcp-5axis-sim-plan/tests/node/verify_rtcp_store.mjs
# rtcp_store_smoke=ok

node web-rtcp-5axis-sim-plan/tests/node/verify_run_preconditions.mjs
# run_preconditions_ini_profile_smoke=ok
# run_preconditions_kinematics_smoke=ok
# run_preconditions_machine_file_smoke=ok
```

Build/browser/QA 证据：

```bash
npm --prefix web-rtcp-5axis-sim-plan/app run build
# gmoccapy_static_build=ok

bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh
# gmoccapy_shell_smoke=ok

node qa/web-rtcp-5axis-site-test/capture-gmoccapy-xyzab-function-cases.mjs
# gmoccapy_xyzab_function_status=PASS
# gmoccapy_xyzab_function_job_id=xyzab-20260626214346-f4b4aa36
# gmoccapy_xyzab_function_report_id=report-xyzab-20260626214346-f4b4aa36
```

QA 报告路径：

```text
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab-function-report.json
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab-function-report.pdf
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab/01-loaded.png
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab/02-profile-selected.png
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab/03-run-blocked-power.png
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab/04-run-blocked-reference-evidence.png
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab/05-controls-active.png
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab/06-hal-diagnostics.png
```

QA JSON 检查结果：

```text
PASS XYZAB profile selected
PASS Reference profile blocks RTCP promotion
PASS RUN blocked before power
PASS RUN blocked by reference evidence
PASS Core icons rendered
PASS Spindle/coolant state updates
PASS NML command diagnostic
PASS Web runtime diagnostic
PASS HAL postgui diagnostic
PASS Screenshots are nonblank
```

### 6.2 job_id/report_id 表

归档表：

| 日期 | job_id | report_id | 来源 | 对应任务 | 结果 | 证据路径 |
| --- | --- | --- | --- | --- | --- | --- |
| 2026-06-26 | N/A | N/A | 本轮文档生成和状态收口 | W4-D01 到 W4-D09 | done | `/home/meswork/cnc_wams/work/working4/` |
| 2026-06-26 | N/A | N/A | 本轮本地实施 | W4-A01 到 W4-A04、W4-P01 到 W4-P04、W4-T01 到 W4-T04、W4-V01 到 W4-V05 | done | `web-rtcp-5axis-sim-plan/app/src/`、`docs/`、`tests/node/` |
| 2026-06-26 | xyzab-20260626190724-7b80b3aa | report-xyzab-20260626190724-7b80b3aa | 本轮 QA capture | W4-U01 到 W4-U05、W4-G01 到 W4-G05、W4-T05 到 W4-T07 | PASS | `qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab-function-report.json`、`.pdf`、`output/gmoccapy-xyzab/` |
| 2026-06-26 | xyzab-20260626214346-f4b4aa36 | report-xyzab-20260626214346-f4b4aa36 | 继续复核 QA capture | W4-U01 到 W4-U05、W4-G01 到 W4-G05、W4-T05 到 W4-T07、W4-V01 到 W4-V05 | PASS | `qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab-function-report.json`、`.pdf`、`output/gmoccapy-xyzab/` |

## 7. 验收缺口

当前缺口：

- `gmoccapy-xyzab` 仍是 `trivkins` reference-only profile，不是 RTCP/TCP proof；真实 RTCP promotion 仍只来自 source-derived `xyzac-trt`、`xyzbc-trt`。
- 本轮 QA 对 `gmoccapy-xyzab` 证明 profile、图标、diagnostics 和 gate blocked reason，不证明 native `linuxcncsvr/milltask/HAL` 实机运行。

本轮新增证据已补齐原先 UI icon、communication/HAL diagnostics、XYZAB gate 和 QA JSON/PDF 缺口。
