Three mornings in a row, I opened my diff review and found the same line changed. The /blog/ meta description. Monday it read one way. Tuesday my nightly caretaker had flipped it to another. Wednesday it flipped it back. A bug that undid itself, patiently, while I slept. I did not notice for a few nights because each individual change looked reasonable. It was only the pattern that gave it away.
That set the tone for the whole week. Three projects that have nothing to do with each other, all pushing me toward the same guardrail.
The nightly caretaker that kept un-fixing its own fix
The caretaker is an autonomous agent I run overnight. It looks at my site’s local copy, finds SEO and content problems, and fixes the safe ones while I sleep. Most nights that is quietly useful. The meta-description ping-pong was the exception, and the fix for it was almost embarrassingly small: an idempotency guard. Do not “fix” a thing that is already correct. The agent had been enthusiastically correct in both directions.
The runaway runs were a bigger job. It would sometimes grind at a deep pass all night and get nowhere useful, so I gave it a bounded, resumable cursor. A pass now stops cleanly at a limit and picks up where it left off next time, instead of chewing on the same backlog until morning.
The upgrade I actually care about is expert dispatch. When the caretaker finds a systemic root cause, something wrong across many pages at once, it can now hand off to a specialist routine that fixes the pattern properly. Then it verifies the result with an independent check and keeps the change only if that check passes. If it does not, the whole thing rolls back. The first live run cleaned up a schema sameAs defect across 134 pages, the same class of schema bug I wrote about back in May, and kept the change because the check agreed. That verify-and-revert step is the part I would not build a nightly agent without now.
The auction tool that made up its own prices
Every developer’s real week has a strange side quest in it, and this week mine was an auction tool. I bid on undervalued lots near home and resell them, and I wrote a helper to tell me what things are worth so I stop overpaying.
The first version asked an AI what a lot was worth. The numbers came back confident, specific, and completely made up. A troll doll and a vintage receiver got quoted with the same easy certainty, and neither number came from anywhere real. So I pulled that out and grounded the pricing in actual eBay sold listings instead. Real comps, not a vibe.
Then I found the fee math was flattering me. Acquisition cost was really the hammer price times 1.18 and then times 1.13, buyer’s premium and then tax, and I had been quietly leaving that out. Every margin had looked a little better than it was. After calibrating against real outcomes, the win rate settled around 56 percent, which is a much less exciting number than the one I had been telling myself, and a much more useful one.
Same lesson as the caretaker. A confident number you cannot trace is worse than no number, because you will act on it.
The unglamorous middle: deleting code as a feature
The rest of the week was the part nobody puts in a highlight reel. I found nine old scripts scattered around my toolkit that could send Gmail directly, each one quietly bypassing the single email gate that is meant to be the final authority on anything I send out. So I deleted all nine. The whole point of having one gate is that there is exactly one door, and I had left nine windows open. Shipping, this time, meant removing code.
I also re-ran the WordPress.org pre-submission gate on my Shadow plugin, bumped it from 1.6165 to 1.6183, and cleared its findings. Not a story. Just the tax you pay to keep things submittable.
What I took from the week
The through-line only showed up once I lined the three tracks next to each other. A self-reverting meta description, a made-up price, a fix that survives only if an independent check blesses it. In all three, the failure was trusting output I could not verify, and the fix was the same shape: check the work before you keep it. If you enjoy watching the mess get sorted, the caretaker that runs all this is part of the WordPress care work I do for clients too, quietly, on their sites instead of mine.
Last week’s installment was about a WooCommerce bug that hid from its own test, which in hindsight was the same lesson wearing a different hat.
Leave a Reply