docs(changelog): 2.1 — Musik-Match, Android artist pin, pin/search/similar fixes, player + swipe polish

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
HoneyandClaude Opus 4.8 committed 2026-08-17 11:45:28 +02:00
1 parent 6f455b565f
commit e82dec7e01
1 file changed
+43
+43
View File
@@ -64,6 +64,49 @@ Versioning: two-part `MAJOR.MINOR` — each release bumps the minor (features an
---
## [2.1] — 2026-08-14
Builds on the 2.0 listening archive with a **head-to-head "Musik-Match"**, brings the **artist pin**
to Android at parity with web, and fixes a batch of same-name-artist and player rough edges.
### Added
- **Musik-Match (Head-to-Head) — Web + Android** — compare two users' listening taste from the
shared play-log. New scrobble routes `GET /scrobble/users` (partner picker) and
`GET /scrobble/compare?with=` — the match score is the **cosine of the two users' artist-play
vectors** (0–100). Shows shared artists (mirrored bars), shared tracks, and each side's unique top
artists. Opened from Settings ("🎧 Musik-Match"). Only aggregates are exposed, never one user's raw
history.
- **Artist pin on Android (parity with web)** — read AND write the shared server-side pins
(`/api/artist-overrides`) that fix same-name-artist collisions. A "⚙ Falscher Künstler?/Gepinnt"
pill on the artist hero opens a picker (Deezer search + a **paste-a-Deezer-link/id** route, the
reliable way when `/search/artist` can't surface a low-profile same-name artist); when pinned, the
page enriches straight from the pinned Deezer id (albums / top tracks / fans / image). Pins set on
either platform apply on both.
- **Swipe between Erkunden sub-tabs (Android)** — a left/right swipe switches Bibliothek ↔ Global,
two-way synced with the tab bar (HorizontalPager).
- **Similar Artists with profile pictures (Web)** — the artist page's "Ähnliche Künstler" now render
as avatar chips, matching the Android app (previously plain text).
### Fixed
- **Artist pin — search & similar artists (Web + Android)** — a pinned artist now shows the correct
Deezer photo in library search (not the wrong same-name person's), and its "Similar Artists" use
Deezer's **related** for the pinned artist instead of Last.fm's list (which was keyed to the
merged/wrong Navidrome artist and went "weird").
- **Android player — seek broke after seamless track transitions** — skipping through
already-buffered tracks left `durationMs` stuck at 0 (the player stayed READY, so `syncState()`
wasn't re-called and `ctrl.duration` was still `TIME_UNSET`), so the seek bar snapped playback to
the start (or to a stale offset). `durationMs` now self-heals via the ticker + a fallback to the
song's known duration. No app restart needed.
- **Erkunden swipe polish (Android)** — pre-compose the neighbour page so the first swipe doesn't
hitch, drive the tab indicator off the pager so it moves with the swipe, and keep the Top-Alben
charts anchored to the top (were vertically centered).
- **Web** — the pin picker crashed (`esc()` on a numeric Deezer id) and the pin button moved to the
banner's top-right; pinning by a pasted Deezer link/id was added.
- **Android** — Settings spacing: the gap now sits below "Musik-Match", grouping it with "Meine
Statistiken".
---
## [2.0] — 2026-08-07
Big change: **NovaSonic gets its own self-hosted, multi-user listening archive.** Navidrome only stores a play *count* and the *last* play date — no timestamped history — so per-day/month/year stats and a yearly "Wrapped" were impossible. Koito and Spindle (the off-the-shelf options) are effectively single-user. Since NovaSonic *is* the player, it now records every counted play into an **isolated scrobble service** with its own database, and shows the results in a **statistics view on web and Android**. This runs **in addition to** the existing Navidrome/Last.fm scrobble — it never replaces it.