Skip to content

app: board triage — full-width table density with briefing preview rail#31

Merged
alejandro-nexcade merged 3 commits into
mainfrom
alejandro/board-triage
Jul 3, 2026
Merged

app: board triage — full-width table density with briefing preview rail#31
alejandro-nexcade merged 3 commits into
mainfrom
alejandro/board-triage

Conversation

@alejandro-nexcade

Copy link
Copy Markdown
Collaborator

What

PR 7/7 of the overnight UX program (Track D — cockpit-docs/OVERNIGHT_UX_PLAN.md, mockup D1, from the screen-real-estate feedback). Stacked on #30.

  • Fluid full-width board — the centered ~960px column is gone; all three tabs fill the window.
  • Table density (default on windows ≥1400px, persisted user toggle): CSS-grid listbox rows — LED, branch + tone-colored reason, the agent's distilled read as its own 2-line column, aligned signal chips (CI, size XL +3.4k −613, 1C 2W severity dots), per-state action button. ~14 PRs per screen instead of 7 cards.
  • Briefing preview rail (≥1280px): select a row (click or ↑/↓) → intent, severity/risk chips, top-3 findings, recap freshness, "Open review →". Triage without leaving the board; Enter/double-click opens directly. Full keyboard model: roving aria-activedescendant, Escape clears, arrows clamp to the filtered list.
  • Cards density becomes a responsive multi-column grid, keeping project grouping + fast-lane shelf. Zero-count state filters collapse into "More ▾".
  • ReviewCard behavior untouched (helpers extracted: StatusLed, actionConfigForState, parsePrDisplay, toneTextClass, sizeClassLabel — its 23 tests pass unmodified).

Verified

tsc clean · vitest 384 (39 files; +23 new across density/selection/filter-collapse/format/table/rail suites) · vite build ok. Reviewer pass: SHIP; stale-selection aria MINOR fixed. Deferred follow-ups noted in the program report: retire ReviewCard's now-unreachable "compact" branch, swap the hand-rolled filter dropdown for a base-ui menu.

🤖 Generated with Claude Code

@LifeLex
LifeLex force-pushed the alejandro/agent-fleet branch from c3dd179 to 3ead751 Compare July 3, 2026 08:42
@alejandro-nexcade
alejandro-nexcade changed the base branch from alejandro/agent-fleet to main July 3, 2026 08:44
LifeLex and others added 3 commits July 3, 2026 09:44
… and filter collapse

Redesign the PRs board (mockup D1) from a ~960px centered card column into a
full-width triage surface.

- Fluid layout: the board fills the window on all three tabs; the header (tabs +
  refresh + search + filters + density) is fixed, the body fills the rest and
  scrolls, and in table density the table + preview rail scroll independently.
- Density model `cards | table` (lib/board-density): default table >= 1400px at
  first render, cards below; a user toggle persists (localStorage
  `cockpit.board.density`) and always wins. Cards become a responsive
  multi-column grid (auto-fill minmax(420px, 1fr)).
- BoardTable: CSS-grid triage rows (LED | branch+reason | agent's read |
  signals | action). Row click selects, dblclick/Enter opens, action button
  acts without selecting; keyboard ↑/↓/Enter/Escape via a listbox with roving
  aria-activedescendant. Compact number formatting (3.4k) for adds/dels.
- BoardPreviewRail (>= 1280px, matchMedia-gated): gate header, agent's read,
  severity/size/CI chips, top-3 findings, Open review + recap freshness — all
  from the store Review, no fetch.
- StateFilter: zero-count chips (except the active filter and All) collapse into
  a "More" dropdown; counts kept on visible chips.
- Extract shared board pieces so cards/table/rail render identically:
  StatusLed (+ledColorClass/ledPulses), actionConfigForState (lib/review-action),
  parsePrDisplay (lib/pr-ref), toneTextClass (card-signal), sizeClassLabel
  (diff-signals); ReviewCard behavior unchanged. BriefingFindings gains an
  optional `limit`.

Tests: density default/persistence, compact number, filter partition, selection
movement, action mapping, pr parsing, BoardTable interaction/keyboard, and
BoardPreviewRail render; StateFilter tests updated for the collapse. tsc,
vitest (384), and vite build all green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A search/filter change that removes the selected PR from the visible
list no longer leaves aria-activedescendant pointing at an unrendered
row id.
@LifeLex
LifeLex force-pushed the alejandro/board-triage branch from b759c96 to bcd8dcc Compare July 3, 2026 08:45
@alejandro-nexcade
alejandro-nexcade merged commit e82429c into main Jul 3, 2026
2 checks passed
@LifeLex
LifeLex deleted the alejandro/board-triage branch July 3, 2026 08:48
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.

2 participants