Three web fixes from dev.
- **#5416: every paged list loads as you scroll.**
- There are no more "Load more" buttons.
- A shared `ListContinuation` shows "Loading more…", and if a page fails, an inline error with Try again.
- Liked becomes tabs (Artists | Albums | Tracks) via a new `TabStrip`.
- Admin Playback errors and Requests use `TabStrip` too.
- A failed later page no longer wipes the list. This covers the TanStack `isFetchNextPageError` scoping and Genres/Years.
- **#5417:** admin error lines use `text-error-fg`. They used `text-oxblood`, which isn't in the theme, so they rendered uncoloured.
- **#5418:** `TrackRef` gains `unavailable`, which the server already sends.
- Album, search and Liked rows grey out a missing file with "· File missing" and hide its actions.
- Every player-store entry point keeps missing files out of the queue: play, enqueue, play next, bulk, and a refetched mix.
Commits: 0f9ddbca, 015fe1d3, 8bd2f664, bf0bc45c. dev run 8867 is green.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Preference 172: no "Load more" buttons. Eight remained, on Liked (three
sections), the three Search overflow pages, Genres and Years.
- ListContinuation: the one bottom-of-list block. It loads the next page
ahead of the reader, announces "Loading more…" through aria-live, shows an
optional end line, and on a failed page shows the error with Try again,
dropping the sentinel so a dead endpoint isn't re-hit on every scroll.
Used on all ten paged lists, including the four that already autoloaded.
- A failed next page no longer replaces the list. TanStack sets isError for
it, so the page-level error branches now apply only to a failed first
load. Genres and Years did the same with their own loader; a later
page's failure now keeps the grid.
- Liked: Artists | Albums | Tracks tabs (operator's choice). Stacked, a
long Artists list loading as you scroll would bury the other two. It
opens on the first tab that has likes.
- TabStrip: the in-page tab strip, now shared by Liked, Playback errors
and Requests.
- test-utils/intersectionObserver: a stand-in so tests can scroll to the end.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
text-oxblood is not a theme token, so Tailwind emits nothing and the scan
error on Admin → Overview and "It stopped early" on Duplicates rendered as
body text. Same fix as the album page in #5392; no uses remain.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
TrackRef gains the unavailable flag the server already sends on album
detail and search. TrackRow greys such a row with '· File missing' and
hides like, radio, add and the menu, as playlist rows already do. Every
player-store entry point (playQueue, enqueue, play next, and a refetched
mix) drops missing files; playQueue keeps the chosen track as the start.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The wrapper added a promise hop, so the self-heal test's single
microtask wait saw 'loading' instead of 'error'.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Three web fixes from dev.
ListContinuationshows "Loading more…", and if a page fails, an inline error with Try again.TabStrip.TabStriptoo.isFetchNextPageErrorscoping and Genres/Years.text-error-fg. They usedtext-oxblood, which isn't in the theme, so they rendered uncoloured.TrackRefgainsunavailable, which the server already sends.Commits:
0f9ddbca,015fe1d3,8bd2f664,bf0bc45c. dev run 8867 is green.🤖 Generated with Claude Code