* v3 library: artist sort orders titles within an artist (tree-view feel)
Tester report: "the list is set up by artist, but the cards are
alphabetical(-ish random)". Real: the tree orders artist -> album -> title,
while the grid's artist sort ordered within an artist by RAW FILENAME —
community-pack filename noise, so an artist's cards looked shuffled.
- artist / artist-desc gain a title secondary (direction baked per entry so
the legacy `dir=desc` append can't land on the title term; titles stay
A->Z under Z->A artists).
- The two-term (value, filename) keyset cursor can't seek a three-term
order, so artist sorts leave _KEYSET_SORTS and page by OFFSET — measured
trivial at real library sizes; title/recent keep their keyset. Restore
via a composite sort-key column if 50k-song libraries ever hurt.
- The tree view says "List view groups by artist — the selected sort
applies to the card grid" when a non-artist sort is active, instead of
silently ignoring the picker.
- Keyset proof-tests repinned to the title sort (same property, a sort
that still keysets); 2 new tests pin the title-within-artist order and
the OFFSET pagination's no-skip/no-dupe across pages.
Full-suite failure set identical to the same-main baseline.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Nm7tHs1Yvjjtnnu4nzJgdN
* v3 library: honor legacy sort=artist&dir=desc (fold dir into effective sort)
Codex/review follow-up to the title-within-artist change: the new artist
ORDER BY bakes in `ASC` (for the title secondary), so the global `dir=desc`
append is suppressed and `sort=artist&dir=desc` silently returned A->Z
instead of Z->A — a regression on the legacy /api/library dir contract.
Fold `dir=desc` into the canonical sort key BEFORE the sort_map lookup via
the existing _effective_keyset_sort helper (same fold the cursor side already
does), so the ORDER BY is built from the effective sort. Only artist/title
fold (they have `-desc` twins); title/recent/tuning/year/mastery are
unaffected — verified by the keyset/filter suites.
New test pins that legacy `sort=artist&dir=desc` matches the explicit
`artist-desc` ordering (Z->A artists, A->Z titles within each).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: byrongamatos <xasiklas@gmail.com>