v0.0.1: backend protocol — abstraction layer + simple backend
Implement the backend protocol with two backends (modern planned, simple done). Includes package definitions, CLOS generic protocol, simple-backend with ASCII borders, and 9 FiveAM tests. RED: 9/9 tests failing (no implementation) GREEN: 9/9 tests passing - backend/package.lisp — defpackage, exports - backend/classes.lisp — backend base class, 18 generics - backend/simple.lisp — simple-backend implementation - backend/tests.lisp — 9 FiveAM test cases - org/backend-protocol.org — literate source
This commit is contained in:
@@ -5,10 +5,81 @@
|
||||
* The Roadmap
|
||||
|
||||
Each phase is one minor release. Phases ship in dependency order — each depends on
|
||||
the components from prior phases. The layout engine ships first because everything
|
||||
else builds on it.
|
||||
the components from prior phases. The backend protocol ships first because
|
||||
everything else builds on it.
|
||||
|
||||
Feature releases increment the minor version (v0.X.0). Bugfix releases increment
|
||||
** v0.0.1: Foundation — Backend Protocol
|
||||
|
||||
The abstraction layer that makes everything portable. Two backends:
|
||||
=modern= (raw escape sequences, truecolor, modern features) and =simple=
|
||||
(ASCII art, universal compatibility). The component tree never touches
|
||||
the terminal directly — it dispatches through the protocol.
|
||||
|
||||
*** TODO Backend protocol definition
|
||||
:PROPERTIES:
|
||||
:ID: id-v000-protocol
|
||||
:CREATED: [2026-05-10 Sat]
|
||||
:END:
|
||||
|
||||
- Define =backend= abstract class with generic functions:
|
||||
- =initialize-backend=, =shutdown-backend=, =suspend-backend=, =resume-backend=
|
||||
- =backend-size=, =backend-write=, =backend-clear=
|
||||
- =begin-sync=, =end-sync= — DECICM synchronized updates
|
||||
- =draw-rect=, =draw-text=, =draw-border=, =draw-ellipsis=, =draw-link=
|
||||
- =cursor-move=, =cursor-hide=, =cursor-show=, =cursor-style=
|
||||
- =read-event=, =enable-mouse=, =enable-bracketed-paste=, =set-keyboard-mode=
|
||||
- =capable-p= — query feature support
|
||||
- Style plist structure: ~(:fg :error :bg :background-panel :bold t :italic nil ...)~
|
||||
- ~100 lines
|
||||
|
||||
*** TODO Simple backend
|
||||
:PROPERTIES:
|
||||
:ID: id-v000-simple
|
||||
:CREATED: [2026-05-10 Sat]
|
||||
:END:
|
||||
|
||||
- =simple-backend= class — inherits =backend=
|
||||
- Borders: ASCII (~+-|~), no rounded corners
|
||||
- No color, no bold/italic — plain characters only
|
||||
- No OSC 8 links, no mouse, no synchronized updates
|
||||
- Works on any terminal, any SSH connection, piped output
|
||||
- ~100 lines
|
||||
|
||||
*** TODO Modern backend
|
||||
:PROPERTIES:
|
||||
:ID: id-v000-modern
|
||||
:CREATED: [2026-05-10 Sat]
|
||||
:END:
|
||||
|
||||
- =modern-backend= class — inherits =backend=
|
||||
- Truecolor 24-bit foreground/background
|
||||
- Rounded, single, double border styles via Unicode box-drawing
|
||||
- OSC 8 hyperlinks (clickable URLs)
|
||||
- DECICM synchronized updates (flicker-free)
|
||||
- SGR mouse tracking + kitty keyboard protocol
|
||||
- Bracketed paste detection
|
||||
- Bold, italic, underline, dim, blink, reverse, strikethrough
|
||||
- Cursor style: =:bar=, =:block=, =:underline=, with blink option
|
||||
- ~250 lines
|
||||
|
||||
*** TODO Terminal capability detection
|
||||
:PROPERTIES:
|
||||
:ID: id-v000-detection
|
||||
:CREATED: [2026-05-10 Sat]
|
||||
:END:
|
||||
|
||||
- =detect-backend= → returns =modern-backend= or =simple-backend=
|
||||
- Check if stdout is a TTY (if not → =simple-backend=)
|
||||
- Send DA1 (~ESC[c~) query, 100ms timeout
|
||||
- Send DA3 (~ESC[?c~) for kitty/wezterm identification
|
||||
- Query DECRPM (~ESC[?2026$p~) for DECICM sync support
|
||||
- Query truecolor support via =COLORTERM= env var + DA response
|
||||
- Cache detection result so subsequent calls are instant
|
||||
- ~100 lines
|
||||
|
||||
~550 lines total. Dependencies: None (pure CL, no FFI, no external libs).
|
||||
|
||||
** v0.0.2: Layout Engine
|
||||
the patch version (v0.X.Y).
|
||||
|
||||
** File Update Checklist
|
||||
|
||||
Reference in New Issue
Block a user