A ghost bug turned up in the evening, in a chore-management app. A tester reported that clicking Done on a chore assignment deletes the chore item. High severity, and the triage agent filed a remediation pointing at a suspected miswired button. During the review, another agent opened the file and checked the code. The Done button is wired correctly. There’s no way clicking it can trigger the delete logic. The best guess is the tester misclicked the trash icon sitting right next to the chore item (which IS a delete button). Without that second look, I would have committed a “fix” that broke working code to resolve a bug that never existed.

Yesterday I got the full test-find-fix pipeline running end-to-end; today I repeated the eleven-step workflow on foundation v3.1.24, roughly six hours across seven repositories (the six Spernakit-derived apps plus the template). The test phase used seven parallel Claude Code agents running Claude Opus 4.6 with its 1M-context configuration, the /spernakit-tester instructions from that day, and a Puppeteer-based browser CLI.

Of the twelve bug reports from testing, the analysis helpers rejected five as false positives. That 42% belongs to this run and configuration, not to agent testing in general. One helper logged into the server, captured its security token, and used curl to check the endpoints behind three of those reports. All three returned correct responses. The testers had misread what they saw in the browser.

Seven reports held up, so I’m glad I ran the testers. I’m also glad the bug count wasn’t the only measure of how useful they were. I keep thinking about Goodhart’s law here.

Twelve bug reports filed by testers; verification against the running server confirmed seven and rejected five filed by testers 12 each claim re-checked against the running server held up 7 false positives 5
Across seven repositories, twelve reports became seven verified bugs after review.

The longest detour was aidd’s heavy test suite. The first attempt died on a Docker registry timeout, an environmental failure. The first retry exposed a stale remote image overwriting my local build. Later runs found three application bugs: a toggle wrote to the database without updating the in-memory cache; a crawler exemption logged every request until SQLite crashed with a “disk I/O error”; and three global coordinator endpoints incorrectly required a workspace header. Once those three bugs and the stale image were fixed, the suite passed: 38 routes crawled, zero failures. If I’d stopped after the first retry, the three application bugs would have shipped.

One more surprise. The heavy suite found a latent typo in the Deeper backend that the lighter suite had been letting through - a file calling a function without importing it, masked by smoke-test caching. Five-second fix, but I’m changing my rule. “Ready to commit” now means passing the full supertest, not just the lighter smoke check.