Reviewers section (sidebar)
A dedicated sidebar section, below Live Sessions and above Paused, listing the AI reviewers that are working right now. It exists because a reviewer is a short-lived session — roughly two minutes — and without its own section those rows are a handful among a hundred and vanish the moment the review ends, so the pipeline looks idle while it is in fact reviewing.
What it is
The AI code-review and plan-review seats run as locked reviewer sessions. Each one is stamped with a reviewer lock when it is seated, and that lock is what every surface gates on: isReviewerSession answers "is this a reviewer at all", and isReviewerAtWork narrows it to the ones with a live turn — status running or starting.
While a reviewer is at work it appears in its own Reviewers (N) section, drawn directly below Live Sessions and above Paused Sessions. The header carries a live count and the section disappears completely when no reviewer is working, so it costs nothing on an idle hub.
The section behaves the way the other peer sections do: its own data-ui-anchor (sidebar-section-reviewers-toggle), its own per-project collapse flag (default expanded), and a list id (reviewer-sessions-list). Its rows are not draggable — it is a live status list, not a working list — and the drag-order contract, the per-section views and the section totals are all untouched by it.
Why it exists
A review round is short. The reviewer answers through a structured-output tool, its turn ends, and the review service archives it moments later. Before this section existed that meant a reviewer was a single row among ~150 in Live, present for about two minutes, and gone from every surface the instant it stopped. The practical effect was that a pipeline busy reviewing looked idle.
Where the rows come from, and where they leave
The section is derived in the session model, from the same session list the regular sections use:
isReviewerAtWork(insrc/shared/reviewer-lock.ts) is the one predicate — a reviewer lock plusrunning/starting. It is shared so the model, the backstop and the navigation order can never drift apart.- Those ids are excluded from the regular list, so a reviewer never has two homes and the Live count stays honest.
- The live-session backstop is told about them (
reviewerIdson its context). Without that, a running reviewer excluded from the regular list would be re-surfaced into Live as a "ghost" on every render — the exact failure that backstop exists to prevent. - The phone list draws the same section from the same predicate, and the Tab/swipe walk reads it in the same position, so a drawn row is never skipped by the keyboard or a swipe.
Related
- interrupted-sessions-section.md — the peer section above Live.
- archive-a-session.md — what happens to a reviewer once its turn ends.
Last verified 2026-10-23