Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/TUI-inline-eval.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,21 +29,21 @@ Nothing in the 0.6.4 types is an inline-mode renderable, an alternate inline sce
- overlay selectors (empty-state fail-close, painted-id accept, shared list viewport)
- the prompt kill ring

A raw scrollback log also has no place for the shell-output preview the host paints on a timer. Sticky polling exists because the preview is a zone in the fullscreen tree, not a line already committed to scrollback.
A raw scrollback log also has no place for the shell-output preview the host repaints from feed appends, coalesced on one animation frame, or for sticky chrome clocks that run on a renderer Timeline only while needed. That paint exists because the preview is a zone in the fullscreen tree, not a line already committed to scrollback.

## What stays

- `src/tui/shell/layout.ts` applies terminal geometry: floors, prompt-row sync, landing split, relayout inputs.
- `src/tui/geometry/zones.ts` defines the floors and the collapse order the layout refuses to violate.
- `src/tui/shell/chrome.ts` `relayout` is the live entry that re-resolves the tree when visibility, prompt rows, or overlay mode change.
- The `stickyPoll` interval in `src/tui/product-host.ts` keeps the shell-output preview and sticky chrome clocks painted. It is not scrollback.
- Feed subscriptions and a renderer Timeline in `src/tui/product-host.ts` keep the shell-output preview and sticky chrome clocks painted. Idle does not arm an interval. Neither is scrollback.

## Deleted if inline mode were adopted

It is not adopted. If it were, the deletion this record refuses is:

- `shell/layout.ts`, the `geometry/zones.ts` floors, and `chrome.ts` relayout would be deleted or bypassed for a scrollback-only writer.
- `stickyPoll` would go, because a raw scrollback commit has no sticky zone to repaint.
- The host's shell-output subscription and Timeline would go, because a raw scrollback commit has no sticky zone to repaint.

Those files stay. Bypassing them for `writeToScrollback` would drop the floors, the single scroll lease, overlay selectors, and the prompt kill ring. None of that is implied by a scrollback snapshot.

Expand Down
26 changes: 13 additions & 13 deletions docs/TUI.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,13 +116,13 @@ plus up to three dim tail lines of the command's live output and — when the
feed window holds more than three lines — the same dim `⋯ +N lines` elision
marker as the settle preview, `N` counting lines within the live window (the
feed keeps only the most recent 8 KiB). The output
travels through a polled bounded feed (`src/session/shell-output-feed.ts`),
travels through a bounded feed (`src/session/shell-output-feed.ts`),
not a reactor event: the plugin appends chunks (capped at an 8 KiB tail per
call, emitting at most once per 100 ms plus a final flush at settle), and
the product host's sticky poll reads the feed snapshot every 200 ms and
repaints the pending row frame-coalesced. Nothing from the feed is
persisted. When the feed is not wired (tests, the demo shell), the row
renders exactly as before — silent degradation.
call, emitting at most once per 100 ms plus a final flush at settle). The
product host subscribes to those appends and repaints the pending row from
the feed snapshot, coalesced onto one animation frame. Nothing from the
feed is persisted. When the feed is not wired (tests, the demo shell), the
row renders exactly as before — silent degradation.

At settle the live tail is replaced by a preview of the full output: its
last three lines plus a dim `⋯ +N lines` elision marker when more were
Expand Down Expand Up @@ -303,9 +303,9 @@ user follow-ups untouched.
stack-only (`layoutMode: "stack"`, `railWidth: 0`); the zone max is
`AGENTS_PANEL_MAX_VISIBLE + 1` (lanes plus a trailing `+N more`). Finished
lanes (done / failed / cancelled / interrupted) linger for
`AGENTS_PANEL_LINGER_MS` (4s) after `finishedAt`, then drop. Product-host sticky
poll uses
`agentsChromeNeedsSticky` so clocks and linger stay fresh; while sticky is
`AGENTS_PANEL_LINGER_MS` (4s) after `finishedAt`, then drop. The product host
arms a renderer Timeline only while sticky chrome or a live lane needs it
(`agentsChromeNeedsSticky`); idle does not arm an interval. While sticky is
needed it **does not** call `bridge.syncAgentProgress` — chrome owns the live
clocks.

Expand Down Expand Up @@ -1058,10 +1058,10 @@ terminal. It cannot observe:

- **Real paint.** Tests assert on the shell's in-memory row/rect state, not
on what a terminal emulator actually draws to a screen buffer.
- **The live shell tail's wall clock.** The feed itself is pure and the
cadence is injectable, so the live tail is headless-testable by driving a
fake feed and a fake clock through the same sync path the sticky poll
uses; what the harness cannot see is real-time emission timing.
- **The live shell tail's wall clock.** The feed itself is pure, so the
live tail is headless-testable by appending to a fake feed and repainting
through the host subscription on the next frame; what the harness cannot
see is real-time emission timing.
- **Modifier reporting.** Whether a real terminal can report Shift+Enter,
Alt+letter, or similar modifier combinations depends on the terminal
negotiating the kitty keyboard protocol (or an equivalent) with the actual
Expand Down
Loading