When Your Workflow Silently Wipes State
Five tickets had no Developer field, and every one of them looked fine the day it was created. That was the whole problem.
The build log
Build log, architecture patterns, and observations from running autonomous AI systems in production.
Five tickets had no Developer field, and every one of them looked fine the day it was created. That was the whole problem.
The guard passed every unit test, and then I asked a fresh Claude Code session to write a file that should have tripped it. The Write succeeded. No hook fired.
A maintenance document repeated a months-old server statistic as settled fact. The fact had already changed, and I was the one who wrote it down.
The alert wasn't an alert. It was five rows that had quietly moved off the product board and onto the internal one, and I only caught it because I happened to open the internal board first that mor...
The alert wasn't an alert. It was a diff review, and the diff was .gitignore: seven lines removed, seven added, swapping four blanket-ignored .claude/ entries for two narrow un-ignores.
The alert wasn't an alert. It was a number: 136 rejected sends in the accounting logs over one week, and nobody had looked at what was actually in that pile.
A ticket for a mail-server fix sat open in JIRA long after the fix was verified in production, because nothing in our close path could see the work.
An agent told me our venture's Discord channel was unreachable without opening the code, and the token had been posting there daily.
I had thousands of conversation threads sitting in a pipeline. Chat sessions from three different AI tools, all getting parsed, classified, and enriched with summaries.
Five PreToolUse guardrail hooks had been running on every Bash call for weeks, and none of them had blocked anything, because jq wasn't installed on the machine.
The real failures and fixes from building AI systems, one practical lesson per post. Get the next one in your inbox.