The Urgent Bug Report That Was Two Years Old
A dashboard number read as 'happening right now.' It was a lifetime total going back more than two years.
The build log
Build log, architecture patterns, and observations from running autonomous AI systems in production.
A dashboard number read as 'happening right now.' It was a lifetime total going back more than two years.
The queue said ten items. Four of them were real.
The Error Log table had 492 rows tagged Script timed out over the trailing 120 days, and the ticket that came in described it like a site-wide admin outage.
267 places in the codebase write a string into a <script> block or an inline handler, and I had to decide which of them were dangerous.
A bulk migration had put 956 domains on the one renewal method that needs a DNS record from the customer every 90 days. Moving them was easy. The watchdog I built for the next one spent its first real morning crying wolf over the wrong 55.
Headless runs of my AI CLI loaded my interactive hooks, and a plain JSON request came back as pure footer text. The lint I wrote to protect the fix passed on a broken file.
Nearly a thousand certificates sat on a validation method that needed refreshing every 90 days, and nothing would have noticed a specific one about to fail before it actually did.
A teammate's agent sat broken for two days, and the way it finally got noticed was someone squinting at Discord reactions and thinking they looked wrong. Then it spammed the channel.
Two rewrites in, the post still had a forty-five line code block in it, and it still read like documentation.
An automated task needed a throwaway test site, used the public signup form to get one, and reported that nothing had been created. Two live accounts said otherwise.
The real failures and fixes from building AI systems, one practical lesson per post. Get the next one in your inbox.