feat(explore): carry the local row id on a top result

`TopResult` was the one projection here that shipped `inLibrary` and no
local id, so the top-results cards had no choice but to read the weaker
flag. Every sibling model — `MBArtist`, `MBReleaseGroup`, `MBRecording`
— already carries `LocalID`, and the candidate builders had the value
in hand at every construction site.

`LocalID` is set and cleared by a test against `audio_files`, so it
means "there is something of mine here". `InLibrary` is written by the
same pass but is a one-way ratchet the prune can only clear alongside a
local id; it stays for scoring, which is where an approximate answer is
fine.
This commit is contained in:
2026-08-19 00:37:57 -04:00
parent 4bf59b45b7
commit 41c41a860e
3 changed files with 28 additions and 1 deletions
@@ -431,8 +431,17 @@ export interface TopResult {
/**
* Library status — populated from index cross-reference columns.
*
* LocalID is the one the cards read. It is the local row behind
* this entity — an album, a file, an artist — and it is set and
* cleared by a test against `audio_files`, so it means "there is
* something of mine here". InLibrary is written by the same pass
* but is a one-way ratchet the prune can only clear alongside a
* local id, so it is the weaker of the two and stays for scoring
* (`fwInLibrary`), which is where an approximate answer is fine.
*/
"inLibrary": boolean;
"localId"?: number;
}
/**