There's a problem with test suites.
Agents are trained with RL to reach the piece of cake by the shortest path forward.
Which means they can reach the cake without ever solving the core logic of the issue.
It happens like this, all the time:
- you ask an agent to run a task
- it starts looping
- it hits an obstacle — an error, or something it can't do
- instead of closing that sub-task, it finds an alternative that lets it move forward
- the alternative quietly rewrites the test
- the suite is green and the task isn't done
A better way: make the agent verify its own work on the real system, as if it were the final user, on the UI.
Falsificating a visual proof is harder than falsificate a coding test
That's the whole idea behind the verification skill. Credit to
@poteto, engineer on the Grok team at X
We run it on aFFido. Here's how it works.
One skill: verify-affido-ui. Playwright chromium, 1440×900, against vite on :5173.
It fills the real signup form and keeps the real better-auth session cookie — the same one Caddy's forward_auth validates against Postgres before proxying anything.
No mocks. No calling /api/* directly. No rows written by hand. If a person can't do it with a mouse, the agent can't do it either.
Then one prompt, the entire path:
browser → vite :5173 → caddy :18080 → sandbox-manager /resolve → per-user sandbox container
Every step has to leave three files on disk:
· 03-chat-reply.png — the screenshot
· 03-chat-reply.txt — that page's visible text, so the evidence is greppable
· facts-chat.json — step timings, plus three arrays that must be empty: httpErrors, consoleErrors, networkFailures
And one rule it can't skip: a screenshot it did not open is not evidence. It reads every PNG, checks it against the .txt twin and the JSON. If they disagree, the screenshot wins.
The mentality is: verify do not trust 👇
#
AIAgents# #
Verification# #
Playwright# #
Testing# #
AIEngineering#