KeelrLeek 35a18d9ca0 state: one identity merge, one description splitter, and a record named at click time
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.".
2026-07-29 18:45:58 -05:00
S
Description
SoulSeek Streaming app.
9.5 MiB
1 Stars 2 Watchers 1 Forks
Languages
Rust 48.3%
Svelte 38.1%
JavaScript 13.4%
CSS 0.2%