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.