feat(explore): let the album page be asked for the whole tracklist
An album the user holds part of showed only the tracks on disk, with nothing to say the rest existed. The page could already draw the full release with the missing rows dimmed -- it just could not be asked: the automatic rule fires on `completeness.known`, which depends on the files declaring a per-disc total, or failing that on the catalog's own `total_tracks`. Neither reaches most albums. #16 fixed the first input for anything tagged from now on, and the second is worse than it looks: the published artifact is from 2026-08-10 and the column landed on 08-16, so `completenessAnswer()`'s catalog fallback answers 0 for every user until the index job republishes. Measured, and noted on #88, which is the publish that carries it. So the control is explicit. A "Show the whole album" switch flips the synthetic "Your Library" entry between the local files and the release, which is the same rendering, reached deliberately rather than inferred. Three things about it are load-bearing: - `showFullTracklist` is a tri-state, `null` meaning "follow the automatic rule". The rule is right when it fires, and the switch has to agree with the page it is sitting on rather than starting out contradicting it -- a plain boolean would need its default recomputed every time the completeness answer moved underneath it. The user outranks the rule in both directions. - `fullReleaseCluster()` falls back to the highest-scoring cluster. `findLibraryCluster` is a guess over the `inLibrary` flags and returns nothing at all when none are set, which is exactly the untagged library this exists for -- without the fallback the control would be absent precisely where it is needed. The sublabel names the release either way rather than leaving the user to wonder whose tracklist they are reading. - It appears only where it can change what is on screen: against the library entry, with a release to switch to, and only when the two tracklists differ. A complete album's release has the same rows as its files, so the switch would redraw the same list and read as broken -- the same test the version dropdown one section up already answers. The accessible name is asserted rather than assumed, through the browser's own computation. `wa-switch` happens to get it right, and for a third reason again: its `<input role="switch">` sits inside a native `<label>` that also holds the `<slot>`, so the name is computed across the flattened tree from light-DOM text. This app has shipped the opposite twice. Closes #7
This commit is contained in:
@@ -3506,3 +3506,31 @@ under a name the reader does not look at is indistinguishable from one
|
||||
never written. So the tests assert the round trip through
|
||||
`metadata.ExtractTags` — the reader the *scan* uses — rather than
|
||||
through the bytes the writer produced.
|
||||
|
||||
## The published catalog artifact predates `total_tracks` (measured 2026-08-18)
|
||||
|
||||
```
|
||||
$ curl -sSI .../generic/yellowjacket-core-index/latest/core-index.db.zst
|
||||
last-modified: Mon, 10 Aug 2026 04:38:16 GMT
|
||||
content-length: 75417037
|
||||
|
||||
$ sqlite3 core-index.db \
|
||||
"SELECT COUNT(*) FROM pragma_table_info('explore_index') WHERE name='total_tracks';"
|
||||
0
|
||||
$ sqlite3 core-index.db "SELECT COUNT(*) FROM explore_index;"
|
||||
1079667
|
||||
```
|
||||
|
||||
The column landed in the schema on 2026-08-16; the artifact is from
|
||||
08-10, and `index-artifact.yml` is a weekly cron, not a push trigger.
|
||||
So `completenessAnswer()`'s catalog fallback answers 0 for **every**
|
||||
user today — the machinery is correct and `artifactHasTotals()` is
|
||||
doing precisely its job, there is just no data behind it. Same position
|
||||
the credit tables are in; both ride on the next publish (#88).
|
||||
|
||||
The general point, which is why this is written down rather than just
|
||||
fixed: **a probe that makes a column optional also makes its absence
|
||||
silent.** `artifactHasTotals` and `artifactHasCredits` are both correct
|
||||
and both mean a feature can ship, pass every test, and produce nothing
|
||||
for anybody without a single failure anywhere. Checking the *published
|
||||
file* is one query and is not implied by any tick in CI.
|
||||
|
||||
Reference in New Issue
Block a user