Inspiration Features Matrix
Cross-reference of recurring TUI patterns across the inspiration set. The rightmost column captures the current take on whether the pattern is aspirational for KN-86 — ✅ adopt, 🟡 partial / adapt, 🔍 evaluate further, ❌ skip.
Symbols: ✓ = pattern present, — = not present / not applicable, ▲ = framework (powers other entries), ◆ = historical archetype / precedent, ■ = concept image (not a shipped product).
Column abbreviations in the wide UX table: PD PulseDeck · Gl Gloomberb · NW NetWatch · Go Golazo · Pk Perkins · BA BAE · Cw Cowsay · OT OpenTUI · Zk Zork · Vh Vehicle TUI Concept.
UX patterns (contemporary inspiration set)
Section titled “UX patterns (contemporary inspiration set)”| Pattern | PD | Gl | NW | Go | Pk | BA | Cw | OT | Zk | Vh | KN-86 aspirational? |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Keyboard-first command model | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | — | ▲ | ◆ | ■ | ✅ Already foundational (31-key, TERM-context) |
| Single-key layout/focus cycling | ✓ | — | — | ✓ | — | — | — | ▲ | — | — | ✅ Worth a dedicated key on cart surfaces |
| Mnemonic command bar (3–4 char codes) | — | ✓ | — | — | — | — | — | — | — | — | 🟡 Strong fit with TERM key; pilot first |
| Numbered-tab top-level navigation | — | — | ✓ | — | — | — | — | — | — | — | ✅ Phone numpad maps cleanly |
| Labeled-bracket bottom nav bar | — | — | — | — | — | — | — | — | — | ■ | ✅ Reference pattern for Row 24 |
| Persistent top status strip (Row-0 style) | — | ✓ | — | — | — | — | — | — | — | ■ | ✅ Reference pattern for Row 0 |
| In-band keystroke legend (footer hints) | — | — | — | — | — | — | — | — | — | ■ | ✅ Pair with Row 24 nav-bar pattern |
| Explanation panel under focused row | — | — | — | — | — | — | — | — | — | ■ | 🟡 Adopt for settings-style surfaces |
| Master/detail two-pane layout | — | ✓ | ✓ | ✓ | — | ✓ | — | ▲ | — | ✓ | ✅ Adopt as a screen-design baseline |
| Dense multi-pane dashboard | — | ✓ | ✓ | — | — | — | — | ▲ | — | ✓ | 🟡 Useful for Bare Deck Terminal; cart-specific |
Workspace-level tab strip (^1 / ^2) | — | ✓ | — | — | — | — | — | — | — | — | 🔍 Park for now |
| Tiling window management | — | ✓ | — | — | — | — | — | — | — | — | ❌ Single-cart focus; gridlock concept only |
| Plugin / extension architecture | — | ✓ | — | — | — | — | — | ▲ | — | — | ❌ Cart capability model is the equivalent |
| First-class theme system (multiple) | ✓ | — | ✓ | — | — | — | — | — | — | — | 🟡 Adapt as aesthetic modes (mono amber, not palette) |
| Live theme switching via one key | — | — | ✓ | — | — | — | — | — | — | — | 🟡 If theme system happens, one-key cycle is right |
| Persistent session state | ✓ | ✓ | ✓ | — | — | ✓ | — | — | ◆ | — | ✅ Already in Universal Deck State (ADR-0011) |
| Audio visualizers (spectrum / scope) | ✓ | — | — | — | — | — | — | — | — | — | ✅ CIPHER-LINE is the natural home |
| Sparklines / heatmaps / Gantt | — | ✓ | ✓ | ✓ | — | — | — | — | — | — | ✅ Box-drawing + braille make this cheap |
| Box-drawn map / spatial glyph | — | — | — | — | — | — | — | — | — | ■ | 🟡 Faction / dispatch geography cart surfaces |
| Sub-cell rendering (braille glyphs) | — | — | — | — | ✓ | — | — | — | — | — | ✅ Sanction as escape hatch (own ADR) |
In-app help overlay (?) | — | — | — | — | ✓ | — | — | — | ◆ | — | ✅ Strong runtime-internal candidate |
Filter / search bar (/) | — | — | ✓ | ✓ | — | — | — | — | — | — | 🟡 Tiny grammar on Row 24 — list surfaces |
| Audition / commit split | ✓ | — | — | — | — | — | — | — | — | — | 🟡 Cart preview before insert; mission preview |
Undo (u) | ✓ | — | — | — | — | — | — | — | ◆ | — | 🟡 Worth in nEmacs / REPL; not universal |
| Graceful capability degradation | ✓ | — | ✓ | — | — | — | — | — | — | — | ✅ Promote to runtime doctrine |
| Compact-screen / too-small protection | ✓ | — | — | — | — | — | — | — | — | — | ✅ Mirror for emulator below 80×25 |
| Self-update affordance | — | — | — | ✓ | — | — | — | — | — | — | 🟡 Already in update-system; lift UX presentation |
| Big-glyph headline identity object | — | — | — | ✓ | — | — | — | — | — | — | ✅ Press Start 2P at native 12×24 |
| Event timeline with glyph markers | — | — | ✓ | ✓ | — | — | — | — | — | — | ✅ Mission event log, dispatch history |
| Horizontal A-vs-B stat bars | — | — | — | ✓ | — | — | — | — | — | — | ✅ Reputation / faction surfaces |
Inline [ON]/[OFF] toggle status | — | — | — | — | — | — | — | — | — | ■ | 🟡 CP437 brackets handle this trivially |
| Strong visual metaphor as IA | ✓ (deck) | ✓ (terminal) | — | ✓ (scoreline) | — | — | — | — | ◆ (Empire) | ■ (dashboard) | ✅ Already committed (Deckline) |
| Fixed-envelope hardware-product UI | — | — | — | — | — | — | — | — | — | ■ | ✅ This is KN-86 |
| ASCII speech-bubble / box-art callouts | — | — | — | — | — | — | ✓ | — | — | — | 🟡 Sanction as a glyph primitive |
| Image → ASCII import | — | — | — | — | ✓ | — | — | — | — | — | 🔍 Authoring tool, not runtime |
| Incident bundle / state-snapshot export | — | — | ✓ | — | — | — | — | — | ◆ (save file) | — | 🔍 Park; share story v2 |
| Flexbox layout on text grid | — | — | — | — | — | — | — | ▲ | — | — | 🟡 NoshAPI flex primitive — author win |
| Tree-sitter / inline syntax highlighting | — | — | — | — | — | — | — | ▲ | — | — | 🔍 nEmacs / REPL candidate |
| Diff component | — | — | — | — | — | — | — | ▲ | — | — | 🔍 nEmacs commit affordance |
| Timeline animation API | — | — | — | — | — | — | — | ▲ | — | — | 🟡 Compare to existing clip-system |
| Cross-language C-ABI core | — | — | — | — | — | — | — | ▲ | ◆ (Z-machine) | — | ✅ NoshAPI already is this |
Architectural / historical patterns (Zork-centric)
Section titled “Architectural / historical patterns (Zork-centric)”The Zork stack contributes architectural patterns that don’t map cleanly to the UX-flavored rows above. Calling them out separately:
| Pattern | Zork | KN-86 aspirational? |
|---|---|---|
| Lisp-family authoring language | ◆ (MDL / Muddle) | ✅ Already adopted (ADR-0001, KEC Lisp) |
| Portable, memory-disciplined runtime | ◆ (Z-machine) | ✅ Adopted as a tree-walking interpreter (ADR-0004, Fe) — portable across desktop + Pi; the bytecode-VM form is deferred |
| AOT compile high-level → bytecode for distribution | ◆ | ◐ Deferred — carts ship Lisp source in the .kn86 container today; AOT bytecode is parked (ADR-0006 / ADR-0004 2026-06-14 amendments) |
| Cartridge / box / “feelies” as part of the work | ◆ | ✅ Already committed (ADR-0019 cart shell + sled + label) |
| Imperative text parser (verb-noun-prep-noun) | ◆ | 🟡 Pair with TERM-key / nEmacs REPL; narrative-cart template |
Universal meta-command verb set (SAVE/LOOK/INVENTORY) | ◆ | 🟡 Promote to firmware-level deck-wide verbs |
| Atmospheric 2nd-person / present-tense / dry voice | ◆ (“…likely to be eaten by a grue”) | ✅ Tone reference for CIPHER voice style guide |
| Classification stamps on cart label (KIND/TONE/LEVEL) | ◆ (FORMAT/GENRE/DIFFICULTY) | 🟡 Three-stamp label pattern on cart sled |
| Disambiguation prompts on ambiguous parser input | ◆ (“which sword?”) | 🟡 If imperative parser ships, this is the bar |
| Persistent world / NPC state across sessions | ◆ | ✅ Already in Universal Deck State + per-cart save (ADR-0011, ADR-0019) |
Reading the matrix
Section titled “Reading the matrix”- Zork (and the Z-machine) is the architectural archetype — sparsely populated in the contemporary UX rows (it’s a 1980 parser game), but every cell it touches is a load-bearing structural decision KN-86 has already made (KEC Lisp, Fe VM,
.kn86container, cart shell). The lower table is where its real density shows. - PulseDeck is the densest “directly applicable” column — strong metaphor, theme system, visualizers, layout cycling, resilience patterns, persistent state. The closest north star for the deck identity.
- NetWatch is the densest runtime UX doctrine column — numbered-tab navigation, graceful degradation, theme cycling, sparklines, “useful in 5 seconds.” Aligns tightly with the Bare Deck Terminal brief.
- Gloomberb dominates the dense dashboard + command bar axis. Strongest single fit is the mnemonic command bar paired with TERM key.
- Golazo owns master/detail + headline object. Worth lifting as a screen-design baseline.
- Perkins is single-point but high-value: braille rendering and the
?help overlay. - BAE and Cowsay are philosophy / single-primitive notes.
- OpenTUI is the framework reference — not a substrate candidate (see opentui.md for why), but its component inventory and flexbox approach are worth borrowing piecemeal.
- Vehicle TUI Concept is the only entry that’s a fixed-envelope hardware-product UI (everything else lives inside a terminal emulator). Sparsely populated in the table as a whole, but every cell it touches is a Row 0 / Row 24 / chrome-discipline pattern KN-86 should treat as the reference. The Row-0 status strip, Row-24 bracketed nav bar, in-band keystroke legend, and explanation-panel-under-focused-row are the four borrowable patterns it adds that aren’t well-represented elsewhere.
Patterns I’d promote to spec / ADR work
Section titled “Patterns I’d promote to spec / ADR work”In rough priority order:
- Cite Zork / Z-machine as prior art in ADR-0001 and ADR-0004 background sections — one paragraph each. Costs nothing; anchors the Lisp-authoring + bytecode-VM lineage explicitly (Zork).
- Universal
?help overlay as a runtime-internal feature (Perkins, withHELPprecedent from Zork). - Numbered-tab navigation on the Bare Deck Terminal, mapped to the phone numpad (NetWatch).
- Braille sub-cell rendering sanctioned as an escape hatch in
character-set.md— possibly its own short ADR (Perkins). - Graceful degradation elevated to a runtime doctrine, applied uniformly to cart-absent / coprocessor-absent / battery-low / microSD-absent cases (NetWatch, PulseDeck).
- Compact-screen protection for the desktop emulator — refuse to draw below the canonical grid (PulseDeck).
- Mnemonic command bar entered through TERM key — 3–4-char codes, in-band legend (Gloomberb).
- Big-glyph headline identity object as a screen-design pattern in
screen-design-rules.md(Golazo). - Audio visualizer on CIPHER-LINE as a Bare Deck SYS-tab affordance and an optional cart surface (PulseDeck).
- Master/detail two-pane layout as a sanctioned baseline alongside the Row 0 / 1–23 / 24 contract (Golazo).
- Theme system as aesthetic modes — not colors. Cycle key, persisted in
nosh-config.toml(NetWatch, PulseDeck). - CIPHER voice style guide cites Zork failure-state prose as the tone target (Zork).
- Imperative-parser narrative-cart authoring template — Zork-style verb-noun dispatch as a sanctioned cartridge-authoring kit on top of KEC Lisp (Zork). Scope question, not a near-term commit.
- Three-stamp cart label classification (
CART KIND/TONE/STANDARD LEVEL) on the cart sled, callback to Infocom’s box stamps (Zork). - Firmware-level universal verb set —
SAVE,LOOK,INVENTORY,SCOREaccepted on the TERM line regardless of loaded cart (Zork). - Row 24 nav-bar spec — bracketed-label nav row (
[ HOME ] [ SYS ] [ MISSIONS ] [ TERM ]) with optional leading glyph, as the reference contract for what Row 24 looks like across surfaces (Vehicle TUI Concept). - In-band keystroke legend pattern — when a surface is keystroke-driven, print the bindings in the surface, not behind a
?overlay (Vehicle TUI Concept). - Explanation panel under focused-list-row — sub-3-row footprint, self-teaching settings surfaces (Vehicle TUI Concept).
- Pane header convention — pick
:: NAMEvs.─[ NAME ]─vs. ALL-CAPS centered, and commit. The inspiration set fragments here; KN-86 should pick one (Gloomberb favors:: NAME; Vehicle TUI uses centered-caps).
Batch 3 — feature-axis matrix
Section titled “Batch 3 — feature-axis matrix”A second, complementary matrix oriented around feature axes the prompt called out (keyboard model, theme system, layout/panes, visualizers, plugin/extensibility, persistence), with one row per Batch-3 contemporary TUI app and a final column for the KN-86 aspirational verdict.
Reads orthogonally to the project-rows × pattern-cols table above: where that one tells you which projects exhibit a pattern, this one tells you what each Batch-3 project does on each feature axis.
| Project | Keyboard model | Theme system | Layout / panes | Visualizers | Plugin / extensibility | Persistence | KN-86 aspirational? |
|---|---|---|---|---|---|---|---|
| rs-pug | Keyboard-driven; commands + nav keys | 5 JSON themes (dark, light, nord, gruvbox, mono) — human-editable | Multi-pane library / queue / now-playing | — | Lua plugins | SQLite library | ✅ JSON-themes + Lua-as-desktop-tooling-extension; ❌ SQLite on device (per-cart save model differs) |
| audium | One-key-per-action; all keys remappable | 15 themes + live preview + transparency | Player + library + LRC overlay | — (LRC lyrics, not audio viz) | — | Plain-JSON portable library | ✅ One-key ethos, live-preview theme picker, JSON portability; transparency is terminal-emulator-only |
| cliamp | Winamp-style controls; keyboard-first | Player chrome themed | Winamp-tribute layout | Real spectrum + multiband EQ | Lua plugins | — (provider-list-driven, not local library focus) | ✅ Spectrum visualizer in-band; Lua-as-desktop-tooling; Winamp-homage commitment |
| AetherTune | Fully remappable keybinds; ? overlay; S settings | 8 themes incl. CRT default + live preview | Station browser + log + health + visualizer | Real FFT 16-band @ ~94fps + CAVA gravity falloff; fallback simulator | — (config-driven only) | JSON (favorites, history, keybinds, themes) | ✅ FFT pipeline is the CIPHER-LINE reference; CRT-default identity; remappable keybinds; graceful viz fallback |
| octoscope | Number-key tabs (1–6) + tab/shift+tab + searchable lists | 7 themes incl. phosphor (CRT green) and amber (CRT amber) + live cycle | Tabbed auto-refresh + drill-in detail | — (live “change pulse” border flash, not spectrum) | — (config-driven only) | Background fetch cache; rate-limit aware | ✅ amber theme is direct lineage citation; tabbed-dashboard pattern for Bare Deck Terminal; change-pulse for live data arrival |
| l123 | Slash menu (/), : menu, 13-mode indicator, first-char input rule, full F-key workflow, Ctrl-Break universal abort, Alt-F4 undo, F1 context help | dos theme ships; green and amber CRT stretch | Three-line control panel + grid + R3.4a WYSIWYG icon panel | Graphs (F10 full-screen); Unicode bar + line; SVG/PNG save | Macros: {BRANCH}, {IF}, {LET}, \0 autoexec, Alt-F5 learn | .xlsx round-trip; .WK3 read; macro learn-mode persistence | ✅ Reference for the entire interaction model; mode indicator; first-char rule; F-key workflow; authenticity-contract discipline |
| 4TRK | Music-workstation key layout (per-track step entry, etc.) | Many themes + theme editor; CRT effects layer | Tracker step grid + synth panels + FX strip; dual screen modes (studio 640 / classic 320) | Audio output is the device’s own output | — | (DAW project format) | ✅ Theme editor pattern, dual-mode toggle (analog to ADR-0014 F1’s glyph treatment); deep CRT effects |
Reading the Batch-3 matrix
Section titled “Reading the Batch-3 matrix”- AetherTune is the clearest “all six axes present, all done well” project. Strongest single Batch-3 reference for an end-to-end TUI runtime architecture.
- l123 is off-the-charts on the keyboard-model axis and carries unique value on the macro-as-plugin axis (in a way the music players don’t).
- octoscope is the strongest theme-axis reference because of the direct
phosphor/amberCRT-theme naming lineage to KN-86’s color story. - rs-pug + cliamp are independent confirmations of “Lua as the extension language” for TUI apps — useful pattern for KN-86 desktop tooling, not for the on-device runtime.
- audium’s JSON-portable-library + remappable-everything is the strongest single persistence + flexibility lesson.
- 4TRK isn’t quite TUI (it’s a graphical music workstation), but it earns its row by being the strongest aesthetic-and-theming reference outside the TUI corpus.
Batch-3-derived patterns to promote (extends the Batch-1/2 promote list above)
Section titled “Batch-3-derived patterns to promote (extends the Batch-1/2 promote list above)”- Real FFT visualizer pipeline for the CIPHER-LINE OLED, modeled on AetherTune (16-band, ~94 fps, CAVA-style gravity falloff, automatic sensitivity), driven by Pico-2 PSG output. (Cross-references promote-list item 9.)
- CRT boot + power-off animations as KN-86 identity branding, modeled on AetherTune.
- Slash-menu (TERM-key) universal command surface modeled on l123 — first-letter descent,
Escback, no chords. (Refines promote-list item 7 — l123 supersedes Gloomberb as the citation.) - Live mode indicator in Row 0 or Row 24 — modeled on l123’s 13-mode display.
- First-character input rule for the TERM-line context-free input — modeled on l123.
- Authenticity contract for the KN-86 runtime, written in
docs/software/runtime/and backed by acceptance transcripts underkn86-emulator/tests/. Direct citation of l123’s discipline. - Named-aesthetic-mode roster
AMBER / AMBER / CIPHERwith picker + editor on the SYS tab —AMBERcites octoscope’samberCRT theme directly; mechanism cites AetherTune (live preview) + 4TRK (theme editor) + audium (15-themes order of magnitude). - Live “change pulse” border flash on data arrival — modeled on octoscope. CIPHER tab border flashes when a new CIPHER fragment lands; mission-board border flashes when a new contract becomes available.
- Tabbed auto-refresh dashboard for the Bare Deck Terminal, modeled on octoscope + NetWatch.
- Image rendering technique documented in NoshAPI — halfblock-
▀-with-fg-bg-color per asciinator on the desktop emulator; shade-mode rendering on the device. - Lua-as-desktop-tooling-extension-language for cart authoring helpers, emulator debug overlays, etc. Modeled on rs-pug + cliamp.
- Human-editable JSON / TOML / plaintext throughout for all user-facing persistence. No binary blobs where text suffices. Modeled on audium + AetherTune.
src/ui/module isolation from data sources behind a stable trait (AetherTune + l123). Engine-agnostic UI; UI-agnostic engine.
Batch 4 — feature-axis matrix (research references)
Section titled “Batch 4 — feature-axis matrix (research references)”A third matrix oriented around the Batch 4 axes — the implementation-technique dimensions of the build. Each row is a Batch-4 project; columns are the axes the build brief recommends decisions on: rendering core / widgets / scriptability / interaction model / data fetching / aesthetic-effect / runtime pattern / KN-86 aspirational verdict.
Reads complementary to the Batch-3 matrix above: where that one captured user-facing UX axes, this one captures implementation-layer axes.
Column abbreviations: Render = rendering-core contribution; Widgets = widget-inventory contribution; Script = embedded-language / scripting; Interact = interaction-model lesson; Fetch = data-fetching / async / HTTP; Effect = signature aesthetic effect; Pattern = runtime-design-pattern reference.
| Project | Render | Widgets | Script | Interact | Fetch | Effect | Pattern | KN-86 aspirational? |
|---|---|---|---|---|---|---|---|---|
| termui | Channel events on termbox-go | Catalog: BarChart, Gauge, Sparkline, Plot, Table, Tabs, Paragraph, List, Tree, braille Canvas | — | — | — | — | Grid layout | ✅ Widget catalog → NoshAPI inventory |
| blessed-contrib | — | + Donut, LCD display, rolling log, world map, picture viewer; CAROUSEL layout | — | — | — | — | Carousel auto-rotation | ✅ Carousel for Bare Deck Terminal idle state; LCD display for big-glyph identity |
| tuibox | UI → Screen → Box hierarchy; pure-ANSI single-header C; dirty-bit cache | — | — | Mouse-driven, event-loop | — | — | Dirty Flag pattern | ✅ Dirty-bit render cache as nOSh primitive; C-core fallback path |
| cl-termbox2 | Lisp ↔ C FFI bridge | — | Lisp bindings to cell renderer | — | — | — | FFI surface design | ✅ Structural validation of ADR-0001 + ADR-0005 |
| mop | termbox-go | — | — | Terse single-key bindings; filter-expression DSL on Row 24 | — | Row-shading | — | ✅ Filter-expression confirmation (with NetWatch); single-key ergonomics |
| nba-go | Node | — | — | Subcommand+flag CLI design; compare-with-winner-highlight | API fetch + parse + render | — | Async data pipeline | 🟡 Compare/highlight as cart pattern; subcommand CLI for desktop tooling |
| worldmonitor | Web (Tauri 2) | — | — | Command-bar verb model (fly LON DXB); situational-awareness dashboard | 500+ feeds, cross-stream correlation | — | 6-variants-from-one-codebase | 🟡 Command-bar verbs; local-AI-via-Ollama posture for desktop tooling |
| mal | — | — | Canonical 11-step Lisp build curriculum across 89 host languages; self-hosting | — | — | — | TCO, macros, try/catch as language gates | ✅ Direct cite for ADR-0001 / ADR-0004 / ADR-0005; SDK-tutorial scaffold |
| BuildYourOwnLisp | — | — | C-specific Lisp implementation in <1000 lines + mpc parser combinators | — | — | — | — | ✅ Fallback path reference for Fe-replacement; mpc useful for any DSL parsing |
| xiki | Emacs buffer | — | Ruby-backed expansion engine | Expandable-command tree; live-menu interaction | — | — | Tree-as-navigation | ✅ REPL surface adopts Xiki-style expandable text as default interaction |
| EXWM | Emacs + xelb | — | Elisp | Keyboard-driven WM; one environment; shared keymap; tiling + workspaces | — | — | — | ✅ Universal-verb-set commitment; keyboard-as-product doctrine |
| webmacs | Qt WebEngine | — | Python customization | Emacs keybindings on non-text app; link hints; live docs | Browser-native | — | — | ✅ Link-hint single-character labels on every actionable item |
| writeroom-mode | Emacs | — | Elisp | Focus / zen / distraction-free mode | — | — | Hooks on enter/leave | ✅ Focus mode as v0.1 ship-list item |
| emacs-request | — | — | Elisp callbacks | — | Async HTTP; pluggable backends (curl / pure); JSON/XML/text parsers | — | Service Locator | ✅ NoshAPI async-HTTP primitive shape |
| history.el | Emacs | — | Elisp | Non-destructive nav history; doubly-linked list w/ sliding index; smart-skip stale | — | — | Linked-list pattern | ✅ v0.1 runtime affordance; BACK/FORWARD in universal verb set |
| pallet | — | — | Elisp / Cask | — | — | — | Manifest-as-source-of-truth | 🟡 Plugin-manifest pattern for desktop tooling only |
| BOOTSTRA.386 | — | — | — | — | — | DOS WIMP theme + configurable ANSI-art boot/flyby animation | — | ✅ v0.1 boot animation aesthetic commitment |
| NES.css | — | — | — | — | — | 8-bit NES palette; Press Start 2P typography (validates ADR-0014) | — | ✅ Press Start 2P prior-art citation |
| no-more-secrets | — | — | — | — | — | Sneakers-style decryption reveal animation | — | ✅ NoshAPI reveal-text primitive (reimplemented — GPL) |
| loopy | Web Canvas | — | — | — | — | Hand-drawn / playful aesthetic; animated causal-loop simulation | Signal-flow-around-graph | 🟡 Playful-cart aesthetic exception; future causal-loop cart possibility |
| terrain | — | — | — | — | — | — | Priority-queue erosion; Voronoi terrain; label placement | 🔍 Park for hypothetical map / exploration cart |
| Game Programming Patterns | — | — | — | — | — | — | Game Loop, Update, Command, Observer, State, Dirty Flag, Object Pool, Service Locator, Subclass Sandbox, Type Object | ✅ Cite by name in runtime architecture spec |
| Roro | — | — | C# / Roslyn macros | RPA macro recording | — | — | Recorded-action-replay | 🟡 Macro-record/replay v0.2+ REPL affordance |
| terminals-are-sexy | — | — | — | — | — | — | — | 🔍 Reference / appendix |
Batch-4-derived patterns to promote (extends items 1-32 above)
Section titled “Batch-4-derived patterns to promote (extends items 1-32 above)”- Carousel idle-state for the Bare Deck Terminal — auto-rotating tab carousel, configurable interval + disable in
nosh-config.toml(blessed-contrib). - NoshAPI widget catalog matching termui + blessed-contrib inventory: sparkline, gauge, plot, table, tabs, braille canvas, LCD display, rolling log, donut. Plus carousel as the layout primitive for auto-rotating views.
- UI → Screen → Box hierarchy with per-box dirty bit as the nOSh render-pipeline structure (tuibox). Aligns with Game Programming Patterns’ Dirty Flag.
- Mal as direct prior-art citation in ADR-0001 / ADR-0004 / ADR-0005 background sections (mal).
- Cl-termbox2 as structural validation reference for ADR-0001 + ADR-0005 — proof that the embedded-Lisp + C-cell-renderer + FFI bridge architecture composes into a working TUI (cl-termbox2).
- Universal verb set commitment — TERM-line verbs
SAVE,LOOK,INVENTORY,SCORE,BACK,FORWARDare deck-wide commitments, available in every cart, not redefinable per cart (EXWM shared-keymap lesson). Refines item 15. - Link-hint single-character labels on every actionable item on every surface; user types the label to act (webmacs).
- Xiki-style expandable command tree as the REPL’s default interaction model — typed verbs expand in place, results expand further on demand, navigation is tree traversal (xiki).
- Non-destructive navigation history with doubly-linked list + sliding index pointer;
BACK/FORWARDtraverse without losing entries; stale entries auto-skipped (history.el). v0.1 ship-list item. - Focus / zen mode as a v0.1 ship-list item — single keystroke, hide chrome rows, narrow content area, center horizontally, dim (don’t silence) CIPHER-LINE (writeroom-mode).
- Async HTTP primitive in NoshAPI with emacs-request-shaped API (
:on-success/:on-errorcallbacks, pluggable curl vs. pure-runtime backend) (emacs-request). - Boot animation as v0.1 ship-list confirmed — AetherTune is the runtime mechanism reference; BOOTSTRA.386 is the aesthetic commitment reference. AMBER + Press Start 2P + CP437 ANSI-art flyby. Configurable
speed,once_per_session,disable. - NoshAPI reveal-text primitive for Sneakers-style decryption reveal animation (no-more-secrets, reimplemented — GPL prevents vendoring).
- Pallet-style plugin manifest for desktop tooling around KN-86 (cart-authoring helpers, emulator debug-overlay extensions). Hand-editable TOML, manifest-as-source-of-truth, one-directional sync (pallet).
- Filter-expression on Row 24 for list surfaces — small query DSL evaluated in the cart’s KEC Lisp scope (mop + NetWatch — two witnesses). Composes with item 4 (NetWatch filter DSL) by formalizing the syntax.
- Compare-with-winner-highlight pattern in
ui-patterns.mdfor any A-vs-B view; intensity-delta-as-semantic on monochrome amber (nba-go). - Game Programming Patterns cited by name in
docs/software/runtime/architecture writing — Game Loop, Update Method, Command, Observer, State, Dirty Flag, Object Pool, Service Locator, Subclass Sandbox, Type Object (Game Programming Patterns). - Macro-record / Learn mode as v0.2+ REPL affordance (Roro RPA lineage + l123
Alt-F5 LEARN).
Batch 5 — keyboard / hardware-decision matrix
Section titled “Batch 5 — keyboard / hardware-decision matrix”Batch 5 is a decision-recording batch rather than an exploration batch — the matrix below is correspondingly compact. Each row is a Batch-5 reference; the rightmost column captures whether it lands in the build path (prototype/), the archived knowledge layer (research/), or the aesthetic / shell reference layer (inspiration/).
| Reference | Role | Build-path placement | KN-86 disposition |
|---|---|---|---|
| Ferris Sweep — holykeebs | The decided keyboard — 34-key split, RP2040, hotswap, low-profile choc | prototype/ | ✅ Build path. Order from holykeebs as soldered kit. |
| holykeebs Buyer’s Guide | The BOM checklist — configuration matrix decisions for the Sweep order | prototype/ | ✅ Decisions captured; checklist to confirm at order time. |
| GOLEM hub | Master custom-keyboard knowledge index + vintage-terminal-keyboard gallery | research/ | 🟡 Custom-build content archived; vintage-terminal gallery actively used for legend/typography |
| GOLEM plate manufacturing | DXF/KLE pipeline + plate-material facts | research/ | ❌ Archived — Sweep ships with plates |
| GOLEM KMK firmware guide | KMK + KB2040 walkthrough w/ NeoPixel diagnostic codes | research/ | 🟡 Not the firmware path (using QMK+Vial); NeoPixel-status-LED idea + workflow-UX contrast carry forward |
| KMK firmware repo | The KMK firmware project itself; limited life support | research/ | ❌ Fallback reference only; QMK + Vial is the chosen firmware path |
| universal60plate | Free downloadable 60% plate DXF — example artifact | research/ | ❌ Archived reference; KN-86 not building a 60% keyboard |
| Adamow cyberdeck STL | Tactical-cyberpunk silhouette STL reference | inspiration/ | ✅ Shell aesthetic reference — combined with QRPπ template informs the Pelican bezel design |
| TechNIK cyberdeck STL | Alternate-silhouette STL — different hinge / screen-mount | inspiration/ | ✅ Second-silhouette reference; triangulates the design space with Adamow |
| Stream Deck macropad STL (Dante) | Auxiliary macropad form-factor | inspiration/ | 🔍 Optional v2+ accessory; outside the canonical deck scope |
Batch-5-derived patterns to promote (extends items 1-50 above)
Section titled “Batch-5-derived patterns to promote (extends items 1-50 above)”- Ferris Sweep as the keyboard — supersedes the ADR-0024 custom-31-key preferred path. Triggers spec PRs to align Canonical Hardware Specification + ADR-0024 (Ferris Sweep).
- 34-key Sweep + QMK layers ↔ 14-FN + 16-numpad + 1-TERM canonical-functions mapping — design work to scope. The phone-layout numpad cluster from ADR-0016 doesn’t survive split geometry literally; spirit needs translation. (Ferris Sweep.)
- Firmware = QMK + Vial on the holykeebs RP2040 (not KMK, not custom). (Sweep + KMK life-support caveat.)
- Single NeoPixel deck-status LED with documented amber-friendly color vocabulary as a small v0.1 hardware affordance (KMK NeoPixel diagnostic codes lineage, KN-86 vocabulary downstream).
- Pelican-1170 bezel design triangulated from Adamow + TechNIK + QRPπ — three reference points (one close-template, two broader-silhouette) inform the bezel insert design.
- GOLEM vintage-terminal-keyboard gallery as legend/typography reference alongside ADR-0022’s locked legend manifest — Reuters ‘85, Tatung ‘84, IBM 5155 Model F, Kaypro 10, Epson HX-20/40, DEC LK-201 (GOLEM gallery).
- Optional auxiliary macropad accessory for v2+ — 6-12 keys, USB HID, QMK firmware, key legends in Press Start 2P + CP437 to match the canonical deck typography (Dante macropad).
Batch 6 — ASCII effect grammar + Sweep hardware reinforcement
Section titled “Batch 6 — ASCII effect grammar + Sweep hardware reinforcement”Two threads — the screen (ASCII rendering) and the board (Sweep case + keycaps).
Batch 6 — ASCII Effect Spec defaults (verbatim from ../effect/ascii-effects.md)
Section titled “Batch 6 — ASCII Effect Spec defaults (verbatim from ../effect/ascii-effects.md)”| Setting | KN-86 default | Source |
|---|---|---|
numCols | 150 (carts at full-width use 80) | react-video-ascii midpoint, sized for AMBER readability on the 80×25 grid |
charMode | shape | react-video-ascii default; preserves edge detail on monochrome amber |
chars | default 72-char ramp | react-video-ascii verbatim |
brightness | 1.0 | baseline; AMBER aesthetic mode sets absolute intensity |
saturation | 0.0 | KN-86 is monochrome |
bgOpacity | 0.3 | low; text-on-black look |
cropFocus | center | default crop anchor |
mouseEffect style | brighten (trailLen=15, brightness=2.0, radius=0.08, duration=1.0) | react-video-ascii defaults |
clickEffect style | ripple (speed=3.0, brightness=1.1, duration=1.0) | react-video-ascii defaults |
revealEffect style | random (duration=0.4) | react-video-ascii defaults |
Batch 6 — keycap option matrix
Section titled “Batch 6 — keycap option matrix”The hotswap PCB on the Sweep PCB makes keycap swap a no-tools operation; the matrix records both options:
| Keycap option | Pros | Cons | KN-86 disposition |
|---|---|---|---|
| MBK low-profile (canonical) | Commercial supply via holykeebs; uniform visual surface; ships with the order; matches existing canonical commitment | Flat profile means every key feels the same; pinky-column keys see same cap shape as index-column | ✅ Canonical v0.1 commitment |
| Sculpted Choc (mugika9) | Per-row contour improves ergonomics on the 34-key layout; reduces finger travel; better typing accuracy after muscle memory builds | 3D-print quality dependent (SLA strongly preferred); slightly busier visual surface; have to print + finish ourselves | 🟡 Documented alternative for operator post-build swap |
Batch-6-derived patterns to promote (extends items 1-57)
Section titled “Batch-6-derived patterns to promote (extends items 1-57)”- ASCII-effect grammar shipped in v0.1 — default ramp,
charMode: shape, three event types (hover, click, reveal), NoshAPI primitives per the ASCII Effect Spec. (react-video-ascii + libcaca.) - Unified
(reveal ...)NoshAPI primitive — covers both per-cell character-flicker reveal (no-more-secrets) and ramp-by-position reveal (react-video-ascii) under one surface with a:styleflag. Refines item 45 from Batch 4. - ASCII rendering performance budget measured during hardware bring-up; expected 15-30 Hz full-screen on Pi Zero 2 W. Document the realistic cap. (libcaca CPU pipeline.)
- Sweep enclosure decision tracked — print Bubbleology’s v2 case unmodified, or merge it with the Pelican-1170 bezel as a single printed part per Sweep half. Deferred to bezel-design bring-up. (Bubbleology Sweep v2 case.)
- Keycap-swap path via hotswap PCB is sanctioned — MBK canonical for v0.1; operators swap to sculpted Choc (or anything Choc-compatible) post-build with no firmware or spec change required. (mugika9 sculpted Choc + Sweep hotswap.)
- Single project-wide ASCII visual language — every cart, every surface, every animation uses the same default ramp + charMode + interaction-event grammar unless explicitly overridden. (ASCII Effect Spec doctrine.)
Batch 8 — Deckline-core promote-to-spec matrix
Section titled “Batch 8 — Deckline-core promote-to-spec matrix”The largest capture (49 production TUIs) yields the longest promote-to-spec list. Drawn from the two dedicated synthesis docs — ../synthesis-batch8.md §5 (the Deckline-core 10) and ../synthesis-batch8-architecture.md (library shortlist + A4 primitives + libuv) — plus the KN-90T Toneline buildable feature set. Canon throughout: 128×75 + 128×150 half-block per ADR-0027 (the superseded 80×25 references in pre-ratification entries are recast at the current grid). Each row cross-references its source project(s); the matrix below continues the running promote-item numbering from item 63.
Deckline-core (synthesis-batch8 §5) — UI catalog / single-color / ambient / LISP
Section titled “Deckline-core (synthesis-batch8 §5) — UI catalog / single-color / ambient / LISP”| # | Promote-to-spec item | Source project(s) | Lands in |
|---|---|---|---|
| 64 | (draw-sparkline …) primitive — the logradar recipe (▁▂▃▄▅▆▇█ ramp, 24 buckets / 2-min rolling window, soft-cap at 3× non-zero mean, newest bucket bolded) | logradar, cava, astroterm | NoshAPI catalog (ADR-0005) |
| 65 | (status-glyph …) primitive — distinct glyph per state (● ◐ ✖ ○), frame-cycle to animate; never a colored dot | logradar, BrogueCE, visidata | NoshAPI catalog |
| 66 | Table primitive — pinned header + scrolling body + frozen columns (f<n>) + bottom : command line + mode/counts status strip | csvlens, sc-im, visidata, sheetsui | NoshAPI catalog + ui-patterns.md |
| 67 | Ambient / screensaver mode — idle-timer (reuse power-idle path) + scene roster + Deck-State (cipher_seed) seeding + (reveal :radial)/(unreveal :radial) lifecycle exit, under the 20 fps cap so idle lowers draw | neo, astroterm, cbonsai | orchestration.md + a small ADR if it touches Universal Deck State |
| 68 | (draw-framebuffer) as sugar over (half-block-set) — sprite-from-bytes blit into the 128×150 half-block canvas (cart-usable 128×146); Fe-side library, not a new FFI surface | browsh, php-gameboy, mapscii | ADR-0027 half-block helper library |
| 69 | Namespace NoshAPI by domain (cell/*, deck/*, mission/*, audio/*, cipher/*) rather than ~30 flat builtins — more discoverable, more stable across versions | micro (namespaced Lua import) | ADR-0005 revision |
| 70 | Cart-facing “query language” = Fe expressions, not a bespoke DSL — every filter reduces to a predicate over a row: (filter (lambda (row) …) rows); skip the parser/AST entirely | csvlens, loglens-core, visidata | lisp-paradigm.md |
| 71 | Tree-browser widget = s-expression browser — CAR enter / BACK out / CDR next / TAB collapse; one implementation serves reader-mode content and nEmacs structural editing | hackernews-TUI, bookokrat, mc | ui-patterns.md + ADR-0008 |
| 72 | Single-color rule set — design as if color never existed, then add three orthogonal channels back (glyph=identity, inversion=selection/focus/hazard, density-ramp=magnitude) + three supporting channels (border-weight, leading-glyph column, frame-tick glyph-cycle) | BrogueCE, logradar, durdraw | screen-design-rules.md |
| 73 | Zoom-as-row-semantics — let the operator trade range against detail by changing what each row means (30/15/5/1 min, etc.), not by adding rows; a cross-surface density tool on the 75-row grid | chronos | ui-patterns.md |
Architecture (synthesis-batch8-architecture) — library shortlist + A4 + A5
Section titled “Architecture (synthesis-batch8-architecture) — library shortlist + A4 + A5”| # | Promote-to-spec item | Source project(s) | Lands in |
|---|---|---|---|
| 74 | Adopt the cavacore core/render split by name — pure render-agnostic C core (mission board, economy, phase chain, Deck State, CIPHER, Fe VM) under thin swappable backends; the constrained Fe cell API is the cavacore seam | cava (cavacore) | runtime architecture spec (the boundary ADR-0027 defines) |
| 75 | Borrow no TUI library beyond termbox2; own the implementation — the shortlist verdict: every higher-level library fights the bespoke-screen + constrained-FFI model, drags in C++/Rust/Node, or duplicates termbox2 + a thin Fe UI lib | tui-library-shortlist, ink | confirms ADR-0027 (no re-open) |
| 76 | Optional internal “Lisp-native Ink” Fe UI library — borrow exactly three Ink patterns (box-composition layout combinators → integer cell rects; focus management consuming the pre-classified on-key events; component-level memoization to avoid re-running render lambdas). Never import React/yoga/a reconciler | ink, ink-web | optional Fe UI library (convenience, not substrate) |
| 77 | Row 74 action-bar spec modeled on ink-ui status-bar — inverse-bold key badges (inverse video is the one “second color” a monochrome display gets free); badge composition, hint-group spacing, overflow truncation at 128 cols. nOSh chrome, not cart-facing | ink-web (ink-ui) | bare-deck-terminal.md + repl.md Row-74 advertisement |
| 78 | (draw-keyboard …) primitive (PROPOSAL — warrants a future ADR) — renders the Ferris Sweep 34-key split + function-block legend on the 128×75 grid with :highlight/:pressed states (inversion, never a second hue); read-only chrome for in-band keymap discovery, SYS keyboard-test, tutorials. Legend referenced to ADR-0022/0031, not restated | typeinc | dedicated ADR or scoped ADR-0005 amendment |
| 79 | libuv = pattern-only, do not link — termbox2 already owns the loop; the networking half is unused, the realtime half is on the Pico 2, and a worker pool breaks Fe’s single-threaded arena. Take the single-loop/typed-event-sources pattern; hold a bounded worker pool in reserve | libuv | confirms the existing tb_poll_event + frame-timer model |
KN-90T Toneline (sister-product) — buildable feature set from the Batch 8 audio cluster
Section titled “KN-90T Toneline (sister-product) — buildable feature set from the Batch 8 audio cluster”Promotes into the Toneline concept doc, not the KN-86 runtime, but logged here for cross-reference because the audio entries are shared corpus.
| # | Promote-to-spec item | Source project(s) | Lands in |
|---|---|---|---|
| 80 | The sequencer language IS KEC Lisp — phrase = list, song = list-of-lists, LAMBDA defines a reusable phrase, transforms are the standard list library (reverse/rotate/shuffle/repeat); terse line-style prompt and nEmacs s-expression are two front-ends over one representation | line | kn90t-toneline.md §1 |
| 81 | Single-color audio visualization — eighth-block ▁▂▃▄▅▆▇█ spectrum (8× sub-cell vertical), cavacore DSP/render split, band-array exposed as a NoshAPI primitive for cart-drawn visualizers, peak-hold gravity fall-off | cava | kn90t-toneline.md §2 |
| 82 | Single-color UI component kit — piano strip (sounding note inverts), linear slider, rotary dial, waveform-with-playhead (time-domain complement to the spectrum) | upiano, valveFM, asak | kn90t-toneline.md §3 |
| 83 | Recording + shell scaffolding — mode-selector splash front door, record→monitor→save loop, numeric view-switching (1–7), one-line Row-0 transport bar, library-vs-queue separation, toggle-able queue panel + list-edit undo/redo | asak, cmus, waves | kn90t-toneline.md §4–§5 |
| 84 | LINK port = Ableton-Link-style shared-beat sync — derive all phrase timing from a shared beat/quantum so instances stay phase-locked; the blueprint for the fiction’s two-Tonelines-jamming LINK port | line | kn90t-toneline.md §6 |
A companion typing-game cart concept (ghost-competitor race mode) also surfaced from typing-game-cli, paired with the (draw-keyboard) widget from typeinc (item 78) — parked as a cart-concept, not a near-term spec commit.