A capable agent can produce a convincing application in an afternoon. Put a second strong model in the review loop and the result may look even more credible: a tidy design, tests, an answer to every probing question, and a demo that works. That is an enormous advantage for exploring a problem.
It is a dangerous way to decide that you have engineered a system.
The failure I worry about is not a cartoon of an agent forgetting an UPDATE ... WHERE available > 0, or a non-developer suddenly needing to hand-recode everything. Normal software engineering has patterns for those. The more expensive failure is a product that works on its visible path while nobody understands the authority, history, failure modes, or maintenance burden underneath. When the next exception appears, the owner is reduced to re-prompting, re-testing, re-deploying, and wondering which adjacent assumptions were also guessed.
This is my field note on the role a two-model loop should play—and the evidence it cannot manufacture.
Two opinions still begin with a brief
I use models to enlarge the option set. A second model can find a transition or tradeoff the first missed; debate can sharpen a claim into a testable prediction. There is empirical support for benefit on some defined tasks: Ki and colleagues' ACL 2025 evaluation found that a multi-agent debate setup improved accuracy and cultural group parity on their cultural-norm benchmark. That is useful evidence for that setting. It does not establish that two models can approve a production architecture whose requirements they were never given.
The reason is simple: both models may share the same absent facts. Kim and colleagues' ICML 2025 study evaluated errors across more than 350 models and found substantial correlation on the tasks it studied; on one leaderboard dataset, models agreed 60% of the time conditional on both being wrong. That conditional result is not a 60% failure rate for any particular pair, and it is not a result on your repository. It undercuts the casual assumption that two agreeing model answers are two independent observations of reality.
Give both reviewers a polished but incomplete brief, and they may converge on a polished but incomplete design. The better question is: What fact would change their answer if we showed it to them?
A working approval screen can conceal an unmade policy decision
Consider an illustrative migration, not a reported client incident. A company replaces an old access-approval tool. The new interactive approval flow records an approver, a policy version, an effective time, and any later revocation. The old data has a Boolean approved field. Two capable agents design a separate migration route that bypasses the interactive reviewer step, map true straight into APPROVED, add tests for the mapping, and demonstrate the new dashboard. Every fixture they invented passes.
The screen says Approved. That is a visual fact about the UI. It does not answer whether the record was approved by a valid old process, whether the Boolean was a default, whether a revocation occurred in a different source, or whether current policy even permits a record without an approver to grant access.
Three defensible migration designs can produce three different outcomes:
| Candidate | What it does | What must be established first |
|---|---|---|
| Direct mapping | Imports every old true as current approval |
That the old Boolean has the same authority and meaning as a current approval |
| Documented grandfathering | Retains access for a specifically evidenced legacy cohort | The cohort boundary, old policy validity, and review owner |
| Quarantine | Holds ambiguous rows for human review | The operational cost and acceptable interruption window |
One of these might be appropriate. The codebase alone cannot choose it. The policy owner has to state what old approvals mean, and someone has to inspect actual historical records and exceptions. If the models were never given those facts, another review round mostly buys more fluent extrapolation.
This illustrates the bigger problem with an Astra/Fable-style debate loop. The weakness is not merely “the engineer still owns the blind spots.” A non-engineer may not know there is a question to ask, may not understand what the program actually does, and may have no method to falsify a smooth answer. A working interface can lower suspicion precisely because it offers visible confirmation while hiding state transitions.
Draw the system under the screen
Before implementation, I want an owner who can answer five concrete questions about that approval workflow:
- State: Which record is authoritative when the UI, audit history, and old data disagree? What are the legal transitions, and which states are terminal?
- Authority: Which actor may approve, revoke, or migrate each kind of record? Which policy version governs an old approval?
- Migration: How do we classify missing approvers, defaults, conflicting sources, and previously revoked rows? Who decides an ambiguous case?
- Replay: What is the stable identity of a migrated operation? If a batch commits its writes but crashes before its checkpoint, what happens on restart?
- Recovery: How do we detect and reconcile a partial import, and who has permission to make that correction?
These are not prompts to be answered from general software lore. They are the product's commitments. An engineer can use models to draft the state machine, search for overlooked transitions, and implement the chosen policy. The owner must be able to defend the choices against an actual record and a failure trace.
The replay seam is a known distributed-systems pattern, and a capable agent may implement it correctly. Its value here is as a discriminating experiment: does the proposed design preserve the business result after the exact failure boundary that can occur in this system? If the worker writes both the importer and its acceptance test from the same assumption, a passing test may only restate that assumption.
Change the model loop from debate to prediction
I would ask each model for a short decision packet rather than another general critique:
- Its proposed migration policy and the evidence it relies on.
- The predicted final state for a valid old approval, an ambiguous
true, and a later revocation. - The predicted audit history after an import batch is interrupted between its data write and checkpoint.
- The observation that would make its own proposal unacceptable.
- The people or systems that own the final policy and exception handling.
Now the differences matter. A model that accepts every true and a model that quarantines an ambiguous cohort will make different predictions on the same historical sample. If both predict the same answer, the owner can still ask whether the old policy and record provenance support it. The loop is a hypothesis generator. It is no longer the judge of its own answer.
An engineer can then run a small set of experiments in a disposable environment. I would start with these ten rather than invest weeks in the architecture:
- Sample historical records across old policy versions, including missing and conflicting approval evidence; record the cohort counts.
- Have the policy owner label expected treatment for representative rows before looking at model output.
- Run each migration proposal on a copy and diff the resulting states against those labels.
- Include a row approved under an old policy and later revoked; verify the authoritative state remains revoked.
- Attempt an approval transition with an actor lacking permission; inspect the persisted record and audit trail, not just the UI error.
- Interrupt a batch after its database effect and before checkpoint; restart and compare record count, identity, and audit events.
- Change an old identifier while preserving the business entity; see whether replay identity still prevents duplicated effects.
- Simulate an unavailable audit source and confirm the import stops or quarantines according to the stated policy.
- Start a fresh agent session with only the proposed durable decision packet; ask it to extend the importer and predict the old failure case.
- Deliberately break one chosen invariant and verify that the protected acceptance gate turns red.
Those experiments are a design plan, not tests I am claiming to have run on a production migration. The point is to get evidence where the competing designs differ. A screenshot and a unit test that asserts true -> APPROVED will not tell you whether the mapping was authorized.
The ownership gap gets worse after the first session
The builder's original context eventually disappears. Persisted files and agent memory are helpful, but a summary like “migration fixed” is not a causal account of why a certain cohort was held. A later agent may treat a guard as redundant, or apply an old rule to a new data source with different identity semantics. The problem is not just missing text. It is lost validity conditions: what evidence made the decision true, and what change should reopen it?
I would keep one small durable packet beside each consequential decision: the policy owner and version, the specific historical counterexample, the selected behavior, the rejected alternative, a replayable fixture, an observed trace, and the condition that should trigger reconsideration. A specialist supervising agent can watch for changes to migration or approval paths and inject only that packet into the working agent's context. That is more useful than flooding every agent with every document. A protected acceptance test still runs independently, because even a good memory route can miss a trigger.
The platform primitives exist: OpenAI's Agents SDK sessions persist history, its handoffs route work with input filtering, and LangGraph persistence supports checkpointed workflows. Those are building blocks; they do not prove that any particular context-injection design improves decisions. Test the next session: did it receive the right packet, explain the relevant exception, and preserve the fault case? Research on lost-in-the-middle effects is a warning against assuming a fact will be used merely because it is somewhere in a long prompt; it is not a study of this company's handoff.
Count owner attention, not the first demo
The first prototype may be cheap. If the product becomes depended on, every ambiguous state, integration change, or incident creates a new cycle of reproduction, re-prompting, re-testing, re-deployment, and searching for neighboring holes. The employee who thought they had automated a side task may now be maintaining a software product instead of doing their actual job. The work may remain agent-authored; the person is still the one paying attention and accepting risk.
That is why a build-versus-buy decision needs a service-life cost. Price the users, data sensitivity, expected incidents, named owner, review time, replacement path, and operational burden. If a maintained SaaS tool does the commodity job for a small fee, a Friday prototype is not enough evidence to beat it. Build when the workflow is genuinely distinctive and someone can own its model of reality.
I would be wary of using a single productivity number as proof. METR's early-2025 randomized trial found that experienced developers on their own repositories took 19% longer with the tools tested then. METR's February 2026 update says its later setup could not reliably estimate the current uplift because task selection, participant selection, parallel agents, and quality changes complicated the measurement. Neither paper says what the lifetime cost of your agent-built internal tool will be. Measure the complete path in your own setting.
A 2026 empirical preprint on maintenance of agent-generated files found that human developers made roughly 83% of subsequent maintenance commits on the AI-generated files in its sample. The authors also report less frequent maintenance for those files and discuss alternative explanations. I would not turn that into a universal defect claim. It is a reminder that generation and long-term ownership can fall on different people.
The release rule
Before I let an agent build a system people will depend on, I want a named owner who can explain the state machine, authority, migration, replay, and recovery. I want the models to propose alternatives and make predictions on the same real cases. I want an independent readback against a protected acceptance fixture, including one deliberate fault that makes the gate fail. And I want the reason for the chosen policy to survive the next agent session.
For a commodity workflow with a policy owner, I would compare those conditions with a maintained tool and often buy instead of accepting a lifetime of internal repairs. If nobody can own the policy or explain the system's authority, I would keep the workflow contained until that gap is resolved. A SaaS vendor can maintain implementation; it cannot decide the business's approval policy for it. This is how to get agentic speed without mistaking a persuasive surface for a governed product.
Use the loop to generate hypotheses. Let observed behavior and accountable engineering decide what ships.
The field kit
The companion folder for this week holds runnable examples, decision records, evidence and limits. The repository release log is updated after each article's live readback.