# Don't Code This At Home > Technical blog by Erik Perttu on autonomous engineering pipelines and AI systems. Full content: [llms-full.txt](https://dontcodethisathome.com/llms-full.txt) Last Updated: 2026-04-30 ## About - [About Erik Perttu](https://dontcodethisathome.com/about): Swedish engineer based in Ho Chi Minh City. A decade shipping production software to a million users. Building autonomous engineering pipelines. ## Core Topics - Autonomous Engineering Pipelines - Pipeline Safety, Hard Stops, and Quality Gates - Language Server Protocol and Code Context for AI Agents - Manifest Quality and Context Enrichment - Test-Driven Development in Agentic Systems ## Pipeline Components - **Synthesizer** — populates the manifest with file paths, symbols, signatures, and dependency resolutions from the symbol registry, Tree-Sitter, and language server before any builder runs - **Planner** — reads the ticket and codebase, produces a manifest of what to build and which symbols to change - **Test Writer** — writes tests against the manifest before any implementation exists - **Coder** — implements the code change within the constraints the manifest sets - **Debugger** — receives failing tests and code on disk, diagnoses without inheriting the Coder's reasoning - **Reviewer** — checks the final output for scope violations and correctness before the ticket closes ## Posts - [No Stage Runs Forever: Retry Budgets and Escalation in an Agent Pipeline](https://dontcodethisathome.com/no-stage-runs-forever-retry-budgets-and-escalation-in-an-agent-pipeline): How per-stage retry budgets, wall-clock timeouts, and a global token cap keep any stage from running indefinitely, with the Debugger as the most complex case. - [Prompt Rules Are Advisory; Validators Are Binding](https://dontcodethisathome.com/prompt-rules-are-advisory-validators-are-binding): When the model has a strong prior, naming the failure mode in the prompt doesn't prevent it. Prompt rules are advisory; validators are binding. - [How Filename Lookups Flood an AI Coding Agent's Context Window](https://dontcodethisathome.com/how-filename-lookups-flood-an-ai-coding-agents-context-window): Looking up symbols by filename instead of full path pulls every `index.ts` in the project into the agent's context. One line changed. 20 results down to 1. - [The Lego Instructions: An Architectural Principle for AI Coding Agents](https://dontcodethisathome.com/the-lego-instructions-an-architectural-principle-for-ai-coding-agents): Three properties of a Lego instruction set, mapped to an AI coding pipeline: why manifest quality matters more than builder quality. - [Per-Field Hallucination Fixes Hit a Ceiling: 248 Runs on an AI Coding Agent](https://dontcodethisathome.com/per-field-hallucination-fixes-hit-a-ceiling-248-runs-on-an-ai-coding-agent): Bernoulli model predicted 36% first-pass success across 248 pipeline runs. Measured: 21%. The gap explains why per-field hallucination fixes have a ceiling. - [Stop Asking the Model What the Code Already Knows](https://dontcodethisathome.com/stop-asking-the-model-what-the-code-already-knows): Every field a Planner emits that the codebase already knows is a dice roll. Machine extraction replaces those dice rolls with deterministic lookups. - [Why Architecture Gaps Need a Close Condition, Not a Backlog](https://dontcodethisathome.com/why-architecture-gaps-need-a-close-condition-not-a-backlog): Why tracking known architectural gaps with specific close conditions is more useful than a backlog, and what makes each entry work. - [Fixture-First Development as an Early Warning System for AI Pipelines](https://dontcodethisathome.com/fixture-first-development-as-an-early-warning-system-for-ai-pipelines): Fixture-first development as an early warning system for AI pipelines: the first real-project run confirmed three known gaps instead of discovering new ones. - [How claude -p Silently Inflates Your Pipeline Token Costs](https://dontcodethisathome.com/how-claude-p-silently-inflates-your-pipeline-token-costs): Using claude -p in a pipeline? The model has bash access you never granted. Each tool call re-sends your full context. One sentence cuts token spend by 52%. - [Silent Data Destruction: The Write Path Bug in Agentic Pipelines](https://dontcodethisathome.com/silent-data-destruction-the-write-path-bug-in-agentic-pipelines): The Coder added a new function to an existing file. The pipeline reported success. All seven existing functions were gone. - [Four Pipeline Bugs That Only Surface With Less Capable Models](https://dontcodethisathome.com/four-pipeline-bugs-that-only-surface-at-lower-model-effort): A ticket that passed twice failed four times at lower model effort, exposing four structural pipeline bugs the higher-effort run had masked. - [LLM Non-Determinism Is a Pipeline Failure, Not a Model Problem](https://dontcodethisathome.com/llm-non-determinism-is-a-pipeline-failure-not-a-model-problem): Same ticket, same pipeline config, different result two days apart. Why the first run passing was not confirmation that the constraint was enforced. - [Intentional Technical Debt: Building Features in the Wrong Order](https://dontcodethisathome.com/intentional-technical-debt-building-features-in-the-wrong-order): The pipeline committed code before branch isolation existed. The risk was real, named, given a close condition. That is what makes it different from a shortcut. - [Why a Warning Is Worse Than a Hard Stop](https://dontcodethisathome.com/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. - [Correct Code, Wrong File: How the Write Gate Contains Scope Creep](https://dontcodethisathome.com/correct-code-wrong-file-how-the-write-gate-contains-scope-creep): On attempt 3, the Coder tried to write a file that was not in the manifest. The write gate stopped it before anything hit disk. This is what it is for. - [Why the Debugger Never Inherits the Coder's Reasoning](https://dontcodethisathome.com/why-the-debugger-never-inherits-the-coders-reasoning): The Debugger receives the test failure and the code on disk, not the Coder's reasoning. That isolation is not a constraint. It is the design. - [What Calls This Function? Why AI Coding Agents Need a Language Server](https://dontcodethisathome.com/what-calls-this-function-why-ai-coding-agents-need-a-language-server): Tree-Sitter tells you where a symbol is defined. It cannot tell you where it is called. That gap cost one pipeline run 33,000 tokens to find out. - [The Quality Gate That Passed When It Failed](https://dontcodethisathome.com/the-quality-gate-that-passed-when-it-failed): A Haiku optimization made the L2 quality gate silently pass on every run. The fix was removing the LLM call entirely. - [Why AI Coding Agents Fail on Evolving Codebases](https://dontcodethisathome.com/why-ai-coding-agents-fail-on-evolving-codebases): Not a model capability problem. An agent with the wrong codebase version produces output that is plausible but wrong in ways that are hard to catch.