Skip to content

fix(editor): shortcut profiles tell the truth — EOF keyboard port, drift-proof registry, fidelity pills - #346

Merged
ChrisBeWithYou merged 2 commits into
mainfrom
fix/shortcut-profile-accuracy
Jul 22, 2026
Merged

fix(editor): shortcut profiles tell the truth — EOF keyboard port, drift-proof registry, fidelity pills#346
ChrisBeWithYou merged 2 commits into
mainfrom
fix/shortcut-profile-accuracy

Conversation

@ChrisBeWithYou

Copy link
Copy Markdown
Contributor

What

PR 1 of the shortcut-profile accuracy effort under the ratified profile policy (EOF-PROFILE-POLICY.md, from a three-agent review: charter-priority tiers, a manual-verified Logic/Live audit, and a DAW-precedent framework). The governing rule: faithfulness is owed to trained reflexes — and no panel row may advertise a key that runs something else.

1 · The EOF keyboard port (self-contained to Legacy (EOF))

Change EOF reference
F1 opens help F1 = Help
Ctrl+1-9 / Ctrl+0 / Ctrl+` set frets (beside plain digits) EOF's own fret entry, kept as a faithful alias
Numpad = go to bookmark, Ctrl+Numpad = set (Alt+digit chords kept) Numpad bookmarks
Shift+L → select-like; follow keeps its transport button Shift+L = precise select-like; EOF has no follow key
Plain T freed; Tap stays on Ctrl+T EOF's T = Crazy status (feature we don't have — never squat the key)
Time signature displays Shift+I EOF's Shift+T is Midi Tones

The whole reference keyset is now encoded line-by-line in tests/eof_reference.test.mjs with a per-key verdict (match / adapt / ours / omit / global) asserted against the live resolver — future drift or key-squatting fails CI instead of shipping.

2 · Interception display-drift (the bug both audits ranked first)

input.js grabs three plain keys before the resolvers (T palette · Logical G = Tempo Map · Cableton B = Draw Mode), but the panel/menus still displayed them for their old commands ("Bend — B" while B drew notes). Now:

  • Tempo Map displays T,T (G in Logical).
  • Cableton bend relocates to Ctrl+Bnot the audit's suggested Shift+B, which would break the pinned override/tempo-map-overlay disjointness invariant (Shift+B taps tempo there); Ctrl+B is also EOF's bend chord.
  • Logical snap relocates to Shift+G (free in the FeedBack resolver).
  • The keybind_profiles suite now treats intercepted keys as claimed — closing the blind spot that let this drift sit green.
  • Bonus from the Live audit: Cableton gains Ctrl+E → Split (command existed, keyless), and the Ctrl+L comment names Live's actual "Toggle Loop Brace".

3 · Fidelity surfacing (derived, never hand-tagged)

Shortcut-panel rows compute a fidelity bucket against the profile's reference app from one small PROFILE_DIVERGENCES map: amber Adapted pills (reference key in tooltip + aria-label), muted Editor-only pills, a derived subtitle ("Unmarked keys match EOF — 5 adapted, 25 editor-only"), and a Show differences filter. Faithful bindings need zero annotation.

Verification

  • Runtime-verified through the real host (isolated worktree preview on :8002): 18/18 checks — pills, filter, per-profile key displays, and F1 live end-to-end.
  • Suites: 306 tests, 304 pass — the only 2 failures (mixer_meter_teardown, song_fit) already fail on main at this base and are untouched.
  • npm run lint: 0 errors.

Not in this PR

PR 2 — the EOF mouse note-entry grammar (scroll = sustain, Ctrl+scroll = fret, right-click = add/remove): the policy's highest-value faithfulness item, landing separately with the reference table's mouse lines.

🤖 Generated with Claude Code

https://claude.ai/code/session_0178CGdtptemWd4tUbjkYDhH

@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@ChrisBeWithYou, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 24 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: d0b032a8-fba9-4719-aa42-0ef1dd23dcee

📥 Commits

Reviewing files that changed from the base of the PR and between 0e3212a and 5dbafcc.

📒 Files selected for processing (7)
  • CHANGELOG.md
  • screen.html
  • src/main.js
  • src/shortcuts.js
  • tests/eof_reference.test.mjs
  • tests/eof_shortcuts.test.mjs
  • tests/keybind_profiles.test.mjs
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/shortcut-profile-accuracy

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

ChrisBeWithYou and others added 2 commits July 21, 2026 22:04
… registry, fidelity pills

Three agent audits (charter priorities, a manual-verified Logic/Live pass, a
DAW-precedent framework) converged on one ratified policy (EOF-PROFILE-POLICY.md):
faithfulness is owed to trained reflexes, and no panel row may advertise a key
that runs something else. This PR is the keyboard half of that policy.

The EOF port (self-contained to the Legacy profile): F1 = help; Ctrl+digit fret
aliases (Ctrl+1-9 / Ctrl+0 / Ctrl+`) beside plain digits; numpad bookmarks
(goto / Ctrl = set) with the Alt+digit chords kept as laptop aliases; Shift+L =
select-like (EOF's precise select-like — follow keeps its transport button, EOF
itself has no follow key); plain T freed (EOF's T is Crazy status, which we do
not have — Tap stays on its authentic Ctrl+T); time-signature displays Shift+I
(EOF's Shift+T is Midi Tones). The whole reference keyset is encoded line-by-line
in tests/eof_reference.test.mjs with a verdict per key (match / adapt / ours /
omit / global), pinned against the live resolver — drift or key-squatting now
fails CI.

The interception display-drift fix (the bug the audits ranked first): input.js
grabs three plain keys before the resolvers (T palette; Logical G = Tempo Map;
Cableton B = Draw Mode), but the registry still displayed them for their old
commands. Tempo Map now shows T,T (G in Logical); Cableton bend relocates to
Ctrl+B — not the audit's suggested Shift+B, which would violate the pinned
override/tempo-map-overlay disjointness invariant (Shift+B taps tempo there),
and Ctrl+B is EOF's bend chord anyway; Logical snap relocates to Shift+G. The
keybind_profiles suite now treats intercepted keys as claimed, closing the test
blind spot that let the drift sail green. Cableton also gains Live's Ctrl+E for
the existing split-at-playhead command, and its Ctrl+L comment names Live's
actual command (Toggle Loop Brace).

Fidelity surfacing (derived, never hand-tagged): rows carry a computed fidelity
against the profile's reference app from one small PROFILE_DIVERGENCES map —
amber "Adapted" pills (reference key in the tooltip + aria-label), muted
"Editor-only" pills, a derived bucket-count subtitle, and a "Show differences"
filter that lists only the exceptions. Faithful bindings need no annotation.

Runtime-verified through the real host (isolated preview on :8002): 18/18
checks — pills, filter, per-profile displays, and F1 live end-to-end. Suites:
306 tests, the only 2 failures (mixer_meter_teardown, song_fit) already fail on
main. Lint 0 errors.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0178CGdtptemWd4tUbjkYDhH
Signed-off-by: ChrisBeWithYou <chris@rifflarr.local>
@ChrisBeWithYou
ChrisBeWithYou force-pushed the fix/shortcut-profile-accuracy branch from b5bab07 to 5dbafcc Compare July 22, 2026 03:04
@ChrisBeWithYou
ChrisBeWithYou merged commit 6c96758 into main Jul 22, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant