The **whole discography** is a page of its own
(`src/mobile/screens/Discography.svelte`), reached from the artist page's
Discography head with **All**, and from under its grid with "Show all N
Albums" — which is also where that grid now stops: it shows twelve of the
active tab, because before this an artist with 140 releases rendered 140
cards. The page is the desktop's `CatalogDiscography.svelte` reduced to the
four things it has that the artist page's tabs do not: **All** in front of
the categories (built by CONCATENATING the per-category families, never by
re-folding the whole set — a single sharing an album's base title would fold
into it as a phantom edition), a **sort** (newest, oldest, A–Z, Z–A), a
**grouping** by year, and the **editions kept whole**, opened in place under
their own record. Three of the desktop's are deliberately left behind: the
per-record tracklists (140 records is 140 `catalog_album` calls over mobile
data, for rows one tap away on the record page), the per-record accent
sampled from each cover, and the scroll-led banner. The year is written into
the list where the desktop has a sticky year rail — a phone list is read top
to bottom. The order and the grouping live on the nav entry and are edited
from the **Sort & group** sheet, Library's own idiom; under a name order By
year is not offered, because the years would repeat out of sequence, and the
sheet says so. The list is capped at sixty rows with a "+ N more releases"
button (Browse's rule), and the cap is taken BEFORE the grouping, so the last
year on screen can be a part of itself. Filing, families and labels all come
from `src/mobile/disco.js` — the artist page's own classifier, called a
second time over the same cached albums. The desktop cannot do that: its
filing depends on a background description harvest and deferred MB type
hints a second page would not read, which is why `CatalogDiscography.svelte`
takes the artist page's computed tab list as the same array object instead.
