5c0db429b3
android / Build + lint + test (push) Successful in 3m38s
A self-hosted Minstrel server is usually on the LAN, but ConnectivityObserver gated 'online' on NET_CAPABILITY_VALIDATED — which tracks whether Android reached its own WAN internet-validation probe, not whether Minstrel is reachable. A transient WAN/DNS blip (or Android's periodic re-validation) momentarily drops VALIDATED while the LAN server stays reachable. That flipped ServerHealth -> Offline with NO debounce (only the /healthz path got hysteresis), and OfflineGatedDataSource fast-failed the in-flight stream read with OfflineException -> ExoPlayer SOURCE error -> the load_failed 'Source error' event. On-device: 'app said server offline while it wasn't', one track failed, then recovered when VALIDATED returned. - ConnectivityObserver: require INTERNET only, not VALIDATED. The /healthz poll (VersionCheckController, with its own failure hysteresis) is the authority on whether Minstrel is reachable; the device-link signal only answers 'is there a network at all' (airplane mode). - ServerHealthController: add a WARN-tier transition log. The signal had zero instrumentation, which is why this was hard to diagnose from logcat. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>