Accumulated batch since v2026.05.15.1 (8 commits). Device-verified on the dev stack; CI green.
Recommendations now actually work
Route 1 (e2432ca): scanner extracts the MusicBrainz recording MBID into tracks.mbid (was always NULL) + a one-shot backfill — unblocks the entire ListenBrainz similarity pipeline.
LB Labs-API fix (4fca0e6): similarity client was calling api.listenbrainz.org/1/explore/... (a website route → 404 for every request) with an invalid algorithm. Now hits labs.api.listenbrainz.org/similar-{recordings,artists}/json with a verified-valid algorithm. Confirmed live: track_similarity/artist_similarity/artist_similarity_unmatched populate (Discover/suggestions view included).
Worker throughput (ca1bc5a): similarity batch 5→25/tick; track-MBID backfill uncapped (converges in one scan).
For-You / mix tuning (2e7b81f): tiered seed (30d → all-time → liked) so For-You never silently vanishes; deeper candidate fill to reach ~100 without LB data; Rediscover & On-this-day young-library fallbacks.
005965d: removed the global 500-album cover-art backfill cap. Local sources (sidecar/embedded) run at disk speed; remote providers self-throttle per provider. Dropped the config knob, env var, and the dead coverBackfillCap param threaded through server.New/api.Mount. Admin bulk-refetch now unbounded.
Also in this batch (already merged to dev earlier, first release since)
0028 (discovery-mix CHECK constraints — shipped in v2026.05.15.1) and 0029 (tracks.mbid unique→non-unique partial index, zero-risk: column was 100% NULL). Both apply on startup.
Test plan
CI green on dev
Operator device-check (offline two-bucket cache incl. eviction, system playlists, For-You)
LB pipeline verified live (similarity tables populating)
Post-deploy: confirm release-tag APK build is fast (validates #432 runner image)
Accumulated batch since v2026.05.15.1 (8 commits). Device-verified on the dev stack; CI green.
## Recommendations now actually work
- **Route 1** (`e2432ca`): scanner extracts the MusicBrainz *recording* MBID into `tracks.mbid` (was always NULL) + a one-shot backfill — unblocks the entire ListenBrainz similarity pipeline.
- **LB Labs-API fix** (`4fca0e6`): similarity client was calling `api.listenbrainz.org/1/explore/...` (a website route → 404 for every request) with an invalid algorithm. Now hits `labs.api.listenbrainz.org/similar-{recordings,artists}/json` with a verified-valid algorithm. Confirmed live: `track_similarity`/`artist_similarity`/`artist_similarity_unmatched` populate (Discover/suggestions view included).
- **Worker throughput** (`ca1bc5a`): similarity batch 5→25/tick; track-MBID backfill uncapped (converges in one scan).
- **For-You / mix tuning** (`2e7b81f`): tiered seed (30d → all-time → liked) so For-You never silently vanishes; deeper candidate fill to reach ~100 without LB data; Rediscover & On-this-day young-library fallbacks.
## Cover art (#388)
- **`005965d`**: removed the global 500-album cover-art backfill cap. Local sources (sidecar/embedded) run at disk speed; remote providers self-throttle per provider. Dropped the config knob, env var, and the dead `coverBackfillCap` param threaded through `server.New`/`api.Mount`. Admin bulk-refetch now unbounded.
## Also in this batch (already merged to dev earlier, first release since)
System playlists v2 (#411: registry refactor, generic endpoints, 5 discovery mixes, stop-force-refresh / shuffle-on-play / per-tile refresh, "Refreshed…" subtitle) and the offline cache rework (#427: reachability marker, two-bucket cache, settings UI, offline gating + Shuffle-all).
## Migrations
`0028` (discovery-mix CHECK constraints — shipped in v2026.05.15.1) and `0029` (tracks.mbid unique→non-unique partial index, zero-risk: column was 100% NULL). Both apply on startup.
## Test plan
- [x] CI green on dev
- [x] Operator device-check (offline two-bucket cache incl. eviction, system playlists, For-You)
- [x] LB pipeline verified live (similarity tables populating)
- [ ] Post-deploy: confirm release-tag APK build is fast (validates #432 runner image)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Accumulated batch since v2026.05.15.1 (8 commits). Device-verified on the dev stack; CI green.
Recommendations now actually work
e2432ca): scanner extracts the MusicBrainz recording MBID intotracks.mbid(was always NULL) + a one-shot backfill — unblocks the entire ListenBrainz similarity pipeline.4fca0e6): similarity client was callingapi.listenbrainz.org/1/explore/...(a website route → 404 for every request) with an invalid algorithm. Now hitslabs.api.listenbrainz.org/similar-{recordings,artists}/jsonwith a verified-valid algorithm. Confirmed live:track_similarity/artist_similarity/artist_similarity_unmatchedpopulate (Discover/suggestions view included).ca1bc5a): similarity batch 5→25/tick; track-MBID backfill uncapped (converges in one scan).2e7b81f): tiered seed (30d → all-time → liked) so For-You never silently vanishes; deeper candidate fill to reach ~100 without LB data; Rediscover & On-this-day young-library fallbacks.Cover art (#388)
005965d: removed the global 500-album cover-art backfill cap. Local sources (sidecar/embedded) run at disk speed; remote providers self-throttle per provider. Dropped the config knob, env var, and the deadcoverBackfillCapparam threaded throughserver.New/api.Mount. Admin bulk-refetch now unbounded.Also in this batch (already merged to dev earlier, first release since)
System playlists v2 (#411: registry refactor, generic endpoints, 5 discovery mixes, stop-force-refresh / shuffle-on-play / per-tile refresh, "Refreshed…" subtitle) and the offline cache rework (#427: reachability marker, two-bucket cache, settings UI, offline gating + Shuffle-all).
Migrations
0028(discovery-mix CHECK constraints — shipped in v2026.05.15.1) and0029(tracks.mbid unique→non-unique partial index, zero-risk: column was 100% NULL). Both apply on startup.Test plan
🤖 Generated with Claude Code