35a18d9ca005f0720cd481a48db5e816539ca972
Three separate things the panel and the pages were doing differently. The MusicBrainz merge lived inside `applyArtistIdentity`, which only the artist page calls, so the Now Playing panel showed the raw provider list: My Bloody Valentine appeared with four releases because Loveless and Isn't Anything exist only as supplements, and Weezer filed differently because the panel never received `type_hints`. The merge is now `mergeArtistIdentity`, a pure function both surfaces run. `applyDiscoveryIdentity` deliberately does not write `catalog.artistPage` — that would overwrite whatever page the user is looking at — and is guarded on the normalized artist name so a track change mid-flight cannot land one artist's supplement on another's list. `streamSong` knew the record all along and never said so. Every caller passes `album` and `albumId`; the queue item was built with `sub: artist`, and the panel splits `sub` on the dash to find its album line, so a single track could never name the record it came from. `catalogRef` was also assigned AFTER the Soulseek resolve, so the panel could not start loading the record until a peer had been picked — that wait was the "why does it take time to show the rest of the album" delay, with the id in hand the whole time. It is now set before the resolve, and handed back if no source is found. `splitDescription` promotes a description's own first sentence to a lede. It lives here beside the other release-identity helpers because three surfaces need it and a copy in each is how they start disagreeing. The abbreviation guard is worth keeping: written as `Nov\.` the lookbehind consumed the very period it was meant to protect, and "released 4 Nov. 1991" split after "Nov.".
Languages
Rust
48.3%
Svelte
38.1%
JavaScript
13.4%
CSS
0.2%