summaryrefslogtreecommitdiffstats
path: root/CLAUDE.md
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-09-19 17:22:20 +0200
committerChristophe Besson <cbesson@gmail.com>2026-09-19 17:22:20 +0200
commit34d74cba0421ac88505ac620158882f90cf5db7e (patch)
tree1d427579dfa55118e4281cf894492a0d3d73c0fd /CLAUDE.md
parent2eaf6887295614509f8d0bc24a9b77ccd915ef88 (diff)
downloadmeshbay-34d74cba0421ac88505ac620158882f90cf5db7e.tar.gz
fix(hub): a track with no artist tag reaches the Music grid
The grid's unit is an album, so a track whose artist tag is empty was drawn nowhere — while `empty` counted it and stayed false, so no message appeared either. An untagged library rendered a toolbar over a blank page, with every track one mode-switch away and nothing saying so. It gets a card, the same shape the singleton folding already mints. No cover is looked up for it, or for any album this file invented: the release name is one the browser wrote, and the request cannot match. music_untagged_probe.py renders the real grid and reads the page back. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'CLAUDE.md')
-rw-r--r--CLAUDE.md18
1 files changed, 18 insertions, 0 deletions
diff --git a/CLAUDE.md b/CLAUDE.md
index 9aac263..694f7b2 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -493,6 +493,24 @@ do. Read them before writing anything that touches the same mechanism.
viewport from the layout one), which was plausible, cost a round trip, and
was wrong; the screenshot showing no keyboard was already in hand.
+- **A view that draws one shape of unit, beside an emptiness test that counts
+ every shape.** The Music grid's unit is an album; a track whose artist tag is
+ empty belongs to none, so it was drawn nowhere — while `empty` counted it and
+ therefore stayed false. Neither "no music" nor anything else appeared: a
+ toolbar over a blank page, with every track one mode-switch away and nothing
+ saying so. Both halves read as correct alone, which is why no amount of
+ re-reading the file found it; what found it was rendering the component
+ against entries with no artist and looking (`music_untagged_probe.py`).
+ **Whenever a mode filters the units it draws, the emptiness test has to be
+ asked of that mode, not of the library** — or the two disagree and the
+ disagreement is silent. Fixed by giving the untagged pile a card of its own,
+ the same shape the singleton folding already minted, so the two agree by
+ construction rather than by a second condition someone has to maintain. That
+ card also stopped a cover lookup going out for a release name the browser
+ itself wrote: a third-party request, on the operator's connection, that
+ cannot match anything, seen in a live log naming a placeholder as both artist
+ and release
+
- **Three headers decide whether a page may frame itself, and they must agree.**
The same streamed download navigates a hidden iframe to `/_mbdl/<id>`.
`frame-src` was reCAPTCHA's two origins with no `'self'`, `frame-ancestors`