fix(server): keybinding defaults survive a stale entry, and Option+Enter sends now - #17
Merged
leonardoxr merged 2 commits intoAug 19, 2026
Merged
Conversation
…run instead of trailing behind it omp over ACP has no steering surface: a concurrent session/prompt makes the agent cancel the running turn, and T3's own prompt serialization otherwise held the message behind the running prompt — in one reproduction, 29 minutes — while the timeline claimed it was delivered. The adapter now stops the run before a mid-turn prompt and sends the message as its own turn, so it reaches the agent in about a second, and the fake "steer" branches that reused the running turn id are gone. The composer keeps Enter off that destructive path (under "steer" it queues, as before), but the explicit send-now chord and the queued card's arrow send for real again instead of being silently downgraded to a queue, and both say what they do: "Stop the run and send", "Stop the run and answer this next". Built with Claude Opus 5 on Oh My Pi.
…ter sends now A config naming a command that no longer exists — `composer.followUpOverride`, renamed when the follow-up chords split in two — made the startup sync bail on the whole file. That config then received no default keybinding ever again: a real one here has been missing every composer chord added since the rename. Only a file that fails to parse as a whole now skips the sync; individual bad entries are logged, dropped, and the backfill proceeds without them. `composer.sendNow` also gains `alt+enter` as a second default, so "send this now" is reachable without leaving the home row. A config that already binds the command keeps its own shortcut, as defaults always have. Built with Claude Opus 5 on Oh My Pi.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
A real config here still carries a rule from before the follow-up chords split in two:
{ "key": "mod+shift+enter", "command": "composer.followUpOverride" }That command no longer exists, so the entry is dropped as an issue — and
syncDefaultKeybindingsOnStartupbailed on the whole file whenever any issue was present. Consequence: that config has received no default keybinding since the rename, and never would have. Measured against the real resolver, the composer chords resolved as:Fix
Only a file that fails to parse as a whole skips the sync now — rewriting that would throw away whatever the user meant. Individual invalid entries are logged, dropped, and the backfill proceeds without them, so the dead rule disappears on the next start and the missing defaults land.
composer.sendNowalso gainsalt+enteras a second default, so "send this now" is reachable without leaving the home row. Per the existing precedence model, a config that already binds the command keeps its own shortcut.Verification
composer.followUpOverrideline — fails onmain-xavier, passes here; asserts the dead rule is gone and the user's ownmod+jbinding survives.keybindings(server) +keybindings(shared/web) +KeybindingsSettings.logic: 79 tests green. tsgo clean; lint/format clean.Built with Claude Opus 5 on Oh My Pi.