# 01-项目功能内容

## 目标

在 `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan` 中补齐 gmoccapy 文件/宏页面、tool editor 页面、native GTK 未实现页面的诊断边界，让 Web 仿真能够明确表达哪些 gmoccapy 原生页面已经实现、哪些只做诊断映射、哪些因 XYZAB 配置或 Web 仿真边界暂不执行。

本轮不重复 working5 已完成的 HAL 输入、hard-button、模式门控、换刀回环和低频 HAL pin 工作；本轮聚焦页面级功能边界和可验收诊断。

## 对标范围

### gmoccapy 文件页面

- 对照 `gmoccapy.py` 和 `gmoccapy.glade` 中程序文件加载、最近文件、文件选择器、程序预览和自动运行入口。
- 对照 `[DISPLAY] PROGRAM_PREFIX`、默认 NC 文件路径、文件过滤规则和最近文件行为。
- Web 侧需要明确：
  - 当前可加载的演示/机床程序来源。
  - 文件选择、打开、关闭、最近文件、预览、运行之间的状态边界。
  - 与 Auto 模式、全轴回零、解释器 idle、运行中禁止切换文件等互锁关系。
  - 未实现的 native GTK file chooser 行为需要诊断说明，不伪装成完整桌面文件管理器。

### gmoccapy 宏页面

- 对照 gmoccapy 原生宏按钮、INI 中 macro 配置、MDI 命令发送路径和敏感状态。
- Web 侧需要明确：
  - 当前 XYZAB 配置是否存在可用宏。
  - 宏按钮如何映射到 MDI 命令或诊断行。
  - 未回零、未上电、运行中、解释器非 idle 时宏执行的门控原因。
  - 未配置宏时应显示明确边界，而不是空白或误导性成功状态。

### tool editor 页面

- 对照 gmoccapy tool editor、LinuxCNC tool table、`M6`/`M61`、刀具号、刀补、手动换刀回环的状态显示。
- Web 侧需要明确：
  - 当前 tool table 来源、读取状态、活动刀具、准备刀具、刀补显示。
  - 可编辑字段与只读诊断字段的边界。
  - Web 仿真是否允许直接写 tool table；若暂不写文件，需要显示只读/诊断原因。
  - 与 working5 中 `iocontrol-loopback` 换刀语义保持一致，不重新引入 gmoccapy 手动换刀弹窗。

### native GTK 未实现页面诊断边界

- 对照 `gmoccapy.glade` 中原生 notebooks、side buttons、bottom buttons 和 setup/user tabs/tool/touch 等页面。
- Web 侧需要明确：
  - 已实现页面、部分实现页面、诊断-only 页面和未实现页面清单。
  - hard-button pin 对未实现 native 页面按钮的行为：只能诊断、不能伪装成真实页面动作。
  - 每个未实现页面的原因、风险和未来补齐入口。
  - 浏览器 UI 中提供可测试的 `data-*` 诊断节点，便于 smoke 脚本验收。

## 当前项目入口

- Web 应用：`/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app`
- gmoccapy profile：`app/src/profiles/gmoccapy-xyzab.js`
- gmoccapy HAL model：`app/src/runtime/gmoccapy-hal-model.js`
- gmoccapy communication model：`app/src/runtime/gmoccapy-communication-model.js`
- 状态存储：`app/src/state/store.js`
- gmoccapy UI shell：`app/src/ui/gmoccapy-shell.js`
- Node 验证：`tests/node`
- 浏览器验证：`tests/browser`

## 非目标

- 不在本轮实现完整桌面 GTK 文件选择器。
- 不在本轮引入真实 LinuxCNC 外部进程、真实 HAL pin 写入或真实 tool table 持久化，除非后续任务矩阵明确升级。
- 不回退 working5 已完成的 `GMOCAPY_HAL_PIN`、`GMOCAPY_HARDWARE_BUTTON` 和 gmoccapy XYZAB profile 行为。
- 不把未实现 native 页面包装成可操作成功路径；必须明确诊断边界。
