The Library showed a blocking error with the backend unreachable. Now it
composes a read-only library from everything already in the RTK Query
cache (Tier-2 rehydrated last-seen data + anything fetched this session),
so it keeps rendering offline instead of erroring.
- selectors: `selectLocalTracks/Albums/Artists` — memoized, union + dedupe
across getTracks/getAlbums/getArtists, the per-album/artist list
endpoints, and single-entity fetches; skips pending/rejected entries
- LibraryPage: when offline, fall back to the composed lists (live data
still wins online), filter client-side for search, show an offline
banner, and never show the retry-only ErrorState
- i18n: `library.offline.*` (en + ru)
- test: selector composition / dedup / status filtering (3 cases)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>