fix(review): keep skill fan-out to one dashboard row per agent

Commit

peyton-alt2mo ago

The fan-out was meant to be behavior-only (run an agent's skills as parallel children instead of one blended pass), but it leaked into the TUI: because rows are drawn one-per-worker, a two-skill agent showed as two rows (claude-code:review + claude-code:pr-review). Restore the pre-fan-out display — one row per agent — without changing the parallel execution.

The collapse lives entirely in the TUI sink; execution, the summary, the manifest, and skills-based session matching stay per-worker (all load-bearing for attribution). TUISink.groupWorkers takes the per-agent row order plus a worker->agent map; AgentEvent routes each worker's events to its agent row (live events already key by name, so this is a lookup), and RunFinished folds the per-worker summary into one entry per agent row (worst-status wins, tokens summed) so the model's by-index row sync still aligns. Grouping key is agent+model, so genuine agent+model workers stay separate rows — only the skill dimension collapses.

Verified: sink unit tests pin routing + collapse; a live shim run showed a single claude-code row with two parallel children in flight.

Co-Authored-By: Claude Fable 5 noreply@anthropic.com Entire-Checkpoint: 01KXH1KM896NXV3ZV3XVJ8FEXK

Checkpoints

test(review): pin that codex $name skills survive the legacy repair + native invocation

Claude Code
View session
Checkpoint 1