Skip to content

[Bug]: Claude gateway 429 wrapped as 503 hides auto-resume controls #17777

Closed

Description

@tzachbon

Before submitting

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

Area

apps/server

Steps to reproduce

  1. Use T3's existing Claude provider with ANTHROPIC_BASE_URL pointing to a 9router gateway, selecting Claude Opus 5.5.
  2. Send a prompt while the gateway's Claude accounts are rate limited. The gateway returns HTTP 503 containing an upstream 429 rate_limit_error and an explicit cooldown such as (reset after 4m 6s).
  3. The Claude SDK emits the error/result frames below without a native rate_limit_event.
  4. Inspect the failed turn: the normal usage-limit auto-resume controls are missing.

A deterministic server repro is to feed those frames into the existing Claude adapter test harness. No credentials or live exhausted account are required for that repro.

Expected behavior

Recognize the explicit upstream rate limit and reset time so the existing usage-limit recovery controls are available. If auto resume is enabled, the existing worker should continue the thread when that time arrives.

Actual behavior

The adapter records class: "provider_error", code: "api_error_503", retryable: null, and no resetAt. Both the recovery controls and worker require usage-limit/reset metadata, so changing the status classification alone is insufficient.

Impact

Major degradation or frequent failure: work stops and requires a manual retry after a known cooldown.

Version or commit

Observed on 0.0.46-nightly.20261008.2833 (a6ec88f7a716fc421bd22c2484881c44110f9375). The same classification path is present on main at c77a7b7eebd6ea8a3a63bbcaaa7c1707fe65c86e.

Environment

Ubuntu 24.04; T3 web client connected to a self-hosted server; existing Claude provider through 9router; Claude Opus 5.5; full-access permission mode.

Logs or stack traces

Sanitized SDK fields; provider hostname and request identifiers omitted:

assistant.error = "server_error"
result.subtype = "success"
result.is_error = true
result.terminal_reason = "api_error"
result.api_error_status = 503
result.result =
API Error: 503 [claude/claude-opus-5-5] [429]: {"type":"error","error":{"type":"rate_limit_error","message":"Please try again later."}} (reset after 4m 6s).

Workaround

Manually retry after the reported cooldown. The proposed adapter regression check does not constitute verification of a live scheduled continuation.

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions