What
The check that decides whether a stored OAuth refresh token exists is now asynchronous, so it can consult state that has to be read from disk or over the network before answering. On macOS it returns false immediately without doing that work, leaving the keychain-backed path to handle credentials there.
Details
- The check also returns false immediately when the
CLAUDE_CODE_OAUTH_TOKENenvironment variable is unset, and only looks for the saved token when neither the macOS nor the unset-variable condition applies. - Three call sites that conclude a token cannot be refreshed now await the check rather than calling it synchronously, so the resulting
no_refreshoutcome reflects state fetched at the time of the check. - On macOS the outcome is unchanged in effect: the keychain path supplies credentials, and this check contributes nothing.
Evidence
CLAUDE_CODE_OAUTH_TOKEN, no_refresh
Strings lifted out of the shipped bundle, so the claim above can be checked against them.