Release 0.3.1: fix Grok usage after period resets - #74
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Grok Build can return a valid new usage period after reset without
creditUsagePercent. Codex Limits previously rejected that response, retained the expired snapshot, and reported that the account had no allowance.Accept the period-only reply as a partial snapshot: retain reset, plan, balance and receive time while leaving the percentage unavailable. Do not insert a zero/100% observation or forecast. Preserve historical points, label their window as “Last recorded”, and resume numeric observations when Grok supplies them. Explicit null/malformed percentages and unusable legacy limits remain rejected. Prepare version 0.3.1 (build 11).
Validation:
missingAllowancebefore the fix and passes after it.The first full local run exposed an existing Codex timer race in
testDisplayBoundaryExpiresCodexWithoutAnotherSourceRead(its reset is only 150 ms after fixture creation). The isolated baseline test and the subsequent full 646-test run passed. Codex collection/timer logic is outside this change.Release authorization (2026-09-16): the product owner explicitly renewed the all-enabled idle comparison and eight-hour mixed lifecycle soak exceptions specifically for 0.3.1; both remain unperformed, not passed. The owner also authorized an administrative merge of PR #74 without a second/code-owner approval after tests and CodeQL pass, followed by publication. ADR-0015 and the PRD record these exact-version exceptions.
The initial implementation head passed GitHub CI (646 tests and process-cleanup checks): https://github.com/thrr87/codex-limits/actions/runs/35109868766. Final head
8e888c2d68ceb359d9b5b0b2fd2c6db5011e590dpassed CI (646 tests) and CodeQL for Swift and Actions. Signed universal dry-run and draft artifacts must be verified before publication. Claude Code remains experimental, and its real Pro/Max allowance path remains unverified.