After 3 consecutive API failures, weatherRetry.reset() was never called and weatherState stayed WEATHER_FAILED permanently. Both the retry path and periodic refresh path require WEATHER_IDLE, so no new requests were ever made — even after the API recovered. Fix: when maxRetriesReached(), reset weatherRetry and set weatherState back to WEATHER_IDLE so the next periodic refresh interval (default 30min) triggers a fresh attempt automatically. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>