Repository navigation
Conversation
A plan with a per-model quota reports two weekly windows — the account's
and the model's — and both rendered as "Codex · Week". The model's own
limit sits at 0 % until that model runs, so the pair read as one limit
that had stopped filling.
The bucket's limitName is the name for it; the label follows the shape
Claude's per-model window already uses ("Week · <model>"), without the
service prefix because "Codex · Week · GPT-5.3-Codex-Spark" measures
248 px against a 222 px column and the ellipsis would eat the one part
that tells the rows apart.
Only the account-wide window keeps the active dot. Whether a model is
the one currently running is not something the server says, and a dot on
both windows costs the one that is true its meaning.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The refresh interval was the only thing deciding how often a provider is reached, so a 90 s tray was making 40 requests an hour against an endpoint with a request quota it does not own alone — for numbers whose windows are five hours and seven days wide. The 429 that earned then froze the display for a quarter of an hour at a time, which is the symptom that gets reported. A provider now states its own floor and the scheduler enforces it, on top of the backoff rather than instead of it: whichever pause is longer wins. Claude's floor is claude.minIntervalSeconds, 300 s by default and in the settings dialog; Codex keeps zero, being a local process with nothing to spend. Reset() clears the spacing along with the backoff, so the menu's refresh command still reaches everything at once — someone asking for numbers now is entitled to the request. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`rateLimitsByLimitId` repeats the bucket `rateLimits` already carried, so one of them has to be skipped, and the check matched the literal "codex". That is the id this account reports today; it has reported "premium" too. Under that name neither branch would have skipped anything and the one limit would have been listed twice — as two rows a person cannot tell apart, which is the failure this file just spent a commit fixing. The payload states the id. Use it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Merged
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.
Two things visible in one screenshot of the details fly-out: Claude paused on a rate limit, and two Codex rows both reading Codex · Woche, one of them stuck at 0 %.
The usage endpoint was asked 40 times an hour
refreshSecondswas the only thing deciding how often a provider was reached. The windows being watched are 5 hours and 7 days wide, and the tray is not the only client spending the account's request quota — so most of those requests could not learn anything, and the 429 they earned cost the display a quarter of an hour at a time.A provider now states its own floor (
IUsageProvider.MinInterval) andPollSchedulerenforces it on top of the backoff — whichever pause is longer wins. Claude's floor isclaude.minIntervalSeconds, 300 s by default and exposed in the settings dialog; Codex keeps zero, being a local process with nothing to spend.Reset()clears the spacing along with the backoff, so the menu's refresh command still reaches everything at once.Two weekly windows that read alike
The
proliteplan reports a second bucket,codex_bengalfox, carryinglimitName: "GPT-5.3-Codex-Spark"— a per-model weekly limit, the exact analogue ofclaude.weekly_scoped.fable.AddWindowsignored the name, so both rows rendered from the window alone and the model's limit — 0 % until that model runs — looked like the account's limit had stopped filling.The named bucket now reads
Week · GPT-5.3-Codex-Spark, the shape Claude's per-model window already uses. The service prefix is dropped there on purpose:Codex · Week · GPT-5.3-Codex-Sparkmeasures 248 px against a 222 px label column, so the ellipsis would have eaten the only part that tells the rows apart. Only the account-wide window keeps the active dot — whether a model is the one currently running is not something the server says.Verification
--onceagainst the live account confirms the new bucket parses ascodex.codex_bengalfox.primaryat 0 % without the active marker.🤖 Generated with Claude Code