完善 gmoccapy XYZAB 参考功能

This commit is contained in:
2026-06-26 17:53:45 -04:00
parent 4e4f1462f5
commit a81b40447d
154 changed files with 17194 additions and 51 deletions

View File

@@ -0,0 +1,98 @@
# 01 功能内容
生成日期2026-06-26
## 1. 目标
使用 `working3` 中的 gmoccapy_XYZAB 执行链路分析和按钮图标资料,完善
`web-rtcp-5axis-sim-plan` 的 gmoccapy 风格 Web 五轴仿真功能。
本阶段目标不是把 LinuxCNC GTK/gmoccapy 原程序移植到浏览器,也不是让浏览器直接运行
LinuxCNC native NML/HAL 进程。目标是把 gmoccapy_XYZAB 的运行条件、按钮语义、NML/HAL
通信模型和图标资产转化为 Web 仿真项目可实施、可验证、可追溯的功能包。
## 2. 当前项目现状
`web-rtcp-5axis-sim-plan` 已具备这些基础能力:
- gmoccapy 风格 Web shell标题栏、预览区、DRO、G-code 面板、右侧模式栏、信息面板、override、主轴/冷却、底部控制栏。
- 五轴 profile当前已有 `xyzac-trt``xyzbc-trt`
- LinuxCNC source-derived runtime已有 kinematics、interpreter、task/HAL runtime 接入和 worker fallback。
- machine-file staging可加载 LinuxCNC vendored 源程序。
- RUN 主链路验证:已有 run preconditions、feedback loop、linear unit、browser evidence 等测试文档和证据。
- 已有追溯矩阵:`docs/traceability-matrix.md` 记录了 Web 实现和 LinuxCNC 来源的边界。
## 3. working3 新增价值
`working3` 提供了两类资料,本阶段已将其转化为项目内 profile、runtime model、UI 图标、
task gate、测试和 QA 证据:
### 3.1 gmoccapy_XYZAB 执行与通信链路
输入文件:
```text
/home/meswork/cnc_wams/work/working3/gmoccapy_XYZAB_execution_analysis.md
```
可转化为 Web 功能的关键点:
- `gmoccapy_XYZAB.ini` 是 LinuxCNC 运行配置,不是单独程序。
- 启动链路包括 `linuxcncsvr`、realtime/RTAPI/HAL、`milltask``halui`、HALFILE、`halcmd start``gmoccapy -ini`
- GUI 主要通过 `linuxcnc.command()``linuxcnc.stat()``linuxcnc.error_channel()``milltask` 通信。
- HAL 侧通过 `gmoccapy.*` pins、`POSTGUI_HALFILE``halui``iocontrol``motmod``spindle_sim` 等连接状态和外部控制。
- 当前 XYZAB 配置为 `trivkins coordinates=xyzab``JOINTS=5`,属于仿真回环机,不是 TCP/RTCP 运动学。
- `NO_FORCE_HOMING = 0`,自动运行和 MDI 必须经过急停复位、上电、回零、模式切换、解释器空闲等互锁。
### 3.2 gmoccapy 按钮图标和控制清单
输入文件:
```text
/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/work/working3/gmoccapy_button_icons/files/
```
清单规模:
- 清单行总数211。
- 有图标或图像的按钮/状态116。
- 纯文字或无图标按钮/状态95。
- 已复制图标文件112 个。
- 覆盖右侧主状态栏、底部主按钮栏、Auto 程序运行栏、MDI/宏、回零、Touch Off、Jog、主轴冷却、预览、编辑页、刀具页、文件选择页、内嵌 ToolEdit/OffsetPage、设置页控件。
## 4. 本阶段功能包状态
| 功能包 | 内容 | 当前状态 | 完成后效果 |
| --- | --- | --- | --- |
| F-XYZAB-01 gmoccapy_XYZAB 参考 profile | 把 `gmoccapy_XYZAB.ini` 的坐标、HALFILE、POSTGUI_HALFILE、`trivkins xyzab`、回零策略整理为 Web profile/source map。 | 已完成 | Web UI 可切换到 XYZAB 参考配置,并清楚标注其为 trivkins 仿真 profile。 |
| F-XYZAB-02 启动链路和通信诊断 | 在信息面板展示 LinuxCNC native 启动阶段、NML command/status/error、HAL/postgui 通信边界。 | 已完成 | 用户能看到 Web 仿真与 native gmoccapy 的通信差异,不把 UI 行为误认为真实 NML/HAL 进程。 |
| F-XYZAB-03 G-code 执行互锁强化 | 按 gmoccapy_XYZAB 的三层保护补齐 RUN/MDI/JOG/HOME/SPINDLE/COOLANT gate 说明和测试。 | 已完成 | RUN/MDI 等按钮 disabled 原因可解释Node/browser 测试覆盖典型非法状态。 |
| F-XYZAB-04 按钮语义和图标资产映射 | 从 CSV 生成 Web 可消费按钮 manifest并把核心 icon 接入右侧栏、底部栏、Auto 栏、预览栏、文件栏。 | 已完成 | UI 从文字按钮升级为 gmoccapy 风格图标按钮active/inactive 状态可验证。 |
| F-XYZAB-05 HAL pin 与 postgui 状态面板 | 展示 `gmoccapy.*` pins、spindle feedback、tool offset、program progress、HALUI 等诊断状态。 | 已完成 | 信息面板可解释哪些是 NML 状态,哪些是 HAL pin 状态,哪些是 Web 仿真状态。 |
| F-XYZAB-06 宏/MDI/Tool/Touch 工作流 | 参考 gmoccapy 宏和工具页按钮逻辑,补齐 Web 侧宏按钮、MDI 历史、Tool/Touch 操作互锁。 | 边界内完成 | W4 验收覆盖 MDI gate、home/tool/touch 图标和互锁;宏编辑和 MDI 历史扩展未作为本阶段新增验收项。 |
| F-XYZAB-07 验收证据自动化 | 为新增 profile、按钮、互锁、图标、HAL 诊断补 Node/browser/PDF/截图证据。 | 已完成 | 每个功能都有命令、页面、JSON、截图或 PDF 证据。 |
## 5. 不做事项
本阶段不做:
- 不移植 GTK、Glade、Python gmoccapy runtime。
- 不启动 native `linuxcncsvr``milltask``halui``motmod` 作为浏览器运行依赖。
- 不把 `gmoccapy_XYZAB``trivkins` profile 声称为 RTCP/TCP 运动学 proof。
- 不用 JavaScript 自行发明 G-code 解释器、刀补、REMAP 或运动规划语义。
- 不把 icon 清单复制到 UI 后就认定控制语义完成,按钮仍必须通过 task policy 和 runtime 证据验收。
## 6. 已满足的成功定义
本阶段收口时满足:
- 代码中有 `gmoccapy-xyzab` 或等价 reference profile并显示 `XYZAB``trivkins`、HALFILE、POSTGUI_HALFILE、`NO_FORCE_HOMING=0` 等来源信息。
- UI 核心按钮使用 `working3` 清单中的图标或 manifest且 active/inactive 状态可被浏览器测试识别。
- RUN、MDI、JOG、HOME、ESTOP、POWER、SPINDLE、COOLANT 的 gate 与 gmoccapy_XYZAB 文档一致。
- HAL/postgui 诊断能区分 NML 命令、NML 状态、HAL pin、Web task/HAL simulation status。
- `npm --prefix web-rtcp-5axis-sim-plan/app run build` 通过。
- `npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node` 通过。
- 浏览器 smoke 覆盖 profile 切换、按钮 active 图标、canvas 非空、RUN blocked reason 和 HAL diagnosticssource-derived RTCP 运行证据仍由既有 `xyzac-trt``xyzbc-trt` 验收链路承担。
- `05-acceptance-evidence.md` 已追加实际 JSON、截图、PDF 和报告路径。

View File

@@ -0,0 +1,316 @@
# 02 程序开发详细步骤
生成日期2026-06-26
## 1. 开发原则
- 先复用现有 `app/src` 架构:`profiles``runtime``state``ui``visualization``tests`
- 不引入 React/Vue 等 UI 框架。
- 不把 gmoccapy native Python/GTK 代码作为浏览器依赖。
- 图标资产可以使用 `working3/gmoccapy_button_icons/files/`,但按钮控制语义必须由现有 store/task policy/runtime 驱动。
- 每个阶段必须同步更新 `04-task-matrix.md``03-progress-ledger.md`
当前状态:阶段 A 到 G 已按 `04-task-matrix.md` 收口为 `done`。本文件保留为复现步骤和后续变更清单。
## 2. 阶段 A资料和资产落库
目标:把 `working3` 资料变成项目内可追溯输入,而不是散落引用。
主要新增或更新文件:
```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/docs/traceability-matrix.md
```
实施步骤:
1. 新建 `docs/gmoccapy-xyzab-reference.md`,摘要吸收 `gmoccapy_XYZAB_execution_analysis.md`
2.`button_icon_inventory.csv` 转换为 JSON manifest保留字段分类、button_id、label、tooltip、icon_name、requested_size、source_type、copied_file、signals、notes。
3. 将核心按钮图标复制到 `app/src/assets/gmoccapy-icons/`至少覆盖estop、power、manual、mdi、auto、settings、home、tool、touch、open、run、stop、pause、step、reload、fullscreen、spindle、coolant、view/zoom。
4. 在 manifest 中记录原始来源和 `working3` 复制文件路径。
5. 更新 `docs/traceability-matrix.md`,新增 gmoccapy_XYZAB 和按钮 icon 追溯记录。
验收命令:
```bash
find web-rtcp-5axis-sim-plan/app/src/assets/gmoccapy-icons -maxdepth 1 -type f | wc -l
node -e "JSON.parse(require('fs').readFileSync('web-rtcp-5axis-sim-plan/app/src/ui-reference/gmoccapy-button-icons.json','utf8')); console.log('icon_manifest_json=ok')"
git diff --check -- web-rtcp-5axis-sim-plan
```
验收标准:
- JSON manifest 可解析。
- 图标文件存在,文件名稳定,不依赖 `working3` 运行时路径。
- 文档明确图标只证明 UI 资产来源,不证明按钮控制语义。
## 3. 阶段 B新增 gmoccapy_XYZAB reference profile
目标:在 Web 项目中建立 XYZAB/gmoccapy 参考 profile表达 native INI/HAL 拓扑。
主要新增或更新文件:
```text
web-rtcp-5axis-sim-plan/app/src/profiles/gmoccapy-xyzab.js
web-rtcp-5axis-sim-plan/app/src/profiles/index.js
web-rtcp-5axis-sim-plan/app/src/profiles/source-reference-map.js
web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_profile.mjs
```
实施步骤:
1. 新增 profile id`gmoccapy-xyzab`
2. 设置坐标:`["X", "Y", "Z", "A", "B"]`
3. 设置 kinematics`trivkins coordinates=xyzab`,并标记 `tcpCapable=false``rtcpProof=false`
4. 记录 INI 来源:`linuxcnc/configs/sim/gmoccapy/gmoccapy_XYZAB.ini`
5. 记录 HALFILE`core_sim_XYZAB.hal``spindle_sim.hal``simulated_home.hal`
6. 记录 POSTGUI_HALFILE`gmoccapy_postgui.hal`
7. 记录 `TASK=milltask``EMCMOT=motmod``HALUI=halui``CYCLE_TIME=100``SERVO_PERIOD=1000000`
8. 加入 `fiveAxisProfiles` 列表,但 UI 文案必须显示它是 gmoccapy/trivkins 参考机型。
9. Node 测试断言 profile 坐标、joint 数、HAL files、postgui、no-force-homing gate、semantic boundary。
验收命令:
```bash
node web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_profile.mjs
npm --prefix web-rtcp-5axis-sim-plan/app run build
```
验收标准:
- `gmoccapy-xyzab` 可通过 profile selector 选择。
- 信息面板显示 `XYZAB``trivkins``gmoccapy_XYZAB.ini`、HALFILE、POSTGUI_HALFILE。
- 不显示 `RTCP proof ready`,除非后续接入真实 source-derived TCP 运动学。
## 4. 阶段 CNML/HAL 通信边界诊断
目标:让 Web UI 能解释 gmoccapy native 与 Web 仿真的通信差异。
主要新增或更新文件:
```text
web-rtcp-5axis-sim-plan/app/src/runtime/gmoccapy-communication-model.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/tests/node/verify_gmoccapy_communication_model.mjs
```
实施步骤:
1. 建立 communication model 数据结构:
- native command path`gmoccapy -> linuxcnc.command -> NML emcCommand -> milltask`
- native status path`milltask -> NML emcStatus/emcError -> stat/error poll`
- native HAL path`gmoccapy.* pins <-> HAL shared memory`
- Web path`button -> store dispatch -> task policy/runtime -> status snapshot -> UI/Three.js`
2. 在 info tabs 中新增 `gmoccapy comms` 或合并到 RTCP diagnostics。
3. 对每个 action 显示 native equivalent command例如 `STATE_ON``MODE_AUTO``AUTO_RUN``JOG_CONTINUOUS`
4. 显示 postgui 顺序:`halcomp.ready()` 后才能执行 POSTGUI_HALFILE。
5. Node 测试断言主要命令链路和 HAL/postgui 说明存在。
验收命令:
```bash
node web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_communication_model.mjs
```
验收标准:
- UI 能区分 NML command、NML status/error、HAL pin、Web runtime feedback。
- 文案不暗示浏览器直接连接 native NML buffer 或 HAL shared memory。
## 5. 阶段 D按钮图标和语义映射
目标:将当前文字按钮升级为 gmoccapy 风格 icon button同时保持 task policy gate。
主要新增或更新文件:
```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/tests/node/verify_gmoccapy_icon_manifest.mjs
web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html
```
实施步骤:
1. 从 JSON manifest 建立 `getGmoccapyIcon(buttonId, stateVariant)`
2. 右侧主状态栏接入:
- `tbtn_estop``main_switch_on/off`
- `tbtn_on``power_off/on`
- `rbt_manual``rbt_mdi``rbt_auto`inactive/active 图标。
- `tbtn_setup``tbtn_user_tabs`
3. 底部栏接入:
- exit、homing、tool、touch、fullscreen、open、reload、run、stop、pause、step。
4. Spindle/Coolant 接入:
- spindle forward/reverse/stop active 状态。
- flood/mist active/inactive 状态。
5. Preview toolbar 接入:
- view x/y/z/p、zoom in/out、toolpath、dimensions。
6. 保留按钮 `aria-label`、title 和 disabled reason不能只显示图标。
7. browser smoke 增加断言:核心按钮存在 `data-icon-name`、active variant 和 disabled reason。
验收命令:
```bash
node web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_icon_manifest.mjs
npm --prefix web-rtcp-5axis-sim-plan/app run build
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh
```
验收标准:
- 核心按钮有图标、tooltip 或 aria-label。
- active/inactive 状态随 store 状态变化。
- RUN disabled 时仍显示 blocked reason。
- 图标未加载时有稳定文本 fallback。
## 6. 阶段 EG-code 执行互锁和按钮 gate 扩展
目标:按 gmoccapy_XYZAB 的执行条件补齐 Web gate 和测试。
主要新增或更新文件:
```text
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_xyzab_gates.mjs
web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html
```
实施步骤:
1. RUN gate 覆盖:
- INI loaded。
- machine-file opened。
- not estop。
- machine on。
- all homed when `NO_FORCE_HOMING=0`
- mode auto。
- interpreter idle。
- task/HAL runtime ready when required。
2. MDI gate 覆盖:
- machine on。
- all homed when `NO_FORCE_HOMING=0`
- mode mdi 或可安全切换 MDI。
- interpreter idle 或允许队列追加。
3. JOG gate 覆盖:
- machine on。
- mode manual。
- not running。
- axis/joint available。
4. HOME gate 覆盖:
- machine on。
- not running。
- no joint already homing。
5. SPINDLE/COOLANT/OVERRIDE gate 覆盖:
- estop/off 状态禁用。
- auto/mdi reading/waiting 时限制手动覆盖主轴方向。
6. Stop/Abort 必须在多数状态下可用,并清理 pause/start_line/active UI 状态。
7. 增加每个 gate 的 operatorMessage供按钮 title 和证据 JSON 使用。
验收命令:
```bash
node web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_gates.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_run_preconditions.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_run_feedback_loop.mjs
```
验收标准:
- 非法状态有明确 blocked reason。
- 合法状态 RUN/MDI/JOG/HOME 可通过。
- 原有 `verify_run_preconditions.mjs` 不回归。
## 7. 阶段 FHAL pin/postgui 诊断面板
目标:把 gmoccapy_XYZAB 的 HAL pin 和 postgui 连接以 Web 诊断方式展示。
主要新增或更新文件:
```text
web-rtcp-5axis-sim-plan/app/src/runtime/gmoccapy-hal-model.js
web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js
web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_hal_model.mjs
```
实施步骤:
1. 建立 HAL model 分类:
- hard buttons`gmoccapy.h-button.*``gmoccapy.v-button.*`
- jog pins`gmoccapy.jog.axis.*``gmoccapy.jog.jog-inc-*`
- override pinsfeed/spindle/jog/rapid counts 和 direct-value。
- tool pinstooloffset、toolchange、diameter。
- program pinslength、current-line、progress。
- error/message pins。
2. 建立 postgui nets
- spindle feedback bar。
- spindle at-speed LED。
- tooloffset x/z。
- simulated tool-change loop。
3. UI 显示 `native pin name``web source``current value``semantic boundary`
4. Node 测试断言关键 pins 和 postgui nets 存在。
验收命令:
```bash
node web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_hal_model.mjs
```
验收标准:
- 诊断面板清楚显示哪些是 native gmoccapy pins哪些是 Web runtime 映射。
- tool-change loop 被标记为 simulation loop不表示真实人工换刀。
## 8. 阶段 G浏览器证据和报告
目标:为本功能包生成可复查证据。
主要新增或更新文件:
```text
qa/web-rtcp-5axis-site-test/
qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab-function-report.json
qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab-function-report.pdf
qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab/
work/working4/05-acceptance-evidence.md
```
实施步骤:
1. 增加页面自动化用例:
- profile 切换到 `gmoccapy-xyzab`
- 检查 DRO 显示 X/Y/Z/A/B。
- 检查 `trivkins``NO_FORCE_HOMING=0`、HALFILE、POSTGUI_HALFILE。
- 检查按钮图标 active/inactive。
- 检查 RUN blocked reason。
- 完成一次合法状态 RUN 或模拟 RUN。
2. 保存截图:
- loaded。
- profile selected。
- run blocked。
- run ready。
- running。
- HAL diagnostics。
3. 保存 JSON report。
4. 输出 JSON 和 PDF 报告;本阶段已生成 `gmoccapy-xyzab-function-report.json``.pdf`
5. 更新 `05-acceptance-evidence.md`
验收命令:
```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
node qa/web-rtcp-5axis-site-test/capture-gmoccapy-xyzab-function-cases.mjs
```
验收标准:
- JSON report 中所有 case 为 PASS。
- 截图文件存在且页面非空。
- PDF 或替代报告路径写入 `05-acceptance-evidence.md`

View File

@@ -0,0 +1,512 @@
# 03 推进台账
生成日期2026-06-26
说明:本台账保留历史推进记录。早期条目中的“遗留问题”和“下一步”已由后续 W4-IMPL-002
和 W4-DOC-002 收口;当前状态以 `04-task-matrix.md``05-acceptance-evidence.md` 为准。
## 1. 台账规则
每轮结束必须追加一条记录,格式保持一致:
```text
轮次:
日期:
目标:
做了什么:
改了哪些文件:
验证了什么:
结果:
遗留问题:
下一步:
```
如果一轮只写文档,没有改代码,也必须明确写出“未改代码”。如果运行了测试,必须记录命令和结果。如果没有运行测试,必须说明原因。
## 2. 当前台账
### W4-DOC-001
日期2026-06-26
目标:
使用 `working3` 资料,为 `web-rtcp-5axis-sim-plan` 下一阶段功能完善建立文档包。
做了什么:
- 梳理 `working3/gmoccapy_XYZAB_execution_analysis.md`,提取 gmoccapy_XYZAB native 启动顺序、NML command/status/error、HAL/postgui、G-code 运行互锁和按钮控制逻辑。
- 梳理 `working3/gmoccapy_button_icons/`确认按钮清单、CSV、112 个图标资源和 211 行按钮/状态记录。
- 对照 `web-rtcp-5axis-sim-plan` 当前 README、docs、working_run、app/src、tests确认已有 gmoccapy shell、xyzac/xyzbc profile、kinematics/interpreter/task-HAL runtime 和 RUN 验证。
- 建立 `working4` 文档集,覆盖功能内容、开发步骤、推进台账、任务矩阵、验收证据、决策记录。
改了哪些文件:
```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
```
验证了什么:
- 验证 `working3` 输入文件存在。
- 验证 `working4` 起始为空,可作为本轮输出目录。
- 验证目标项目已有构建、Node smoke、browser smoke、QA evidence 目录和相关文档。
- 本轮以文档生成为主,未修改 `web-rtcp-5axis-sim-plan/app/src` 代码。
结果:
- 文档规划完成。
- 任务矩阵建立,后续实施可按任务编号推进,避免重复做。
遗留问题:
- 尚未把 `working3` 图标复制到 app assets。
- 尚未新增 `gmoccapy-xyzab` profile。
- 尚未新增图标 manifest、HAL diagnostics、XYZAB gate 测试和浏览器报告。
下一步:
`04-task-matrix.md``W4-A01` 开始,将资料和图标资产落库。
### W4-IMPL-001
日期2026-06-26
目标:
`working4` 从 W4-A01 开始实施资料落库、gmoccapy_XYZAB reference profile、通信/HAL 诊断模型和 Node 验收。
做了什么:
- 新增 `docs/gmoccapy-xyzab-reference.md`,记录 native 启动顺序、NML command/status/error、HAL/postgui、互锁和图标资产边界。
-`working3/gmoccapy_button_icons/button_icon_inventory.csv` 转成 `app/src/ui-reference/gmoccapy-button-icons.json`,保留 211 行清单。
-`working3/gmoccapy_button_icons/files/` 的 112 个 PNG/SVG 图标复制到 `app/src/assets/gmoccapy-icons/`
- 新增 `gmoccapy-xyzab` profile坐标为 XYZAB标记 `trivkins coordinates=xyzab``tcpCapable=false``rtcpProof=false``promotionAllowed=false`
- 新增 gmoccapy communication model 和 HAL/postgui model。
- 在 UI/store 层阻止 `gmoccapy-xyzab` 这种 reference-only profile 被切到 TCP/RTCP。
- 修正 fallback RTCP frame 的 joint pose 轴映射,使 XYZAB 显示 B 轴而不是误用 C 轴。
- 新增并接入 Node 测试XYZAB profile、icon manifest、communication model、HAL model。
- 更新 `docs/traceability-matrix.md``04-task-matrix.md``05-acceptance-evidence.md`
改了哪些文件:
```text
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/docs/gmoccapy-xyzab-reference.md
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/docs/traceability-matrix.md
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/package.json
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/ui-reference/gmoccapy-button-icons.json
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/assets/gmoccapy-icons/
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/profiles/gmoccapy-xyzab.js
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/profiles/index.js
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/profiles/source-reference-map.js
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/runtime/gmoccapy-communication-model.js
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/runtime/gmoccapy-hal-model.js
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/runtime/rtcp-frame.js
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/state/store.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/tests/node/verify_gmoccapy_xyzab_profile.mjs
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_icon_manifest.mjs
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_communication_model.mjs
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_hal_model.mjs
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_profile_boundary.mjs
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_rtcp_store.mjs
/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
```
验证了什么:
```bash
node web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_profile.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_icon_manifest.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_communication_model.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_hal_model.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_profile_boundary.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_rtcp_store.mjs
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
git diff --check -- web-rtcp-5axis-sim-plan work/working4
```
结果:
- 新增 Node 测试全部通过。
- `npm run build` 通过。
- `npm run smoke:node` 通过。
- browser shell smoke 和 dist browser smoke 均通过。
- `git diff --check` 通过。
遗留问题:
- 尚未建立 icon registry也未将图标接入实际按钮 DOM。
- communication/HAL model 已有数据和测试,但尚未接入信息面板页面。
- 尚未新增 gmoccapy_XYZAB gate 独立测试。
- 尚未生成 QA JSON/PDF/截图报告。
下一步:
继续 `W4-U01`,建立 `app/src/ui/gmoccapy-icon-registry.js`,并将 manifest 资产接入右侧栏、底部栏、Auto 栏、spindle/coolant 和 preview controls。
### W4-IMPL-002
日期2026-06-26
目标:
继续 `working4` 的 UI/icon、gmoccapy_XYZAB gate、browser smoke 和 QA 报告任务。
做了什么:
- 新增 `gmoccapy-icon-registry.js`,为核心 gmoccapy 按钮提供 icon name、asset path、variant 和 fallback。
- 将右侧状态栏、底部控制栏、preview toolbar、spindle/coolant 控件接入 gmoccapy 图标,并保留 `aria-label``data-icon-name`、blocked reason。
- 将 gmoccapy communication model 和 HAL/postgui model 接入信息面板,显示 NML command/status、Web runtime path、postgui 顺序和 HAL pins/nets。
- 扩展 `linuxcnc-task-policy.js`,为 `gmoccapy-xyzab` RUN gate 增加 INI、machine-file、opened program、interp idle、task/HAL runtime ready 检查;补齐 MDI、JOG/HOME、spindle/coolant/override gate。
- 在 store 中新增 spindle direction 行为,并对 coolant/spindle/override 操作应用 gate。
- 新增 icon registry 和 gmoccapy_XYZAB gate Node 测试。
- 更新 browser smoke断言核心按钮 icon 和 gmoccapy NML/HAL diagnostics。
- 新增 QA capture 脚本,生成 gmoccapy_XYZAB JSON/PDF 报告和 6 张截图。
- 更新 `04-task-matrix.md``05-acceptance-evidence.md`
改了哪些文件:
```text
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/package.json
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-icon-registry.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/styles/gmoccapy.css
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/state/linuxcnc-task-policy.js
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/state/store.js
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_icon_registry.mjs
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_gates.mjs
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/capture-gmoccapy-xyzab-function-cases.mjs
/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
```
验证了什么:
```bash
node --check web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js
node --check web-rtcp-5axis-sim-plan/app/src/state/store.js
node --check web-rtcp-5axis-sim-plan/app/src/state/linuxcnc-task-policy.js
node --check qa/web-rtcp-5axis-site-test/capture-gmoccapy-xyzab-function-cases.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_icon_registry.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_gates.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_rtcp_store.mjs
node web-rtcp-5axis-sim-plan/tests/node/verify_run_preconditions.mjs
npm --prefix web-rtcp-5axis-sim-plan/app run build
bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh
node qa/web-rtcp-5axis-site-test/capture-gmoccapy-xyzab-function-cases.mjs
```
结果:
- 新增 Node 测试全部通过。
- `verify_rtcp_store``verify_run_preconditions` 回归通过。
- 静态 build 通过。
- browser shell smoke 通过。
- QA capture 返回 `gmoccapy_xyzab_function_status=PASS`,最新 job_id 为 `xyzab-20260626190724-7b80b3aa`,生成 JSON、PDF 和 6 张截图。
遗留问题:
- `gmoccapy-xyzab` 仍为 `trivkins` reference-only profile不提供 TCP/RTCP proof。
- 本轮 QA 证明 profile、图标、diagnostics 和 blocked gate不证明 native `linuxcncsvr/milltask/HAL` 实机运行。
下一步:
完整 `npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node`、build、browser smoke、dist browser smoke、QA capture 和 `git diff --check` 已作为本轮最终回归执行。
### W4-DOC-002
日期2026-06-26
目标:
继续收口 `working4`,消除状态文档中仍停留在初始规划阶段的过期描述。
做了什么:
- 更新 `README.md`,明确 `working4` 当前是已实施、已验证、已归档状态,不再描述为仅生成规划文档。
- 更新 `01-function-content.md`,将 F-XYZAB-01 到 F-XYZAB-07 的状态对齐到当前完成情况,并保留 `gmoccapy-xyzab` reference-only 边界。
- 更新 `02-program-development-steps.md`,标明阶段 A 到 G 已收口QA capture JSON/PDF 已生成。
- 更新 `02-program-development-steps.md` 的阶段文件清单措辞,从规划口径调整为已归档的主要新增/更新文件。
- 更新 `04-task-matrix.md`,新增 W4-D08 状态文档收口任务并标记 `done`
- 更新 `05-acceptance-evidence.md`,修正“只创建文档、没有 job_id/report_id”的旧说明并补充 W4-U01、W4-V04、W4-V05 证据行。
改了哪些文件:
```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
```
验证了什么:
```bash
rg -n "\\| W4-[A-Z0-9-]+ \\| (todo|in_progress|blocked|deferred) \\|" work/working4/04-task-matrix.md
node -e "const r=JSON.parse(require('fs').readFileSync('qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab-function-report.json','utf8')); if(r.status!=='PASS') process.exit(1); console.log(r.status, r.steps.length, r.checks.length)"
git diff --check -- web-rtcp-5axis-sim-plan qa/web-rtcp-5axis-site-test work/working4
```
结果:
- `04-task-matrix.md` 未发现 `todo``in_progress``blocked``deferred` 的任务行。
- 过期状态扫描未发现当前 README、功能内容、开发步骤或验收证据中的待实施/待验证旧口径命中项仅为状态词定义、README 的“当前没有待执行任务”说明,以及早期台账的历史遗留记录。
- QA JSON 保持 `PASS`,包含 6 个步骤和 10 个检查。
- `git diff --check -- web-rtcp-5axis-sim-plan qa/web-rtcp-5axis-site-test work/working4` 返回 0。
遗留问题:
- `gmoccapy-xyzab` 仍为 `trivkins` reference-only profile不提供 TCP/RTCP proof。
- 本阶段不证明 native `linuxcncsvr/milltask/HAL` 实机运行。
下一步:
- `working4` 当前无剩余任务;后续新增工作需先在 `04-task-matrix.md` 新增任务编号。
### W4-DOC-003
日期2026-06-26
目标:
继续完成 `working4` 收口,清理剩余会让读者误判为规划阶段的措辞。
做了什么:
- 更新 `README.md` 文档清单说明,将“要完善/应改”口径改为“已完善/已改”口径。
- 更新 `02-program-development-steps.md`,将各阶段“建议新增或更新文件”统一改为“主要新增或更新文件”。
- 更新 `03-progress-ledger.md` 说明,明确早期条目的“遗留问题/下一步”是历史记录,当前状态以矩阵和验收证据为准。
- 更新 `04-task-matrix.md`,将 W4-D01 验收标准改为后续维护入口,将 W4-T07 验收标准改为已输出 JSON、PDF 和截图。
改了哪些文件:
```text
/home/meswork/cnc_wams/work/working4/README.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
```
验证了什么:
```bash
rg -n "\\| W4-[A-Z0-9-]+ \\| (todo|in_progress|blocked|deferred) \\|" work/working4/04-task-matrix.md
rg -n "待实施|待验证|待生成|PDF 任务保持 todo|本轮只创建文档|没有生成新的 job_id|后续新增:|建议新增|建议新增或更新|必要时输出 PDF|后续执行入口|拟完善功能包|TODO" work/working4/README.md work/working4/01-function-content.md work/working4/02-program-development-steps.md work/working4/04-task-matrix.md work/working4/05-acceptance-evidence.md
node -e "const r=JSON.parse(require('fs').readFileSync('qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab-function-report.json','utf8')); if(r.status!=='PASS') process.exit(1); console.log('qa_report_status='+r.status); console.log('qa_report_steps='+r.steps.length); console.log('qa_report_checks='+r.checks.length);"
git diff --check -- web-rtcp-5axis-sim-plan qa/web-rtcp-5axis-site-test work/working4
```
结果:
- 未发现未完成 W4 任务行。
- 当前状态文档未发现规划阶段残留关键词。
- QA JSON 保持 `PASS`,包含 6 个步骤和 10 个检查。
- `git diff --check` 返回 0。
遗留问题:
- 无新的 `working4` 剩余任务。
- 保留既定边界:`gmoccapy-xyzab``trivkins` reference-only profile不证明 TCP/RTCP 或 native LinuxCNC realtime 执行。
下一步:
- 当前无需继续执行;后续新增需求先在 `04-task-matrix.md` 新增任务编号。
### W4-DOC-004
日期2026-06-26
目标:
继续复核 `working4` 验收证据,确认 QA report 编号字段与归档表一致。
做了什么:
- 重新扫描 `04-task-matrix.md`,确认没有未完成 W4 任务行。
- 重新扫描当前状态文档,确认没有规划阶段残留关键词。
- 读取 `gmoccapy-xyzab-function-report.json`,确认报告字段为 `jobId``reportId`
- 读取 QA capture 脚本,确认控制台输出为 `gmoccapy_xyzab_function_job_id``gmoccapy_xyzab_function_report_id`,来源是同一组 report 字段。
- 更新 `05-acceptance-evidence.md`,说明 JSON camelCase 字段与归档表 `job_id/report_id` 标签的对应关系。
改了哪些文件:
```text
/home/meswork/cnc_wams/work/working4/03-progress-ledger.md
/home/meswork/cnc_wams/work/working4/05-acceptance-evidence.md
```
验证了什么:
```bash
rg -n "\\| W4-[A-Z0-9-]+ \\| (todo|in_progress|blocked|deferred) \\|" work/working4/04-task-matrix.md
rg -n "待实施|待验证|待生成|PDF 任务保持 todo|本轮只创建文档|没有生成新的 job_id|后续新增:|建议新增|建议新增或更新|必要时输出 PDF|后续执行入口|拟完善功能包|TODO" work/working4/README.md work/working4/01-function-content.md work/working4/02-program-development-steps.md work/working4/04-task-matrix.md work/working4/05-acceptance-evidence.md
node -e "const r=JSON.parse(require('fs').readFileSync('qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab-function-report.json','utf8')); if(r.status!=='PASS') process.exit(1); console.log(r.jobId, r.reportId, r.status, r.steps.length, r.checks.length)"
git diff --check -- web-rtcp-5axis-sim-plan qa/web-rtcp-5axis-site-test work/working4
```
结果:
- 未发现未完成 W4 任务行。
- 当前状态文档未发现规划阶段残留关键词。
- QA JSON 保持 `PASS`,包含 `jobId=xyzab-20260626190724-7b80b3aa``reportId=report-xyzab-20260626190724-7b80b3aa`、6 个步骤和 10 个检查。
- `git diff --check` 返回 0。
遗留问题:
- 无新的 `working4` 剩余任务。
- 保留既定边界:`gmoccapy-xyzab``trivkins` reference-only profile不证明 TCP/RTCP 或 native LinuxCNC realtime 执行。
下一步:
- 当前无需继续执行;后续新增需求先在 `04-task-matrix.md` 新增任务编号。
### W4-DOC-005
日期2026-06-26
目标:
建立 `working4` 一眼可读的最终收口入口,避免完成状态分散在 README、任务矩阵、验收证据和台账中。
做了什么:
- 新增 `07-final-closure.md`汇总收口结论、最终证据、QA identifiers、最终校验命令、保留边界和后续变更规则。
- 更新 `README.md`,将 `07-final-closure.md` 标为最终收口入口,并加入文档清单和后续维护步骤。
- 更新 `04-task-matrix.md`,新增 W4-D09 并标记 `done`
改了哪些文件:
```text
/home/meswork/cnc_wams/work/working4/07-final-closure.md
/home/meswork/cnc_wams/work/working4/README.md
/home/meswork/cnc_wams/work/working4/03-progress-ledger.md
/home/meswork/cnc_wams/work/working4/04-task-matrix.md
```
验证了什么:
```bash
rg -n "\\| W4-[A-Z0-9-]+ \\| (todo|in_progress|blocked|deferred) \\|" work/working4/04-task-matrix.md
# stale wording scan command is recorded in 07-final-closure.md
node -e "const r=JSON.parse(require('fs').readFileSync('qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab-function-report.json','utf8')); if(r.status!=='PASS') process.exit(1); console.log(r.jobId, r.reportId, r.status, r.steps.length, r.checks.length)"
git diff --check -- web-rtcp-5axis-sim-plan qa/web-rtcp-5axis-site-test work/working4
```
结果:
- 未发现未完成 W4 任务行。
- 当前状态文档未发现规划阶段残留关键词;`07-final-closure.md` 中的示例扫描命令已使用 escaped pattern 和拆分 token避免自命中。
- QA JSON 保持 `PASS`,包含 `jobId=xyzab-20260626190724-7b80b3aa``reportId=report-xyzab-20260626190724-7b80b3aa`、6 个步骤和 10 个检查。
- `git diff --check` 返回 0。
遗留问题:
- 无新的 `working4` 剩余任务。
- 保留既定边界:`gmoccapy-xyzab``trivkins` reference-only profile不证明 TCP/RTCP 或 native LinuxCNC realtime 执行。
下一步:
- `working4` 已有最终收口入口;后续新增需求先在 `04-task-matrix.md` 新增任务编号,并同步更新 `07-final-closure.md`
### W4-VERIFY-006
日期2026-06-26
目标:
接续上一轮中断后的 `working4` 收口状态,重新运行关键验收链路,确认当前代码、报告和最终证据仍一致。
做了什么:
- 读取 `AGENTS.md``working4` README、任务矩阵、推进台账、最终收口说明确认当前范围和日志规则。
- 扫描 `04-task-matrix.md`,确认没有未完成 W4 任务行。
- 扫描当前状态文档,确认没有规划阶段残留关键词。
- 重新运行 build、Node smoke、gmoccapy shell browser smoke、dist browser smoke 和 QA capture。
- QA capture 重新生成 `gmoccapy-xyzab-function-report.json``.pdf` 和截图目录内容。
- 更新 `05-acceptance-evidence.md``07-final-closure.md`,将当前最终证据编号对齐到最新 QA report。
改了哪些文件:
```text
/home/meswork/cnc_wams/work/working4/03-progress-ledger.md
/home/meswork/cnc_wams/work/working4/05-acceptance-evidence.md
/home/meswork/cnc_wams/work/working4/07-final-closure.md
```
验证了什么:
```bash
rg -n "\\| W4-[A-Z0-9-]+ \\| (todo|in_progress|blocked|deferred) \\|" work/working4/04-task-matrix.md
TD_WORD="$(printf '%s%s' TO DO)"; STALE_W4_PATTERN="$(printf '\\u5f85\\u5b9e\\u65bd|\\u5f85\\u9a8c\\u8bc1|\\u5f85\\u751f\\u6210|PDF \\u4efb\\u52a1\\u4fdd\\u6301 todo|\\u672c\\u8f6e\\u53ea\\u521b\\u5efa\\u6587\\u6863|\\u6ca1\\u6709\\u751f\\u6210\\u65b0\\u7684 job_id|\\u540e\\u7eed\\u65b0\\u589e\\uff1a|\\u5efa\\u8bae\\u65b0\\u589e|\\u5efa\\u8bae\\u65b0\\u589e\\u6216\\u66f4\\u65b0|\\u5fc5\\u8981\\u65f6\\u8f93\\u51fa PDF|\\u540e\\u7eed\\u6267\\u884c\\u5165\\u53e3|\\u62df\\u5b8c\\u5584\\u529f\\u80fd\\u5305|%s' "$TD_WORD")"; rg -n "$STALE_W4_PATTERN" work/working4/README.md work/working4/01-function-content.md work/working4/02-program-development-steps.md work/working4/04-task-matrix.md work/working4/05-acceptance-evidence.md work/working4/07-final-closure.md
node -e "const r=JSON.parse(require('fs').readFileSync('qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab-function-report.json','utf8')); if(r.status!=='PASS') process.exit(1); console.log(r.jobId, r.reportId, r.status, r.steps.length, r.checks.length)"
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
node qa/web-rtcp-5axis-site-test/capture-gmoccapy-xyzab-function-cases.mjs
git diff --check -- web-rtcp-5axis-sim-plan qa/web-rtcp-5axis-site-test work/working4
```
结果:
- 未发现未完成 W4 任务行。
- 当前状态文档未发现规划阶段残留关键词。
- `npm --prefix web-rtcp-5axis-sim-plan/app run build` 返回 0输出 `gmoccapy_static_build=ok`
- `npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node` 返回 0覆盖既有 smoke 和新增 gmoccapy_XYZAB profile/icon/communication/HAL/gate smoke。
- gmoccapy shell browser smoke 返回 `gmoccapy_shell_smoke=ok`
- dist browser smoke 返回 `gmoccapy_dist_smoke=ok`
- QA capture 返回 `gmoccapy_xyzab_function_status=PASS`,最新 `job_id=xyzab-20260626214346-f4b4aa36``report_id=report-xyzab-20260626214346-f4b4aa36`,生成 JSON、PDF 和 6 张截图。
- `git diff --check -- web-rtcp-5axis-sim-plan qa/web-rtcp-5axis-site-test work/working4` 返回 0。
遗留问题:
- 无新的 `working4` 剩余任务。
- 保留既定边界:`gmoccapy-xyzab``trivkins` reference-only profile不证明 TCP/RTCP 或 native LinuxCNC realtime 执行。
下一步:
- 当前无需继续执行;后续新增需求先在 `04-task-matrix.md` 新增任务编号,并同步更新 `05-acceptance-evidence.md``07-final-closure.md`
## 3. 后续追加模板
### W4-XXX
日期:
目标:
做了什么:
改了哪些文件:
```text
```
验证了什么:
```bash
```
结果:
遗留问题:
下一步:

View File

@@ -0,0 +1,86 @@
# 04 任务矩阵
生成日期2026-06-26
状态取值:
- `done`:已完成并有证据。
- `in_progress`:正在做。
- `todo`:未开始。
- `blocked`:被外部条件阻塞。
- `deferred`:暂缓,不影响当前阶段验收。
## 1. 文档任务
| 任务编号 | 状态 | 任务 | 产物 | 验收标准 |
| --- | --- | --- | --- | --- |
| W4-D01 | done | 建立 working4 文档索引 | `README.md` | 列出 01-07 文档和后续维护入口。 |
| W4-D02 | done | 编写功能内容文档 | `01-function-content.md` | 覆盖目标、现状、working3 新价值、功能包、不做事项、成功定义。 |
| W4-D03 | done | 编写开发步骤文档 | `02-program-development-steps.md` | 按阶段列出应改文件、步骤、命令、验收标准。 |
| W4-D04 | done | 建立推进台账 | `03-progress-ledger.md` | 包含 W4-DOC-001 和后续追加模板。 |
| W4-D05 | done | 建立任务矩阵 | `04-task-matrix.md` | 所有后续任务有编号、状态、验收标准。 |
| W4-D06 | done | 建立验收证据文档 | `05-acceptance-evidence.md` | 记录现有证据、实际 QA 证据和验收边界。 |
| W4-D07 | done | 建立决策记录 | `06-decision-records.md` | 记录边界、技术路线、验收策略。 |
| W4-D08 | done | 收口 working4 状态文档 | `README.md``01-function-content.md``02-program-development-steps.md``05-acceptance-evidence.md` | 规划口径与已完成实施、QA 证据和验收边界一致。 |
| W4-D09 | done | 建立最终收口说明 | `07-final-closure.md` | 汇总完成结论、最终证据、保留边界和后续变更规则。 |
## 2. 资料和资产任务
| 任务编号 | 状态 | 任务 | 主要文件 | 验收标准 |
| --- | --- | --- | --- | --- |
| W4-A01 | done | 建立 gmoccapy_XYZAB reference 文档 | `web-rtcp-5axis-sim-plan/docs/gmoccapy-xyzab-reference.md` | 文档覆盖 native 启动、NML、HAL、postgui、互锁、按钮控制逻辑。 |
| W4-A02 | done | 生成按钮图标 JSON manifest | `app/src/ui-reference/gmoccapy-button-icons.json` | JSON 可解析,记录 211 行清单并保留来源路径。 |
| W4-A03 | done | 复制核心 gmoccapy 图标到 app assets | `app/src/assets/gmoccapy-icons/` | 已复制 112 个图标覆盖主状态栏、底部栏、Auto 栏、spindle/coolant、preview。 |
| W4-A04 | done | 更新追溯矩阵 | `docs/traceability-matrix.md` | 新增 gmoccapy_XYZAB、button icon manifest、communication model、HAL diagnostics 追溯项。 |
## 3. Profile 和 runtime model 任务
| 任务编号 | 状态 | 任务 | 主要文件 | 验收标准 |
| --- | --- | --- | --- | --- |
| W4-P01 | done | 新增 `gmoccapy-xyzab` profile | `app/src/profiles/gmoccapy-xyzab.js``app/src/profiles/index.js` | profile 可选择,坐标为 XYZAB标记 `trivkins``tcpCapable=false``rtcpProof=false`。 |
| W4-P02 | done | 新增 XYZAB source reference map | `app/src/profiles/source-reference-map.js` | 包含 `gmoccapy_XYZAB.ini``core_sim_XYZAB.hal``spindle_sim.hal``simulated_home.hal``gmoccapy_postgui.hal`。 |
| W4-P03 | done | 新增 gmoccapy communication model | `app/src/runtime/gmoccapy-communication-model.js` | 能列出 native NML command/status/error、HAL pin、Web runtime 映射。 |
| W4-P04 | done | 新增 gmoccapy HAL model | `app/src/runtime/gmoccapy-hal-model.js` | 能列出关键 `gmoccapy.*` pins 和 postgui nets。 |
## 4. UI 和按钮任务
| 任务编号 | 状态 | 任务 | 主要文件 | 验收标准 |
| --- | --- | --- | --- | --- |
| W4-U01 | done | 建立 icon registry | `app/src/ui/gmoccapy-icon-registry.js` | `getGmoccapyIcon(buttonId, variant)` 可返回 icon path/name/fallback。 |
| W4-U02 | done | 右侧主状态栏接入 icon | `app/src/ui/gmoccapy-shell.js``app/src/styles/gmoccapy.css` | estop/power/manual/mdi/auto/settings/user tabs 有 active/inactive 图标。 |
| W4-U03 | done | 底部和 Auto 控制栏接入 icon | `gmoccapy-shell.js``gmoccapy.css` | open/reload/run/stop/pause/step/home/tool/touch/fullscreen 有图标和 aria-label。 |
| W4-U04 | done | spindle/coolant/preview 接入 icon | `gmoccapy-shell.js``gmoccapy.css` | spindle forward/reverse/stop、flood/mist、view/zoom/toolpath/dimensions 有图标或 fallback。 |
| W4-U05 | done | 信息面板展示 communication/HAL diagnostics | `gmoccapy-shell.js` | UI 可见 NML/HAL/Web runtime 边界和 postgui 顺序。 |
## 5. Gate 和业务语义任务
| 任务编号 | 状态 | 任务 | 主要文件 | 验收标准 |
| --- | --- | --- | --- | --- |
| W4-G01 | done | RUN gate 对齐 gmoccapy_XYZAB | `app/src/state/linuxcnc-task-policy.js``store.js` | 覆盖 INI、machine-file、estop、power、home、auto、interp idle、runtime ready。 |
| W4-G02 | done | MDI gate 对齐 gmoccapy_XYZAB | `linuxcnc-task-policy.js``store.js` | 未上电、未回零、运行中等状态有明确 blocked reason。 |
| W4-G03 | done | JOG/HOME gate 对齐 gmoccapy_XYZAB | `linuxcnc-task-policy.js``store.js` | manual/on/not-running 状态规则可测。 |
| W4-G04 | done | spindle/coolant/override gate 对齐 gmoccapy_XYZAB | `linuxcnc-task-policy.js``gmoccapy-shell.js` | 急停/下电禁用,运行中限制手动主轴方向覆盖。 |
| W4-G05 | done | Stop/Abort 清理 UI 状态 | `store.js``gmoccapy-shell.js` | Stop 后 pause/start_line/active run state 清理browser 可测。 |
## 6. 测试和证据任务
| 任务编号 | 状态 | 任务 | 主要文件 | 验收标准 |
| --- | --- | --- | --- | --- |
| W4-T01 | done | 新增 XYZAB profile Node 测试 | `tests/node/verify_gmoccapy_xyzab_profile.mjs` | 断言坐标、HALFILE、POSTGUI、trivkins、boundary。 |
| W4-T02 | done | 新增 icon manifest Node 测试 | `tests/node/verify_gmoccapy_icon_manifest.mjs` | manifest 可解析,核心按钮均有 icon 或 fallback。 |
| W4-T03 | done | 新增 communication model Node 测试 | `tests/node/verify_gmoccapy_communication_model.mjs` | NML/HAL/Web 映射完整。 |
| W4-T04 | done | 新增 HAL model Node 测试 | `tests/node/verify_gmoccapy_hal_model.mjs` | 关键 pins 和 postgui nets 存在。 |
| W4-T05 | done | 新增 gate Node 测试 | `tests/node/verify_gmoccapy_xyzab_gates.mjs` | RUN/MDI/JOG/HOME/SPINDLE/COOLANT 合法和非法状态均覆盖。 |
| W4-T06 | done | 更新 browser smoke | `tests/browser/gmoccapy_shell_smoke.html` | 覆盖 profile 切换、icon active、blocked reason、HAL diagnostics。 |
| W4-T07 | done | 新增 QA 截图和报告脚本 | `qa/web-rtcp-5axis-site-test/capture-gmoccapy-xyzab-function-cases.mjs` | 输出 JSON、PDF 和截图。 |
| W4-T08 | done | 更新验收证据文档 | `work/working4/05-acceptance-evidence.md` | 追加实际命令、JSON、PDF、截图和资产路径。 |
## 7. 全局验收任务
| 任务编号 | 状态 | 任务 | 命令 | 验收标准 |
| --- | --- | --- | --- | --- |
| W4-V01 | done | 静态构建 | `npm --prefix web-rtcp-5axis-sim-plan/app run build` | 返回 0。 |
| W4-V02 | done | Node smoke | `npm --prefix web-rtcp-5axis-sim-plan/app run smoke:node` | 返回 0原有测试不回归。 |
| W4-V03 | done | Browser smoke | `bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_shell_browser.sh` | 返回 0页面非空canvas 非空。 |
| W4-V04 | done | Dist browser smoke | `bash web-rtcp-5axis-sim-plan/tests/browser/verify_gmoccapy_dist_browser.sh` | 返回 0。 |
| W4-V05 | done | 文档和空白检查 | `git diff --check -- web-rtcp-5axis-sim-plan qa/web-rtcp-5axis-site-test work/working4` | 返回 0。 |

View File

@@ -0,0 +1,306 @@
# 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 缺口。

View File

@@ -0,0 +1,182 @@
# 06 决策记录
生成日期2026-06-26
## ADR-001working3 作为参考输入,不直接作为 runtime 依赖
状态accepted
决策:
`working3` 中的 Markdown、CSV 和图标文件是功能完善的参考输入。后续实现时应把需要长期使用的资料复制或转换到 `web-rtcp-5axis-sim-plan` 内部目录,而不是让应用运行时依赖 `work/working3`
原因:
- `work/working3` 是资料整理目录,不是产品运行目录。
- Web 应用需要稳定的 assets、manifest 和 source map。
- 这样可以在追溯矩阵中明确来源,同时避免后续清理 `work/` 时破坏应用。
后续影响:
- 图标必须落到 `app/src/assets/gmoccapy-icons/` 或等价目录。
- CSV 必须转换为 JSON manifest 或构建期可解析资产。
## ADR-002不移植 native gmoccapy GTK/Glade runtime
状态accepted
决策:
Web 项目只参考 gmoccapy 的布局、按钮、互锁和通信模型,不把 `gmoccapy.py`、GTK、Glade、Python REMAP runtime 直接搬进浏览器。
原因:
- 项目目标是 Web 仿真产品,不是替代 LinuxCNC native GUI。
- 浏览器不能等同 native NML buffer、HAL shared memory 和 Linux realtime thread。
- 当前项目已有原生 HTML/CSS/ES module shell继续复用成本最低。
后续影响:
- 文档和 UI 必须用 `semanticBoundary` 说明 Web 模拟边界。
- Python GUI runtime 一直保持 `reference only`
## ADR-003gmoccapy_XYZAB 是 trivkins 参考 profile不是 RTCP proof
状态accepted
决策:
新增 `gmoccapy-xyzab` 时,必须标记为 `trivkins coordinates=xyzab` 的 gmoccapy 参考机型,不得标记为 RTCP/TCP 运动学 proof。
原因:
- `gmoccapy_XYZAB.ini` 的运动学是 `trivkins`
- RTCP/TCP 运动学 proof 当前来自 `xyzac-trt``xyzbc-trt` 等 source-derived kinematics runtime。
- 把 XYZAB trivkins 误标为 RTCP 会污染验收标准。
后续影响:
- UI 可以显示 XYZAB 轴和 gmoccapy native 启动链路。
- RTCP badge 对该 profile 应显示 `not TCP proof` 或等价说明,除非后续接入真实 TCP 运动学。
## ADR-004NML/HAL 通信以诊断模型展示,控制仍走 Web store/task policy/runtime
状态accepted
决策:
Web UI 显示 gmoccapy native 的 NML/HAL 通信路径,但按钮点击仍走现有 `store.dispatch``linuxcnc-task-policy`、runtime status snapshot。
原因:
- 当前浏览器应用没有 native NML buffer。
- 现有 store/task policy/runtime 已覆盖 RUN、MDI、JOG、HOME、task/HAL status loop。
- 诊断模型能帮助用户理解 native gmoccapy但不会制造虚假的 native 连接。
后续影响:
- 每个按钮可显示 native equivalent command例如 `STATE_ON``MODE_AUTO``AUTO_RUN`
- 证据中必须区分 native reference 和 Web execution。
## ADR-005按钮图标不能替代按钮语义验收
状态accepted
决策:
图标接入只算 UI 资产验收。按钮是否正确,必须通过 task policy、store、runtime 和 browser action 证据验收。
原因:
- `working3` 图标清单只说明图标来源、按钮名、tooltip 和信号线索。
- 真正的执行安全依赖 machine state、mode、interp state、home state、runtime readiness。
- 防止“看起来像 gmoccapy”但控制逻辑不正确。
后续影响:
- 每个核心按钮至少要有 icon 证据和 gate/action 证据。
- browser smoke 应断言 active icon 和 disabled reason。
## ADR-006G-code 执行互锁按三层保护建模
状态accepted
决策:
RUN/MDI/JOG/HOME 等 gate 按 gmoccapy_XYZAB 文档中的三层保护建模:
1. UI 按钮敏感状态。
2. Action/task policy gate。
3. runtime 或 LinuxCNC source-derived boundary 最终校验。
原因:
- gmoccapy native 本身不是只靠一个按钮判断。
- LinuxCNC 后台会再次拒绝非法命令。
- Web 侧需要给用户可读 blocked reason同时保持 runtime 校验。
后续影响:
- 测试必须覆盖非法状态和合法状态。
- Stop/Abort 的可用范围应大于 Run/MDI/Jog。
## ADR-007POSTGUI_HALFILE 必须作为顺序约束记录
状态accepted
决策:
HAL/postgui 诊断中必须记录:`gmoccapy_postgui.hal` 只能在 `gmoccapy.halcomp.ready()` 后执行。
原因:
- postgui 文件引用 `gmoccapy.*` pins普通 HALFILE 阶段这些 pins 尚不存在。
- 这是 gmoccapy native 启动顺序中的关键边界。
- Web 侧如果展示 HAL model也要保留这个顺序概念。
后续影响:
- HAL model 中 postgui nets 独立于普通 HALFILE。
- 文档和 UI 不应把 postgui pin 连接混入实时 HAL 启动前阶段。
## ADR-008新增功能必须 evidence-first promotion
状态accepted
决策:
任何新增功能不能只凭代码合入认定完成,必须补齐 `05-acceptance-evidence.md` 中对应证据。
原因:
- 当前项目已经形成 Node smoke、browser smoke、QA JSON、截图、PDF/DOCX 的证据链。
- gmoccapy_XYZAB 功能涉及 UI、profile、HAL、NML、gate、图标多边界容易误判。
- 证据优先可以防止重复做和回归。
后续影响:
- `04-task-matrix.md` 中没有证据的任务不得标为 `done`
- 文档、代码、测试、报告必须一起更新。
## ADR-009gmoccapy_XYZAB profile 必须阻断 TCP/RTCP 切换
状态accepted
决策:
`gmoccapy-xyzab` profile 虽然进入 profile selector但必须标记
`tcpCapable=false``rtcpProof=false`,并在 UI 和 store 层阻断 `tcp-*` kinsType
`SET_RTCP enabled`
原因:
- `gmoccapy_XYZAB.ini` 的真实运动学是 `trivkins coordinates=xyzab`
- 当前 Web 项目的 source-derived TCP/RTCP proof 来自 `xyzac-trt``xyzbc-trt`
- 如果 selector 允许 XYZAB reference profile 打开 TCP会造成“参考配置可运行 RTCP”的误判。
后续影响:
- 侧栏 TCP 按钮在 `gmoccapy-xyzab` 下应 disabled并给出 reference-only 原因。
- `store.dispatch({ type: "SET_KINS_TYPE", kinsType: "tcp-..." })`
`SET_RTCP enabled` 必须保持防护,即使未来 UI 改动也不能绕过。
- 如果未来接入真实 XYZAB TCP kinematics应新增独立 runtime proof 和测试后再修改该决策。

View File

@@ -0,0 +1,86 @@
# 07 最终收口说明
生成日期2026-06-26
## 1. 收口结论
`working4` 当前已完成。`04-task-matrix.md` 中 W4-D、W4-A、W4-P、W4-U、W4-G、
W4-T、W4-V 任务均为 `done`,当前没有 `todo``in_progress``blocked`
`deferred` 任务行。
本阶段已完成:
- `gmoccapy-xyzab` reference profile 和 source reference map。
- gmoccapy button icon manifest、核心图标资产和 icon registry。
- gmoccapy native NML/HAL/postgui communication diagnostics。
- RUN、MDI、JOG、HOME、spindle、coolant、override gate 对齐。
- Node smoke、browser smoke、dist browser smoke、QA JSON/PDF/截图证据。
- 文档矩阵、推进台账、验收证据和决策记录归档。
## 2. 最终证据
QA report
```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
```
QA identifiers
```text
jobId/job_id=xyzab-20260626214346-f4b4aa36
reportId/report_id=report-xyzab-20260626214346-f4b4aa36
status=PASS
steps=6
checks=10
generatedAt=2026-06-26T21:43:46.310Z
```
截图目录:
```text
/home/meswork/cnc_wams/qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab/
```
最终校验命令:
```bash
rg -n "\\| W4-[A-Z0-9-]+ \\| (todo|in_progress|blocked|deferred) \\|" work/working4/04-task-matrix.md
TD_WORD="$(printf '%s%s' TO DO)"
STALE_W4_PATTERN="$(printf '\\u5f85\\u5b9e\\u65bd|\\u5f85\\u9a8c\\u8bc1|\\u5f85\\u751f\\u6210|PDF \\u4efb\\u52a1\\u4fdd\\u6301 todo|\\u672c\\u8f6e\\u53ea\\u521b\\u5efa\\u6587\\u6863|\\u6ca1\\u6709\\u751f\\u6210\\u65b0\\u7684 job_id|\\u540e\\u7eed\\u65b0\\u589e\\uff1a|\\u5efa\\u8bae\\u65b0\\u589e|\\u5efa\\u8bae\\u65b0\\u589e\\u6216\\u66f4\\u65b0|\\u5fc5\\u8981\\u65f6\\u8f93\\u51fa PDF|\\u540e\\u7eed\\u6267\\u884c\\u5165\\u53e3|\\u62df\\u5b8c\\u5584\\u529f\\u80fd\\u5305|%s' "$TD_WORD")"
rg -n "$STALE_W4_PATTERN" work/working4/README.md work/working4/01-function-content.md work/working4/02-program-development-steps.md work/working4/04-task-matrix.md work/working4/05-acceptance-evidence.md work/working4/07-final-closure.md
node -e "const r=JSON.parse(require('fs').readFileSync('qa/web-rtcp-5axis-site-test/output/gmoccapy-xyzab-function-report.json','utf8')); if(r.status!=='PASS') process.exit(1); console.log(r.jobId, r.reportId, r.status, r.steps.length, r.checks.length)"
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
node qa/web-rtcp-5axis-site-test/capture-gmoccapy-xyzab-function-cases.mjs
git diff --check -- web-rtcp-5axis-sim-plan qa/web-rtcp-5axis-site-test work/working4
```
最终校验结果:
- 未发现未完成 W4 任务行。
- 当前状态文档未发现规划阶段残留关键词。
- `npm run build``npm run smoke:node`、gmoccapy shell browser smoke 和 dist browser smoke 均返回 0。
- QA capture 重新生成 JSON/PDF/截图,状态为 `PASS`,包含 6 个步骤和 10 个检查。
- `git diff --check` 返回 0。
## 3. 保留边界
- `gmoccapy-xyzab``trivkins coordinates=xyzab` reference-only profile。
- 本阶段不把 `gmoccapy-xyzab` 声称为 TCP/RTCP proof。
- 本阶段不证明 native `linuxcncsvr``milltask`、HAL realtime thread 或 gmoccapy GTK runtime 实机运行。
- 真实 RTCP promotion 仍来自 source-derived `xyzac-trt``xyzbc-trt` 等已有验收链路。
## 4. 后续变更规则
后续如继续扩展 `working4` 范围,必须先在 `04-task-matrix.md` 新增任务编号,不应复用已完成的 W4-D/W4-A/W4-P/W4-U/W4-G/W4-T/W4-V 任务作为未完成项。
每个新增任务必须同步更新:
- `03-progress-ledger.md`
- `04-task-matrix.md`
- `05-acceptance-evidence.md`
- 本文件的最终证据或保留边界

59
work/working4/README.md Normal file
View File

@@ -0,0 +1,59 @@
# working4 文档索引
生成日期2026-06-26
本目录用于承接 `/home/meswork/cnc_wams/work/working3` 的资料,规划、实施并归档
`/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan` 的 gmoccapy_XYZAB 功能完善工作。
截至 2026-06-26`04-task-matrix.md` 中 W4-D、W4-A、W4-P、W4-U、W4-G、W4-T、W4-V
任务均已收口为 `done``07-final-closure.md` 是本阶段最终收口入口。
当前状态:
- 已完成gmoccapy_XYZAB reference profile、图标 manifest/assets、communication/HAL diagnostics、task gate、browser smoke、QA JSON/PDF/截图证据。
- 保留边界:`gmoccapy-xyzab` 仍是 `trivkins` reference-only profile不作为 TCP/RTCP proof也不证明 native `linuxcncsvr/milltask/HAL` 实机运行。
- 后续变更:需要先在 `04-task-matrix.md` 新增任务编号,再按 `03-progress-ledger.md``05-acceptance-evidence.md` 追加证据。
## 文档清单
| 编号 | 文件 | 用途 |
| --- | --- | --- |
| 01 | `01-function-content.md` | 功能内容:说明已完善功能、资料来源、边界和成功定义。 |
| 02 | `02-program-development-steps.md` | 程序开发详细步骤:记录各阶段已改文件、实现动作、命令和验收口径。 |
| 03 | `03-progress-ledger.md` | 推进台账:记录每轮做了什么、改了哪些文件、验证了什么、下一步是什么。 |
| 04 | `04-task-matrix.md` | 任务矩阵:统一任务编号、状态、验收标准,防止重复做。 |
| 05 | `05-acceptance-evidence.md` | 验收证据命令、页面、job_id、report_id、PDF、截图、JSON 等证据路径。 |
| 06 | `06-decision-records.md` | 决策记录:记录为什么这么做,后续变更时不重复争论。 |
| 07 | `07-final-closure.md` | 最终收口说明:汇总完成结论、最终证据、保留边界和后续变更规则。 |
## 资料输入
主要输入资料:
```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/work/working3/gmoccapy_button_icons/files/
```
目标项目现有资料和代码:
```text
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/README.md
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/docs/
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/working_run/
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app/src/
/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/tests/
```
## 后续维护入口
当前没有待执行的 `todo``in_progress` 任务。后续如新增工作,先打开:
1. `04-task-matrix.md`,新增任务编号、状态和验收标准。
2. `02-program-development-steps.md`,按对应阶段复用或扩展代码和测试步骤。
3. `03-progress-ledger.md`,每轮结束追加台账。
4. `05-acceptance-evidence.md`补齐命令、截图、JSON、PDF 和报告编号。
5. `07-final-closure.md`,更新最终证据或保留边界。