Follow-up release after v2026.05.11.0. Flutter-only changes.
Caching/loading strategy (SWR + hydration + skeleton): cacheFirst providers now alwaysRefresh so cache hits silently update; inline album/playlist providers gained the same SWR guard; detail screens accept a seed AlbumRef/ArtistRef from navigation so the header renders before the network returns; cold-start home shows a layout skeleton instead of a 30s blank spinner.
Library: Artists tab was 404ing because the client hit /api/library/artists; the server mounts it at /api/artists. Albums tab switched to the responsive 3-up grid that was built for artist detail (LayoutBuilder + sized AlbumCard, no wide-aspect empty space).
System playlists: tapping one landed on an empty playlist because playlistsListProvider wrote rows but not tracks, and playlistDetailProvider only cold-fetched on missing row. Now refetches when row exists but tracks are empty, mirrors the album fix. Also wipes + re-inserts playlist tracks per fetch so server-side deletions propagate; writes referenced artist/album rows so joined columns populate.
Player: didn't update on track change — audio_handler's currentIndexStream listener only kicked the cover load, never pushed the new MediaItem onto the stream. Now it does. Player kebab "Go to artist" 404'd because audio_handler's _toMediaItem didn't stash artist_id in extras (only album_id) — fixed. Added "Start radio" menu item wrapping the existing /api/radio endpoint. Title in full player re-centered via Stack.
Update banner: pubspec version-comparison rewrite, CI builds tagged APKs with --build-name="${TAG#v}" so PackageInfo matches the server's reported version.
Test plan:
Server CI green
Web CI green
Flutter CI green
Sideload minstrel-v2026.05.11.1.apk
Verify navigation hydration on home tile taps
Verify player title/artist/cover update on skip
Verify Start radio + Go to artist from player kebab
Follow-up release after v2026.05.11.0. Flutter-only changes.
Caching/loading strategy (SWR + hydration + skeleton): cacheFirst providers now alwaysRefresh so cache hits silently update; inline album/playlist providers gained the same SWR guard; detail screens accept a seed AlbumRef/ArtistRef from navigation so the header renders before the network returns; cold-start home shows a layout skeleton instead of a 30s blank spinner.
Library: Artists tab was 404ing because the client hit /api/library/artists; the server mounts it at /api/artists. Albums tab switched to the responsive 3-up grid that was built for artist detail (LayoutBuilder + sized AlbumCard, no wide-aspect empty space).
System playlists: tapping one landed on an empty playlist because playlistsListProvider wrote rows but not tracks, and playlistDetailProvider only cold-fetched on missing row. Now refetches when row exists but tracks are empty, mirrors the album fix. Also wipes + re-inserts playlist tracks per fetch so server-side deletions propagate; writes referenced artist/album rows so joined columns populate.
Player: didn't update on track change — audio_handler's currentIndexStream listener only kicked the cover load, never pushed the new MediaItem onto the stream. Now it does. Player kebab "Go to artist" 404'd because audio_handler's _toMediaItem didn't stash artist_id in extras (only album_id) — fixed. Added "Start radio" menu item wrapping the existing /api/radio endpoint. Title in full player re-centered via Stack.
Update banner: pubspec version-comparison rewrite, CI builds tagged APKs with --build-name="${TAG#v}" so PackageInfo matches the server's reported version.
Test plan:
- [ ] Server CI green
- [ ] Web CI green
- [ ] Flutter CI green
- [ ] Sideload minstrel-v2026.05.11.1.apk
- [ ] Verify navigation hydration on home tile taps
- [ ] Verify player title/artist/cover update on skip
- [ ] Verify Start radio + Go to artist from player kebab
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.
Follow-up release after v2026.05.11.0. Flutter-only changes.
Caching/loading strategy (SWR + hydration + skeleton): cacheFirst providers now alwaysRefresh so cache hits silently update; inline album/playlist providers gained the same SWR guard; detail screens accept a seed AlbumRef/ArtistRef from navigation so the header renders before the network returns; cold-start home shows a layout skeleton instead of a 30s blank spinner.
Library: Artists tab was 404ing because the client hit /api/library/artists; the server mounts it at /api/artists. Albums tab switched to the responsive 3-up grid that was built for artist detail (LayoutBuilder + sized AlbumCard, no wide-aspect empty space).
System playlists: tapping one landed on an empty playlist because playlistsListProvider wrote rows but not tracks, and playlistDetailProvider only cold-fetched on missing row. Now refetches when row exists but tracks are empty, mirrors the album fix. Also wipes + re-inserts playlist tracks per fetch so server-side deletions propagate; writes referenced artist/album rows so joined columns populate.
Player: didn't update on track change — audio_handler's currentIndexStream listener only kicked the cover load, never pushed the new MediaItem onto the stream. Now it does. Player kebab "Go to artist" 404'd because audio_handler's _toMediaItem didn't stash artist_id in extras (only album_id) — fixed. Added "Start radio" menu item wrapping the existing /api/radio endpoint. Title in full player re-centered via Stack.
Update banner: pubspec version-comparison rewrite, CI builds tagged APKs with --build-name="${TAG#v}" so PackageInfo matches the server's reported version.
Test plan: