The QA gate that caught 47 bugs an AI said didn't exist
We let an AI agent build two storefronts. Then, instead of reading its confident summary ("all components render beautifully"), we ran a script that opened the real page in a real browser and asserted things.
It failed 47 times. Every failure was invisible to the model that wrote the code.
Why the model can't see them
Models judge text, not outcomes. A model reviewing its own CSS sees valid syntax and plausible values — it does not see that the buy bar floats off-screen at 360px, that an <img> path 404s behind two working ones, or that the accordion's only animation is prefers-reduced-motion: reduce breaking it for the users who need motion least.
Self-review is the model grading its own homework with the answer key it also wrote.
The ten checks we actually run
- Zero horizontal overflow at 360, 768, 1024, 1440, 1920 px.
-
Every
<img>loads (network-level, not alt-text vibes). - Contrast ≥ 4.5:1 on all text against computed backgrounds.
- Touch targets ≥ 44px on the primary flow.
- Keyboard-reachable focus ring on every interactive element.
- Content visible with JS disabled for the core offer.
- Reduced-motion page still animates the states that matter (or states nothing).
- No emoji bullets, no indigo gradients, no glassmorphism tiles — the slop fingerprint (yes, greppable).
- One type scale, one spacing scale — computed styles off the declared tokens only.
- Copy passes the specificity test: no sentence that could appear on a competitor's site.
Each is pass/fail. The agent can't argue with an exit code.
The receipts
- Buy bar off-screen at 360px: caught 3 times across two builds (different causes, same symptom).
- Broken image path: once, on the ONE image that mattered.
- Off-scale spacing values: 29 of 47. The model "settled" on no scale at all.
- Slop fingerprint hits: 11. All fixed before shipping, none visible to taste-based review.
What changed in our prompting
We stopped asking for polish and started shipping the gate with the brief. The agent sees the ten checks before it writes the first line, and the build fails if it lies. Same model. Different contract.
The full playbook (doctrine + the runnable gate + the teardown of every bug above) and the source bundle are at aiclub1.gumroad.com — and if you've read this far, code PH30 takes 30% off everything until Oct 22.
Free version of the ten-tells list if you want it before money changes hands: aiclub1.gumroad.com/l/tmamtm
Top comments (0)