Two UI fresh-eyes swarms clear a combined 358+ candidate rows
What changed
A dedicated sweep (plan/2026-09-12-ui-fresh-eyes.prompt.md, PR #300/#301) walked all 27 routes at two viewports, shipped 21 verified fixes with guarding tests, and filed 309 more candidate rows unverified. A follow-up swarm (plan/2026-09-12-ui-fresh-eyes-swarm.prompt.md, PR #303/#304, 96 agents across five workflows) then gave every one of those 309 rows a disposition: collapsed to 187 semantic clusters, 149 reached a three-lens adversarial panel, and 30 shipped as FE-029..FE-058. Two regression readers caught ten self-inflicted regressions (three major, including a hand-fan fix that collapsed the fan it meant to protect) and a repair fleet closed all ten with tests that fail against the damaged version. A completeness critic found eleven bookkeeping gaps, rescuing two owner decisions the panel had wrongly refuted away.
Why it changed
sweep #301's own candidate table was explicit that 309 rows shipped unverified because the container's 2-way concurrency split-voted 87 clusters; the swarm was dispatched specifically to close that gap before it went stale.
Residue for the next sweep: the capture driver dismisses the combat tutorial coach (so no screenshot shows a first-time player's first fight), and the container lacks the Playwright browser revision the repo pins — both logged in plan/AUDIT.md, not fixed here.