[BUG] Max plan: s1mAccessCache.hasAccess=false blocks Sonnet 1M, server re-caches on every launch

Resolved 💬 2 comments Opened May 24, 2026 by ammonfife Closed May 27, 2026

Description

After switching from a setup token to subscription OAuth (to enable plan mode), Sonnet 4.6 (1M) is now gated behind usage credits despite an active Max plan. Opus 4.6 (1M) works fine. The server returns incorrect entitlements on every launch, overwriting any local fixes.

Environment

  • CLI version: 2.1.150
  • Plan: Claude Max (claude_max, default_claude_max_20x)
  • Billing: stripe_subscription
  • OS: macOS (Apple Silicon)
  • Account: sakima.lc@gmail.com
  • Org UUID: d2d4e3ca-34da-48ab-bf95-9f3327f688d7

Symptoms

  1. /model sonnet → "Draws from usage credits" → API Error: Usage credits required for 1M context
  2. /model opus → works fine (1M, no credits needed)
  3. /model claude-opus-4-7 → "organization restricts model selection"

Root cause (from .claude.json backup inspection)

Three cached values are wrong and re-fetched from the server on every session start (patching locally doesn't stick):

"s1mAccessCache": {
    "d2d4e3ca-34da-48ab-bf95-9f3327f688d7": {
        "hasAccess": false,          // ← WRONG — Max plan should have 1M access
        "hasAccessNotAsDefault": false,
        "timestamp": 1779126248723
    }
}

"hasAvailableSubscription": false    // ← WRONG — active Max subscription

"cachedExtraUsageDisabledReason": "org_level_disabled_until"  // ← blocks usage credits

Meanwhile the same file correctly shows:

"oauthAccount": {
    "organizationType": "claude_max",
    "organizationRateLimitTier": "default_claude_max_20x",
    "hasExtraUsageEnabled": true,
    "billingType": "stripe_subscription"
}

Reproduction

  1. Have an active Max plan with setup token (Sonnet 1M works)
  2. Switch to subscription OAuth (claude logout + claude login) — plan mode starts working
  3. Sonnet 1M now requires usage credits
  4. claude --setup-token does not fix it — OAuth session takes priority
  5. Patching .claude.json backup files locally works momentarily but the server overwrites on next launch

What I tried

  • claude logout + claude login (multiple times)
  • claude --setup-token to re-add API key
  • Manually patching s1mAccessCache.hasAccess to true + hasAvailableSubscription to true + clearing cachedExtraUsageDisabledReason in backup files — server re-caches the wrong values on next session start

Expected behavior

Max plan should have s1mAccessCache.hasAccess: true and hasAvailableSubscription: true — Sonnet 1M and Opus 4.7 should be available without usage credits.

Related issues

  • #35877 — hasAvailableSubscription: false despite active Max subscription
  • #19879 — hasAvailableSubscription incorrectly set to false
  • #34452 — hasAvailableSubscription: false despite stripe_subscription
  • #36351 — 1M context removed from picker after update on Max plan

View original on GitHub ↗

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