feat(board): WIP soft limit badge on agent columns + per-instance tooltip #422

Merged
code-lead merged 2 commits from dev/414 into main 2026-04-27 02:33:56 +00:00
Collaborator

Adds the B6 WIP-limit surface to each agent column header: running + queued / wip_soft_limit badge turns bg-error/10 text-error when the total exceeds the per-type soft limit. Drops are never blocked. Tooltip lists per-instance breakdown from GET /board/agent-instances.

Test plan

  • board-column.test.tsx — 7 tests: badge shows 2 / 4 given in_flight:1, queued:1; turns red when exceeded; not red at-limit; absent on unassigned column; tooltip lists per-instance counts; fallback tooltip when no instances.
  • Server board.test.ts — 4 new tests: wip_soft_limit, in_flight, queued present per column; default 4 when absent; unassigned column zeroed; /board/agent-instances returns correct shape.
  • All 449 web + 2001 server tests green (2 pre-existing failures unrelated to this change).

Closes #414

Adds the B6 WIP-limit surface to each agent column header: `running + queued / wip_soft_limit` badge turns `bg-error/10 text-error` when the total exceeds the per-type soft limit. Drops are never blocked. Tooltip lists per-instance breakdown from `GET /board/agent-instances`. ## Test plan - `board-column.test.tsx` — 7 tests: badge shows `2 / 4` given `in_flight:1, queued:1`; turns red when exceeded; not red at-limit; absent on unassigned column; tooltip lists per-instance counts; fallback tooltip when no instances. - Server `board.test.ts` — 4 new tests: `wip_soft_limit`, `in_flight`, `queued` present per column; default 4 when absent; unassigned column zeroed; `/board/agent-instances` returns correct shape. - All 449 web + 2001 server tests green (2 pre-existing failures unrelated to this change). Closes #414
feat(board): WIP soft limit badge on agent columns + per-instance tooltip
All checks were successful
qa / qa (pull_request) Successful in 5m56s
qa / dockerfile (pull_request) Successful in 8s
a5e0f8b08c
Adds B6 acceptance criteria: each agent column header now shows a
`running + queued / wip_soft_limit` badge that turns red when the total
exceeds the per-type soft limit. Drops are never blocked.

- `packages/shared` — adds `in_flight`, `queued`, `wip_soft_limit` to
  `BoardColumn`; adds `BoardAgentInstance` / `BoardAgentInstancesResponse`
  for the tooltip endpoint.
- `webhook-config.ts` — parses optional `wip_soft_limit` per type (default 4).
- `board.ts` — populates new WIP fields in `buildBoard`; adds
  `buildAgentInstances` + `handleBoardAgentInstances` for
  `GET /board/agent-instances`.
- `main.ts` — registers `GET /board/agent-instances`.
- `board-column.tsx` — renders the WIP badge with `bg-error/10 text-error`
  when exceeded; tooltip from `agentInstances` prop.
- `planner.board.tsx` — polls `/board/agent-instances` and passes data down.
- Tests: 7 new `board-column.test.tsx` tests + 4 new server board tests.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
dev requested review from reviewer 2026-04-27 00:57:15 +00:00
reviewer approved these changes 2026-04-27 01:00:33 +00:00
reviewer left a comment

All B6 acceptance criteria met and CI green.

Nit not worth blocking: buildAgentInstances() uses Date.now() directly instead of _deps.now(), unlike the rest of board.ts. Not a functional issue (cache is reset in beforeEach), but inconsistent. The native title attribute for the tooltip is fine — no Tooltip component exists in the project and pipeline-gantt.tsx uses the same pattern.

All B6 acceptance criteria met and CI green. Nit not worth blocking: `buildAgentInstances()` uses `Date.now()` directly instead of `_deps.now()`, unlike the rest of `board.ts`. Not a functional issue (cache is reset in `beforeEach`), but inconsistent. The native `title` attribute for the tooltip is fine — no `Tooltip` component exists in the project and `pipeline-gantt.tsx` uses the same pattern.
dev force-pushed dev/414 from a5e0f8b08c
All checks were successful
qa / qa (pull_request) Successful in 5m56s
qa / dockerfile (pull_request) Successful in 8s
to 4655c62e95
Some checks are pending
qa / qa (pull_request) Waiting to run
qa / dockerfile (pull_request) Waiting to run
2026-04-27 01:26:29 +00:00
Compare
dev force-pushed dev/414 from 4655c62e95
Some checks are pending
qa / qa (pull_request) Waiting to run
qa / dockerfile (pull_request) Waiting to run
to 99b3121405
Some checks failed
qa / qa (pull_request) Has been cancelled
qa / dockerfile (pull_request) Has been cancelled
2026-04-27 01:40:42 +00:00
Compare
dev force-pushed dev/414 from 99b3121405
Some checks failed
qa / qa (pull_request) Has been cancelled
qa / dockerfile (pull_request) Has been cancelled
to 5da2db2555
All checks were successful
qa / qa (pull_request) Successful in 6m11s
qa / dockerfile (pull_request) Successful in 7s
2026-04-27 02:08:27 +00:00
Compare
code-lead deleted branch dev/414 2026-04-27 02:33:57 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
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
charles/claude-hooks!422
No description provided.