This commit is contained in:
@@ -89,6 +89,12 @@ approval boundary. The selected panel alone owns keyboard input. Six surfaces
|
||||
continue updating so performance comparisons remain meaningful, with a sliding
|
||||
visible window keeping the selected pane onscreen. See decisions 0008 and 0009.
|
||||
|
||||
Panel attachment is independent from session lifetime. Detaching removes a pane
|
||||
from the layout tree but retains its definition in the workspace's detached
|
||||
registry and leaves its runtime-owned process alive. Reattaching restores that
|
||||
identity without a launch. Terminating an attached or detached session is a
|
||||
separate Execute-capability operation. See decision 0010.
|
||||
|
||||
We should evaluate, not blindly copy, WezTerm, Zellij, RMUX, tmux, and cmux. The
|
||||
first spike must compare a reusable terminal crate with a small first-party layer.
|
||||
Remaining correctness cases include OSC 8 links, Kitty
|
||||
|
||||
@@ -79,6 +79,13 @@ capability each choice would need. Suggestions are inert data. Choosing one may
|
||||
prepare a typed workspace plan, but any command, file mutation, credential use,
|
||||
or external message still passes through the normal approval and command plane.
|
||||
|
||||
Removing a panel detaches it from the layout; it does not terminate the pane's
|
||||
PTY, agent, browser, or remote session. Detached sessions remain visible in a
|
||||
workspace tray and can be reattached without relaunching. Termination is a
|
||||
separate, explicitly named Execute-capability action with confirmation. The add
|
||||
control creates the default panel beside the selection, with a menu for choosing
|
||||
a surface or reattaching a running session. At least one panel remains attached.
|
||||
|
||||
## Lumbridge Harness
|
||||
|
||||
Lumbridge Harness is an optional orchestrator distributed as a separately
|
||||
|
||||
+2
-1
@@ -11,7 +11,8 @@ They are shallow snapshots for study, not dependencies or vendored source.
|
||||
## Multiplexers and terminal engines
|
||||
|
||||
- `manaflow-ai/cmux`: the current cmux product; native workspace/pane model,
|
||||
automation socket, embedded browser, agent hooks, and terminal UX.
|
||||
automation socket, embedded browser, agent hooks, and terminal UX. The
|
||||
captured tree is GPL-3.0-or-later, so it is behavior/UX study only.
|
||||
- `Helvesec/rmux`: Rust multiplexer engine, daemon, typed SDKs, tmux surface.
|
||||
- `tmux/tmux`: the durable client/server and command model to remain compatible
|
||||
with where useful.
|
||||
|
||||
+4
-2
@@ -104,7 +104,8 @@ who already have the final cargo-watch release installed.
|
||||
## Implemented vertical-slice coverage
|
||||
|
||||
- The framework-neutral six-surface model has deterministic tests for focus,
|
||||
direct selection, needs-input transitions, command-palette lifecycle,
|
||||
direct selection, reversible attach/detach, last-panel protection, detached
|
||||
background updates, needs-input transitions, command-palette lifecycle,
|
||||
identical GPUI/Floem action replay, bounded output, and workload counters.
|
||||
- `lumbridge-pty` runs synthetic `/bin/sh` tests for raw output, non-zero exits,
|
||||
input, resize, one-chunk backpressure, hung-process termination, invalid
|
||||
@@ -117,7 +118,8 @@ who already have the final cargo-watch release installed.
|
||||
alternate screen, bracketed paste, protocol replies, sanitized title and
|
||||
blocked OSC 52 behavior, key encoding, application-cursor mode, and resize.
|
||||
- `lumbridge-core` tests capability-gated split/select/rename/close commands,
|
||||
idempotent request IDs, close-tree promotion, and atomic agentic setup plans.
|
||||
idempotent request IDs, close-tree promotion, detached-pane reattachment,
|
||||
Execute-gated detached termination, and atomic agentic setup plans.
|
||||
- The GPUI slice tests its key-event adapter, responsive one/three/five-panel
|
||||
geometry, selected-panel windowing, per-panel 20/60/20 PTY sizing, xterm
|
||||
256-color conversion, styled-run coalescing, cursor-run boundaries, and
|
||||
|
||||
@@ -25,8 +25,11 @@ The current programs establish dependency, build, launch, and interaction
|
||||
baselines. GPUI now routes a real PTY through a VT engine and keyboard encoder,
|
||||
paints coalesced styled cell runs and cursor shapes, and derives PTY rows/columns
|
||||
from the 60% terminal region inside each responsive one/three/five-panel layout
|
||||
when the window changes. Retained-history page/top/bottom navigation is wired. Text selection,
|
||||
mouse modes, a native Markdown editor, and one isolated browser child remain.
|
||||
when the window or attached panel count changes. Retained-history
|
||||
page/top/bottom navigation is wired. Panel detach/reattach keeps background
|
||||
surface updates alive and exposes detached sessions in the sidebar. Text
|
||||
selection, mouse modes, a native Markdown editor, and one isolated browser child
|
||||
remain.
|
||||
|
||||
## Ubuntu baseline — metal, 2026-08-31
|
||||
|
||||
|
||||
@@ -19,6 +19,11 @@ Remaining visible gaps are terminal text selection and mouse modes, real
|
||||
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.
|
||||
|
||||
Screenshots for the audit are stored outside Git under
|
||||
`~/shots/2026-08/lumbridge-ui-audit/`. Accessibility and IME correctness cannot
|
||||
be established from screenshots and remain explicit runtime gates.
|
||||
@@ -82,6 +87,8 @@ 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+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
|
||||
history; `Shift+Home/End` jumps to the history top/live bottom.
|
||||
|
||||
@@ -14,6 +14,11 @@ process requires Execute; layout-only changes require Configure. Launch intents
|
||||
refer to a user shell or an approved harness profile and working directory, not
|
||||
arbitrary executable arguments or secret values.
|
||||
|
||||
Detaching and reattaching an existing pane are layout-only Configure operations.
|
||||
Detached pane definitions remain outside the layout tree so reattachment does
|
||||
not imply a new launch. Terminating either an attached or detached session
|
||||
remains an Execute operation. See decision 0010.
|
||||
|
||||
This reducer is not an authorization bypass. The future IPC layer authenticates
|
||||
the caller and supplies its granted capability; the reducer rechecks it before
|
||||
mutation. Durable audit events record request and object identities, never
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
# 0010: Removing a panel detaches its session before termination
|
||||
|
||||
Status: accepted for implementation.
|
||||
|
||||
A workspace panel is a view attachment, not the lifetime owner of a PTY, agent,
|
||||
browser, or remote session. The normal remove action is therefore **Detach
|
||||
panel**. It removes the panel from the visible layout, keeps its stable pane and
|
||||
session identities, preserves output and decision state, and exposes the item in
|
||||
a Detached sessions tray. Reattaching it is a Configure-capability operation and
|
||||
must not launch a second process.
|
||||
|
||||
Termination is a separate Execute-capability operation. It is presented as
|
||||
**Terminate session**, never as an ambiguous close icon, and will require a
|
||||
confirmation that names the process, target machine, and any dirty or waiting
|
||||
state. Detaching the selected panel chooses its next attached sibling, falling
|
||||
back to the previous sibling. A workspace retains at least one attached panel.
|
||||
|
||||
The add affordance has two product paths: quick activation creates the user's
|
||||
default panel beside the selection, while its menu offers Terminal, Browser,
|
||||
Markdown, Review, and Reattach running session. The deterministic UI spike uses
|
||||
six fixed fixtures, starts with five attached, and reattaches the first detached
|
||||
fixture when Add panel is activated. That fixture limit is test scaffolding, not
|
||||
a product limit.
|
||||
|
||||
The typed command plane retains detached pane definitions separately from the
|
||||
layout tree. `ClosePane(Detach)` moves a definition into that registry,
|
||||
`AttachPane` restores it without a launch intent, and `ClosePane(Terminate)`
|
||||
requires Execute authority whether the pane is attached or detached. The future
|
||||
runtime registry remains the process owner throughout these layout transitions.
|
||||
|
||||
This interaction vocabulary was informed by behavior study of cmux at
|
||||
`fc36aea87e3b4152637597443d7aa7c22e4ec9f8` and Orca at
|
||||
`02a7742406a5a84fb372d6255d5a4367421990bd`. cmux is GPL-3.0-or-later and was
|
||||
used only to study workspace/split shortcuts and close-versus-detached process
|
||||
behavior. Orca is MIT-licensed and was used to study worktree-first navigation,
|
||||
durable terminal state, and mixed surface density. No implementation code or
|
||||
visual asset was copied from either project.
|
||||
Reference in New Issue
Block a user