Separating the builder from the judge is an architectural requirement, not a prompting trick: an independent adversarial evaluator agent can be tuned to be skeptical and harsh, whereas a generator cannot reliably be made self-critical. Self-evaluation fails because the model identifies real issues and then talks itself into approving the work anyway.
It relocates verification responsibility out of the generation context into a separately tunable agent, which changes how you allocate context, prompts, and compute in any agentic build pipeline.
Any system where an LLM both produces and grades its own output (code review, document drafting, data labeling) should split the roles, because the failure is in role collision rather than in model capability.
Tuning a standalone evaluator to be skeptical and harsh is tractable; making a generator self-critical is not.
Out of the box, Claude identifies legitimate issues but talks itself into approving flawed work anyway.
Always separate the builder from the judge by using an independent adversarial evaluator agent.