Rules Standing instructions
Conventions that always apply: how work gets briefed, what gets written down, what an agent may never do. They hold without being repeated each time.
Client work · EDHLAB
This is the process behind 20+ merged fixes on a live multiplayer game platform. AI does most of the typing and none of the deciding. Every number below comes from real work on a real product with real users.
The scoreboard · since mid-August 2026
The setup · the ground it runs on
The pipeline doesn't live in the code. It lives in my personal wiki, where every issue gets a plan, work is sent out to AI agents with written instructions, and every result comes back and gets written down. The code changes elsewhere; the memory stays here.
Conventions that always apply: how work gets briefed, what gets written down, what an agent may never do. They hold without being repeated each time.
The whole loop below is a named, step-by-step recipe. Run it on a one-line fix or a gnarly bug; the steps and the safety checks are the same either way.
Wins, decisions, and especially dead ends. "We checked this and it wasn't the cause" is the cheapest note to write and the most expensive one to skip.
Nothing starts without me agreeing on the problem, and nothing goes out for review without me approving it. Everything in between is delegated.
The client · where it runs for real
EDHLAB (edhlab.gg) is an online platform for playing Commander, a popular format of Magic: The Gathering. I work on it as a freelance developer: real users, real games in progress, a real cost when a fix breaks something.
That's exactly why it's the right proving ground. A method that only works on toy projects isn't a method. Everything on this page ran against a production app where a bad change is visible to players the same day.
One honest boundary: the code belongs to the client. What you'll see here is the method, the numbers, and the lessons. Never the code itself.
20+
fixes merged & live
This isn't a demo. The loop has been running for weeks. More than forty issues have gone through it; over twenty fixes were reviewed, approved by the client, and merged into the live app. The newest ones went from bug report to a review-ready fix in a single sitting.
And the loop is getting cleaner as it learns. The most recent runs landed with zero review findings: five independent reviewers looked and had nothing to change. Meanwhile six issues correctly ended with no code at all, because the honest answer was "this is already fixed," "this isn't a bug," or "this needs a design decision first."
The shape
The loop · once per issue
Every issue, from a typo to a game-logic bug, runs the same loop. AI does the reading, the building, and the first rounds of review. I make the two decisions that matter: what we're actually fixing, and whether it goes out.
Exhibit · why findings get attacked
One reviewer flagged a spacing change. By its arithmetic, the change ate the entire safety margin around an element, leaving zero clearance. The numbers checked out. The finding still died, because the attack pass asked the question the reviewer hadn't: what does the layout actually do with those numbers? A neighboring rule canceled the change out. The real clearance was fine.
A confident, numerically correct finding was wrong about the thing that matters, what users see. That's why no finding reaches me without surviving an attempt to kill it.
The layer underneath · hard-won rules
None of these are theory. Each one exists because something got through without it.
Agree on the problem before anything runs; approve the result before it goes out. Everything between is delegated. Judgment stays at the edges.
Six issues ended with no code shipped, correctly. A pipeline that can only say yes is a liability.
Tests prove the logic; only looking at the screen proves the experience. Every fix carries a before-and-after from the running app.
Review findings are guilty until proven innocent. Each one survives a deliberate attempt to disprove it, or it dies before it reaches me.
"We checked, it's not that" saves the next investigation from paying for the same conclusion twice. Dated, with evidence.
It can research, build, prove, and review. It cannot merge, and it cannot decide that users should get the change. Those are mine and the client's.
Miss → rule · shipping without the review gate
Before the review step existed, three changes went out with problems no test would catch: wrong scope, a "fix" for a non-bug, sloppy formatting in the write-up. None failed on code quality. The five-reviewer gate was built directly from those three misses.
Miss → rule · trusting green tests
Three passing tests and a clean build missed buttons covering the header, dead space, and a wrong font size. On-screen proof became a mandatory step, not a nice-to-have.
Miss → rule · the silent side effect
Rebasing one change on top of another silently broke a neighboring component; only the type checker caught it. Stacked changes now get checked at every layer, not just the top.
The close · what transfers
None of this depends on the project being a game, or on any particular AI tool. It depends on three habits that transfer to any codebase, with or without AI. If you take anything from this page, take these:
And one meta-lesson: build the pipeline from your own failures, not from best-practice lists. Every guardrail above is a specific miss, dated, with a name. That's why they hold.
Honesty legend
What this page is: a faithful picture of a working method, drawn from my own project records as of 2026-08-29. Counts are as recorded in my notes; the live repositories may have moved since. What it is not: the client's code, which stays the client's, or a claim that any of this is hands-off. Two humans still sit at the gates on every single issue.
Built from the real workflow in my wiki: the engagement doc, the per-issue project docs, the two pipeline recipes, and their post-mortems.
Want this rigor on your project?
Start with a free 15-minute call. You'll leave knowing what your project needs, whether or not we work together.