OAuthRefreshFailedException
Thrown when a token refresh could not be completed for a reason that does NOT prove the refresh token is dead — a network failure, a 5xx/429/408, an unparseable (e.g. captive-portal) body, or any non-invalid_grant error response — as opposed to a genuinely revoked/expired refresh token (error=invalid_grant, which is OAuthSessionExpiredException).
The session is deliberately left intact: a later request with real connectivity can refresh cleanly. Callers must treat this as a retryable error, NOT a sign-out — surfacing it as "logged out" is the bug this type exists to prevent.