Commit 70048d46 by PLN (Algolia)

fix(desire): the track did not compile, and the error pointed at the wrong block

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.
parent 491b04a7
......@@ -48,21 +48,33 @@ d4 $ gF2 $ gM3 -- BASS (the FIXME): D minor, grounded in measured key (corr=0.90
# "bassWarsaw" # voice 0.05
# lpf (range 300 1800 "^32") # resonance 0.2
# gain 1.15
d4 $ gF2 $ gM3 -- Claude's Weight
$ midiOn "^45" (# crush 6)
# "bassWarsaw" # voice 0.05
# lpf (range 300 1800 "^32") # resonance 0.2
|* gain ("1@5 0.94 0.98 0.92" * 1.15)
-- COMMENTED OUT 2026-08-03, and this is the line that broke the whole file.
-- "Claude's Weight" had one note figure ("0@5 0 <2 3> <1 0>"), and that figure
-- moved into Gesture's midiOff below. What was left is `midiOn "^45" (# crush 6)`
-- — a FUNCTION — sitting as the left operand of `#`, with no pattern to apply it
-- to. GHC pointed at THIS block while blaming line 409 of the generated file, so
-- the error looked like it came from Gesture. Nothing musical is lost: the last
-- d4 in the file wins, and that was never this one. Restore by un-dashing and
-- giving it a note pattern of its own.
-- d4 $ gF2 $ gM3 -- Claude's Weight
-- $ midiOn "^45" (# crush 6)
-- $ note (scale "aeolian" "0@5 0 <2 3> <1 0>" + 2 - "[24,36]")
-- # "bassWarsaw" # voice 0.05
-- # lpf (range 300 1800 "^32") # resonance 0.2
-- |* gain ("1@5 0.94 0.98 0.92" * 1.15)
d4 $ gF2 $ gM3 -- Claude's Gesture
$ midiOn "^45" (# crush 6)
$ (0.125 <~)
$ midiOn "^44" (note (scale "aeolian"
-- midiOn/midiOff take a FUNCTION (BootTidal:391 — someCyclesBy), so the note
-- pattern goes in a LEFT section of `#`: note supplies the rhythm, bassWarsaw
-- and the params below merge in. Same shape as the single-figure version this
-- replaced; ON = the moving arp, OFF = the grounded root.
$ midiOn "^44" ((note (scale "aeolian"
"<[0 3 0@14] [0 <2 4> 0@14] [3 0 2@14] [0 3 <0 -3>@13 ~]>"
+ 2 - "[24,36]"))
$ midiOff "^44" (note (scale "aeolian"
+ 2 - "[24,36]")) #)
$ midiOff "^44" ((note (scale "aeolian"
"0@5 0 <2 3> <1 0>"
+ 2 - "[24,36]")
)
+ 2 - "[24,36]")) #)
$ "bassWarsaw" # voice 0.05
# resonance 0.2
# crushbus 41 (range 16 3.5 "^52")
......
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