diff --git a/KEYMAP.md b/KEYMAP.md index 7f69e1f..ae7f4c7 100644 --- a/KEYMAP.md +++ b/KEYMAP.md @@ -38,6 +38,29 @@ The input path has three distinct layers: No command should inspect layout quirks directly. A new keyboard layout is a new source-patched profile and trace fixture, not an ad-hoc branch in command code. +## Input capability tiers + +Mobile SSH clients commonly expose more than a plain software keyboard: Escape, +Control, arrow keys, paste, and sometimes an attached hardware keyboard. The v1 +keymap therefore treats these as capability tiers, not separate products: + +1. **Core mobile tier**: commands reachable without required Esc/Ctrl/Alt, + function keys, number-row comfort, or symbol gymnastics. Space rails and + mnemonic letter aliases live here. +2. **Mobile SSH accelerator tier**: Esc, Ctrl, arrows, Home/End/Page, and paste + may accelerate the same intents when the SSH client exposes them. They must + never be the only recovery or core editing path. +3. **Attached keyboard tier**: Vim-style and terminal-standard direct keys such + as `gg`, `G`, `Ctrl-u`, `Ctrl-d`, `0`, `^`, `$`, and `.` are first-class when + available, but each core operation keeps a discoverable mobile fallback or + visible rail. + +When adding a binding, choose the narrowest tier that makes the operation usable, +then document any accelerator aliases next to the canonical mobile path. If a +terminal trace shows a client cannot send an accelerator reliably, prefer a +source-patched layout/profile update or a visible fallback over a special-case +command branch. + ## Orthogonality rules The keymap should feel small because its parts compose: diff --git a/REQUIREMENTS.md b/REQUIREMENTS.md index 2838b92..6e8ee79 100644 --- a/REQUIREMENTS.md +++ b/REQUIREMENTS.md @@ -25,6 +25,8 @@ Rows are redgate TSV requirements: `ringidsummary [tag]`. 1 012 Line selections SHALL be able to include the line's newline boundary so linewise edits can preserve Vim-like newline semantics. [mobile] 1 013 Document start/end and half-page motions SHALL be reachable from Normal mode with Ctrl-capable SSH keys and documented mobile fallback aliases. [mobile] 1 014 Normal-mode dot repeat SHALL replay the last deterministic local edit for the supported insert/change/delete/put subset without recording panel, search, or external side effects. [mobile] +1 015 The keymap SHALL classify bindings into core mobile, mobile SSH accelerator, and attached-keyboard tiers so Esc/Ctrl/arrow-capable clients can be used without making those keys mandatory for core commands. [mobile] +1 016 Every attached-keyboard or Ctrl/Esc accelerator that performs a core editing, navigation, recovery, or panel action SHALL have a documented visible mobile fallback or rail path. [mobile] ## ui