Autonomous Engineering Pipeline

An autonomous engineering pipeline in Python that takes a ticket from input to tested, reviewed code with no human in the execution loop. The architecture behaves more like a compiler for LLM behavior than a conventional agent framework: LLMs handle the parts that require interpretation, non-LLM code handles everything that can be computed.

The pipeline runs inside Docker. It is proven on TypeScript and Python codebases, including a ~200k line TypeScript monorepo, both of which are now held as regression corpora; current work comes from LoopsBench, Microsoft's published long-horizon coding benchmark, whose hidden tests grade each result from outside the pipeline. The pipeline delegates only new logic to the Coder. The Coder and Test Writer author with edit tools in sandboxed copies of the tree; the pipeline supplies their context from the registry and certifies their output rather than rendering it deterministically.

Behavioral oracles are proven non-vacuous via two gates: confirm-RED (necessity, before the implementation exists) and the end-of-ticket mutation gate (sufficiency: a derived wrong-version mutant must be killed by the oracle before the ticket closes).

Every run produces a full artifact chain: per-stage LLM reasoning traces, structured manifests, Coder operations, Reviewer verdicts, and per-stage cost and token data. The run archive spans ~1,900 runs from April 2026, almost all of it the same handful of ticket families re-run to shake out non-determinism. All posts document real runs, real failures, and the architectural decisions behind them. Still R&D.

Architecture principles

Data Path Principle
Every fact an LLM copies is a fact it can hallucinate. Trust hierarchy (top to bottom): human chat-authored design > machine-extracted data > model-generated constraints > model narrative. Facts and decisions are never mixed.
Lego Instructions Principle
Manifest quality determines outcome more than builder quality. Every piece in the box (Synthesizer populates all facts), unambiguous steps (single source of truth per field), no impossible assemblies (feasibility gate rejects unsatisfiable criteria before any builder runs).
Brain layer / builders boundary
Builders execute only. If a builder is searching, locating, or deciding, that is brain work leaking downstream. The manifest was incomplete. The fix is always to push the decision back upstream.

Pipeline stages

Scout
Analyst stage inside the grounding chat. Takes the problem prose as written and derives the fix's locus and feasibility, including prerequisites the type system demands, before any autonomous run starts. Ensemble with a bounded tool budget, grounded against the registry.
Grounding chat
Pre-autonomous stage. The operator confirms intent, exclusions, and design decisions in a structured exchange grounded against the registry. Output is a machine-readable handoff the downstream pipeline reads as the source of truth. Scout findings feed it on raw-issue runs.
Assembly stage
The autonomous run from structured handoff to a committed diff ready for review, or a halt. Sequences the Synthesizer, Planner, Coder, Test Writer, Debugger router, and Reviewer under per-stage retry and wall-clock caps plus a global token cap. The sub-ticket attempt loop runs the full ticket oracle at final acceptance, so a chain fails inside the loop rather than at the end of the ticket. End-of-ticket gates certify the diff: type-check, lint and conventions, the mutation gate, the full target suite, and a suppression guard. On benchmark work, tests the pipeline never sees grade the result out of band, and each completed unit is additionally graded for how close its change is to the gold patch that ships with the task. No human involvement inside it.
Synthesizer
Compiles planner-authored sub-tickets into builder manifests with no LLM in the conversion, grounded against a Tree-Sitter and language server derived symbol registry. Builder context is derived separately: supplied files, a symbol index over them, framework contracts, and registry-derived contract signatures pushed into the prompt for every symbol the manifest references.
Planner
Decomposes the ticket into sub-tickets naming what to build and which symbols to change. Authors decisions, not facts: the Synthesizer compiles them into builder manifests. Receives re-plans on a manifest-wrong diagnosis.
Coder
LLM with edit tools in a sandboxed copy of the tree. Supplied up front with registry-derived files, a symbol index, and pushed contract signatures for referenced symbols; hard-fails if a needed real file was not supplied, except files withheld by design. Sandbox diffs are converted to surgical operations; a rewrite that is not symbol-decomposable is refused until the final attempt, which may fall back to a whole-file rewrite guarded by a byte-level preservation differential on untouched symbols.
Test Writer
LLM test author with edit tools that reads the target tree in place and writes only into a scratch directory, with a registry-derived symbol index, pushed contract signatures, and framework type contracts. Oracles are proven non-vacuous via confirm-RED (necessity) and the mutation gate (sufficiency), with mutants scoped to the ticket's semantic delta on the abstract syntax tree.
Debugger router
The Debugger router classifies each failure and dispatches to the stage that owns the fix: code-wrong to the Coder, manifest-wrong to the Planner for a re-plan, machine-confirmed ticket contradictions to an operator correction surface, test-wrong to a bounded automated test-repair pass, and most end-of-ticket gates to a fail-safe Coder repair. The only stage that can redirect the pipeline. Diagnoses without inheriting the Coder's reasoning.
Reviewer
Checks scope and correctness before the ticket closes. Split into Test Reviewer and Impl Reviewer in Era 4.

Start here

Why a Warning Is Worse Than a Hard Stop

When the pipeline detects zero test files, logging a warning and continuing produces output that looks correct but cannot be caught by any downstream gate.