Commit dfab5ca7 by PLN (Algolia)

docs(board): the suite ran zero tests, and that hid a phantom first track

Two bugs that were hiding each other, which is why both survived a month.

test_setlist.py ended in a module-level sys.exit(), pytest raises that during
collection, so 'pytest tools/tests/' aborted the whole directory and ran NOTHING
while 273 tests passed file-by-file. And what that invisibility concealed was
test_setlist's own failure, on a check whose name states the bug: OPAL's backlog
opens with '## SOUNDCHECK / -- Quand on decolle', entries() took every item under
the gig heading, and so every tool reading the setlist believed the set had 16
tracks opening on Quand on décolle. The recording has 15, opening on Ceci n'est
pas Une Bombe.

A test nobody can see failing is worse than a test that does not exist, because
its name is a correct bug report that everyone reads as reassurance.

Whole suite now runs in one command: 274 passed, 0 failed.
parent e8f7066a
......@@ -2160,3 +2160,58 @@ N tracks exist, and it took a lens run three weeks later to notice two were gone
CosmicFest's split before he approves the tone**, and that approval has not
landed. The 2 missing tracks are a re-run, not a new release decision — but they
are part of a release he has not signed off.
## 🐛 TWO BUGS THAT WERE HIDING EACH OTHER (2026-09-05, `21f83b5` + `e8f7066`)
### 1. `pytest tools/tests/` ran **ZERO** tests
`test_setlist.py` was a plain script ending in a bare module-level `sys.exit()`.
pytest raises that during **collection**, so the whole directory aborted with an
`INTERNALERROR` and ran nothing — while 273 tests passed when invoked file-by-file.
Every test in this repo was invisible to the obvious command. Exit guarded under
`__main__`, one assertion added so pytest sees the checks.
**Whole suite, one command: `274 passed, 2 skipped, 0 failed`** (from zero).
Also fixed in the same pass (`21f83b5`): `test_orphan_orbits.py` (was 9 failing) —
a stale fixture, not a parser bug. The setlist grew and commit `2376e43`
("d10 is the riser") added a d10 safe-riser to `bombe_dj`/`wap`/`you_my_sunshine`/
`mafia_sans_serif`/`desire` after `HAND_MEASURED`'s 2026-07-28 freeze, while
`piment_bresilien` went the other way (d10→d9, PLN's own request). Counts are now
**derived** from the setlist file rather than frozen literals, so writing a track
no longer breaks a test. And `test_lcxl3_display.py` collected 0 → **30** real
tests. Both proven able to fail.
### 2. And the thing that hid behind it: **the first track was never the first track**
`test_setlist.py` had been FAILING all along, on a check whose name says exactly
what was wrong — *"a deliberation note is not a track (the quand_on_decolle
phantom)"*. OPAL 2026's backlog section opens:
```
## SOUNDCHECK
-- Quand on decolle
```
`entries()` took every list item under the gig heading, so **every tool reading
this setlist believed the OPAL set had 16 tracks opening on Quand on décolle.**
The recorded set has **15** and opens on Ceci n'est pas Une Bombe (`segments_v3`
/`v4` track 1). Parser now yields 15, in the right order, and announces the skip
on stderr — a dropped track and a skipped soundcheck must never look alike.
The fix is deliberately **not** the section whitelist `entries()` refuses to
build (that one tried to enumerate which of PLN's prose headings are *part of*
the set and died on `## Livecoding Techno DNB Nu-jazz`). `_NOT_THE_SET_RE` is the
inverse and far narrower: the one phase that is definitionally not a performance.
**`backlog.md` was NOT touched and was never wrong** — a soundcheck belongs in his
set list, it just isn't in his set. Fix the parser, never the data
(`feedback_parsers_over_copy`).
🔎 **FOLLOW-UP worth one look:** anything that consumed `setlist.entries()`
positionally had a phantom at index 0 and everything shifted by one.
`setlist_to_segments.py` is the obvious suspect — check whether any gig's segments
were ever derived from the setlist rather than from measured boundaries. OPAL is
safe (its v4 came from ear-verified boundaries) and CosmicFest came back clean
from the generation lens, so this may be harmless — but it is unverified, and the
class of error is exactly `feedback_report_the_whole_timeline`.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment