Repository navigation
Conversation
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — Exhausted HTTP 429 retries receive neutral provider-rate-limit wording across web and mobile, with the provider’s explanation visible in work logs. Retry and recovery behavior remain unchanged. You can add or adjust custom eligibility rules. Learn more. |
|
No actionable comments were generated in the recent review.
|
| Layer / File(s) | Summary |
|---|---|
Shared titles and terminal failure items packages/shared/src/orchestrationV2ThreadError.ts, packages/provider-core/src/server/failure.ts, packages/provider-core/src/server/failure.test.ts |
A shared function selects provider failure titles from the failure class and code. Terminal and failed-retry items use those titles, with tests for multiple combinations. |
Web failure presentations apps/web/src/components/chat/UsageLimitRecoveryBanner.tsx, apps/web/src/components/chat/UsageLimitRecoveryBanner.test.tsx, apps/web/src/components/ChatView.tsx, apps/web/src/components/ThreadNotificationCoordinator.tsx, apps/web/src/components/chat/TimelineWorkEntryRow.tsx, apps/web/src/components/sidebar/SidebarThreadRow.tsx, apps/web/src/session-logic.ts, apps/web/src/session-logic.test.ts |
Web presentations use failure titles derived from class and code. The recovery banner receives the runtime error code and changes its no-reset message. Warning timeline rows now display the failure message. Tests cover both usage-limit codes and retry metadata. |
Mobile failure presentations apps/mobile/src/features/threads/UsageLimitRecoveryCard.tsx, apps/mobile/src/features/threads/thread-work-log.tsx, apps/mobile/src/lib/threadActivity.ts, apps/mobile/src/lib/threadActivity.test.ts |
Mobile recovery and work-log labels use failure titles. Warning work-log rows now display the failure message, and historical activity summaries use the derived title. Tests cover failure codes and recovered errors. |
Priority:
Estimated code review effort: 3 (Moderate) | ~20 minutes
Change: Bug fix · Severity of issue fixed: Low
Possibly related PRs
- pingdotgg/t3code#23842: Implements the bounded Codex HTTP 429 retry path and terminal exhausted-retry failure that this change presents with a distinct title.
- pingdotgg/t3code#25341: Adds usage-limit failure classes and codes consumed by the shared title function.
Suggested reviewers: t3dotgg, juliusmarminge, maria-rcks
Merge Risk: 
Minimal · up to ea559
-
HTTP 429 failures receive neutral rate-limit wording. No merge-blocking regression is evident.
Pre-merge checks: 
3 · 
1
-
Failed checks: 1 warning Passed checks: 3 passed-
Full details: Linked Issues check
-
Explanation
The PR addresses the coding requirements in
#24885.providerFailureTitlemapsusage_limitwithresponseTooManyFailedAttemptstoProvider rate limit (HTTP 429)and keepsusageLimitExceededasUsage limit reached.failure.tsapplies the title to terminal and failed-retry items while retaining the failure object. The web and mobile changes apply the same decision and display the retained failure message in warning rows. Missing reset guidance usesNo reset time reported; retry manually. The changes preserve manual recovery, reset evidence, retry policy, and recovered-retry presentation. The added tests cover ambiguous 429 failures, explicit quota failures, retained messages, legacy titles, and recovery behavior.
Full details: Out of Scope Changes check
-
Explanation
The changed server, web, desktop, and mobile presentation paths support the same explanation correction requested by
#24885. The shared helper and projection changes remove inconsistent hard-coded titles. The tests verify the related behavior. No unrelated recovery workflow, automatic retry, wire-contract change,serverOverloadedhandling, provider selection, or historical backfill appears in the reviewed scope.
-
Full details: Description check
-
Explanation
The description includes all required sections and gives detailed problem, scope, implementation, and verification information. However, the change affects multiple UI surfaces and the required before/after screenshot evidence is missing; the description acknowledges this limitation.
Resolution
Add clear before/after screenshots for the affected UI changes, and include a recording if timing, transitions, or interaction details require it. If screenshots cannot be provided, obtain and document an approved exception to the repository requirement.
-
Finishing Touches
-
🧪 Generate unit tests (beta)
-
- Create a new PR
-
- Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Comment @coderabbitai help to get the list of available commands.
Problem
Fixes #24885.
Codex can reduce an upstream HTTP 429 to
responseTooManyFailedAttemptswithexceeded retry limit, last status: 429 Too Many Requests. T3 deliberately routes that failure throughusage_limitrecovery, but its Usage limit reached explanation treats an ambiguous rate limit as exhausted allowance. Codex has already discarded the upstream reason; T3 cannot infer capacity or quota exhaustion from that status alone (openai/codex#30471).Change
Use one shared title decision for the existing failure class and code. Exhausted Codex HTTP 429 retries say Provider rate limit (HTTP 429); explicit
usageLimitExceededfailures retain Usage limit reached. Missing-reset guidance says No reset time reported; retry manually.Apply that decision to new stored terminal/retry items, web/desktop timeline and recovery banners, sidebar tooltips and notifications, and mobile feed, timeline and recovery cards. Clients also correct the displayed title of older items whose stored title still says usage limit. Show the retained provider message in warning rows instead of hiding it.
The adapter classification, Limited state, manual Resume controls, reset timestamps, retry policy and provider/model selection are unchanged. Completed retries keep their recovered presentation. This does not extend #25611's separate handling of explicit
serverOverloadedfailures or change the ACP ingestion concern mentioned in the issue comments.Scope and approval
This is a focused correction of an inaccurate explanation on an established recovery path, under CONTRIBUTING.md's exception for a focused obvious bug. The server and client edits address that same explanation; they add no recovery workflow or wire-contract change. The problem and diagnostic-loss constraint are documented in #24885 and its comments. No maintainer approval of a broader behavior change is claimed.
Verification
Linux, Node 26.12.0, Vite+ 1.4.0; base
5211acfe95a0.vp test run packages/provider-core/src/server/failure.test.ts apps/web/src/session-logic.test.ts apps/mobile/src/lib/threadActivity.test.ts apps/web/src/components/chat/UsageLimitRecoveryBanner.test.tsx.Coverage distinguishes exhausted 429s from explicit quota errors, preserves provider details/class/reset evidence, handles legacy titles, and keeps recovered retries labeled as recovered.
vp test run apps/server/src/orchestration-v2/Adapters/CodexAdapterV2.test.ts -t 'classifies Codex terminal failures|honors completion HTTP status'(run as two focused invocations).vp test run apps/server/src/orchestration-v2/runtimeLayer.test.ts -t 'usage-limit recovery'.vp run check:changedwith browser/render projects excluded by a temporary subprocess hook outside the repository (Vitest arguments--project '!*browser*' --project '!*renders*'). Format, lint, both knip passes, typechecks of the 31 affected packages/dependents, and 162 tests in eight non-browser files passed. Removed the check runner's result cache afterward so an excluded run cannot be reused as a complete browser-inclusive result. No repository check tooling was changed.Limitations: browser/computer use was explicitly excluded from this task, so there are no before/after UI screenshots or integrated web/desktop/mobile captures; this does not meet the repository's UI screenshot evidence requirement. An initial attempt to exclude browser files still made Vitest initialize its browser project and failed because Chromium was absent; no browser launched. The final run excluded the projects themselves. No live upstream 429 was induced, and no historical stored-title backfill is included. Diagnostic details that Codex has discarded remain unavailable to T3.
Model: GPT-6.1 Sol, extra-high reasoning, personal profile. Harness: Codex through T3 Code.