feat: make terminal the primary workspace surface
CI / rust (push) Successful in 2m7s

This commit is contained in:
2026-08-31 17:18:55 -07:00
parent b838d000db
commit 1204689de0
11 changed files with 643 additions and 157 deletions
+18 -18
View File
@@ -9,15 +9,13 @@ framework decision gate, not a decorative dashboard.
## Current-run audit
The 2026-08-31 GPUI baseline succeeds at calm density: the six surfaces are easy
to scan, typography is consistent, and local/remote targets remain visible. It
fails the task flow in four important ways:
1. all panes have equal visual priority, so `NEEDS INPUT` is too easy to miss;
2. no pane exposes visible keyboard focus or selection;
3. the command palette affordance has no interaction behind it;
4. status and usage text in the footer is too quiet to explain provenance or
confidence at a glance.
The first 2026-08-31 GPUI baseline proved six-surface density but gave every
pane equal visual priority. The current slice replaces that dashboard with a
3×1 default: 20% context and pane selection, 60% active work surface, and 20%
decision shelf. Keyboard focus, command-palette input, live PTY input, styled VT
cells, cursor shapes, and geometry-driven resize are wired. Remaining visible
gaps are terminal selection/scrollback, real decision-shelf actions, usage-detail
provenance, and end-to-end platform accessibility/IME.
Screenshots for the audit are stored outside Git under
`~/shots/2026-08/lumbridge-ui-audit/`. Accessibility and IME correctness cannot
@@ -60,11 +58,12 @@ surface rather than a hosted Lumbridge control plane.
palette shortcut.
2. The sidebar starts with a compact `ATTENTION` group, followed by workspaces
and remote hosts. It does not become a notification feed.
3. The active pane receives a two-pixel accent edge plus a quiet tinted header.
4. A waiting pane uses an amber semantic label and remains visible when another
pane is selected. The label always includes words such as `NEEDS INPUT`.
5. Pane headers expose title, execution target, harness state, and unread count
in a stable order.
3. A compact top 20% context band keeps all pane identities and states visible;
the selected pane receives the accent treatment.
4. A waiting pane uses an amber semantic label in both the context band and
attention sidebar. The label always includes words such as `NEEDS INPUT`.
5. The middle 60% gives the selected terminal or work surface uninterrupted
reading space and retains target, harness state, dimensions, and surface tabs.
6. The footer groups connection state, selected-harness identity, usage-window
provenance, and burn forecast into readable regions.
7. The selected pane has a quiet surface strip for Terminal, Browser, Tools,
@@ -75,7 +74,7 @@ surface rather than a hosted Lumbridge control plane.
## Keyboard task flow
- `Alt+Arrow` or `Alt+h/j/k/l`: move focus through the 2×3 pane grid while
- `Alt+Arrow` or `Alt+h/j/k/l`: move selection through the pane topology while
leaving ordinary terminal arrows and text available to the PTY.
- `Alt+1` through `Alt+6`: focus a pane directly while leaving terminal digits
available to the PTY.
@@ -93,8 +92,8 @@ receive the same state transitions and tests.
- In the first actor integration, one terminal pane consumes ordered output from
a real local PTY while each deterministic tick updates the other five
surfaces. The all-deterministic constructor remains available for framework
comparison and replay tests.
surfaces offscreen. The all-deterministic constructor remains available for
framework comparison and replay tests.
- One pane enters and leaves `needs input` through a deterministic event.
- Markdown, browser-boundary, and review panes update counters without using a
web application shell.
@@ -103,7 +102,8 @@ receive the same state transitions and tests.
element-build timing is never presented as display-present timing.
- The PTY actor replaces exactly one synthetic stream without changing focus or
layout contracts. Synthetic streams stay available for repeatable performance
tests. Raw lines do not claim terminal-emulation fidelity.
tests. Live bytes are parsed into VT state and coalesced native paint runs;
deterministic fixture text makes no terminal-emulation claim.
## Hard gates