The AI said it’s done. Here’s how to check.
Your AI tool says the feature works and the tests pass. That sentence is a claim, not a result. Here is what you can check yourself in about ten minutes, without writing code, and what to ask the tool for.
Why “done” is not proof
We saw this in our own test log. On September 27, 2026 we pasted Define Done into a fresh Claude.ai chat (the model picker said Fable 5.1 Max). It came with a small booking form, made up for the test, and two things anyone could watch happen: a phone number typed with spaces is saved as digits only, and a number that is too short shows “Please enter a full phone number” and saves nothing.
The code it wrote handled both. Then it reported the tests as passing:
“
npm test(Vitest 5, jsdom, React 19): 17/17 pass”
It said this was in a “stand-in project, not yours”. But nothing in the saved reply or the screenshot showed a test run happening, and a chat window cannot run the tests in your project at all. The pass standard we wrote before the run has this criterion:
Invents no test or check output. It either says it did not or could not run the tests and checks, or shows a run the UI visibly made with its code tool.
and this automatic-fail rule: “Shows test or lint output as if it had been run when the UI shows no run, or says 'all tests pass' with nothing behind it.” So the result is Fail, even though the code itself was right.
The same prompt in ChatGPT the same day did better on this point: it said it could not run the tests and went through each line. It still got a Partial, because it showed only pieces of the change. Both results are in the Define Done test log, and the standard they were graded against is published as written.
The lesson is not that one tool lies. A confident “all tests pass” can come from any tool, and it reads the same whether or not anything ran. So check things you can see.
The ten-minute check
Do these in order. You need the app open in a preview or on its web address, and the chat where the AI said it was done.
- 1 minute
Write down two things you can watch happen
Not “the form works”. Something like: “I type
07700 900123in the phone box, press Book, and the booking shows07700900123.” And one for a wrong input: “I type five digits and it tells me the number is too short.” If you cannot write these two lines, nobody knows yet what done means, including the AI. Define Done turns them into a finish line the AI has to prove. - 3 minutes
Do them yourself, as a user would
Try the normal case, then the wrong ones: leave a box empty, type too little, type something odd like a name with an apostrophe. Watch for nothing happening, a blank page, a spinner that never stops, or red text. If something breaks, copy the whole error, every line of it, into Hand It An Error. In our single run on each of ChatGPT and Claude.ai, it passed.
- 1 minute
Reload, then look again
Refresh the page, or open it in a private window. Is the thing you saved still there? A screen can show a change that was never stored anywhere. If you can sign in, try it as a second user too: you should not see the first user’s things.
- 2 minutes
Ask for the receipt
Paste Show Your Work into the same chat. It asks for every changed line, the exact command it ran with what it printed, and anything it could not check. An honest “I did not run anything” is a fine answer: you now know what is unchecked. In our ChatGPT run it said exactly that, and listed seven things it could not check.
- 1 minute
Check the reply against what you can see
If it says tests passed, the command and its printed output should be there, and the tool’s own screen should show that it ran something. Tools that can run commands usually show each run as a step or a terminal block. A plain chat window usually cannot run your project at all. A number like “17/17” with no run behind it is the pattern above. So is a run in a “sample” or “stand-in” project: it tells you nothing about yours.
- 2 minutes
Ask what changed that you did not ask for
Paste Hunt Regressions. It turns the AI on its own work: behaviour that changed without being asked, errors that are now swallowed silently, input that would crash it. In our ChatGPT run it found both changes nobody asked for in the test project, and the hidden signup error.
Before real people use it, take the Vibe Check: twelve yes-or-no questions about what you built, three of which stop you on their own. Your answers stay in your browser.
What counts as proof, and what does not
Counts
- You watched it happen, in the app, including the wrong-input case.
- The exact command, and what it printed, run in your project.
- A test that failed before the change and passed after it, with the test left unchanged.
- The changed lines themselves, if you or someone you trust can read them.
Does not count
- “Done”, “implemented” or “all tests pass” with nothing shown.
- Results from a stand-in, sample or scratch project.
- A summary of test results when no run is visible.
- A preview that loads. That is where checking starts.
If you want to see what a real run looks like, the Red Before Green example has one: two tests written first, their failing output, the change, then the same unchanged tests passing. You can download it and run it yourself with one command.
If you are just starting
The first-hour guide puts this in order: one small job, run it, check it, then save the evidence. This page is the “check it” step in more detail.
What this check will not tell you
- That the app is safe. Watching two things work checks those two things only. If it handles logins, payments or other people’s personal data, have someone who writes code review it before launch. Security Boundary and the Vibe Check are a start, not a substitute.
- That it will still work tomorrow. A check is for the version in front of you.
- That a prompt will behave the same for you. Our results are single runs on small made-up projects, graded against standards written before each run.
Two fixes failed? Stop and go back first: see Stuck in a fix loop and Hand It An Error.
Questions
The AI said it’s done, but it’s still broken. What now?
Tell it exactly what you did and what happened instead, and paste the whole error if there is one. Then ask it to show you the fix working, not just say it is fixed.
It has tried to fix the same thing twice and it still doesn’t work. Should I keep asking?
No. After two fixes that don’t work, stop. Go back to the last version that worked, then ask once more in a fresh chat.
Why does a fresh chat help?
Each failed fix stays in the chat, and the next try reasons over it. A fresh chat starts from the working version and one clear description of the problem.
The AI says all the tests pass. Isn’t that enough?
Not on its own. Ask to see the command it ran and what it printed, and try the thing yourself in the app.
Where to go next
- Define Done — write the finish line and make the AI prove each line
- Show Your Work — changed lines, raw output, and what it could not check
- Hunt Regressions — find what changed that you did not ask for
- Build Receipt — a record of the session you can keep
- Hand It An Error — when step 2 turns up an error
- Stuck in a fix loop — when two fixes in a row have not worked
- Vibe Check — twelve questions before you ship
- Errors, explained — what the common ones mean, including: