Two rolling windows, not a monthly quota
ChatGPT meters Codex on a 5-hour window and a weekly one. The time in the message is the end of whichever window you filled, which is why the same account is free again within the hour on one day and blocked for days on another.
Nothing on your machine caused it
Codex CLI is relaying what the backend answered. Reinstalling the CLI, clearing $CODEX_HOME or starting a fresh session changes nothing, because the counter lives on the account rather than on the box.
A reset credit may be sitting unused
ChatGPT grants rate-limit reset credits to some accounts. They are separate from the usage windows and from purchased credits, and spending one lifts the current limit at once. The app-server returns them as rateLimitResetCredits beside the windows, so reading only the windows is how a granted credit stays invisible.
The weekly window does not always arrive where you expect
Codex ships the two windows in a primary and a secondary slot, and it now sends the weekly one as primary with secondary empty. Anything that reads the slot rather than the window length can label a weekly block as a 5-hour one, which turns a four-day wait into a promise of forty minutes.