完善 working5 gmoccapy HAL 输入对标

This commit is contained in:
2026-06-26 22:07:41 -04:00
parent 0d79b3545b
commit 917cec15ad
20 changed files with 2853 additions and 27 deletions

View File

@@ -5103,3 +5103,582 @@ Final push and verification:
Outcome:
- Backup-directory file `备忘/备忘3.txt` is now committed and pushed to cloud repository.
- This final verification log entry was created after the push and requires one final log-only sync commit.
---
## 2026-06-26 18:33 EDT - working5 gmoccapy XYZAB tool-change HAL semantics
User request:
- Start work according to `/home/meswork/cnc_wams/work/working5`.
Initial context and status:
- Read `work/working5/README.md`, `01-项目功能内容.md`, `02-项目程序开发详细步骤.md`, `03-推进台账.md`, `04-任务矩阵.md`, `05-验收证据.md`, and `06-决策记录.md`.
- Read `work/working3/gmoccapy_XYZAB_execution_analysis.md`.
- Checked repository state:
- existing unrelated deletion remained present: `D linuxcnc.zip`.
- this deletion was not reverted, staged, or otherwise modified.
Baseline/source inspection:
- Inspected Web project files:
- `app/src/state/linuxcnc-task-policy.js`
- `app/src/state/store.js`
- `app/src/runtime/gmoccapy-hal-model.js`
- `app/src/runtime/gmoccapy-communication-model.js`
- `app/src/profiles/gmoccapy-xyzab.js`
- `app/src/ui/gmoccapy-shell.js`
- related Node and browser smoke tests.
- Inspected native LinuxCNC reference files:
- `linuxcnc/configs/sim/gmoccapy/gmoccapy_XYZAB.ini`
- `linuxcnc/configs/sim/gmoccapy/core_sim_XYZAB.hal`
- `linuxcnc/configs/sim/gmoccapy/gmoccapy_postgui.hal`
- Key finding:
- `gmoccapy_postgui.hal` executes `unlinkp iocontrol.0.tool-change`, `unlinkp iocontrol.0.tool-changed`, and `unlinkp iocontrol.0.tool-prep-number`.
- the manual gmoccapy tool-change GUI nets for `gmoccapy.toolchange-change`, `gmoccapy.toolchange-changed`, and `gmoccapy.toolchange-number` are commented out.
- the active simulated tool-change completion path is `net tool-change-loop iocontrol.0.tool-change => iocontrol.0.tool-changed`.
Implementation changes:
- Updated `web-rtcp-5axis-sim-plan/app/src/runtime/gmoccapy-hal-model.js`:
- added structured `toolChange` metadata.
- recorded strategy `iocontrol-loopback`.
- recorded `manualGmoccapyPinsConnected: false`.
- recorded M6/M61 remap references.
- recorded the three POSTGUI `unlinkp` pins.
- recorded commented manual GUI nets and the active postgui loopback.
- exposed tool-change summary fields through `createGmoccapyHalSummary()`.
- Updated `web-rtcp-5axis-sim-plan/app/src/profiles/gmoccapy-xyzab.js`:
- added matching `hal.halcmd.toolChange` metadata to the profile.
- Updated `web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js`:
- added a `Tool change` diagnostic row under gmoccapy HAL diagnostics.
- displays strategy, manual GUI pin connection state, POSTGUI unlink count, and commented manual net count.
- Updated tests:
- `tests/node/verify_gmoccapy_hal_model.mjs`
- `tests/node/verify_gmoccapy_xyzab_profile.mjs`
- `tests/node/verify_profile_boundary.mjs`
- `tests/browser/gmoccapy_shell_smoke.html`
- Updated working5 records:
- `work/working5/03-推进台账.md`
- `work/working5/04-任务矩阵.md`
- `work/working5/05-验收证据.md`
- `work/working5/06-决策记录.md`
Validation commands and results:
- Targeted Node tests:
- command:
- `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`
- result:
- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_xyzab_profile_smoke=ok`
- `profile_boundary_smoke=ok`
- Full Node smoke:
- command:
- `npm run smoke:node`
- result:
- passed.
- included `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`, and `linear_unit_conversion_smoke=ok`.
- Build and browser smoke:
- command:
- `npm run build && npm run smoke`
- result:
- `gmoccapy_static_build=ok`
- `gmoccapy_shell_smoke=ok`
- `gmoccapy_dist_smoke=ok`
- Diff check:
- command:
- `git diff --check -- web-rtcp-5axis-sim-plan work/working5`
- result:
- passed with no output.
Working tree after implementation:
- Modified intended files:
- `web-rtcp-5axis-sim-plan/app/src/profiles/gmoccapy-xyzab.js`
- `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/browser/gmoccapy_shell_smoke.html`
- `web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_hal_model.mjs`
- `web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_profile.mjs`
- `web-rtcp-5axis-sim-plan/tests/node/verify_profile_boundary.mjs`
- `work/working5/03-推进台账.md`
- `work/working5/04-任务矩阵.md`
- `work/working5/05-验收证据.md`
- `work/working5/06-决策记录.md`
- `web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md`
- Existing unrelated item left untouched:
- `D linuxcnc.zip`
Decision recorded:
- `DR-W5-003`: XYZAB tool change is modeled as POSTGUI `iocontrol` loopback, not as a manual gmoccapy tool-change dialog, because the native `gmoccapy_postgui.hal` disconnects the manual GUI pins and leaves those nets commented.
Outcome:
- W5-160 added and marked complete.
- gmoccapy XYZAB profile, HAL model, UI diagnostics, Node tests, browser tests, and working5 records now explicitly capture the LinuxCNC XYZAB tool-change behavior.
- No commit or push was requested or performed.
## 2026-06-26 20:15 EDT - ToDesk Ubuntu crash dialog handling
User request:
- The desktop showed an Ubuntu crash report dialog saying "The application ToDesk has closed unexpectedly"; resolve it.
Process log:
- Checked running ToDesk processes with `ps -ef | rg -i 'todesk|ToDesk'`.
- Found `/opt/todesk/bin/ToDesk_Service` running as root.
- The ToDesk foreground GUI process was not running initially.
- Checked systemd services.
- `todeskd.service` was loaded, enabled, and active/running.
- No `todesk.service` user or system unit existed.
- Checked installed package and files.
- `todesk 4.8.6.2` was installed.
- Binaries existed under `/opt/todesk/bin`.
- Checked crash files under `/var/crash`.
- Found `/var/crash/_opt_todesk_bin_ToDesk.1000.crash`.
- Other unrelated old crash reports for WeChat and LibreOffice were present and left untouched.
- Read the ToDesk crash report.
- Crash time: Fri Jun 26 20:06:38 2026.
- Executable: `/opt/todesk/bin/ToDesk`.
- Session tag included `wayland-session`.
- Signal: `SIGSEGV`.
- Crash title: `ToDesk crashed with SIGSEGV in html::element::determine_style()`.
- Stack top showed ToDesk internal UI/rendering functions:
- `html::element::determine_style(...)`
- `html::element::get_style() const`
- `html::element::attr_role() const`
- `html::behavior::window_frame_ctl::on(...)`
- Checked desktop/session state.
- Active session type was `wayland`.
- `DISPLAY=:0`, `WAYLAND_DISPLAY=wayland-0`, and user DBus was available.
- Checked ToDesk autostart entry.
- `/home/meswork/.config/autostart/todesk.desktop` launches ToDesk with:
- `LIBVA_DRIVER_NAME=iHD`
- `LIBVA_DRIVERS_PATH=/opt/todesk/bin`
- `GDK_BACKEND=x11`
- Confirmed Ubuntu crash dialog process.
- `apport-gtk` and `update-notifier-crash` were running.
- Attempted a combined cleanup/start command.
- The `pkill -f '/usr/share/apport/apport-gtk'` pattern also matched the active shell command, so that combined command exited early with code 143 before moving the crash file or relaunching ToDesk.
- Rechecked state afterward to avoid assuming success.
- Closed the Ubuntu crash dialog process.
- After the earlier `pkill`, `apport-gtk` was no longer running.
- Moved the ToDesk crash report out of `/var/crash`.
- Created `/home/meswork/.local/share/todesk/crash-backup`.
- Moved `_opt_todesk_bin_ToDesk.1000.crash` there with a timestamped filename.
- This prevents the same Ubuntu crash report dialog from reappearing for that crash.
- Relaunched ToDesk foreground GUI without restarting the daemon:
- `setsid env LIBVA_DRIVER_NAME=iHD LIBVA_DRIVERS_PATH=/opt/todesk/bin GDK_BACKEND=x11 DISPLAY=:0 XDG_RUNTIME_DIR=/run/user/1000 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /opt/todesk/bin/ToDesk > /tmp/todesk-launch.log 2>&1 < /dev/null &`
- Observed relaunch.
- `/opt/todesk/bin/ToDesk` appeared as user `meswork`.
- `/opt/todesk/bin/ToDesk_Service` remained running as root.
- `/var/crash` no longer contained a ToDesk crash file.
- Launch log showed ToDesk extracting icon/image resources and then only `mkdir: cannot create directory '/tmp/fuse': File exists`; no fatal error appeared.
- Waited and rechecked stability.
- After about 20 seconds, both `ToDesk` and `ToDesk_Service` were still running.
- `todeskd.service` remained `active/running` with `NRestarts=0`.
- No new ToDesk crash file appeared in `/var/crash`.
- `apport-gtk` and `update-notifier-crash` were no longer running.
Outcome:
- The Ubuntu crash report dialog was closed.
- The stale ToDesk crash report was moved out of `/var/crash`.
- ToDesk foreground GUI was relaunched successfully.
- ToDesk daemon was not restarted, reducing risk of disrupting the active remote session.
- Final observed state:
- `root ... /opt/todesk/bin/ToDesk_Service`
- `meswork ... /opt/todesk/bin/ToDesk`
- `/var/crash` contained no ToDesk crash report.
## 2026-06-26 20:17 EDT - 将 GPT/Codex 过程日志语言规则写入 AGENTS.md
用户请求:
- `web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md` 这个文件使用中文记录。
- 将该要求写入 `AGENTS.md`
执行过程:
- 读取 `/home/meswork/cnc_wams/AGENTS.md`,确认当前已有工作区范围和日志路径规则:
- 每次 GPT/Codex 执行完成后,将完整执行过程日志追加到 `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md`
- 检查目标日志文件和 `AGENTS.md` 文件存在:
- `/home/meswork/cnc_wams/AGENTS.md`
- `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md`
- 修改 `/home/meswork/cnc_wams/AGENTS.md`,在日志规则下追加:
- `The log content written to this file must be recorded in Chinese.`
- 按新的日志语言要求,将本次执行过程用中文追加到 `gpdlog.md`
结果:
- 已将 `gpdlog.md` 使用中文记录的要求写入 `AGENTS.md`
- 从本次记录开始,日志内容按中文记录。
---
## 2026-06-26 R4 - working5 continuation: gmoccapy HAL hard-button pin mapping
User request:
- Continue from `/home/meswork/cnc_wams/work/working5`.
Context gathered:
- Read `work/working5/README.md`, `01-项目功能内容.md`, `02-项目程序开发详细步骤.md`, `03-推进台账.md`, `04-任务矩阵.md`, `05-验收证据.md`, and `06-决策记录.md`.
- Confirmed previous completed work through R3: mode gate fixes and XYZAB POSTGUI tool-change loopback semantics.
- Inspected LinuxCNC native references:
- `linuxcnc/src/emc/usr_intf/gmoccapy/gmoccapy.py` `_make_hal_pins()`, `_button_pin_changed()`, `_get_child_button()`.
- `linuxcnc/share/gmoccapy/gmoccapy.glade` `vbtb_main` order.
- `linuxcnc/configs/sim/gmoccapy/h_buttonlist.hal`, `v_buttonlist.hal`, and related glade button list examples.
- Inspected Web implementation and tests:
- `app/src/profiles/gmoccapy-xyzab.js`
- `app/src/runtime/gmoccapy-hal-model.js`
- `app/src/runtime/gmoccapy-communication-model.js`
- `app/src/state/store.js`
- `app/src/ui/gmoccapy-shell.js`
- `tests/node/verify_gmoccapy_hal_model.mjs`
- `tests/node/verify_gmoccapy_communication_model.mjs`
- `tests/node/verify_gmoccapy_xyzab_profile.mjs`
- `tests/node/verify_gmoccapy_xyzab_gates.mjs`
- `tests/browser/gmoccapy_shell_smoke.html`
Findings:
- Native gmoccapy hard-button pins are created as `gmoccapy.h-button.button-0..9` and `gmoccapy.v-button.button-0..6`.
- `_button_pin_changed()` ignores falling edges and only handles `pin.get() == True`.
- `_get_child_button()` maps button numbers to current visible non-label GTK children, and ignores insensitive targets.
- Native `vbtb_main` order is `tbtn_estop`, `tbtn_on`, `rbt_manual`, `rbt_mdi`, `rbt_auto`, `tbtn_user_tabs`, `tbtn_setup`.
- Existing Web profile panel schema incorrectly listed Estop/Power as h-button pins and shifted Manual/MDI/Auto v-button indexes.
Implementation changes:
- Updated `web-rtcp-5axis-sim-plan/app/src/profiles/gmoccapy-xyzab.js`:
- corrected task/mode panel schema pin order to `gmoccapy.v-button.button-0..4` for Estop, Power, Manual, MDI, Auto.
- Updated `web-rtcp-5axis-sim-plan/app/src/runtime/gmoccapy-hal-model.js`:
- added structured `hardwareButtons` metadata.
- recorded native source methods `_button_pin_changed`, `_get_child_button`, `_make_hal_pins`.
- recorded rising-edge-only behavior, current visible child mapping, hidden-label skip behavior, and insensitive-target ignored behavior.
- mapped right-side v-button pins and selected bottom h-button references.
- added `resolveGmoccapyHardwareButton()`.
- extended `createGmoccapyHalSummary()` with hard-button counts and behavior fields.
- Updated `web-rtcp-5axis-sim-plan/app/src/runtime/gmoccapy-communication-model.js`:
- added hardware-button HAL path through `_button_pin_changed`.
- added `hardware-button` action mapping.
- added summary flag `hasNativeHardwareButtonPath`.
- Updated `web-rtcp-5axis-sim-plan/app/src/state/store.js`:
- added `GMOCAPY_HARDWARE_BUTTON` action.
- falling edges are ignored.
- mapped pins dispatch existing Web actions and reuse existing task policy gates.
- unmapped and diagnostic-only pins produce explicit operator messages.
- Updated `web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js`:
- added `data-gmoccapy-hal-pin`, `data-gmoccapy-native-panel`, and `data-gmoccapy-native-button-index` to mapped Web buttons.
- added `Hard buttons` gmoccapy HAL diagnostic row.
- Updated tests:
- `tests/node/verify_gmoccapy_hal_model.mjs` validates hard-button model and resolver.
- `tests/node/verify_gmoccapy_communication_model.mjs` validates hardware-button native path/action/summary.
- `tests/node/verify_gmoccapy_xyzab_profile.mjs` validates corrected profile panel pin order.
- `tests/node/verify_gmoccapy_xyzab_gates.mjs` validates `GMOCAPY_HARDWARE_BUTTON` falling edge, rising edge, gate, diagnostic-only, and unmapped behavior.
- `tests/browser/gmoccapy_shell_smoke.html` validates DOM pin attributes and hard-button diagnostic text.
- Updated working5 records:
- `work/working5/03-推进台账.md`
- `work/working5/04-任务矩阵.md`
- `work/working5/05-验收证据.md`
- `work/working5/06-决策记录.md`
Validation commands and results:
- Targeted Node tests:
- command:
- `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`
- result:
- `gmoccapy_hal_model_smoke=ok`
- `gmoccapy_communication_model_smoke=ok`
- `gmoccapy_xyzab_profile_smoke=ok`
- `gmoccapy_xyzab_gates_smoke=ok`
- Full Node smoke:
- command:
- `npm run smoke:node`
- result:
- passed.
- included `gmoccapy_xyzab_profile_smoke=ok`, `gmoccapy_communication_model_smoke=ok`, `gmoccapy_hal_model_smoke=ok`, `gmoccapy_xyzab_gates_smoke=ok`, and `linear_unit_conversion_smoke=ok`.
- Build and browser smoke:
- command:
- `npm run build && npm run smoke`
- result:
- `gmoccapy_static_build=ok`
- `gmoccapy_shell_smoke=ok`
- `gmoccapy_dist_smoke=ok`
- Diff check:
- command:
- `git diff --check -- web-rtcp-5axis-sim-plan work/working5`
- result:
- passed with no output.
Working tree notes:
- Modified intended R4 files:
- `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/app/src/state/store.js`
- `web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_communication_model.mjs`
- `web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_hal_model.mjs`
- `web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_gates.mjs`
- `web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_profile.mjs`
- `web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html`
- `work/working5/03-推进台账.md`
- `work/working5/04-任务矩阵.md`
- `work/working5/05-验收证据.md`
- `work/working5/06-决策记录.md`
- `web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md`
- Also present from earlier R3 or pre-existing work:
- `web-rtcp-5axis-sim-plan/app/src/profiles/gmoccapy-xyzab.js` includes both R3 tool-change metadata and R4 corrected v-button pin order.
- `web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js` includes both R3 tool-change diagnostics and R4 hard-button DOM/diagnostics.
- `web-rtcp-5axis-sim-plan/tests/node/verify_profile_boundary.mjs` contains R3 tool-change boundary assertions.
- `D linuxcnc.zip` remains an unrelated pre-existing deletion and was not touched.
Decision recorded:
- `DR-W5-004`: external HAL hard-button pins are represented through explicit pin-to-action mappings and `GMOCAPY_HARDWARE_BUTTON`, not by relying on Web DOM order. Native-only buttons not implemented in Web are diagnostic-only.
Outcome:
- W5-170 added and marked complete.
- gmoccapy XYZAB external HAL hard-button pin behavior is now modeled, testable, visible in UI diagnostics, and covered by Node/build/browser smoke.
- No commit or push was requested or performed.
## 2026-06-26 20:26 EDT - 取消旧日志中文转换
用户请求:
- 先要求将 `web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md` 以前的英文记录也转成中文。
- 随后用户明确说明“不用转了”。
执行过程:
- 检查了 `gpdlog.md` 的规模和内容结构,确认文件约 5431 行,包含大量英文过程记录、命令、路径、测试输出和已存在的中文记录。
- 原计划是保护命令、路径、代码块、URL 和测试输出,只转换叙述性日志文本。
- 曾尝试安装本地离线翻译工具 `argostranslate`,第一次因下载超时失败;第二次安装进程因用户中断仍在后台运行。
- 收到“不用转了”后,停止继续转换旧日志。
- 检查后台进程,发现 `python3 -m pip install --user --timeout 120 --retries 5 --quiet argostranslate` 仍在运行。
- 终止该后台安装进程,并确认没有剩余 `pip install` / `argostranslate` 相关进程。
结果:
- 未转换旧的 `gpdlog.md` 内容。
- 未批量修改历史日志正文。
- 已停止残留的离线翻译工具安装进程。
- 仅按当前 `AGENTS.md` 规则,用中文追加本次取消转换的执行过程记录。
## 2026-06-27 - working5 R5gmoccapy HAL 输入 pin 与倍率 pin 语义补齐
用户请求:
- 用户要求按 `/home/meswork/cnc_wams/work/working5` 开始工作。
执行过程:
- 读取 `/home/meswork/cnc_wams/AGENTS.md`,确认每轮执行结束后需要将完整过程日志用中文追加到 `/home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md`
- 读取 `work/working5/README.md``01-项目功能内容.md``02-项目程序开发详细步骤.md``03-推进台账.md``04-任务矩阵.md``05-验收证据.md``06-决策记录.md`
- 确认 working5 已完成 R1 到 R4下一步明确指向 `gmoccapy.ignore-limits``gmoccapy.optional-stop``gmoccapy.blockdelete`、override analog/count/reset pins 与 Web 状态的交叉行为。
- 检查工作树状态,发现已有未提交改动和无关的 `linuxcnc.zip` 删除;按规则没有回退任何既有改动。
- 使用 `rg` 搜索 Web 项目和 LinuxCNC 源码中与 `optional``blockdelete``ignore-limits``override``feed``rapid``spindle` 相关的实现。
- 读取 `app/src/state/store.js``app/src/profiles/gmoccapy-xyzab.js``app/src/runtime/gmoccapy-hal-model.js``app/src/runtime/gmoccapy-communication-model.js``app/src/ui/gmoccapy-shell.js`、相关 Node/browser 测试。
- 对照 `/home/meswork/cnc_wams/linuxcnc/src/emc/usr_intf/gmoccapy/gmoccapy.py`,确认:
- `_ignore_limits()``gmoccapy.ignore-limits` 驱动 `chk_ignore_limits`active 时通过 `on_chk_ignore_limits_toggled()` 调用 `command.override_limits()`
- `gmoccapy.optional-stop` 连接 `_optional_blocks()`,实际驱动 `tbtn_optional_blocks`,再调用 `command.set_block_delete()`
- `gmoccapy.blockdelete` 连接 `_blockdelete()`,实际调用 `command.set_optional_stop()`
- `_on_counts_changed()` 只有对应 `*.count-enable` 为 true 时才调整 feed/rapid/spindle/jog velocity 滑块,否则只同步 counts 基线。
- `_on_analog_value_changed()` 只有对应 `*.analog-enable` 为 true 时才接受 `*.direct-value`
- `_reset_override()` 只在 pin 为 true 时复位 feed/rapid/spindle override。
- 对照 `/home/meswork/cnc_wams/linuxcnc/configs/sim/gmoccapy/gmoccapy_XYZAB.pref`,确认本配置默认 scale`scale_feed_override = 1``scale_rapid_override = 1``scale_spindle_override = 1``scale_jog_vel = 140.4`
实现修改:
- 修改 `app/src/state/store.js`
- 引入 `gmoccapyHalModel`
- 新增 `gmoccapyGui` 状态,记录 `ignoreLimits``optionalBlocks``optionalStop`、override counts/enable/analog-enable、`jogVelocity` 和最后一次 HAL pin 效果。
- 新增 `GMOCAPY_HAL_PIN` action。
- 新增 HAL pin 解析、已知 pin 校验、operator input patch、override counts/direct-value/reset patch、100% reset 等 helper。
- 实现 `ignore-limits``optional-stop -> block delete``blockdelete -> optional stop`、override count-enable、analog-enable、direct-value、reset rising-edge 语义。
- 新增 `RESET_OVERRIDE``SET_BLOCK_DELETE``SET_OPTIONAL_STOP``SET_IGNORE_LIMITS` 等 Web action。
- 修改 `app/src/profiles/gmoccapy-xyzab.js`
-`halPins` 中补充 feed/rapid/spindle/jog override counts、count-enable、analog-enable、direct-value、reset pins。
- 补充 `gmoccapy.ignore-limits``gmoccapy.optional-stop``gmoccapy.blockdelete`
- 修改 `app/src/runtime/gmoccapy-hal-model.js`
- 扩展 `override` pin 组。
- 新增 `operator-inputs` pin 组。
- 新增 `halPinActions`,记录 `_ignore_limits``_optional_blocks``_blockdelete``_on_counts_changed``_on_analog_value_changed``_reset_override` 等源码方法与 Web 映射。
- 在 summary 中新增 operator input 数量、override target 数量、optional/blockdelete 交叉标志、count/direct/reset enable 规则。
- 修改 `app/src/runtime/gmoccapy-communication-model.js`
- 新增 `nativePaths.halPins`
- 新增 `hal-pin-input` action mapping说明 `GMOCAPY_HAL_PIN` 与 gmoccapy HAL callback 的关系。
- summary 新增 `hasNativeHalPinInputPath`
- 修改 `app/src/ui/gmoccapy-shell.js`
- 在 info diagnostics 中新增 `data-gmoccapy-hal="operator-inputs"``data-gmoccapy-hal="override-inputs"` 行。
- 在 override 面板新增 ignore limits、block delete、optional stop 和最后一次 HAL input 状态显示。
- 为 feed/rapid/spindle override 增加 100% reset 控件。
- 新增 HAL input/override 格式化函数。
- 修改 `app/src/styles/gmoccapy.css`
- 将 override 面板调整为 4 行。
-`.stepper` 扩展为 4 列以容纳 100% reset 按钮。
- 新增 `.toggle-row``.status-chip` 样式,避免新增文本挤压或溢出。
- 修改 Node 测试:
- `verify_gmoccapy_xyzab_gates.mjs` 覆盖 `GMOCAPY_HAL_PIN` 的 ignore-limits、optional-stop/blockdelete 交叉、counts/direct-value enable、reset rising-edge、jog velocity scale、unknown pin。
- `verify_gmoccapy_hal_model.mjs` 覆盖 operator input 组、override pin 组和 summary 字段。
- `verify_gmoccapy_communication_model.mjs` 覆盖 `halPins` path 和 `hal-pin-input` action mapping。
- `verify_gmoccapy_xyzab_profile.mjs` 覆盖新增 profile halPins。
- 修改浏览器测试 `tests/browser/gmoccapy_shell_smoke.html`
- 覆盖 operator input/override diagnostic 文本。
- 覆盖 feed/spindle 100% reset 按钮。
- 覆盖 ignore limits、block delete、optional stop Web 控件状态。
- 通过 `window.webRtcp5AxisSimulation.dispatch({ type: "GMOCAPY_HAL_PIN", ... })` 覆盖 optional/blockdelete 交叉 pin。
- 更新 working5 文档:
- `03-推进台账.md` 追加 R5。
- `04-任务矩阵.md` 新增并完成 W5-180。
- `05-验收证据.md` 新增 EV-W5-180、EV-W5-181 和 R5 命令/断言摘要。
- `06-决策记录.md` 新增 DR-W5-005。
验证命令与结果:
- 最小 Node 与浏览器回归:
- 命令:
- `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`
- 完整 Node smoke
- 命令:
- `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`
- 构建与浏览器 smoke
- 命令:
- `npm run build && npm run smoke`
- 结果:
- `gmoccapy_static_build=ok`
- `gmoccapy_shell_smoke=ok`
- `gmoccapy_dist_smoke=ok`
- 空白检查:
- 命令:
- `git diff --check -- web-rtcp-5axis-sim-plan work/working5`
- 结果:
- 通过,无输出。
工作树备注:
- 本轮直接修改的实现和测试文件:
- `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/app/src/state/store.js`
- `web-rtcp-5axis-sim-plan/app/src/styles/gmoccapy.css`
- `web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js`
- `web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html`
- `web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_communication_model.mjs`
- `web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_hal_model.mjs`
- `web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_gates.mjs`
- `web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_profile.mjs`
- 本轮更新的工作记录文件:
- `work/working5/03-推进台账.md`
- `work/working5/04-任务矩阵.md`
- `work/working5/05-验收证据.md`
- `work/working5/06-决策记录.md`
- `web-rtcp-5axis-sim-plan/gptlog-process/gpdlog.md`
- 工作树中仍有先前存在或其他轮次留下的改动,例如 `AGENTS.md``linuxcnc.zip` 删除、`verify_profile_boundary.mjs` 等;本轮没有回退这些改动。
结果:
- W5-180 已完成。
- Web 项目现在能按 gmoccapy 源码语义模拟 `ignore-limits``optional-stop``blockdelete` 和 override counts/direct-value/reset HAL input pins。
- 新增行为已在 profile、HAL model、communication model、store、UI 和 Node/browser 测试中形成可追踪证据。
- 没有执行 commit 或 push。
## 2026-06-27 R6 过程日志:继续完成 working5 jog 与消息 HAL pin 对标
用户请求:
- 接续上一轮,继续完成 `/home/meswork/cnc_wams/work/working5` 的工作。
现场恢复:
- 查看 `work/working5` 的 README、推进台账、任务矩阵、验收证据和决策记录。
- 确认 R5 已完成 `ignore-limits``optional-stop``blockdelete` 与 override HAL input pin 语义。
- 确认下一步为 `gmoccapy.jog.axis.*``gmoccapy.jog.jog-inc-*``gmoccapy.delete-message``gmoccapy.warning-confirm` 等剩余 HAL pin 与 Web 状态/消息系统的映射。
- 查看工作树,注意到已有未提交改动包括 `AGENTS.md``linuxcnc.zip` 删除、`web-rtcp-5axis-sim-plan` 多个源码/测试文件和 `working5` 文档;本轮未回退这些已有改动。
源码对标:
- 读取 `linuxcnc/src/emc/usr_intf/gmoccapy/gmoccapy.py``_make_hal_pins()``_on_pin_jog_changed()``_on_pin_incr_changed()``_on_pin_turtle_jog()``_del_message_changed()` 等实现。
- 读取 `linuxcnc/src/emc/usr_intf/gmoccapy/dialogs.py``warning_dialog()`,确认其每 100ms 轮询 `warning-confirm` confirm pin。
- 读取 `linuxcnc/configs/sim/gmoccapy/gmoccapy_XYZAB.ini`,确认 `[DISPLAY] INCREMENTS = 1.000 mm, 0.100 mm, 0.010 mm, 0.001 mm ,1.2345 in`
- 确认 gmoccapy 会在 INI 增量前插入 continuous `rbt_0`,因此 XYZAB 的 jog increment HAL input 应覆盖 `jog-inc-0..5`,其中 `jog-inc-0` 为连续点动、距离 0`jog-inc-5``1.2345 in` 在 mm 机床下为 31.3563 mm。
- 确认 jog axis pin 与 hard-button pin 不同hard-button 是 rising-edge-onlyjog axis pin 是 true press、false release 的 level 行为。
实现修改:
- 修改 `app/src/profiles/gmoccapy-xyzab.js`
- 新增 `gmoccapyXyzabJogAxisPins``gmoccapyXyzabJogIncrementPins`
- profile `halPins` 补齐 10 个 XYZAB axis jog pins、6 个 jog increment pins、`gmoccapy.jog.jog-increment``gmoccapy.jog.turtle-jog``gmoccapy.delete-message``gmoccapy.warning-confirm`
- 修改 `app/src/runtime/gmoccapy-hal-model.js`
- jog pin group 增加 `jog-inc-1..5``jog.turtle-jog`
- `halPinActions.source.methods` 增加 `_on_pin_jog_changed``_on_pin_incr_changed``_del_message_changed`
- 新增 `jogPins` 结构,记录 5 个轴、10 个 axis jog pins、6 个增量 pin、output pin、turtle pin 和 native callback 语义。
- 新增 `messagePins` 结构,记录 `delete-message``warning-confirm``error` 的 native callback 和 Web 状态。
- summary 增加 `jogAxisPinCount``jogIncrementPinCount``messageInputPinCount``jogAxisPinsPressRelease``jogIncrementPinsRisingEdgeOnly``jogIncrementZeroIsContinuous``turtleJogLevelDriven``deleteMessageRisingEdgeOnly``warningConfirmLevelPolled`
- 修改 `app/src/runtime/gmoccapy-communication-model.js`
- HAL input path 说明扩展到 jog、jog increment、message pins。
- `hal-pin-input` action mapping 加入 `_del_message_changed` 和 delete-message rising-edge 规则。
- 新增 `hal-jog-pin` action mapping对应 `_on_pin_jog_changed/_on_pin_incr_changed`
- 新增 `hal-warning-confirm` action mapping对应 `dialogs.warning_dialog` confirm pin polling。
- 修改 `app/src/state/store.js`
- `gmoccapyGui` 新增 `jogIncrementIndex``jogIncrementLabel``jogIncrementOutput``turtleJog``activeJogPin``warningConfirm``error``deletedMessageCount`
- 扩展 `GMOCAPY_HAL_PIN` 分发,处理 jog axis press/release、jog increment rising-edge、turtle jog level、delete-message true/falling edge、warning-confirm level。
- 新增解析函数 `resolveGmoccapyJogAxisPin()``resolveGmoccapyJogIncrementPin()`
- 新增 `applyGmoccapyJogAxisHalPatch()``applyGmoccapyJogIncrementHalPatch()`
- jog axis HAL pin 使用 `gmoccapyGui.jogIncrementOutput` 作为 gmoccapy 的当前增量输出,避免把 Web 普通按钮默认 1mm 点动误用于 HAL continuous 默认状态。
- 修改 `app/src/ui/gmoccapy-shell.js`
- info diagnostics 新增 `data-gmoccapy-hal="jog-inputs"``data-gmoccapy-hal="message-inputs"`
- 新增 `formatGmoccapyJogInputs()``formatGmoccapyMessageInputs()`,显示 axis jog pin 数量、jog-inc 数量、press/release level、rising-edge-only、continuous、turtle、delete-message、warning-confirm 等语义。
测试修改:
- 修改 `tests/node/verify_gmoccapy_hal_model.mjs`
- 覆盖 jog pin group、jogPins 结构、messagePins 结构和 summary 新字段。
- 修改 `tests/node/verify_gmoccapy_xyzab_profile.mjs`
- 覆盖新增 profile halPinsaxis jog、jog-inc、jog-increment、turtle-jog、delete-message、warning-confirm。
- 修改 `tests/node/verify_gmoccapy_communication_model.mjs`
- 覆盖新增 `hal-jog-pin``hal-warning-confirm` action mappings。
- summary action count 更新为 19。
- 修改 `tests/node/verify_gmoccapy_xyzab_gates.mjs`
- 覆盖 HAL jog 未上电 gate、continuous jog press/release、`jog-inc-2` falling edge 忽略和 rising edge 选择、`jog-inc-5` 英寸换算、turtle jog level。
- 覆盖 `delete-message` falling edge 忽略、true 删除 alert/消息、`warning-confirm` true/false 状态。
- 修改 `tests/browser/gmoccapy_shell_smoke.html`
- 覆盖 `data-gmoccapy-hal="jog-inputs"``data-gmoccapy-hal="message-inputs"` 文本。
- 通过公开 `window.webRtcp5AxisSimulation.dispatch({ type: "GMOCAPY_HAL_PIN", ... })` 验证浏览器内 jog-inc、axis jog press/release、turtle jog、delete-message、warning-confirm。
- 在相关测试段显式 RESET 后重新 POWER 并切回 Manual避免依赖前序状态。
工作文档更新:
- 修改 `work/working5/04-任务矩阵.md`:新增并完成 W5-190。
- 修改 `work/working5/03-推进台账.md`:追加 2026-06-27 R6 记录。
- 修改 `work/working5/05-验收证据.md`:新增 EV-W5-190、EV-W5-191 和 R6 命令/断言摘要。
- 修改 `work/working5/06-决策记录.md`:新增 DR-W5-006记录 jog/message HAL pin 按 gmoccapy 回调边界建模的原因和影响。
验证命令与结果:
- 最小模型/通信测试:
- 命令:`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`
- profile/store 行为测试:
- 命令:`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`
- 浏览器 shell smoke
- 命令:`cd /home/meswork/cnc_wams/web-rtcp-5axis-sim-plan/app && bash ../tests/browser/verify_gmoccapy_shell_browser.sh`
- 结果:通过,输出 `gmoccapy_shell_smoke=ok`
- 完整 Node smoke
- 命令:`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`
- 构建和浏览器/dist smoke
- 命令:`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`
- 空白检查:
- 命令:`git diff --check -- web-rtcp-5axis-sim-plan work/working5`
- 结果:通过,无输出。
工作树备注:
- 本轮直接修改的实现/测试文件:
- `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/app/src/state/store.js`
- `web-rtcp-5axis-sim-plan/app/src/ui/gmoccapy-shell.js`
- `web-rtcp-5axis-sim-plan/tests/browser/gmoccapy_shell_smoke.html`
- `web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_communication_model.mjs`
- `web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_hal_model.mjs`
- `web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_gates.mjs`
- `web-rtcp-5axis-sim-plan/tests/node/verify_gmoccapy_xyzab_profile.mjs`
- 本轮更新的 working5 文档:
- `work/working5/03-推进台账.md`
- `work/working5/04-任务矩阵.md`
- `work/working5/05-验收证据.md`
- `work/working5/06-决策记录.md`
- 工作树中仍有此前存在或其他轮次留下的改动,例如 `AGENTS.md``linuxcnc.zip` 删除、`web-rtcp-5axis-sim-plan/app/src/styles/gmoccapy.css``verify_profile_boundary.mjs``备忘/备忘3.txt` 等;本轮没有回退这些改动。
结果:
- W5-190 已完成。
- Web 项目现在能按 gmoccapy 源码语义模拟 jog axis、jog increment、turtle jog、delete-message 和 warning-confirm HAL input pins。
- 新增行为已在 profile、HAL model、communication model、store、UI 和 Node/browser 测试中形成可追踪证据。
- 没有执行 commit 或 push。