Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
  • This project
    • Loading...
  • Sign in / Register
T
Tidal
  • Overview
    • Overview
    • Details
    • Activity
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 0
    • Issues 0
    • List
    • Board
    • Labels
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • PLN
  • Tidal
  • Repository

Switch branch/tag
  • Tidal
  • tools
  • silent-eval.py
Find file
BlameHistoryPermalink
  • PLN (Algolia)'s avatar
    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) authored Jul 31, 2026
    d280acf0
silent-eval.py 21.3 KB
EditWeb IDE
×

Replace silent-eval.py

Attach a file by drag & drop or click to upload


Cancel
A new branch will be created in your fork and a new merge request will be started.