- Remove from playlist did nothing for a Qobuz row. The membership-id split
made a row's display id (the catalog id QML sends) differ from its
playlist_track_id (the membership id), but remove_track still matched the
open document and called playlist/deleteTracks by the catalog id, so the
lookup found nothing and the endpoint got a non-membership id. Resolve the
catalog id to the row's membership id, remove exactly that row, and delete by
membership; same-catalog duplicates keep their other copy. The local and
mixed-sidecar arms were already correct. Verified by smoke test. (#764)
- Media-server rows (Jellyfin, Subsonic/Navidrome and Plex) showed no cover in
the playlist TrackRow while the queue and NowPlayingBar did. The row fed
cached_path the raw artwork token, which classify cannot resolve, whereas the
queue namespaces it through portable_artwork_ref. Build the row cover from
that same ref, and warm uncached covers on the local-playlist load (the Qobuz
loader already did) so the cover appears without playing the track.
cc