667b4c69d5
The check itself is cheap (one ~35-byte response, served from a variable the server reads once at startup), but it was hooked to BOTH `focus` and `visibilitychange` with no throttle — and a single alt-tab back into the app fires both, so every refocus cost two redundant requests. Now: one check per minute at most, never overlapping itself, and it stops checking entirely once a new build is known (the retry loop takes over). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>