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
  • lcxl-leds-watch.service
Find file
BlameHistoryPermalink
  • PLN (Algolia)'s avatar
    fix(portable): the rig stops assuming it lives at /home/pln — and three tilde traps on the way · b130508c
    SRE #84 phases 1 and 2. Five files, ~30 load-bearing lines, and the point is
    not tidiness: on a box where the account is not `pln`, SuperDirt booted
    completely cleanly with every one of the three sample roots silently absent,
    and the LCXL painter units exec-failed while rig-doctor reported the LCXL
    section green. Two silent failures, each standing behind something that looked
    like a pass.
    
    **Phase 1 — the three sample roots and the two same-repo loads.**
    start_and_midi.scd and sample_watch.scd held /home/pln as literal strings.
    The fix is not a blind sed, because a raw tilde expands nowhere by itself.
    Three traps, all verified on sclang 3.14.1 before writing a line:
    
      - `"~/x".standardizePath` keeps a trailing glob intact, so the loadSoundFiles
        calls can stay one-liners. Good.
      - `File.exists("~/x")` returns FALSE. A naive tilde substitution would have
        left the preload and sample-watcher guards syntactically perfect and
        permanently false — a dead preload with no error, which is worse than the
        hardcoded path it replaced.
      - `thisProcess.nowExecutingPath` is nil inside s.waitForBoot's closure. The
        two same-repo loads live in there, so the repo root is captured at TOP
        level into ~pvRepoRoot and used later. Reading it in place would have
        produced exactly the same dead-guard failure as the tilde.
    
    Deriving the repo root from the file's own location beats a home-relative
    guess: the rig now runs from any clone path, not merely any username.
    
    **Phase 2 — the two outlier units.** lcxl3-driver.service and
    lcxl-leds-watch.service baked WorkingDirectory and an absolute ExecStart,
    where every sibling unit (midiviz, perf-tray, parvagues-bridge,
    midi-autoconnect, tidal-ardour-autoroute) already used %h. Now they do too,
    verified with systemd-analyze --user verify.
    
    **Phase 3, unplanned — the fix broke the check that guards the fix.**
    rig-doctor's check_scd_sample_roots reads the roots OUT of start_and_midi.scd
    rather than hardcoding them, which is the right design and is why it caught
    this at all. But it then called Path.is_dir() on the extracted literal, and
    Python does not expand a tilde either — the same trap as File.exists, one
    language over. So the portability fix turned three PASSes into three false
    FAILs on the box where all three roots exist. That is how a check gets
    switched off. It now expands before testing, and reports the resolved path so
    the reader can see what was actually stat'ed.
    
    Validation: both .scd files compile (File.readAllString(f).compile, which
    parses without executing); both units pass systemd-analyze verify; rig-doctor
    goes from 3 fail / 36 pass to 0 fail / 39 pass with the same verdict logic;
    901 passed, 2 skipped across the suite.
    
    The lesson for the log is the third phase, not the first two. A checker that
    derives its expectations from the source it checks is strictly better than one
    with hardcoded copies — and it still shares the source's bugs, one runtime
    removed.
    PLN (Algolia) authored Sep 06, 2026
    b130508c
lcxl-leds-watch.service 1.64 KB
EditWeb IDE
×

Replace lcxl-leds-watch.service

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.