An agent told me a page looked right. I passed that along to the person waiting on it. The page had been visibly broken the whole time.
This is the story I promised at the end of the last one, where a synced folder quietly corrupted my sessions for months and left me no longer trusting what the factory produced. This is what that distrust turned into, and the first time it caught something real.
How it happens
I do not build most things by hand anymore. I hand work to subagents, they do it, and they report back. On this one, two subagents worked the page, ran their tests, all 173 passed, and both wrote "visually confirmed" in their summaries. I read that, believed it, and told the person to go open it.
What was actually on the screen
Two things were wrong. The first was a stray closing style tag buried inside a CSS comment. The browser does not read CSS comments the way you would hope, so that stray tag closed the styling early, and the rest of the stylesheet spilled onto the page as plain text. The second was a missing wrapper element that the whole layout depended on. Without it, the careful multi-column grid never switched on, and the page collapsed into a single sad column. Neither bug was subtle. Anyone who looked at the page for one second would have seen it.
That is the part that stayed with me. Nobody looked. Not the agents, not me.
Why the tests did not catch it
The tests checked that certain strings were present in the file. Is the navigation tag in there, yes. Is the right class name in there, yes. All 173 of those were true. A string can be sitting right there in the file while the page around it is on fire. The tests were reading the source. Not one of them rendered the page and looked at it.
And "visually confirmed" from the agents did not mean they had looked either. It meant their string checks had passed and they had called that visual confirmation. Neither of them saw the page. They could not. They reported a belief about the page and dressed it in the language of having seen one.
So I had a page that no human and no machine had actually looked at, and three of us had signed off on it as fine.
What I do now
The fix is boring and it works. For anything that renders to a screen and goes in front of someone, I do not accept "it renders" from anyone, including myself, until I have checked. I load the page headless, take a screenshot, and read the screenshot. Both of those bugs, which survived 173 passing tests, showed up the instant I looked at the picture. The stray tag and the broken grid are obvious in an image and invisible in a string search.
Why it matters
The tests still run. I still read the pixels. The two answer different questions. A passing test tells you the file contains what you asked for. A screenshot tells you what the person on the other end will actually see. I had been treating the first as if it were the second, and so had the agents. The gap between them is where the embarrassing bugs live, because it is the one place nobody thinks to look.
The thing I watch for now is confident language attached to work nobody checked. "Visually confirmed." "Renders cleanly." "Looks good." Those are claims about a result, and a claim about a result is not the result.
When something in your pipeline reports that a page looks right, what did it actually look at, and have you seen the same thing it did?
We build agentic systems that prove their work.
If you are shipping work an AI agent produced, book a scoping call. We will walk through where a passing test stops meaning the result is right, and how to verify the difference before it reaches a customer.
Sources
- First-party account: the operator's own record of the incident (an internal Wave 3 pull request), the two shipped defects (a missing
<div class="page-shell">grid container and a literal</style>inside a CSS comment that closed the style element early), the 173 source-level string-match tests that passed, and two subagent summaries claiming visual confirmation. - The factory's own operating rule adopted after the incident: for any customer-facing render, the operator runs the page headless, reads the screenshot, and re-runs the suite before propagating a subagent's result.