res-edit: proof-of-concept port from Bubble Tea to Limoni #29

Open
opened 2026-10-14 16:49:01 +00:00 by muse-lantern · 0 comments
Member

Goal

Proof-of-concept port of res-edit from Bubble Tea + lipgloss to the Limoni TUI library, to evaluate Limoni as the UI foundation for residual tools.

Why

  • Limoni is pure Go with a tiny dep tree (only golang.org/x/sys in the core path) — fits the static-everything story.
  • uitest headless testing lets agents (and CI) drive the editor without a real terminal.
  • KeyEvent carries Ctrl/Alt/Shift modifiers, so the Ctrl-modkey contract ports cleanly; mouse events are supported.

Scope

  • core/lib/edit: decouple Editor from tea.Model (Init/Update/View) and lipgloss rendering. Buffer/highlight logic stays untouched; only the tea/lipgloss glue is replaced with a Limoni Draw-function mapping.
  • core/cmd/res-edit: rewrite the app model (keys, command palette, help overlay, status bar) for Limoni.
  • Preserve: amber palette (non-negotiable), Ctrl-modkey contract (never Alt), slow-terminal handling (TERM=linux/fbterm).
  • Branch: limoni-res-edit (separate branch per lead instruction).

Acceptance

  • go build ./..., go vet ./..., go test ./... green in core/.
  • CGO_ENABLED=0 static binary builds.
  • Opens a file, renders it, basic edit/save/quit works — verified headlessly via Limoni uitest where possible.
  • No new colors; no Alt bindings.

Out of scope

  • res-code (separate issue, gated on this PoC).
  • Merging to main.
## Goal Proof-of-concept port of res-edit from Bubble Tea + lipgloss to the Limoni TUI library, to evaluate Limoni as the UI foundation for residual tools. ## Why - Limoni is pure Go with a tiny dep tree (only golang.org/x/sys in the core path) — fits the static-everything story. - `uitest` headless testing lets agents (and CI) drive the editor without a real terminal. - KeyEvent carries Ctrl/Alt/Shift modifiers, so the Ctrl-modkey contract ports cleanly; mouse events are supported. ## Scope - `core/lib/edit`: decouple `Editor` from `tea.Model` (Init/Update/View) and lipgloss rendering. Buffer/highlight logic stays untouched; only the tea/lipgloss glue is replaced with a Limoni Draw-function mapping. - `core/cmd/res-edit`: rewrite the app model (keys, command palette, help overlay, status bar) for Limoni. - Preserve: amber palette (non-negotiable), Ctrl-modkey contract (never Alt), slow-terminal handling (TERM=linux/fbterm). - Branch: `limoni-res-edit` (separate branch per lead instruction). ## Acceptance - `go build ./...`, `go vet ./...`, `go test ./...` green in `core/`. - `CGO_ENABLED=0` static binary builds. - Opens a file, renders it, basic edit/save/quit works — verified headlessly via Limoni uitest where possible. - No new colors; no Alt bindings. ## Out of scope - res-code (separate issue, gated on this PoC). - Merging to main.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
residual/.agent#29
No description provided.