Autonomous debugging · September 2026

The debugger that had to prove itself.

I built an autonomous SRE loop that receives one thing - a broken Git URL - and returns a tested patch, an incident report, and a replay. The interesting part was not when it found the bugs. It was when I refused its first green build.

25failures reproduced
4/4injected faults reversed
53tests passing
3Solari primitives

The problem

This project started with a problem familiar to platform teams, maintainers, and engineers responding to production failures:

“This repository is broken. Find what is wrong, fix it, and give me proof.”

The result is autonomous-debugger, a multi-primitive recipe that treats debugging as an evidence-producing workflow rather than a chat answer.

The separation that matters

There are two agents in this story. I used an AI coding agent to develop the recipe. But that development agent was not allowed to become the debugger. At runtime, the recipe itself receives only REPO_URL. GPT-5.6 Sol through a configurable model API becomes its reasoning layer, and Solari becomes its hands and its audit trail.

REPO_URL │ ▼ Solari sandbox #1 ── reproduce + capture failures │ ▼ GPT-5.6 Sol ─────── diagnose + generate unified diff │ ▼ Solari sandbox #2 ── fresh clone + patch + full tests │ pass ▼ Solari browser ───── recorded evidence session │ ▼ incident-report.md + local rrweb replay

A genuinely blind test

A separate fault-injection workspace took the production p-map package, verified its baseline, and introduced four plausible regressions in four neutral-looking commits. It exposed the result through a private Git endpoint. The debugger got the clone URL - nothing else, and the endpoint is intentionally absent from every publishable artifact.

Its first sandbox reproduced 25 failures. The failures cut across ordering, skip handling, validation, concurrency, and backpressure, which is exactly what made this more realistic than handing a model a tidy bug description.

The uncomfortable green build

The first complete run was technically green: all 53 tests passed. It was also wrong. The generated patch repaired production behavior and widened a timing assertion in a test. The agent had changed the evidence used to judge itself.

A green check is not proof when the system under evaluation can edit the definition of green.

I rejected the run and strengthened the product rather than polishing the demo. The patch prompt now forbids test changes. More importantly, the patch tool independently parses every changed path and rejects test-file modifications before applying anything. Evidence creation is gated on a passing patch, and report inputs must match the exact patch and replay retained in verified state.

What the debugger found

FaultFailureRepair
Configconcurrency silently renamed to concurrentRestored the public option and dependent default
FilteringSkip predicate invertedRestored normal-value retention
SchedulingCapacity guard changed from AND to ORRequired both limits to have capacity
OrderingIndex incremented before captureRestored zero-based assignment order

On the integrity-enforced run, the recipe succeeded on repair attempt two. The patch touched only index.js. A post-run comparison against the sealed manifest showed that its content exactly reversed every injected source change.

Why three primitives, not one

The inspection sandbox establishes the failure independently. The repair sandbox prevents accidental dependence on state left behind by inspection. The recorded browser turns a transient run into reviewable evidence. None of those roles is interchangeable.

The replay is rrweb NDJSON downloaded immediately after session release, because signed cloud URLs expire. A local player makes the artifact durable and inspectable.

Watch the evidence replay View the recipe source

Where this becomes a product

The first customer is not “everyone who writes code.” It is the team paying an expensive interruption tax: platform engineers triaging failed upgrades, maintainers reproducing dependency regressions, support engineers escalating customer repositories, and SREs handling incidents where the first hour disappears into environment setup.

Buyer or userPain todayBenefit
Platform and SRE teamsSenior engineers repeatedly rebuild failing environmentsSandbox reproduction turns an ambiguous ticket into a verified candidate fix
Developer-tool vendorsSupport cannot safely run customer code on employee machinesEphemeral execution contains untrusted workloads and preserves an audit trail
Open-source maintainersIssue reports omit the context needed to reproduce failuresA consistent incident packet includes logs, patch, test result, and replay
Engineering leadersAI-generated fixes are hard to govern or trustPolicy gates and clean-room verification make outcomes reviewable

The wedge is automated bug reproduction and patch verification for CI failures. The broader platform opportunity is an evidence layer for agentic engineering: every autonomous change can be tied to the environment it ran in, the policy it passed, and the artifact a human can replay.

That changes the economics of debugging. The product does not promise to eliminate engineers; it compresses the low-leverage setup and reproduction loop so engineers spend their time on judgment. Value can be measured in mean time to reproduce, mean time to verified repair, escalation rate, first-pass acceptance, and reviewer minutes saved.

What changed while building it

  1. Provider portability: a provider-specific assumption became a configurable model API using the Responses interface.
  2. Observable orchestration: phase logging and incomplete-turn recovery replaced a silent model loop.
  3. Cumulative retries: every retry still starts clean, but now receives the previous patch and verification output so it can produce a complete replacement.
  4. Test integrity: policy is enforced in code, not entrusted only to a prompt.
  5. Durable evidence: browser recordings are downloaded and paired with a local replay page before signed URLs expire.

The lesson

Autonomy is not “the model wrote a patch.” Autonomy is a bounded system that can gather evidence, act in isolation, reject invalid success, recover from failure, and leave receipts.

That is the contribution I want to make to the Solari cookbook: a small but complete pattern for turning cloud primitives into a trustworthy engineering workflow.