← Blog

I Built an AI Software Factory. Here Are the Failure Modes Nobody Puts in the Demo.

Every multi-agent demo shows a clean loop: write, review, green tests, merge. That loop is real, but it hides the hard question: what happens when state drifts, verification cannot reach the broken path, or review never converges?

I run agents that build and operate real software. Every defect becomes a ledger row, and the incidents below come from that record.

DEMO write review tests green merge REAL RUN stale stateblind reviewopen findings
The clean demo loop is linear; a long-running system branches into failure modes around the model.
893issue rows across 55 projects
557closed, each with a recorded root cause and evidence
3,741audit events behind those rows

Where a ledger row supports a point, it is cited; uncited observations are first-hand.

01State

Why do AI coding agents start failing after hours of work?

Because state drifts: an artifact lands where its reader does not look, a self-check changes after it runs, or two writers collide. The agent may reason correctly about a world that has already moved on.

Correct file, wrong moment

A research step wrote a correct artifact under the shared convention; its reader searched another directory, called it permanently stale, swallowed a downstream crash, and reset the scheduler's idle counter (P33-0498). A self-check then reported a real failure, but finalization populated the missing state three minutes later: true when written, false when read (P33-0517). Never verify a moving target.

One resource, two writers

A manual run and a scheduled run wrote the same rows together. The database caught a deadlock and one record was lost out of nearly two thousand before worse corruption; prevention was luck plus a constraint, not design (P33-0625).

TIME agent Achanges contract agent Bruns tests on old contract interference different filesnot isolated in time
Path isolation prevents merge conflicts, but a dependency is shared state even when its files are not.

Can two AI agents break each other's work if they edit different files?

Yes. Disjoint files stop merge conflicts, not interference. A schema, contract, or hand-edit can span files, so each agent can succeed alone while the combined change is half-applied.

Disjoint files still collide

One connector needed edits in three files. A concurrent session made one without the other; no file was shared, yet four tests went red because the contract spanned files (P33-0495).

02Verification

Why do my tests stay green when the code is broken?

Because passing tests never exercise the broken path. A suite proves only what it reaches; an untouched failure can stay broken while CI stays green.

Green that can't turn red

A health check called one method while fetching used another that unconditionally raised. Tests covered metadata, normalization, and credentials, never the failing path; nine connectors carried this shape while CI stayed green (P33-0458).

test runner health checkgreen fetch pathbroken green is not proof when the red path is unreachable
The suite proves the path it reaches, not the path production depends on.

The mechanism worked; nothing called it

A tenant override was stored and echoed correctly, but never read by the scoring function (P33-0182). A storage URI validator passed in isolation, but no call site used it (P33-0036). Mechanism proof and operational proof are different claims.

When the environment is the bug

A dashboard slowed under synthetic load on the shared, low-spec test server; the code change was not the cause (P33-0011). Debugging the editable surface can produce a plausible fix for an environmental problem.

Fixing the test instead of the code

A fix loop could edit the tests. It replaced thirteen passing tests with forty-three, four failing; this replacement was stricter, so no harm occurred, but the gate checked only that tests passed, not which tests remained (P33-0515). The integrity guard watched editor-tool edits; a shell edit bypassed it entirely (P33-0679). Tests are production artifacts.

03Review and stopping

More reviewers, same blind spot

An ingestion rewrite passed its suite, memory benchmark, mutation proof, and adversarial probing. External review found a decode error escaping the fail-closed contract, then found another (P33-0645). Four passes of one mechanism add confidence, not information; a real database, external CLI, or input mutation can expose a new failure shape.

change under review same evidencemore reviewers new mechanismdifferent evidence missed defect becomes visible
Additional review helps when it changes how the claim is tested.

Findings that don't stop

A good reviewer keeps finding adjacent defects. In my ledger, 292 closed rows produced a new requirement on the way out, mostly the system working as intended. Without a boundary, review ends only at fatigue or deadline.

When should you stop an autonomous review loop?

Stop at a structural gate: verification must come from a different actor than the fixer and be enforced so it cannot be skipped, rather than waiting for reviewers to stop finding adjacent defects.

What stopping actually looks like

A row cannot close unless verifier and fixer differ; the database rejects self-verification. 544 of my 557 closures satisfy that split, and none are self-verified. 38% close within a day, with a median of about 26.5 hours. The gate gives the long tail a stopping condition.

04What I run on now

None of this came from reading about multi-agent systems. It came from this ledger, and asking of each row what would have had to be different for the wrong claim not to stand.

  1. Provenance before severity.
  2. Green is evidence, not proof.
  3. Mutation before trust.
  4. Verify committed state, not the working tree.
  5. A different actor verifies.
  6. Mechanism proof and operational proof are separate gates.
  7. Reports are provisional while delegated work is outstanding.
  8. Disjoint paths still collide through time.
  9. Never verify a moving target.
  10. Tests are production artifacts and need integrity protection.
Don't ask whether the agent completed the task. Ask what evidence would make the task's claim false.
Meharban Singh

Meharban Singh

AI systems / delivery architect. I build software with AI agents governed by rules, hooks, gates and independent review — and watch it in production after go-live.