fix(bounds): a skipped seam carried PLN's best information, and the exporter threw it away
PLN: "wait you dont get the notes when i skip? DANG they have lots of info."
The exporter emitted skipped boundaries as bare integers:
skipped: Object.entries(calls).filter(([, c]) => c.t === null).map(([k]) => Number(k))
so eight CosmicFest seams exported as `[2,4,9,10,15,16,17,18]` while the notes he
had typed into every one of them vanished. And a skip is not an absence of
judgement — it is usually a judgement that the SEAM is wrong, which is more
informative than confirming a cut time. What was lost included "theres no
blue_gold in this set, we're hearing do_it_right throughout", "there was no
gimme_acid in this performance", "theres no funk->piment transition! in this set
i playd piment once, then funk", and "it could be called Outro Dub Siren".
The notes were never actually gone: the textarea writes `{t: t ?? null, comment}`,
so a skipped call keeps its comment in state and in localStorage. Emitting
`skipped` as {id: {source, note}} therefore recovers notes ALREADY STORED, not
only future ones — PLN re-exports and gets them back verbatim. Verified the built
bundle carries it, after first mis-verifying: `grep -c` counts LINES and a
minified bundle is one line, so the honest count is 2 occurrences, not 1.
With his corrections the true set is 14 tracks, written to
judge_specs/cosmicfest-2026_setlist_ear.json as ground truth.
Scored against it, the three-lens pipeline named 12 of 14 tracks correctly and
labelled 81% of the 63 minutes, 85% of the labelled overlap correct. bombe_dj,
rose_rouge, ouais_je_funk, punkachien and livecode_parade landed at 100%.
The two failures are the same failure. `perfect` was called gimme_acid and the
improvised outro was called REVOLUTION, and both are reference-bound: crossmatch
can only choose among tracks it holds a prior render of, so audio from a track it
has never heard gets assigned to the nearest thing it has. All five "ghosts" —
blue_gold, desire, gimme_acid, quand_on_decolle, REVOLUTION — are that same
mechanism. It is a structural limit, and the fix is one render per track, not a
better threshold.
Also banks his ear-feedback in performance_notes.md, including two things no
analysis could have produced: a loud blip in the 2.9 s between two tracks (a
defect belonging to NEITHER, which the boundary tool currently has no way to
express), and why desire was dropped — "Clearly didnt play desire i was not found
of that closing at opal".
Showing
Please
register
or
sign in
to comment