Skip to content

fix(music): complete album tracklists and canonical cover art - #230

Draft
mmattbtw wants to merge 3 commits into
fix/public-dev-workflowfrom
fix/album-tracklist-and-cover-art
Draft

mmattbtw wants to merge 3 commits into
fix/public-dev-workflowfrom
fix/album-tracklist-and-cover-art

Conversation

@mmattbtw

Copy link
Copy Markdown
Member

Stacked on #229 (fix/public-dev-workflowfix/complete-open-work). This PR only adds the two commits below and should merge after #229.

Album tracklists

fm.teal.music.getAlbum was built entirely from indexed plays, so tracks that had never been scrobbled were missing and albums with zero plays returned 404.

  • Merge the MusicBrainz release tracklist with observed plays, in canonical release order.
  • Unplayed tracks now appear with playCount: 0.
  • trackSummary.uri is now optional (an unplayed track has no representative listen); Amethyst renders those rows without a link.
  • Albums with no indexed plays resolve metadata from MusicBrainz instead of 404ing.

Cover art

Album pages used the Cover Art Archive release art, which for some releases is an edition-specific placeholder (e.g. a5e766b8-650c-40ce-a19f-3dc3c865a3e2 shows an "H.W." logo) rather than the canonical album cover.

  • getAlbum now returns releaseGroupMbid.
  • The album page prefers release-group art, falling back to release art, then the placeholder.

Also included

  • fix(aqua): mini_profile no longer panics on invalid handles (Handle::from(String) unwraps); malformed handles are dropped.

Verification

  • pnpm lex:gen / pnpm lex:validate
  • SQLX_OFFLINE=true cargo check -p aqua -p cadet, Clippy clean
  • cargo test -p aqua (24 passed, incl. new track-merge and handle tests)
  • pnpm typecheck, Biome, Amethyst web export

mini_profile converted database handles with Handle::from(String),
which unwraps and panics when the handle fails ATProto validation
(for example a reserved TLD like .example). Parse fallibly instead so
malformed handles are dropped rather than crashing the request path.

Adds coverage for the normalization and the invalid-handle drop.
Album pages were built entirely from indexed plays, so tracks that had
never been scrobbled were missing, and albums with no plays returned 404.
Cover art used the Cover Art Archive release art, which for some releases
is an edition-specific placeholder rather than the album cover.

getAlbum now merges the MusicBrainz release tracklist with observed
plays, so every track appears in canonical order with a zero play count
when unplayed. trackSummary.uri becomes optional because an unplayed
track has no representative listen, and Amethyst renders those rows
without a link.

The release group MBID is now returned alongside the release and used
first for cover art, falling back to the release art. This matches the
canonical album art streaming services display.
@coderabbitai

coderabbitai Bot commented Sep 15, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@mmattbtw
mmattbtw added this pull request to stack #228 September 15, 2026 21:30
Artist albums and listen cards still rendered the edition-specific
release cover, so releases whose edition art differs from the album (for
example a5e766b8-650c-40ce-a19f-3dc3c865a3e2) showed the wrong image.

Expose releaseGroupMbid on albumSummary from the MusicBrainz release
list Aqua already fetches for release types, and prefer Cover Art
Archive release-group art on the artist page, listener-leaderboard hero,
and listen cards, falling back to release art.

PlayFeedCard resolves the release group from MusicBrainz per release with
an in-memory cache; the album page passes its known release group so its
listen list needs no extra lookup.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant