Explore: materialise multi-artist credits locally so they survive an absent catalog #89

Open
opened 2026-08-18 20:05:28 +00:00 by yonlu · 0 comments
Owner

Multi-artist credits are read from the catalog tables (artist_credit_part / artist_credit_ref), keyed on the recording MBID. That works for both Explore and the library's own lists, which is why it needed no local table — but it means credits vanish when the catalog is absent or still downloading, which is precisely the no-index state ShelfPage.State exists to describe.

A library ought to stand on its own. Materialising the decomposition into a local file_artists table is what makes it.

Phase 3 of .planning/plans/active/015-multi-artist-credits.md, deleted in favour of this issue and its sibling.

Why it is not built yet, deliberately

file_artists is not declared in sql/schemas/. Nothing writes or reads it, and a schema file plus a datamap entry describing behaviour that does not exist is a claim the code cannot back. Declaring it is part of this work, not a prerequisite done in advance.

It was originally a prerequisite for rendering credits at all; Phase 4 landed without it, which demoted this from blocker to offline-resilience.

What it involves

  • Declare the table in sql/schemas/ and classify it in backend/datamap — it is Derived (rebuildable from the catalog), not Authored, so it is free to retire on a stale shape.
  • Materialise on the path that already knows a file's recording MBID, so a scanned or retagged file gets its decomposition without a separate pass.
  • Read locally first and fall back to the catalog, which is the shape every other read in explore already has.

Ordering

There is no point doing this before the credit tables actually ship in a published artifact — there would be nothing to materialise from. Do it after that lands.

Done when

A track credited to more than one artist still renders every artist as a link with the catalog absent.

Multi-artist credits are read from the catalog tables (`artist_credit_part` / `artist_credit_ref`), keyed on the recording MBID. That works for both Explore and the library's own lists, which is why it needed no local table — but it means **credits vanish when the catalog is absent or still downloading**, which is precisely the `no-index` state `ShelfPage.State` exists to describe. A library ought to stand on its own. Materialising the decomposition into a local `file_artists` table is what makes it. Phase 3 of `.planning/plans/active/015-multi-artist-credits.md`, deleted in favour of this issue and its sibling. ## Why it is not built yet, deliberately `file_artists` is **not declared** in `sql/schemas/`. Nothing writes or reads it, and a schema file plus a `datamap` entry describing behaviour that does not exist is a claim the code cannot back. Declaring it is part of this work, not a prerequisite done in advance. It was originally a prerequisite for rendering credits at all; Phase 4 landed without it, which demoted this from blocker to offline-resilience. ## What it involves - Declare the table in `sql/schemas/` and classify it in `backend/datamap` — it is **Derived** (rebuildable from the catalog), not Authored, so it is free to retire on a stale shape. - Materialise on the path that already knows a file's recording MBID, so a scanned or retagged file gets its decomposition without a separate pass. - Read locally first and fall back to the catalog, which is the shape every other read in `explore` already has. ## Ordering There is no point doing this before the credit tables actually ship in a published artifact — there would be nothing to materialise from. Do it after that lands. ## Done when A track credited to more than one artist still renders every artist as a link with the catalog absent.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: yonlu/yellowjacket#89