feat(ui): the console says less and shows more — UI polish (#49) #50

Merged
cmoriarty merged 2 commits from ui-polish-49 into main 2026-09-26 15:49:42 -04:00
Owner

Refs #49 (closed after the OpenSpec change is archived). OpenSpec change: openspec/changes/ui-polish-49 (proposal, specs, design, tasks).

What changed

  • Top bar: home + braid wordmark → dashboard; status and a compact slot meter (no kv %) → Inference; inbox with a mail icon and count; larger gear. The rail no longer duplicates inbox/slots.
  • Inbox: no explanatory prose; an empty inbox shows a flag and "You are caught up on reviews!".
  • Inference: endpoint line, "No one is waiting…" and "Over time" removed; "KV cache usage"; slots as full-width rows (run, step, phrase, elapsed); queued steps as "Queued requests" with what each waits on — "Waiting for a slot" only when vLLM is holding requests or every slot is running.
  • Rail: taller cards with wrapped titles and a progress bar; collapsed cards keep the height with a vertical bar.
  • Dashboard: no "N on the ledger".
  • Graph pane: pipeline name at top; repo links to Forgejo; branch removed; run total time; nothing folded away (loop lists every round, not-needed steps are rows); finished steps keep their duration; ⑂N active subagents and no "silent for" while they work; human. → agent. under auto-approve; follow-the-active-step (new setting, default on).
  • Stage header: run title in signal orange, linked to its issue, no step suffix.
  • Step details: budget as labelled fields; attempts as chips, the respawn explained as the planned hand-off; notes behind ⓘ.
  • Settings / New run: "How Braid runs" removed; helper text behind ⓘ.

Backend (additive fields only)

Steps carry started_at/ended_at; digest frames carry subagents; /api/status carries forge_url; /api/slots waiting rows carry waiting_on; new follow_active_step setting.

Verification

  • uv run pytest -q tests/unit tests/integration/test_sse.py --deselect tests/unit/test_metrics.py: 1727 passed
  • npx tsc -b && npx vitest run && npx vite build: clean, 377 tests passed
  • Playwright against the fake osfd: 63/66. follow-the-tail (2) fails identically on main (it needs a live osfd with a running run); agent-view "carries its reveal across settling" flaked once under the full parallel run and passed 10/10 alone.
  • Checked in a real browser: top bar, rail, inference, spine, step details, settings, empty inbox (desktop and phone).

🤖 Generated with Claude Code

Refs #49 (closed after the OpenSpec change is archived). OpenSpec change: `openspec/changes/ui-polish-49` (proposal, specs, design, tasks). ## What changed - **Top bar:** home + braid wordmark → dashboard; status and a compact slot meter (no kv %) → Inference; inbox with a mail icon and count; larger gear. The rail no longer duplicates inbox/slots. - **Inbox:** no explanatory prose; an empty inbox shows a flag and "You are caught up on reviews!". - **Inference:** endpoint line, "No one is waiting…" and "Over time" removed; "KV cache usage"; slots as full-width rows (run, step, phrase, elapsed); queued steps as "Queued requests" with what each waits on — "Waiting for a slot" only when vLLM is holding requests or every slot is running. - **Rail:** taller cards with wrapped titles and a progress bar; collapsed cards keep the height with a vertical bar. - **Dashboard:** no "N on the ledger". - **Graph pane:** pipeline name at top; repo links to Forgejo; branch removed; run total time; nothing folded away (loop lists every round, not-needed steps are rows); finished steps keep their duration; `⑂N` active subagents and no "silent for" while they work; `human.` → `agent.` under auto-approve; follow-the-active-step (new setting, default on). - **Stage header:** run title in signal orange, linked to its issue, no step suffix. - **Step details:** budget as labelled fields; attempts as chips, the respawn explained as the planned hand-off; notes behind ⓘ. - **Settings / New run:** "How Braid runs" removed; helper text behind ⓘ. ## Backend (additive fields only) Steps carry `started_at`/`ended_at`; digest frames carry `subagents`; `/api/status` carries `forge_url`; `/api/slots` waiting rows carry `waiting_on`; new `follow_active_step` setting. ## Verification - `uv run pytest -q tests/unit tests/integration/test_sse.py --deselect tests/unit/test_metrics.py`: 1727 passed - `npx tsc -b && npx vitest run && npx vite build`: clean, 377 tests passed - Playwright against the fake osfd: 63/66. `follow-the-tail` (2) fails identically on main (it needs a live osfd with a running run); `agent-view` "carries its reveal across settling" flaked once under the full parallel run and passed 10/10 alone. - Checked in a real browser: top bar, rail, inference, spine, step details, settings, empty inbox (desktop and phone). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Verified in production on run_01M3F8PTF3EWBCB721BP869E9N (soundcheck#32): a queued message
reached the session as a user message, and a redirect aborted the turn, delivered its text
and left the step running on the same attempt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The inbox, slot meter and a larger gear move to the top bar beside a new braid wordmark and a
home link. The inbox, inference, settings and step-details screens drop their explanatory prose
for ⓘ tips; an empty inbox says you are caught up. Inference draws each slot as a row and
names what a queued step waits on, saying "waiting for a slot" only when the server is backed
up. Rail cards grow and carry progress. The graph pane names its pipeline, links its repository,
times the run, never hides a finished step, keeps each step's duration, shows active subagents,
reads human. as agent. under auto-approve, and follows the active step (a new setting, on by
default). The run title is prominent and links to its issue.

Backend: steps carry their current attempt's start and end, digest frames count running
subagents, /api/status names the forge, and /api/slots says what each queued step waits on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cmoriarty deleted branch ui-polish-49 2026-09-26 15:49:42 -04:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
cmoriarty/braid!50
No description provided.