# Upgrade Guide — v0.17.4

<!-- bump: patch -->

## What Changed

### OAuth Circuit Breaker — No More Runaway Polling

When Anthropic's OAuth API returns 429 (rate limited), the quota collector now backs off intelligently across polling intervals instead of retrying on every poll.

**Before**: After a 429, the fallback to JSONL-based estimation worked correctly for that poll. But the next poll (1-2 minutes later) would attempt OAuth again with no memory of the prior failure — causing a loop of degradation reports every minute.

**After**: If 3 consecutive polls return 429, the OAuth circuit breaker trips and pauses OAuth attempts for 30 minutes. During the backoff window, quota data comes from JSONL estimation (lower confidence but functional). When the backoff expires, OAuth is retried — and a successful response resets the circuit.

This eliminates the pattern where a single rate-limited agent generates dozens of degradation reports in an hour.

## What to Tell Your User

- **"Quota polling is smarter about rate limits."** If Anthropic's usage API throttles your agent, the system now backs off for 30 minutes instead of retrying every minute. You'll see fewer degradation alerts during high-usage periods.
- **"Quota tracking continues during backoff."** The JSONL-based estimation stays active, so spawn gating and migration decisions still work — just with estimated rather than authoritative data.

## Summary of New Capabilities

| Capability | How to Use |
|-----------|-----------|
| OAuth circuit breaker | Automatic — trips on 3 consecutive 429s, resets after 30 min |
| Circuit breaker diagnostics | Visible in `getBudgetStatus().oauthCircuitBreaker` |
