Twenty-plus years of infrastructure engineering taught me what undisciplined change does to production systems — so before AI wrote a line here, I wrote the rules it works under. Every project in the portfolio — SouthpawStrings, desk-engine, the AI Orchestrator, this site — is delivered the same way: AI agents draft, investigate, and implement at speed, and I review, gate, and own every consequential step. The split is written down as working standards in the repositories themselves, so any agent (or any future session) inherits my rules instead of improvising its own.
The documentation happens while the work happens, not after. Every repository carries a changelog entry and a version bump with every release; sessions end with a written checkpoint — what changed, what was decided and why, what is unresolved, and the exact next command — so the next session (human or AI) resumes safely instead of guessing. Decisions get recorded with their reasons: half the changelog entries in these repos read as short engineering post-mortems, because that is what they are.
The deployment standard
A release reaches production only through the repo
Engineer-led AI, in practice
Agents draft; a person decides
The AI side of the lifecycle is deliberately boring: agents do the long, careful work — reading whole codebases, porting pages, chasing a DNS race through nginx internals — and every irreversible step routes through me. Pushes and production deploys sit behind explicit in-session confirmation; secret scanning guards every push; guarded scripts make the safe path the easy path. I am deeply sceptical of model output until it has been checked, constrained, and tested in the real operating environment — that scepticism is a working control here, not a slogan.
The speed is real, but it is the dividend of the discipline, not a substitute for it. The v1.0.0 rebuild of this site — content ports, the desk shell, the container path, the staged cutover — landed in a single working day because years of groundwork already existed: standards to follow, reference implementations to copy, checkpoints to resume from, and an engineer who knew exactly what “done and verified” had to mean. The AI Orchestrator is the same philosophy productised: my approval gates and evidence trails, as software rather than willpower.
And when something breaks anyway, the failure becomes a standard. An hour-long outage caused by nginx resolving an upstream at config-parse time became a written pattern every proxy config here now follows; a build host silently filling with layer cache became a “clean as you check” rule every build script implements. The lifecycle grows a clause every time reality wins an argument.