Skip to content

One fleet board replacing the task panel and agents strip - #432

Merged
TheGreatAxios merged 5 commits into
mainfrom
cl-5755-fleet-surface
Aug 9, 2026
Merged

One fleet board replacing the task panel and agents strip#432
TheGreatAxios merged 5 commits into
mainfrom
cl-5755-fleet-surface

Conversation

@TheGreatAxios

Copy link
Copy Markdown
Collaborator

Draft — implementation of the approved CL-5755 design: one board zone replacing both the task panel and the agents strip, sized to content, capped at 62% of the terminal, prompt always anchored.

Not ready to merge. The branch predates the sub-agent observability work now on main (the call-id-keyed tool clock, the fleet roll-up, the summary row), which touches the same store and chrome. The rebase is a substantive reconciliation, not a fixup — main now contains overlapping fleet aggregation that this board must consume rather than duplicate.

Pushed so the work survives; the implementing session ended mid-rebase.

@linear-code

linear-code Bot commented Aug 9, 2026

Copy link
Copy Markdown

CL-5755

Task state is live state owned by the task panel, and it was also being
written into scrollback three separate ways: every manage_tasks call
painted a tool row, resume unshifted an aggregated tasks block, and the
Alt+T toggle appended a row saying which panels were showing.

That rendered the same list twice on one screen - once in a panel that
updates in place, and again as history that never does. With a dozen
tasks it was a third of the noise on the screen by itself.

The live path now drops manage_tasks calls and their results, tracking
the suppressed call ids so a result never lands unpaired. Resume feeds
restoreTasks and nothing else. The toggle says what it did in a flash,
which is the right lifetime for a claim about the current screen.

Nothing produces a tasks content block any more, so the block type and
its hydration path go with it rather than staying as a shim.
Aggregate header, trouble sorted above routine progress, a state word
and the clock that justifies it per lane, and an honest hidden-lane
count. The board is sized to its content and bounded by a fraction of
the terminal; with two or more lanes live the transcript yields its
idle floor so the fleet can be seen at once.

Known defect, fixed in the commit that follows: the board can render
more rows than geometry granted it.
The formatter sizes the board to its content, but collapse can grant it
fewer rows than that. The rows were rendered before the resolver ran and
were never clamped to its answer, so a dozen lanes on an 80x24 terminal
added thirteen children to a seven-row box: rows painted on top of each
other and on the transcript beneath, and the churn tore down text buffers
the next repaint then wrote to.

Rendering now happens after the resolver has spoken and only ever paints
what it granted. Lanes that no longer fit are disclosed the same way the
formatter discloses them, so the count stays honest all the way down.
OpenTUI trees cycle parent/child links, so toEqual never finishes.
Seed a stable row budget first, then check rebuild skips with
reference identity when only a task retitle or identical agents
push lands.
@TheGreatAxios
TheGreatAxios force-pushed the cl-5755-fleet-surface branch from b394675 to 10a3d61 Compare August 9, 2026 07:14
When geometry grants fewer rows than the formatter already folded,
carry the prior +N more / header hidden count into the new total so
operators still see every running lane accounted for. Paint lane
state as operator copy (in tool) rather than the machine token.
@TheGreatAxios
TheGreatAxios marked this pull request as ready for review August 9, 2026 07:23
@TheGreatAxios
TheGreatAxios merged commit 7ce7609 into main Aug 9, 2026
2 checks passed
@TheGreatAxios

Copy link
Copy Markdown
Collaborator Author

Self-review (merge)

One fleet board replaces the task panel + agents strip. The board is content-sized, clamped to what geometry grants, and never paints past its box. Task state stays out of the transcript.

What holds on this tip:

  • Honest disclosure under re-clamp. When collapse grants fewer rows than the formatter already folded, the prior +N more / header hidden count is carried into the new total so every running lane is still accounted for — not only the rows still present after the first fold. Covered by clampBoardRows tests for both more-row and header disclosure paths.
  • Operator copy, not machine tokens. Lane state paints as in tool / stalled / working. Machine LaneState stays snake_case in code only.
  • Single progress path. Tool clock / stall / in-tool come from main's agentProgress aggregation; the board does not invent a second stall path. Trouble sorts above routine.
  • Rebuild identity. Agents-row rebuild tests assert renderable identity (not deep-equal on cyclic OpenTUI trees), and only rebuild when content or granted budget actually changes.

Verified locally: bun test on chrome-state + wave6 (53 pass). CI check + CLA green on f5135831.

Known follow-up (non-blocking): docs/TUI.md still has some pre-board panel wording; product behavior is the board in code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant