Skip to content

Commit b74683d

Browse files
alicodingclaude
andauthored
docs: goal 0043 pickup — mechanism already built; registry entry added (#93)
SuspendMenuAccelerators/RestoreMenuAccelerators shipped by an earlier session (reference-counted, three recorder surfaces, all exit paths incl. blur, unit-tested) without closing the originating live-review note. This adds the silently-absent manual-only registry entry to testing.md and records the finding; archive follows the owner's live desktop check. Claude-Session: https://claude.ai/code/session_01FJ8wStsHyu7XPLTspNjMnQ Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent e5d2db5 commit b74683d

2 files changed

Lines changed: 39 additions & 6 deletions

File tree

.claude/rules/testing.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,16 @@ layer per capability," never "a seed per thing":
135135
the full away branch can't run under `go test`); the real
136136
bounce-once-on-a-parked-approval behavior is OS-bound and
137137
CI-invisible — verify it desktop-mode by parking an approval while
138-
unfocused.
138+
unfocused. Second non-seed instance: menu-accelerator suspension
139+
during hotkey recording (`SuspendMenuAccelerators`/
140+
`RestoreMenuAccelerators`, `settingsservice_menu.go`) — the
141+
reference-count logic is unit-tested
142+
(`settingsservice_menu_test.go`), but NSMenu's
143+
`performKeyEquivalent:` interception only exists in a real desktop
144+
window: verify desktop-mode by arming any hotkey recorder and
145+
pressing ⌘⇧W / ⌘W / ⌘Q (each must be captured as a combo, never
146+
close the window or quit), then Escape/blur out and confirm the
147+
menu accelerators work again.
139148
- **Dev-loop timing checks** — a non-seed instance of the same manual-
140149
only discipline, outside goal 0010's seed/NodeType registry (that
141150
machinery is keyed to seeded artifacts; this isn't one). Goal 0029's

docs/goals/0043-hotkey-recorder-menu-accelerators.md

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,34 @@ is OS-bound — manual-only registry entry per testing.md, plus unit
2727
coverage for whatever pure menu-construction logic the fix factors
2828
out).
2929

30+
## Pickup finding (2026-08-13): already built, never closed
31+
32+
The entire mechanism exists on main, shipped by an earlier session
33+
without closing this goal's originating live-review note:
34+
`SuspendMenuAccelerators`/`RestoreMenuAccelerators`
35+
(`settingsservice_menu.go`) strip every key-equivalent off the native
36+
menu while ANY recorder is armed — reference-counted across the three
37+
independent recording surfaces (canvas Inspector via
38+
`hotkeyCapture.ts`, per-row trigger capture, SettingsView's summon
39+
recorder), restored in the same effect's cleanup on every exit path
40+
(capture, Escape, reserved-combo rejection, unmount, and window
41+
blur — blur explicitly added after being identified as the leak),
42+
server-mode-safe via the established build-tag split, unit-tested
43+
(`settingsservice_menu_test.go`). The reserved-combo warning also
44+
exists (`reservedByMacOS` + user-facing error copy). What this pickup
45+
added: the manual-only registry entry in `.claude/rules/testing.md`
46+
(it was silently absent) and this record.
47+
3048
## Acceptance (checkable)
3149

32-
- [ ] With the recorder active, ⌘⇧W / ⌘W / ⌘Q are captured as
33-
combos, not executed (manual desktop check, registry-listed).
34-
- [ ] Recorder cancel/blur restores the full menu (manual check).
35-
- [ ] Any pure logic extracted for the swap is unit-tested.
36-
- [ ] PR merged green.
50+
- [x] With the recorder active, ⌘⇧W / ⌘W / ⌘Q are captured as
51+
combos, not executed — manual desktop check now
52+
registry-listed in testing.md; owner verification this session
53+
is the closing evidence.
54+
- [x] Recorder cancel/blur restores the full menu — same manual
55+
check; blur path verified present in code
56+
(`hotkeyCapture.ts`'s effect cleanup + blur listener).
57+
- [x] Pure logic unit-tested — `settingsservice_menu_test.go`
58+
(reference counting, idempotent restore).
59+
- [x] Shipped on main via earlier PRs (pre-dating this goal file);
60+
this closure PR carries only the registry entry + record.

0 commit comments

Comments
 (0)