Repository navigation
fix(shortcuts): align custom bindings and mobile key defaults - #607
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configuration
⛔ Files ignored due to path filters (2)
📒 Files selected for processing (4)
🚧 Files skipped from review as they are similar to previous changes (1)
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 8 remain after this review. 📝 SummarySummary by CodeRabbit
WalkthroughThis PR changes the default mobile key-bar order and settings fallback. It updates shortcut matching for non-Latin keyboard layouts, makes palette hints reflect shortcut overrides, and adds reservation indicators and warnings in shortcut settings. ChangesMobile Key Bar
App Shortcuts
Priority: ⬇️ Low Estimated code review effort: 3 (Moderate) | ~25 minutes Change: Bug fix Suggested reviewers: Merge Risk: ⚪ Minimal · up to No actionable issue remains identified; the change is ready for normal merge checks. Architecture SummaryArchitecture risk: 🔵 Low · up to The change affects 5 systems. Changed systems: Architecture concerns Review detailsSystems and components
Before / after behavior
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 26.67% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 15 functions across 13 files. (2 skipped: 2 unsupported.)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Comment |
The physical-key fallback for non-Latin layouts matched any Unicode letter, so a Latin layout's accented letter fired the binding of the key position it sits on: BÉPO's É on KeyW, Turkish F's Ç on KeyB (the default sidebar key). Only letters outside the Latin script use the position now.
|
Merge-lane review of this PR at 9e24327 (main 90b01f8 merged in). Fixed here
Checked, no change needed
Notes (not changed)
|
devswha
left a comment
There was a problem hiding this comment.
Independent review of 9e24327 (lead session; lane rev-607 merged main 90b01f8 and wrote 9e24327 after a Codex gpt-6-astra adversarial pass).
Verdict: merge.
What I ran, in a scratch copy of 9e24327:
| Check | Result |
|---|---|
bun test on src/lib/shortcuts.test.ts, keyBar.test.ts, settings.test.ts, i18n.test.ts |
81 pass, 0 fail |
the same with src/lib/shortcuts.ts from b2910d0 (before the lane's fix) |
1 fail: an accented Latin letter (BÉPO's É on KeyW, Turkish F's Ç on KeyB) fired the binding of the key position it sits on instead of reaching the terminal |
Read:
- 9e24327 limits the physical-key fallback to letters outside the Latin script, so Hangul, Cyrillic and kana still fire Mod+Shift bindings by key position, and a Latin layout's own letters stay as typed.
- The lane loaded records written by the v0.3.52, v0.4.0 and v0.4.1 code in every stored shape (customised, emptied, legacy extras, unknown ids): the bar and the bindings come through unchanged. Only an install with no saved record, or one from v0.3.50 or earlier (where the bar could not be customised), gets the new Esc, Tab, Ctrl+C order.
- Nothing fires during IME composition, and Ctrl+letter without Shift stays with the pty.
Notes for later, not blockers: on Windows and Linux the default J, B and O bindings are on the reservation list, so Settings shows three warnings before anything is changed; and one test title still says "non-ASCII". I did not run the browser regressions myself: CI's "Integration and browser" is green on 9e24327. Both required checks and CodeRabbit are green, no threads are open, and the branch contains main.
Release v0.4.2 from `main` at cc9701c. Stop before merge: the maintainer merges and runs the release. ## What's in it - Version 0.4.2 in `package.json` and `herdr-plugin.toml`. - CHANGELOG: `## [Unreleased]` cut into `## [0.4.2] - 2026-10-09`, compare links updated, the two #598 entries given their PR link. Outside contributors are credited as GitHub lists them as authors. - `release-summaries.json`: 0.4.2 patch notes in en/ko/ja/zh (new 5, improved 5, fixed 4). - `REMOTE_BUNDLE_VERSION` raised to `"22"`: the remote-PC bundle ships `server/`, `shared/` and `dist/` (`scripts/build-remote-bundle.ts`), and all three changed since remote-v21 (#543, #438, #599, #600, #601, #605 and others). A `remote-v22` tag is needed on the merge commit before the release. ## PRs since v0.4.1 #598, #524, #599, #603, #600, #601, #605, #438, #610, #607, #543 ## Whole-release review Codex astra (gpt-6-astra) over `v0.4.1..cc9701c`, looking for cross-PR problems: **no release blocker**. One Medium, verified by reading the code and left as a follow-up: in an OpenCode chat, "Show the whole output" fetched while a tool is still running can keep the older text if the tool later rewrites its output, because the output reference carries no revision. It affects only what is displayed until the row remounts; the fix needs a new protocol field, so it is out of scope for a release PR. ## Checks - `bun run check fast`: green locally (1928 pass, 6 skip, 0 fail; typecheck, build, generated types). - `server/release-notes.test.ts` and `scripts/release-notes.test.ts`: 27 pass; `bun scripts/release-notes.ts 0.4.2` renders the notes.
chore(sync): merge upstream main (devswha#438, devswha#543, devswha#601, devswha#605, devswha#607, devswha#610) into next
… bar order (#661) ## What The front page, brought to v0.4.2. Docs only: the four READMEs and both site pages. No app code, no CHANGELOG. - **Devin CLI (#438)** joins the chat-view agents: the feature line and the "Which agents" FAQ in all four READMEs and on `/` and `/zh/`. The FAQ says when it is a chat (herdr or the running process names the session, as `devin --resume` with an ID does) and when it stays the terminal (a plain `devin`), as the guide does. On the site, the 01 example's `OpenCode 2` row becomes `OpenCode 2 · Devin CLI`. - **Anonymous usage counts (#599)**: the "Does my code or conversation leave my machine?" FAQ now says the app sends a count on install and on each update (version, OS, install method, random ID, no IP stored) and that Settings → About → Anonymous usage counts shows and turns it off. Since v0.4.2 the answer was incomplete without it. - **Key bar order (#607)**: the site's key bar example follows the new default, Esc, Tab, Ctrl+C, Ctrl, Alt, Shift, Enter, arrows (read from `DEFAULT_KEY_BAR_ITEMS`). The site FAQ writes "`devin --resume` with a session ID" instead of `<id>`: `build-site.ts` decodes only `&` when it writes the FAQPage data, so `<id>` would have reached it literally. ## Checks - `bun scripts/build-site.ts`: exit 0. The FAQPage data on both pages has 7 questions, includes the Devin and anonymous-count text, and holds no HTML entities. - Both pages in headless Chromium: no 4xx, no page errors; the 01 example's labels are not clipped at 390 or 1440px.
Change
Keep app shortcuts as configurable Mod+Shift bindings and keep the mobile key bar a terminal input device, not an app-action toolbar.
This does not replace #480 (tab reordering) or #602 (split view). Their shortcut paths were reviewed separately; both currently conflict with main and lack the required CI runs. Review comments document the remaining checks/fixes rather than closing either PR as superseded.
Validation
On Linux, Bun 1.4.2 / Node 24.18.0:
bun run check faston the rebased branch: workflow syntax, generated types, typecheck, build and unit suite pass; 1853 pass, 6 skip, 0 fail.bun scripts/key-bar-customization-demo-regression.ts: PASS. Rebinding/Off/reset/persistence and palette hints, reservation warning without rewriting the setting, non-Latin shortcut with no terminal input, IME guard, Ctrl+C visibility at 320/390px, legacy/custom layouts and held modifiers.bun scripts/settings-pages-demo-regression.ts: PASS. All settings pages at 320/390px, Back/Forward/Escape and responsive history behavior.bun run check run bun scripts/terminal-input-regression.ts: PASS on an isolated herdr, including input readiness, drafts, IME and shortcut interception.