Skip to content

[Bug]: Orchestrator V2 Usage Reset Tracker Broken #14169

Description

@SpyC0der77

Before submitting

  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/desktop

Steps to reproduce

  1. Use Codex until the session usage window is exhausted (Usage → Limits shows Session at 0% left with a reset countdown such as ↻ 4h 12m).
  2. Open or continue a Codex thread and send a prompt so the turn fails on the usage limit.
  3. Look at the composer usage-limit recovery banner.
  4. Open Usage → Limits for the same Codex account and compare the Session reset countdown.

Expected behavior

The composer banner should show the same reset time already visible on Usage → Limits (for example Resets <local datetime>), and enable Resume at reset / Snooze until reset when that time is still in the future.

Actual behavior

The composer banner shows:

Usage limit reached
Reset time unavailable; retry manually

Usage → Limits for the same Codex account still shows Session 0% left with a real countdown (e.g. ↻ 4h 12m), while Weekly still has remaining quota.

The stored limit error also omits any wait string:

Codex usage limit reached. Send the message again once the limit resets.

(with a known reset it would include something like The session limit resets in 4h 12m).

Impact

Major degradation or frequent failure

Version or commit

t3code/codex-turn-mapping @ 30f213185 (orchestrator v2)

Environment

  • macOS 27.0 (Build 26A428) - T3 Code (Nightly) desktop app - Provider: Codex (session limit exhausted; GPT-6-Astra / Codex models) - Node v24.13.1, Bun 1.4.2

Logs or stack traces

Thread/session error at limit stop:


Codex usage limit reached. Send the message again once the limit resets.


Root cause sketch: Usage → Limits reads `provider.usageLimits.windows[].resetsAt` from the rate-limits probe; the composer banner only uses `thread.runtime.usageLimitResetAt` from the turn failure’s `resetAt` (Codex in-session `rateLimitSnapshot` via `codexUsageLimitResetAt`). Those paths are not joined, so a missing turn `resetAt` yields “unavailable” while Limits still has the countdown.

Screenshots, recordings, or supporting files

image.png
image.png

Workaround

Working on it, haven't found one that worked (using Cursor to find it)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is broken or behaving incorrectly.via-triageFiled through npx t3 triage

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions