GPT-5.3-Codex-Spark weekly limit stays at 100% after successful usage

Open 💬 2 comments Opened Jul 15, 2026 by MongLong0214

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 /status surface, with no LazyCodex-specific integration required.
  • Upstream source path: codex-rs/app-server/src/request_processors/account_processor.rs fetches backend snapshots and indexes them by limit_id; codex-rs/tui/src/app/background_requests.rs refreshes them; codex-rs/tui/src/app_server_session.rs forwards additional model-specific snapshots to the TUI.
  • LazyCodex source review found no separate Spark quota/accounting implementation that would own this symptom.

Reproduction

  1. Sign in to the official Codex CLI with a ChatGPT account.
  2. Select gpt-5.3-codex-spark.
  3. Run /status and record the GPT-5.3-Codex-Spark weekly limit. It reports 100% left.
  4. Complete multiple successful turns using gpt-5.3-codex-spark.
  5. Run /status again, including after starting a fresh session or forcing the normal status refresh.
  6. 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:
  1. Backend accounting does not increment the Spark weekly bucket.
  2. Backend accounting increments it, but account/rateLimits/read returns a stale Spark snapshot.
  3. A fresh snapshot is returned, but the TUI retains or renders an older value.
  • Maintainer-side decisive check: compare the Spark limit_id, weekly used_percent, and reset timestamp in the turn's rate-limit event with a fresh account/rateLimits/read response 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

  1. Add server-side telemetry or an account-safe diagnostic that correlates a successful Spark request with the codex_bengalfox weekly bucket update.
  2. Ensure account/rateLimits/read returns the updated model-specific snapshot immediately after acknowledged usage, subject to a documented delay.
  3. In the TUI, add a regression test that replaces an existing Spark snapshot with a lower remaining percentage after refresh and verifies /status renders the new value.
  4. If quota updates are asynchronous, show the last-updated time or a stale/pending indicator instead of silently displaying 100%.

Verification Plan

  • Capture /status and 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_percent increases and displayed remaining percentage decreases.
  • Repeat in a fresh session to exclude in-memory caching.
  • Confirm regular Codex and Spark buckets remain correctly separated.

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗