Repository navigation
Conversation
A Caps Lock selection saved before all-keyboards mode kept that Mac in one-keyboard mode. Selections expire at every restart, and automatic selection refuses when more than one keyboard-class device is attached (a mouse with a keyboard interface is enough), so Caps Lock rules were paused after every reboot. The Status tab then said "Caps Lock Needs Attention", and its Fix it button opened the setup wizard, which cannot fix this. - One-keyboard scope is now opt-in only (selectedKeyboardOnlyKey). A leftover selection no longer implies it. KeyPath has no installed base to migrate. - Fix it, and the status icon, open Settings > General when paused Caps Lock rules are the only problem. - The Caps Lock settings no longer hide behind a "Caps Lock options" disclosure group. The on/off switch sits on the row, keyboards get a checkbox each when there are several, and the one-keyboard picker appears inline when chosen. - The user guide and the all-keyboards architecture doc describe the new default and layout. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Review: PR 1366 No blocking issues. Notes:
Otherwise the toggle is now visible and labelled, and the accessibility identifiers are preserved. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: bb1de527f1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| .accessibilityIdentifier("settings-caps-cancel-keyboard-choice") | ||
| } | ||
| } | ||
| } else if keyboards.count > 1 { |
There was a problem hiding this comment.
Keep the remaining keyboard's exclusion control accessible
If a user unchecks one keyboard while two are connected and then disconnects the other, this condition hides the remaining keyboard's checkbox even though its exclusion is still persisted. SessionRuntimeWorker continues filtering that device out using excludedKeyboardIDs(), and toggling the main Caps Lock switch does not clear those exclusions. Consequently, Caps Lock rules remain off on the only connected keyboard, with no way to re-enable it in Settings without connecting another keyboard. Show the scope controls when a connected keyboard is excluded, even if only one remains.
Useful? React with 👍 / 👎.
The parent retired a worker still in `starting` after 40 polls of 100 ms. In all-keyboards mode startup includes a read, write and readback hidutil run per keyboard interface. With three keyboard-class devices attached that took about 5.1 s, so every start was killed mid-write and KeyPath never came up. The wait is now a 20 s deadline. Failure or exit still ends it immediately. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review: a few actionable notes
No correctness blockers found. |
Problem
On a Mac with a Caps Lock selection saved before all-keyboards mode, Caps Lock rules paused after every restart:
selectedKeyboardOnly()treated any saved selection as one-keyboard mode.The Status tab then read "Caps Lock Needs Attention", and Fix it opened the setup wizard, which knows nothing about Caps Lock. Clicking it did nothing useful. The control that actually helped was hidden in a collapsed "Caps Lock options" group.
Observed on the mini with a cl80, an X2A and the KeyPath physical HID fixture attached. The log repeated
Caps keyboard not chosen automatically (selection); starting with Caps Lock rules pausedon every session start.Changes
selectedKeyboardOnly()readsselectedKeyboardOnlyKeyand nothing else. A leftover selection no longer pins the Mac. KeyPath has no installed base to migrate.startingafter 40 polls of 100 ms. All-keyboards startup runs a read, write and readbackhidutilper keyboard interface. With three keyboard-class devices on the mini that took about 5.1 s, so every start was killed mid-write and KeyPath never came up. The wait is now a 20 s deadline (sessionStartupTimeout). Failure or exit still ends it at once. A stack sample confirmed the worker was inSessionCapsMappingFleet.acquire, not hung. Write-up:docs/bugs/2026-11-07-session-startup-retired-during-caps-fleet-write.md.guides/driverless-caps-lock.md) anddocs/architecture/all-keyboards-caps.mdmatch the new behaviour.Testing
TEST_FILTER='SessionCapsMappingFleetTests|SessionCaps|StatusSettings|SettingsView' ./Scripts/run-tests-safe.sh: 174 executed, 171 passed, 3 skipped, 0 failures.TEST_FILTER='SessionRuntime|ServiceLifecycle|SessionCaps|StatusSettings|SettingsView': 226 executed, 223 passed, 3 skipped, 0 failures.quick-deploy.sh. Before the startup fix, every session start was retired mid-write. After it, the session reached ready in 5.1 s, the cl80 interfaces carry the Caps Lock mapping, and the log no longer reports paused Caps Lock rules. The new Settings layout was not checked on screen.testSingleKeyboardScopeIsOptInOnlyreplaces the test that asserted the old fallback.check-accessibility.pypasses.review-gate.shcould not authenticate on the mini because its OAuth session had expired.Not covered: the separate bug where the driverless session's event tap swallows Ctrl+arrow Mission Control shortcuts.
🤖 Generated with Claude Code