040217cab6
Audit v3 §2 + §4.5: HomeRepository's hydrateAlbums / hydrateArtists / hydrateTracks use mapNotNull on the per-entity DAO, so any ID in /api/home/index that the local cache hasn't seen gets silently dropped from the emitted list. Combined with HomeSuccessContent hiding empty sections, the user sees the home view missing entire rows — Rediscover is the worst hit because by definition those are albums you HAVEN'T played recently, least likely to be in cache. User reported on emulator: 'we're missing a lot of rows and formatting from the home view, the rediscover section is completely missing and a number of the shown sections are rendered with a different number of rows than the flutter app has.' Fix: after refreshIndex() pulls the section ID lists, fire-and-forget a hydration pass on the app scope. For each section, find IDs the cache doesn't have, fetch via LibraryRepository's existing per-entity endpoints (refreshAlbumDetail / refreshArtistDetail / refreshTrack — the last already commented 'for the hydration queue'), chunked HYDRATE_CONCURRENCY=4 wide so we don't fire 50 parallel requests. runCatching per-call so one broken ID doesn't fail the batch. This is the slim version of audit #24 MetadataPrefetcher scoped to Home — the full background hydration queue with tile-providers is still pending. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>