Repository navigation
feat(web): rebindable keyboard shortcuts and a Keybinds settings page - #470
Merged
Merged
Maple Review Bot / Maple / review
succeeded
Nov 12, 2026 in 3m 23s
Confidence 10/10 · No issues found
🟢 Confidence 10/10 · safe to merge. The earlier per-row Reset defect is fixed and pinned by a scene test; keymap uniqueness, entry cleaning and binding paths are read and tested.
no findings · tests covered · risk low
Adds rebindable shortcuts: defineKeymap replaces the hotkey registry and catalog, overrides are stored per device and resolved into Shared.keys, and a Keybinds page records, resets and unbinds them. The earlier per-row Reset finding is fixed, and the McpQueryError issues are untouched by this diff. Safe to merge.
defineKeymapdeclares every action once and keeps rebindable keys unique inresolve- Layout and channel hotkeys bind the user's resolved keys as a subscription dependency
- New
/:org/my-settings/keybindspage records, refuses typing keys, resets and unbinds - The ⌘/ dialog lists current keys and links to the settings page
Fixed since the last review
- ✅
F2 · A shortcut whose key another row took has no per-row Reset
Production impact
Open errors in the changed files (2)
| Issue | Service | Occurrences | File |
|---|---|---|---|
| @maple/mcp/errors/McpQueryError (2 issues) | maple-chat | 9 | apps/web-foldkit/src/page/registry.ts |
| @maple/mcp/errors/McpQueryError (8 issues) | maple-ai | 30 | apps/web-foldkit/src/page/registry.ts |
After this merges, Maple checks whether they stop.
What was checked
- F2:
isChangednow also compares the resolved key to the default (view.ts:149-151); a displaced row keeps its Reset, pinned byscene.test.ts:179 cleandecodes each stored entry alone and keeps onlyisTypingSafekeys, andreadStoredswallows decode failures (data/storage.ts:14)- No
@tanstack/hotkeysimport survives the dependency removal (grep over all.ts/.jsonat head); the removedimageViewer.*entries were never bound or listed
6fdd136 · Reply "won't fix" to dismiss a finding, or mention @maple-review-bot to ask about one.
Loading