- GET /api/admin/summary: every admin queue (requests, reported tracks,
playback errors, duplicates, suspect sources, missing files) with its
count and the age of its oldest item, in one query.
- The admin layout drops the 11-tab strip for SectionRail, as Settings and
the Collection have, with each queue's count as its badge; the counts
refresh on each admin navigation and every 30s.
- The Overview leads with "Nothing needs you." or "N things need you.",
lists each waiting queue with "oldest 3d ago" and a link to it, counts a
failed library scan as a problem, and names the empty queues on one line.
The request and quarantine previews and the stat tiles are gone; those
queues are worked on their own pages. A failed summary says so with Try
again instead of reading as all-clear.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>