727a0760da
artistAlbumsProvider populates cachedAlbums (album rows only) without ever fetching their tracks. When the user taps from the artist grid into an album, albumProvider sees a drift hit on the album row, never triggers cold-cache, and yields with an empty track list — visible as the album header rendering above an empty body. Refactor albumProvider's cold-cache logic into a helper closure that either branch (no album row OR album row + no tracks) can call. Add a fetchAttempted guard so a server response that legitimately returns zero tracks doesn't loop forever. Decision flow: - albumRows empty: cold-fetch (existing path), yield empty on failure/offline - albumRows hit but trackRows empty AND not yet attempted: same cold-fetch — drift watch re-emits with the populated tracks - albumRows hit, trackRows hit (or attempted already): yield as-is