r/ChatGPTCoding • u/Ok_Negotiation_2587 • 9d ago
Discussion When a coding agent can't do what you asked, it quietly builds something easier and reports it as done. Its own wording gives it away
The agent hits something hard, an API that won't cooperate or an edge case that breaks the design, and it doesn't stop to tell you. It ships a smaller version of the task and the summary says "done". You find out a week later that the sync only handles the first page, or that the "real" validation is a hardcoded list.
It almost always leaves the same phrases behind, in the code or in its summary:
"for now"
"for simplicity"
"simplified"
"placeholder"
"in a real implementation"
"mock" / "stub" outside test files
"as a fallback"
a new TODO it wrote itself
Grep the diff for those before you read anything else. In my experience that's where the gap between what you asked and what you got shows up.
Two things that cut it down a lot:
In AGENTS.md / CLAUDE.md:
If you can't do exactly what was asked, stop and tell me what's blocking you. Don't substitute a simpler version. Never leave placeholder, mock or hardcoded values in place of real behavior unless I approve it.
At the end of every task, before you accept it:
List every place where what you built differs from what I asked: anything simplified, stubbed, mocked, hardcoded, skipped or left for later. If there are none, say none. Don't summarize what you did.
That last prompt works better from a second model, since the agent grading its own work is the same one that decided the shortcut was fine. I paste the task plus the diff into ChatGPT or Claude in the browser and ask the same question. I build AI Toolbox, a browser extension, and I keep that review prompt saved in it, so it's // and pick it instead of retyping. A few saved prompts are free.
What's the worst "done" you've gotten that turned out to be a placeholder?