Repository navigation
THI-463: Rail: a sonar strip and a Next queue in the agent's words (design A) - #59
Merged
tdody merged 26 commits intoNov 12, 2026
Merged
Conversation
…DS YOU/READY/RUNNING; broken panes join it, branches cluster only when shared, only asks pulse, ⌘J opens the next (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…pulse (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ened, one card per failing PR, the newest question shows, × dismisses a pane's events together, working blips sweep (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… the fallback in paneBlip, the Next card, PaneRow and moveAccountTarget goes (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ason) are each said once, so the strip, the row and the Next card can't word a pane differently; an unanswered question reads 'asked you something' on its card too (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ards and ⌘J) and ⌘J's walk, and opening or dismissing an entry from anywhere releases the layout freeze, so ⌘J no longer leaves the card it opened on screen; waitingPanes carries the newest question (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… as asking (one waitingPanes answer), so a soft question you've opened stops pulsing in the strip and tree and shows as broken if its PR is red (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…(buildNext), so Clawd no longer flags a pane the rail shows as working, asking or a shell, nor calls a pane on a red PR finished (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ne that speaks for it, a finished one first, then the linked one, and only that pane is taken, so a sibling's done news keeps its card instead of vanishing until CI is green (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…, carrying the newest message, so a pane that finished twice and went back to work shows one done card and Clawd counts finished panes, not events (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…, and 'updates paused' sits in Next's title row, so neither a new track nor the hint moves the cards under the pointer (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…il, from 2.3:1) (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ter does, and × hands focus to the card that takes its place (or Next's title), so a keyboard user no longer drops to <body> (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ontrol focused while Shift+Tabbing up the tree is no longer hidden under the strip (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…instead of over them, so a compact row's PR opens on click and its age stays in view (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…esn't narrow again without warning when that track gets a new pane (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…branch's tabs together, so dragging a pane inside a branch cluster no longer moves the whole cluster below an unrelated pane (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ail stops re-deriving railTree's no-branch bucket behind a guard that can't fire; markReadySeen's comment names the done card, not READY (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nNextEntry, and tests pin which cards get one and what it dismisses (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…renders (its stripe class and titled age), since the Next card carries the same classes (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…names (broken, asks, done), not on the legend that always shows every blip, and the no-need_human check runs with a need_human event present (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nd, and its age from the needs-input stamp, 'now' or the last turn (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ds you says so with its stripe, blip and Next card), so the unselected expanded-card look goes (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ed READY section (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ads them now that the blip and Clawd go through Next (THI-463) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This builds design A ("Sonar strip"), one of three rail redesigns mocked up side by side with today's rail: the options. The other two were B ("Sorted in place") and C ("Focus / All").
It fixes most of what the 2026-11-09 rail critique (23/40) found: broken agents were invisible, the attention rows dropped what the agent said, colour and motion reported nothing new, and branch headers doubled the rail's height.
What changes
Sonar strip, pinned to the top of the rail. One line per track, one blip per pane. A blip's shape says the state as well as its colour, so it reads without colour too:
Clicking a blip opens its pane. Clicking a track's name shows only that track in the tree; this replaces the filter chips.
A Next queue replaces NEEDS YOU, READY and RUNNING. It lists panes that ask (longest wait first), then broken ones, then finished ones.
notifymessage.⌘J opens the next pane that wants you, from anywhere, including the terminal. Repeated presses walk the queue in order, skip the pane already on screen, and start over once every card has been opened.
PINNED stays, without its green tint. Its rows show the blip, name and track.
ACTIVITY rows read " · " (every row used to read " · shell"), in token colours, with no hover background.
A quieter tree:
prefers-reduced-motion.One answer to "what wants you", so the rail, ⌘J and Clawd agree:
alertFeedowns the Next queue (buildNext), and ⌘J walks that same list.brokenCause) and its blip's words (blipReason) are each written once.notify(done)events, so they can't come back in its place.Accessibility:
Cleanup:
wt-metastrip,NewTabRow,WorktreeMeta,maxSeverity, the branch-order pref and its server field.Testing
npm test: 1474 pass. New cases cover:paneBlip,buildNext,nextToOpen,isCiFailingnextWords)mergeLiveAndPrefsmarkReadySeen/dismissEventsisNextKeybin/checkis clean (3 Biome warnings that are already onmain). Fulluv run pytest -q: 2189 pass.Checked on a dev instance (:17375) against the live panes:
An independent review found eight issues; all are fixed in the third commit.
role=buttoncard hid its × from screen readers.A second, multi-agent review (24 findings: 10 medium, 14 low, none blocking) is addressed in the last 23 commits, one per finding or shared cause, with regression tests. Two were description-only (fixed above) and one was refuted. Further visible changes from it:
fg-2(5.4:1).sec:needs/sec:ready/sec:runningcollapse prefs are gone.is_claudefallback is removed (no server has sent it since July).Assumptions to challenge
error-then-only-textnow expects False. Next relies on that flag..impeccable/design.jsonstill describes the old attention headers./impeccable documentregenerates it.Not in this PR
Covers most of THI-456, THI-457, THI-459 and THI-460.
🤖 Generated with Claude Code