Files
mim/REQUIREMENTS.md
2026-06-21 22:52:41 +02:00

6.9 KiB

REQUIREMENTS.md

Rows are redgate TSV requirements: ring<TAB>id<TAB>summary [tag].

session

0 001 mim SHALL run as a server-side terminal editor binary for SSH use. [core] 0 002 Each editor session SHALL expose a local socket path to trusted child/tool environments. [protocol] 0 003 The terminal UI SHALL act as a client of the session protocol, even when hosted in the same process. [protocol] 1 004 The session protocol SHALL support deterministic record/replay of input and state-changing commands. [test]

input

0 001 Common editing and navigation commands SHALL be reachable without required Esc, Ctrl, Alt, or function keys. [mobile] 0 002 The Space leader SHALL expose a visible command rail in Normal mode, while Insert-mode Space SHALL insert a literal space immediately. [mobile] 1 003 Frequent coding punctuation SHALL have editor-native insertion paths for mobile keyboards. [mobile] 1 004 Input handling SHALL separate terminal key events, keyboard layout profiles, and editor command intents. [mobile] 2 005 Keyboard layout profiles SHALL be source-patched tables backed by recorded terminal traces, starting with iOS QWERTZ. [mobile] 1 006 Physical keyboard input SHALL be a first-class terminal path with discoverable shortcuts and no loss of mobile no-required-modifier command access. [mobile] 1 007 The v1 keymap SHALL keep modes, verbs, objects, counts/repetition, panels, and tool operations orthogonal so operations compose instead of multiplying bindings. [mobile] 1 008 Line start/end motions SHALL have mobile-reachable aliases in addition to attached/Vim-style symbol or digit keys, and first-nonblank line motion SHALL remain distinct from absolute line start. [mobile] 1 009 Insert-mode Tab SHALL expand to spaces by default. [mobile] 1 010 Select mode SHALL extend the active range with motions and keep semantic object selection behind an explicit object rail. [mobile] 1 011 Vertical line motions SHALL preserve a preferred cursor cell across ragged lines, clamped to each target line until horizontal/editing motion resets the preference. [mobile] 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] 1 017 Insert and Select mode SHALL return to Normal via Escape and Ctrl-[ as equivalent terminal events while preserving literal Insert-mode Space. [mobile] 1 018 Select mode SHALL keep bare movement keys as selection-extending motions and provide a non-conflicting mobile object-selection rail for word, line, indent, parameter, enclosing form, and diagnostic ranges. [mobile] 1 019 Hover, signature help, and parameter navigation SHALL share a discoverable language rail, with any attached-keyboard accelerator documented as an alias rather than the only path. [mobile] 1 020 Files, search, jobs, Pi/assistant, and symbol panels SHALL have documented top-rail mobile paths, with shifted or mnemonic aliases treated as accelerators rather than the only discoverable path. [mobile]

ui

0 001 Narrow terminals SHALL use transient panels instead of permanent desktop splits. [mobile] 1 002 Files, git, diagnostics, LSP, build, terminal, and Pi surfaces SHALL share one panel navigation model. [panels] 0 003 When the cursor moves beyond the visible horizontal or vertical viewport, the editor SHALL scroll enough to keep the cursor cell visible. [mobile] 0 004 The default visual theme SHALL preserve semantic color identity for syntax, selections, diagnostics, job/tool status, hover/signature/context surfaces, and panel chrome on mobile SSH terminals. [mobile] 0 005 Terminal color adaptation SHALL choose truecolor, 256-color, 16-color, or mono output from local terminal environment signals with no runtime config files. [mobile]

coding

0 001 Buffer and rendering code SHALL preserve UTF-8 boundaries and terminal cell width semantics. [core] 1 002 Tree-sitter syntax highlighting SHALL be built in with source-patched language tables. [syntax] 1 003 LSP support SHALL be built in and spawn existing language servers without installing them. [lsp] 1 004 LSP hover and signature help SHALL use compact-first viewport-aware presentation with source labels, scrolling/search, and explicit expansion for long content. [lsp] 1 005 When syntax or LSP data is available, mim SHALL provide mobile-friendly navigation between parameters in function calls. [lsp] 1 006 Lint, format, format-on-save, organize-imports, code-action, build, test, and check workflows SHALL be first-class editor commands rather than hidden side effects. [tools] 1 007 When multiple LSPs or tools answer the same request, mim SHALL preserve provider/source identity and require explicit selection for ambiguous mutating operations. [tools]

repo

1 001 File search SHALL respect gitignore rules by default and provide an include-ignored path. [files] 1 002 Git support SHALL use explicit local git commands and avoid hidden mutating operations. [git]

testing

0 001 Every product slice SHALL include regular carry-their-weight verification that proves the intended payoff works. [test] 0 002 Every product slice SHALL include adversarial carry-their-weight verification for realistic failure, boundary, or regression cases. [test] 1 003 Protocol, headless session, replay, and fixture tests SHALL be preferred over brittle UI snapshots unless rendering behavior is the claim. [test] 1 004 Test/support code SHALL not introduce runtime config, plugin, installer, telemetry, or product surfaces. [test] 1 005 Terminal-visible behavior changes SHALL be verified by the terminal E2E matrix or by an explicitly narrower rendered-terminal proof. [test] 1 006 Generated E2E evidence artifacts SHALL stay under ignored build output and SHALL not dirty a clean source tree. [test]

governance

0 001 Defaults SHALL be changed by patching source and rebuilding, not by runtime config files. [suckless] 0 002 mim SHALL not provide a plugin system or package manager. [suckless] 0 003 The session socket SHALL remain local and scoped to the running editor session. [protocol] 1 004 Build variants SHALL be named profiles over source layers, not a public matrix of per-feature flags. [suckless] 1 005 Capabilities excluded from a build profile SHALL fail with clear not built in this profile diagnostics. [suckless]