Skip to content

fix(server): keybinding defaults survive a stale entry, and Option+Enter sends now - #17

Merged
leonardoxr merged 2 commits into
main-xavierfrom
fix/keybinding-defaults-and-option-enter
Aug 19, 2026
Merged

fix(server): keybinding defaults survive a stale entry, and Option+Enter sends now#17
leonardoxr merged 2 commits into
main-xavierfrom
fix/keybinding-defaults-and-option-enter

Conversation

@leonardoxr

Copy link
Copy Markdown
Owner

Stacked on #14 — both touch the composer.sendNow paragraph in docs/user/keybindings.md. Until #14 merges this diff includes it; the fix itself is the single commit f8fa512b0.

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 syncDefaultKeybindingsOnStartup bailed 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:

cmd+enter       -> composer.sendNow
cmd+shift+enter -> composer.queueFollowUp
alt+enter       -> null          ← nothing bound; falls through to the editor as a plain Enter

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.sendNow also gains alt+enter as 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

  • New test backfills defaults past an entry naming a command that no longer exists, seeded with the exact composer.followUpOverride line — fails on main-xavier, passes here; asserts the dead rule is gone and the user's own mod+j binding 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.

…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.
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L labels Aug 19, 2026
@leonardoxr
leonardoxr merged commit da63589 into main-xavier Aug 19, 2026
5 of 9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant