I fixed a small timezone bug, ran the suite, and watched all 236 tests go green. Out of habit more than doubt, I pushed to CI before tagging the release. CI went red — and then it went redder. That one small fix had two more bugs stacked underneath it, and every one of them was invisible on the machine where I'd just watched the tests pass.
The setting is a tool I maintain called claude-code-notify: it pings me when Claude Code hits a usage limit, and again when the limit resets. You don't need to know the tool. The bug is an ordinary timezone bug, and what it cost me is a lesson about tests — about how a completely green local suite can be lying to your face.
The original bug lived in the part that computes when the limit resets.
Right only by coincidence
When Claude Code tells you a limit will reset, it writes the time into the message as plain text, with the zone in parentheses: resets 5:20am (Asia/Hong_Kong). The function that read that time, parse_reset(), pulled out the hour and minute and did all the arithmetic in the host machine's local time. It never looked at the zone in the parentheses.






