Flag-don't-fix (TODO theater)
Surfacing a problem and moving on. Naming an issue in the response without resolving it when resolution was the job.
What it is
The response identifies a real issue. A bug, an inconsistency, a missing piece. And then leaves it there: 'Note that this will fail when X', 'You may want to handle the empty-array case', 'It's worth flagging that…', or an inline `// TODO` left where a fix was in scope. The model has done the harder cognitive work (noticing) and skipped the easier one (resolving), converting attention into noise the reader now has to action.
Why models do it (first principles)
Flagging is rewarded as 'thoroughness' in preference data — it makes the response look careful without committing the model to a specific fix it might be wrong about. Resolving requires picking a single answer and standing behind it; flagging hedges the cost of being wrong by handing the decision to the reader. The asymmetric reward (low cost for an unwarranted flag, high cost for a missed one) encodes the same shape as the refusal reflex.
How to think about it
Noticing without resolving is a category of unfinished work that masquerades as finished. A real engineer who spots a problem during a fix either resolves it in the same pass or makes an explicit decision not to (with a reason). Flagging-without-fixing is the textual costume of that judgment without the judgment itself: the reader cannot tell whether the flagger evaluated and chose not to fix, or simply noticed and bailed. A flagged-but-unfixed problem is often worse than an unnoticed one. It claims the reader's attention without paying it back.
Examples
Here's the function. Note that it doesn't handle the case where `items` is empty — you may want to add a guard.
Here's the function. I added a guard for the empty-`items` case at the top — without it the reduce would throw on the initial value.
If the empty case is real and in scope, fix it and say what you did. If it's out of scope, say why.
// TODO: handle race condition between fetch and unmount
Cancelled the fetch in the cleanup function — the AbortController is wired to the effect's signal so an unmount mid-flight aborts cleanly.
Fix prompt
If a problem is in scope and you've noticed it, resolve it in the same pass; if it's out of scope, say so explicitly and name why. Flagging without fixing performs thoroughness while delegating the actual work back to the reader. A flagged-but-unresolved problem converts your attention into their noise, and the reader cannot tell whether you evaluated and chose to defer or simply noticed and bailed. Decide and act, or decide not to and say so.
Watch for
Concrete phrasings this pattern usually shows up as. These are not part of the copyable prompt. The prompt teaches the principle so the model can recognize the move even when the exact phrasing differs. Use this list to self-audit your own writing or to test a model.
- Note that…
- You may want to…
- It's worth flagging that…
- Be aware that this could…
- Inline `// TODO` left where a fix was in scope
- "You'll probably want to handle X"