The bug was not PayPal, it was us throwing away the buyer's currency
A CAD customer paying a USD invoice exposed the classic accounting bug: the system stored the merchant currency and lost the buyer's actual money story.
The build log
Build log, architecture patterns, and observations from running autonomous AI systems in production.
A CAD customer paying a USD invoice exposed the classic accounting bug: the system stored the merchant currency and lost the buyer's actual money story.
My "idempotent" upsert assumed trial ID 14 was unused. It wasn't. It was a live "Staff Reminders" mailer, and at 15:58:09 EDT my update path overwrote its subject, from-address, and body with "Get ...
What looked like a mysterious site hang turned out to be a boring Windows hosting default with exactly the wrong behavior for an AI-facing app. The fix took five minutes. Encoding it took another ten.
A better AI workflow started with a blunt policy change: orient first, review read-only by default, and stop auto-routing work into the wrong checkout. The cockpit prototype and the routing-skill change came from the same root cause.
How I tracked down a doubled game table after an app-level site recovery, and the origin-key guard that makes bulk inserts safe to re-run.
A ticket hit LIVE in JIRA with Fix Version stamped. The merge to master never ran, and the bug it fixed was still reaching users. On workflows that accept a false final state and call it done.
An architecture-review AI claimed I was avoiding real work. I asked it to audit its own claim against my actual logs. It retracted, with data.
Adding a private git dependency broke my blog deploy in five completely unrelated ways across two CI targets. SSH keys, git config overwrite semantics, GitHub's not-found lie, pnpm hoisting divergence, and a silent deploy you only learn about from email.
Orange-cloud a legacy IIS app and every IP your origin sees becomes a Cloudflare edge IP, with no errors anywhere. How to find and fix the lying logs.
My backend returned a 400 with a JSON error body. IIS replaced it with HTML, the client swallowed the parse error, and the button did nothing.
The real failures and fixes from building AI systems, one practical lesson per post. Get the next one in your inbox.