-
fix(silent-eval): the harness matched ghci — and found a setlist track that does not compile (#93) · 6d7df300
Four of thirteen setlist tracks could not be built, so their orbits had never been verified cold. Two causes, both the same shape: THE HARNESS DIVERGED FROM THE BOOT ENVIRONMENT, which is what #93 predicted would keep producing new errors. 1. Ambiguous `cutoff`. BootTidal defines `let cutoff = pF "cutoff"`. In ghci a let binding SHADOWS an import, quietly and legally. The harness dedents that block to module top level, where there is no shadowing — GHC reports "Ambiguous occurrence" and the track becomes unverifiable for a difference that does not exist on the rig. Fixed by hiding every name the generated module defines from the Context import, with the hide-list DERIVED from the generated text rather than listed, so it cannot drift when BootTidal gains a helper. 235 names on the current boot. 2. Overlapping IsString instances on a chord literal ("<gb3'maj db3'maj bb2'min bb2'maj>" could be ParseBP's `Pattern a` or Simple's `ControlPattern`). ExtendedDefaultRules and NoMonomorphismRestriction are ON BY DEFAULT IN GHCI, which is where these patterns actually run. Turning them on matched the environment; annotating each literal would have treated the symptom one track at a time forever. === And then the third failure turned out not to be a harness limit at all `live/collab/raph/desire.tidal` line 46 reads `# pan 0.42plz /se`. It is committed, not a stray working-copy edit. `plz` is not a Tidal function and the file has NO blank lines, so it is one single do-block: that one typo means every orbit of desire is dead on ctrl+enter. It is on the OPAL setlist, six days out. The tool had been reporting it as "BUILD FAILED — harness limit, NOT a track verdict". That message was written to protect the music from the tool, and it was right twice and catastrophically wrong the third time: it told the reader, in bold, to ignore a broken setlist track. A parser miss must never masquerade as a data conflict, and the inverse is worse. So the verdict is now computed, not asserted. Errors whose line numbers fall inside the track's own generated lines get a distinct BROKEN verdict — "THE TRACK DOES NOT COMPILE — it will fail live too" — and count as a gig blocker. Errors in the boot helpers or the scaffolding stay a harness limit. Line numbers are also mapped back to the real .tidal by matching the offending line's TEXT, because a generated-module line number is useless to whoever has to fix the file and looks authoritative while being so; unmatched or ambiguous lines are left alone rather than guessed at. Result: 12/13 build and every declared orbit emits events cold. The 13th is a real bug in the music, reported as one, with a file:line you can jump to. NOT FIXED HERE deliberately: desire.tidal is in PLN's dirty working tree and Pulsar saves the BUFFER, so a disk edit made behind his back can be silently reverted by his next ctrl+S. It is item 1 of MORNING.md instead, with the one-line fix, to be applied in the editor where it will actually stick.PLN (Algolia) authored6d7df300
×