feat: add persistent dynamic panels
CI / rust (push) Successful in 2m10s

This commit is contained in:
2026-08-31 18:43:36 -07:00
parent 4ed7613b22
commit 3409cabb80
13 changed files with 1125 additions and 133 deletions
+10 -6
View File
@@ -20,9 +20,12 @@ decision-shelf actions, usage-detail provenance, and end-to-end platform
accessibility/IME.
Panel lifecycle is now visible in the slice: every panel has a Detach action,
the workspace bar has Add panel, and the sidebar exposes Detached sessions for
reattachment. The wording is deliberate because panel removal keeps its session
alive; termination is not exposed as a visually equivalent close action.
the workspace bar opens an Add Panel chooser for Terminal, Browser, Markdown,
and Review, and the sidebar and chooser expose Detached sessions for
reattachment. Created panels are inserted beside the selection and receive a
monotonic identity persisted with their ordering and attachment state in local
SQLite. The wording is deliberate because panel removal keeps its session alive;
termination is not exposed as a visually equivalent close action.
Screenshots for the audit are stored outside Git under
`~/shots/2026-08/lumbridge-ui-audit/`. Accessibility and IME correctness cannot
@@ -87,7 +90,7 @@ surface rather than a hosted Lumbridge control plane.
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.
- `Alt+Shift+N`: add or reattach the next panel in the deterministic slice.
- `Alt+Shift+N`: open the Add Panel chooser; `1``4` create a typed panel.
- `Alt+Shift+W`: detach the selected panel while its session keeps running.
- `Cmd+K` on macOS or `Ctrl+K` on Linux: open the command palette.
- `Shift+PageUp/PageDown`: move the selected live terminal through retained
@@ -98,8 +101,9 @@ surface rather than a hosted Lumbridge control plane.
separate explicit action and is never triggered by focusing the pane.
- `Escape` closes transient UI before it changes workspace state.
Every command is represented by the shared interaction model so GPUI and Floem
receive the same state transitions and tests.
The six seed surfaces still replay through the shared interaction model so GPUI
and Floem retain a comparable benchmark. Dynamic product panels use the GPUI
panel registry until that contract moves into the framework-neutral UI crate.
## Decisive workload