Last week I decided to turn my 2D game into a 3D one. There is something attractive to me about going vertical in a colony sim. So by lunch I had a plan. That afternoon my AI SDLC pipeline was building the tools that build the tools, two AI subagents were opening pull requests against three different repos, and I had spent an hour and some change making a third assistant argue that the whole pipeline was pointless. It lost. It’s been a crazy week.

Let me back up a scosche.
What an AI SDLC pipeline actually buys you
I make a deep-sim colony game solo. Somewhere along the way I built something more interesting than the game: an AI SDLC pipeline on top of Claude Code I call Captain. The one-liner is “Tools own correctness, I own taste.” I take a rough idea, run it through a Socratic interview that decomposes it into a milestone, then epics, then single-goal tickets. Each ticket comes out warm, carrying its own spec, the exact file to touch, and the traps already mapped. Then a step called flay drives one ticket through the whole chain: plan, adversarial review, implement, verify, commit with a footer that moves the ticket’s state. Using hooks, all of this is then stored on an task board for easy conveyance, I use ClickUp myself. The whole thing maps to a traditional software development life cycle.
The dirty secret of working with AI agents is that the bottleneck isn’t writing code. It’s context: getting the right context in cheaply, and not losing it when the session resets. So the whole thing is really a context machine. It stores state outside the model. The model is a swappable entity. The work lives on disk and on a board. You can lose the agent, new session, compacted memory, a different model entirely, and lose nothing.
Flaying one ticket
I started with one small ticket out of a terrifying milestone: rip out the 2D rendering and physics substrate and go full isometric voxel. “Switch to 3D” is about the scariest sentence you can say about a 2D game. The only reason it isn’t paralyzing is that it has already been chewed into a queue of small, reversible pieces, and the game keeps running on the old path the whole time.
The piece was unglamorous: a chunk-world-position service so chunk-load side effects stop depending on a Tilemap that won’t exist on the voxel path. The agent planned it, two reviewers tore the plan apart (one caught a real concurrency bug, capturing a pooled object whose contents get swapped out from under you), it got rewritten, implemented, tested. Then I did the part I care about: I flipped the render mode to voxel, hit play, and watched pawns walk through portals on a path with no Tilemap underneath them. It took ten minutes of actual edits, because the context was already there.
I put my AI SDLC pipeline on trial
Then I did something I do periodically: I made the assistant attack the whole thing. “Is this working, or is it just Claude Code with extra steps?”
It came in skeptical, which is what I wanted. It pointed at the bookkeeping tax, the version bumps, the board sync, the ceremony around a ten-minute change. It wasn’t wrong about the cost. But it kept aiming at the wrong layer. It took three rounds to talk itself into the actual insight: the value isn’t the steps, it’s the artifact the steps leave behind. A finished ticket is a closed loop on one surface: intent, how, why, the traps, the definition of done, the test evidence, the proof it ran. Half written by the planner up front, half written back by the executor on the way out. It’s a context capsule. The next cold session, human or AI, opens it and starts warm. I came in to find the overhead and left convinced the artifact is the load-bearing pillar.
Then I pointed the pipeline at itself
Here is where it got weird in the way I like. Dogfooding had surfaced two snafus: warm specs drift (a ticket said line 573, the call site had moved to 595), and I had no way to mark something blocked. So I used the system to plan improvements to the system.
I wanted a blocked detector. The plan to add blocked-by support spanned three repos with a dependency between them. The pull request implementing the consumer was blocked by the pull request implementing the contract. The feature described its own construction. I chuckled at the notion: Ouroboros, a snake eating its own tail.
Strict standards make the AI SDLC pipeline trustworthy
The plan went through seven review rounds before I let it touch code. I run a panel of two adversarial reviewers: one that reasons against the live repo, one that is a different model entirely and loves any excuse to cut scope. They don’t agree, which is the point. The first design got killed: it fought a convention I had already committed to and would have silently destroyed data in four places. So we pivoted. A few times the assistant tried to stop early, “the rest is execution detail, let’s ship.” No. The standards are strict on purpose, because the strictness is what lets me trust an autonomous run I’m not watching.
Once both reviewers were green, I made three calls: a feature branch off dev in each repo, a subagent per repo, each ending in a pull request ready for review, not merged. By the end of the day two subagents were off in two repos I wasn’t even looking at, cutting branches, building, testing, and opening PRs I reviewed the next morning with fresh eyes.
What I actually think
It’s not done. The scary half of the voxel migration is still ongoing, I’m adding Z depth as I type this, and clean seams on paper aren’t clean until they survive integration. The method only works on ideas that decompose: structural migrations have objective seams, fun does not, which is why there is a hard stop in the pipeline for anything taste-laden. That part stays mine. It basically has to.

But a vague impulse became a reviewed, dependency-aware, forty-ticket backlog by lunch, and the tooling that runs it spent the afternoon improving itself through its own gates. A week later a little over ten remain. The model in the loop is interchangeable. The context, the standards, and the taste are not.
On a side note I’m seriously considering twitch streaming this whole process.