GPT-5.3-Codex-Spark weekly limit stays at 100% after successful usage
Summary
The GPT-5.3-Codex-Spark weekly usage meter shown by /status remains at 100% after successful GPT-5.3-Codex-Spark usage. This makes the Spark-specific weekly quota appear frozen and prevents users from knowing their actual remaining capacity.
Environment
- Product: official Codex CLI/TUI
- Authentication: ChatGPT account
- Model:
gpt-5.3-codex-spark - Affected Codex version: not yet captured from the affected machine
- Affected OS: not yet captured from the affected machine
- Reporter-side comparison environment: Codex CLI
0.144.4, macOS 26.3 arm64 - Observed: 2026-07-15
Repository Decision
- Target repository:
openai/codex - Why: the symptom is on the built-in model-specific rate-limit snapshot and
/statussurface, with no LazyCodex-specific integration required. - Upstream source path:
codex-rs/app-server/src/request_processors/account_processor.rsfetches backend snapshots and indexes them bylimit_id;codex-rs/tui/src/app/background_requests.rsrefreshes them;codex-rs/tui/src/app_server_session.rsforwards additional model-specific snapshots to the TUI. - LazyCodex source review found no separate Spark quota/accounting implementation that would own this symptom.
Reproduction
- Sign in to the official Codex CLI with a ChatGPT account.
- Select
gpt-5.3-codex-spark. - Run
/statusand record the GPT-5.3-Codex-Spark weekly limit. It reports 100% left. - Complete multiple successful turns using
gpt-5.3-codex-spark. - Run
/statusagain, including after starting a fresh session or forcing the normal status refresh. - Observe that the GPT-5.3-Codex-Spark weekly limit still reports 100% left.
Expected Behavior
Successful Spark usage should decrement the Spark-specific weekly remaining percentage, and /status should show the refreshed value within the documented accounting delay. If Spark usage is intentionally not charged, the UI should not present a consumable weekly meter.
Actual Behavior
The model is actively usable and successful turns complete, but the GPT-5.3-Codex-Spark weekly limit remains fixed at 100% in /status.
Evidence and Scope
- User-observed runtime evidence: Spark turns complete while the Spark weekly meter remains unchanged at 100%.
- Local source inspection shows the TUI displays model-specific snapshots received from the account rate-limit response; it does not independently calculate token-to-percent depletion.
- Current evidence does not establish whether the backend fails to debit
codex_bengalfox, returns a stale snapshot, or the client fails to refresh/replace that snapshot. - Three distinguishing hypotheses:
- Backend accounting does not increment the Spark weekly bucket.
- Backend accounting increments it, but
account/rateLimits/readreturns a stale Spark snapshot. - A fresh snapshot is returned, but the TUI retains or renders an older value.
- Maintainer-side decisive check: compare the Spark
limit_id, weeklyused_percent, and reset timestamp in the turn's rate-limit event with a freshaccount/rateLimits/readresponse before and after one successful Spark turn.
Related but not duplicate:
- #23150 reports Spark usage draining regular Codex limits.
- #32053 reports Spark continuation being blocked despite remaining Spark quota.
- #17764 reports generally stuck quota through OpenCode rather than this official Spark-specific path.
- #30970 reports inference blocked while status shows quota available.
Root Cause
Not confirmed because the affected machine's raw rate-limit events and backend response are not available here. The source boundary narrows the fault to Spark bucket accounting, snapshot freshness, or client snapshot replacement; it does not support choosing one without before/after runtime payloads.
Proposed Fix
- Add server-side telemetry or an account-safe diagnostic that correlates a successful Spark request with the
codex_bengalfoxweekly bucket update. - Ensure
account/rateLimits/readreturns the updated model-specific snapshot immediately after acknowledged usage, subject to a documented delay. - In the TUI, add a regression test that replaces an existing Spark snapshot with a lower remaining percentage after refresh and verifies
/statusrenders the new value. - If quota updates are asynchronous, show the last-updated time or a stale/pending indicator instead of silently displaying 100%.
Verification Plan
- Capture
/statusand raw rate-limit snapshots immediately before a Spark turn. - Complete one successful Spark turn and confirm non-zero usage.
- Refresh rate limits and verify the Spark weekly
used_percentincreases and displayed remaining percentage decreases. - Repeat in a fresh session to exclude in-memory caching.
- Confirm regular Codex and Spark buckets remain correctly separated.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗