The Publish Tool That Could Approve Itself
The line was fm = setgate(fm, "editorialreview", "true"), buried inside publish().
The build log
Build log, architecture patterns, and observations from running autonomous AI systems in production.
The line was fm = setgate(fm, "editorialreview", "true"), buried inside publish().
The ci-alert/triage channel posted the same build failure four times between 4:11 PM and 6:43 PM on 2026-09-13: astro build fails: blog/[draft post file].md has status 'published' but missing requi...
The backup dashboard on my main desktop has said "up to date" for something like two years straight.
The ticket tracker showed the change still marked "in review." Production was already serving it.
82 tickets sat in "Highest" in the JIRA queue for a legacy SaaS product, assigned to me, unresolved. When I pulled the full history on them, 75 had been re-stamped to Highest on the same day.
The session tree had been showing yesterday afternoon's activity since 11:03 PM, when I opened it planning to check on a quick fix.
Automatic failover moved crons off a dry Claude seat onto a fresh one. A drill found it only reached nine of fourteen.
A status check came back two and a half days stale, because the refresh gate only recognized a page someone was still watching.
At 5:07 AM on September 11, a review pass flagged something called Pair #38. It was one line in a batch of diffs from a project to shorten thousands of stale issue-tracker tickets and code comments...
The IIS-URLAuthorization script came first, and it never got a comment explaining why. iisreset, disable a module, move on, ship the ticket.
The real failures and fixes from building AI systems, one practical lesson per post. Get the next one in your inbox.