If your session has no model access info cached, Claude won't fall back to Opus 5.
What's wrong with this entry?
A new predicate detects sessions where Claude Code has no entitlement data at all, and the Opus lineup walk used for refusal fallback filters Opus 5 out in that state.
isEntitlementOverlayUnavailablereturns true when the provider is first-party, an OAuth token is stored, the profile scope is absent, no Anthropic API key is set, and the cached model-access list is empty.- A helper combines that predicate with a canonical-name check against "claude-opus-5"; the candidate scan becomes
.find((n) => N1e(lo(n)) && !u2c(n) && r(n)), and a sibling helper substitutes "claude-opus-4-8" in its place. - No remote flag is involved. It is driven purely by runtime auth and cache state, so a first-party OAuth session with an empty entitlement cache will not auto-pick Opus 5 as a fallback target.
isEntitlementOverlayUnavailable
Strings lifted out of the shipped bundle, so the claim above can be checked against them.
Related
Other releases about the same thing. Found by shared names or similar wording; neither means one caused the other.
-
v2.1.222
Model refusal fallback updates the shown model
Both mention model fallback
-
v2.1.227
Advisor calls carry prior turns and a refusal fallback
Both mention model fallback
-
v2.1.227
Model roster flag can redirect refusal fallback
Both mention model fallback