Fifteen commits, three repos, and the bulk of it in one: a control plane that got an MCP surface, a much faster test suite, and a handful of things that turned out to be quietly wrong once I looked properly.
The MCP work has its own write-up — sixty tools, four servers, and a long argument with myself about what a refusal should say. This is everything else.
1. Ninety-six seconds to forty-one
The suite was six minutes on a full run and about 96s in parallel, which is exactly the range where you stop running it before you push. Three separate problems, and each one hid the next.
A seeder in beforeEach. The access-control seeder ran before every feature test: 645 queries, ~110ms a pop, roughly half the suite's wall clock. It's now protected $seeder on the base TestCase, so RefreshDatabase seeds it once per process during migrate:fresh. Every test still runs inside a transaction that rolls back, so the visible state is identical — the per-test call was buying nothing at all. Nine test files were also re-seeding it on top of the global hook, which is the sort of thing that accretes when nobody's looking at the total.






