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
  • live
  • collab
  • raph
  • desire.tidal
Find file
BlameHistoryPermalink
  • PLN (Algolia)'s avatar
    fix(desire): the track did not compile, and the error pointed at the wrong block · 70048d46
    Caught by tools/silent-eval.py on the four tracks PLN saved at the end of the
    last speaker rehearsal. `desire` did NOT compile — meaning the bass he had just
    called "doope" existed only in a running ghci, in a take that was never recorded.
    A saved file that does not compile is the worst kind of gig blocker: it looks
    like work is safe.
    
    THE ERROR LIED ABOUT ITS LOCATION
    
        <track>:409:7: Couldn't match expected type: Pattern ValueMap
                                    with actual type: Pattern ValueMap -> Pattern ValueMap
          Probable cause: 'midiOn' is applied to too few arguments
          In the first argument of '(#)', namely 'midiOn "^45" (# crush 6)'
    
    Line 409 of the generated file sits in the "Claude's Gesture" block, so that is
    where I looked first, and a plausible fix there changed nothing. `--keep` and a
    read of the actual generated Haskell found it three blocks earlier:
    
        orb4_51 = idcp $ gF2 $ gM3
            $ midiOn "^45" (# crush 6)      -- a FUNCTION
            # "bassWarsaw" # voice 0.05     -- used as the LEFT operand of #
    
    "Claude's Weight" had exactly one note figure, "0@5 0 <2 3> <1 0>", and that
    figure moved into Gesture's new midiOff. What remained was a midiOn with no
    pattern to apply itself to. GHC unified across the whole d4 group and reported
    the position where the type conflict surfaced, not the block that caused it.
    
    TWO FIXES
    
    1. "Claude's Weight" commented out, params and all, with the reason inline.
       Nothing musical is lost — the LAST d4 in a file wins, and that was never this
       block. Restoring it needs a note pattern of its own, which is a taste call.
    2. "Claude's Gesture" — `midiOn ch` passes its argument straight to
       someCyclesBy (BootTidal:391), so it must be a FUNCTION. Both note figures are
       now LEFT sections of `#`:  ((note (scale ...)) #). That keeps the original
       semantics exactly: note supplies the rhythm, bassWarsaw and the params merge
       in. ON = the moving arp, OFF = the grounded root, which was the intent.
    
    VALIDATION: `silent-eval.py --seeded live/collab/raph/desire.tidal` -> "ok —
    every declared orbit emits events". Cold, no rig, no second ghci.
    
    PROCESS NOTE WORTH KEEPING: the first attempt at fix (2) was written to disk and
    then silently reverted — PLN quit Pulsar and reopened it, and Pulsar wrote its
    stale BUFFER back over the file. That is #95 / the buffer-clobber trap, observed
    live rather than theorised. Any on-disk fix to a file open in Pulsar needs a
    Window: Reload before the editor touches it again.
    PLN (Algolia) authored Aug 03, 2026
    70048d46
desire.tidal 6.14 KB
EditWeb IDE
×

Replace desire.tidal

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.