-
fix(silent-eval): the harness called 128 working tracks broken, and a crash "silence" (#112) · d280acf0
#112 said "14 corpus tracks do not compile". Running the harness over the whole corpus said 128. Neither number was about the music. BUG 1 — column-0 `$` continuations reported as parse errors PLN writes a lot of the corpus like this: d1 $ whenmod 128 129 (…) $ s "<k k*2 <k*2 k> k>" Pulsar sends a block wrapped in GHCi's `:{ … :}`, which suspends the layout rule, so that `$` at column 0 is a continuation and the track plays fine. `orbit_bindings` rewrites `dN` into `name = idcp` and emits the block into a real MODULE, where a column-0 `$` opens a NEW top-level declaration — a hard parse error. The harness then printed, in these words:✖ THE TRACK DOES NOT COMPILE — it will fail live too. about code that has never once failed live. The intent to indent was already written in the comment above the line ("becomes `name = idcp` + ` $ x`"); the indent itself was never applied. Two spaces on lines[1:] restores it and preserves every relative indent below. Why it stayed hidden: ZERO of the 13 setlist tracks use that style, and the setlist is what anyone actually runs. The harness was green on everything it was ever pointed at. Same shape as the chmod bug in the previous commit — a thing verified once, in a context that no longer covers the corpus. BUG 2 — a crashed probe reported as "FAIL — 0 orbit(s) SILENT" The Haskell probe sets its failure flag ONLY when it prints a SILENT line, so a non-zero exit with no SILENT line never measured silence at all — it threw while QUERYING. `check_track` mapped any non-zero return to "SILENT" and discarded stderr, so the one string that said what went wrong was thrown away and replaced by a self-contradicting verdict. New CRASH verdict keeps stderr. It immediately paid for itself. `live/chill/dub.tidal` compiles, plays three orbits, then throws: Syntax error in sequence: "<0.75 .. 0.8 0.8 .. 0.65>" ^ A real mini-notation bug, precisely located — and one that WOULD fail live, since the scheduler queries every cycle. It had been sitting behind a message that said zero orbits were silent. BUG 3 (latent, found while fixing 2) — a false green in the exit code Splitting the summary so crashes stop being counted as silence revealed that the return was keyed to the silence count alone. A corpus where every single track failed to compile would have printed "OK — every declared orbit emits events" and exited 0. The exit code now answers "is anything wrong", which is the only question a gate may answer — this is the one tool whose entire job is catching the failure that makes no noise. Verified: setlist still 13/13 green and gig-up still GO (so no regression on the path that matters); dub now reports THROWS WHEN QUERIED and exits 1; previously-"broken" tracks compile. The corpus-wide count is deliberately NOT restated here — it needs a clean re-run, and quoting a number I have not re-measured is how #112 got a wrong one in the first place.PLN (Algolia) authoredd280acf0
×