ae5de91006
Drops the staleness gate from 1h to 1m and adds a Timer.periodic that fires recheckIfStale every minute while the app is foregrounded. Net effect: ~1 check per minute of active use, ~60 KB/hr data — trivially affordable for the value of faster recovery when min_client_version bumps server-side. Timer is paired with the lifecycle observer: started in initState + on resume, stopped in dispose + on pause/inactive/hidden/detached so backgrounded apps don't burn battery on probes the user can't see. Staleness gate still wraps the call so concurrent triggers (timer + resume firing close together) dedupe to one network call. Manual "Check now" still bypasses the gate via recheck(). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>