1. 11 Oct, 2026 23 commits
    • end-session: one click to work mode without losing a take · 40202e33
      The tray's Quit only closed the tray, and music mode could not be left while
      SuperDirt (a headless unit) or Ardour ran, so 'I quit everything' was false.
      This stops the SuperDirt watchdog first (or it restarts the sound), then
      SuperDirt (the black box stops with it), then hands over to music-work off.
      It refuses while a take is rolling, never closes Ardour (it may hold unsaved
      work; a second run finishes once Ardour is closed), and reports every outcome
      as a desktop notification.
      PLN (Algolia) authored
    • gig_record: flush every packet so quiet audio is on disk within a second · 15e75239
      Measured: on a quiet sink the segment muxer held the Opus pages in a buffer; a
      segment was still 0 bytes after 25 s. A kill or a power cut would lose the quiet
      stretch, and 'is the file growing' could not tell a healthy recorder from a dead
      one (the health check cried 'rig is down' on a working recorder). With
      segment_format_options flush_packets=1 the file grows every second, in silence
      too.
      PLN (Algolia) authored
    • CLAUDE.md, CHANGELOG, TODO.d: the wiring rules, the recording fixes, what is left · 2efc7575
      Rules a future session must see: SuperDirt takes no microphone (and the knob to
      change that), Master follows the default output and respects hand-wiring, the
      black box records whenever the rig is up, lcxl3-driver stays manual. The TODO
      now holds the stem auto-take design with real numbers (16 GB/hour for 12
      strips) and the retention decisions it needs.
      PLN (Algolia) authored
    • rig health: with the rig up, nothing recording is a failure · ec722018
      recording_check reads the newest .opus segment mtime (never systemd): rig up and
      no segment landing in 30 s is FAIL, naming the cause (unit not installed, no
      segment, stale segment). The tray offers a one-click start of the recorder unit
      only while that check fails.
      PLN (Algolia) authored
    • autoroute: re-point the black box when Master moves to another sink · 9d16dcdd
      The recorder resolves its sink once, at start. Master following the default
      output would otherwise leave it recording the old sink's monitor: silence,
      reported as RUNNING. try-restart only touches a recorder that is already
      running.
      PLN (Algolia) authored
    • check-gig: nothing recording with the rig up is a NO-GO · 4861e614
      The gig-record probe was ADVISE; the unit was not installed and two hours of
      playing were recorded nowhere. A missed gig recording cannot be recovered and
      an unneeded one costs 72 MB an hour, so with SuperDirt running it blocks (a
      cold rig still skips). It now names the not-installed case instead of a bare
      rc.
      PLN (Algolia) authored
    • SuperDirt starts the black box, and the black box follows SuperDirt · fd42bb8c
      gig-record was on-demand, meaning only if a converge remembered; on 2026-10-11
      it never ran and its unit was not even installed. parvagues-sc now Wants it
      (a recorder that cannot start must never stop the sound), and it is PartOf the
      sound so it is not left recording silence after the rig is down.
      PLN (Algolia) authored
    • gig_record: never listen to a tap, and survive a large graph · 1834cb17
      master_sink() took the first thing Master was linked to, so a spectrogram tap
      listed before the real sink pointed the recorder at a source that does not
      exist: RUNNING while capturing nothing. Only alsa_output/bluez_output count.
      It also quit awk at the first hit, so under pipefail a large pw-link graph
      gave SIGPIPE (141) and killed 'check' and, by the same race, 'start'.
      PLN (Algolia) authored
    • Recognise Ardour on Ubuntu: the launcher and the gate were blind to it · b03f787e
      Ardour's real binary is ardour-8.4.0~ds1 and its process name is ArdourGUI. The
      launcher's exe pattern could not match the Debian ~ds1 suffix, so it believed
      Ardour was down and spawned a second instance on the same session (the 09-05
      duplicate, recorded as 'not reproducible', was never measured against this
      build). The gate's pgrep -x names never matched either, so its 'Ardour is open'
      precondition was always false and SC -> Ardour and gig-record-on-target were
      skipped on every run.
      PLN (Algolia) authored
    • autoroute: Master follows the default output, and SuperDirt gets no microphone · bf763762
      Master tracks the default sink (HDMI, the jack, a Bluetooth headset) only while
      its wiring is the one autoroute made; anything else (qjackctl, several sinks)
      is custom and left alone, and disconnecting all of Master's outputs hands
      control back. The new link is made before the old one is cut. The default-sink
      lookup runs every 2nd tick, not every tick.
      
      SuperDirt takes no mic: capture -> SuperCollider:in_* links are cut, with
      TIDAL_AUTOROUTE_SC_MICS=1 to keep them, documented in the script header.
      PLN (Algolia) authored
    • midi-autoconnect, CHANGELOG, TODO.d: say what is actually bounded, fix the drills · 425bf627
      Only rule 4's own start calls are capped; once started, the unit's
      Restart=always retries forever by design. The first drill would have 'failed'
      for the right reason (the repairer beats the observer's debounce), so it now
      stops the repairer first.
      PLN (Algolia) authored
    • autoroute: a Master on a Bluetooth sink is not dangling · 157e0693
      Linking it to the default speaker as well would leak the whole set into the room
      when monitoring on a headset.
      PLN (Algolia) authored
    • rig_health: Bluetooth is a sound card, a blind probe is amber, a dead recorder is not an alarm · e3196836
      A Bluetooth headset (bluez_output.*) now counts as a hardware clock, so
      monitoring on it no longer raises a permanent critical. When pw-top goes quiet
      the clock check is WARN, never NA: cannot-measure is a third state. 'Recovered'
      is only said for a real recovery (not when the rig closed or the probe went
      blind). A health.json left by a gig-log that died uncleanly reads as not
      observed instead of aging into a red stale dot on every day it is not running.
      PLN (Algolia) authored
    • CHANGELOG, archive, TODO.d: rig signal-path health, and what is left open · 8dde011a
      Sprint 12 entry, one learning line, and the follow-ups: the two owner decisions
      (Master sinks, built-in mics), the witnessed drills, the work blocked on
      uncommitted changes in gig-up.sh and rig_units.py, and the measured idle CPU of
      the watchers.
      PLN (Algolia) authored
    • bridge: show the signal path as a rig row · f9c4df6d
      health_item() turns the health.json gig-log publishes into one more panel item,
      through the same tray_summary() the tray renders, so the two faces cannot
      disagree. A stale observer is 'broken', no observer is 'absent'; neither can
      read as up.
      PLN (Algolia) authored
    • perf-tray: show rig health (icon dot on trouble, one readout row) · 699e93c7
      Reads the health.json gig-log publishes and renders tray_summary(): a red dot
      for down or a stale observer, amber for degraded, nothing when healthy. A
      single owner-unit action (start lcxl3-driver) appears only while the surface
      check fails; the tray never writes the graph. A missing file reads as 'not
      observed', never as ok.
      PLN (Algolia) authored
    • gig-log: publish rig health (audio clock, surface driver, sound engine) · 3c161f8c
      Four faults on 2026-10-11 fell between the gate and the per-unit watchdogs, each
      leaving every unit active. rig_health judges the signal path from what gig-log
      already reads: the pw-top stream (are Ardour/SuperCollider clocked by a sound
      card or by the MIDI bridge), /proc/asound (raw LCXL3 present but no driver
      port), and the gear sample (sclang up, scsynth dead). Hysteresis, atomic
      health.json with a heartbeat, notify + evidence snapshot only on a failure
      transition. Steady state adds no fork.
      PLN (Algolia) authored
    • autoroute: only issue pw-link for links that are missing · bc859a23
      The loop re-issued all 24 orbit links every 2 s and every pw-link connects to
      the PipeWire daemon: 12 min of CPU in 85 min, about 15% of a core at idle.
      Index the existing links from the one snapshot in pure bash and link only the
      absent pairs.
      PLN (Algolia) authored
    • autoroute: keep Master on hardware and name the control feed from the live graph · e566bbd6
      A sink node re-created under a running Ardour left Master with no hardware
      output: every unit active, the rig silent. Additive only (never prunes), off
      switch TIDAL_AUTOROUTE_MASTER=0, ports taken from the graph not assumed FL/FR.
      The control-surface assertion used an old PipeWire port spelling and was a
      silent no-op on 1.0.5; resolve it from the live graph. One pw-link snapshot per
      tick instead of three.
      PLN (Algolia) authored
    • midi-autoconnect: rule 4 costs one aconnect per tick while healthy · c53e4731
      Bash regex instead of a grep fork, and the driver's own virtual port as proof
      of service so systemctl is only asked when the raw board is present without
      it.
      PLN (Algolia) authored
    • midi-autoconnect: start lcxl3-driver when a raw LCXL3 is on the bus · 34b60d4a
      gig-up picks the painter once at launch; a board that enumerates later never
      got one and no fader reached Ardour. The unit stays manual (it crash-loops and
      Conflicts= the v2 painter on a v2-only box), so the loop that already knows
      which generation is plugged in re-runs the chooser: start, not restart, raw
      kernel client only, never the v2 painter, bounded retries with a cooldown.
      PLN (Algolia) authored
    • check-gig: a dead surface driver blocks the launch · 9aeee916
      The LCXL LEDs probe exits 0 with no surface on the bus, so its only failure
      is hardware present and its translator down: no faders reach Ardour, no paint.
      That is 'there is no gig', not advice. It sat as one WARN among eleven under
      two stale FAILs and went unread.
      PLN (Algolia) authored
    • gig-preflight: judge CPU knobs against the thermal-pilot's declared rung · 6a3c71ca
      Rung 1 (epp=balance_power, ceiling 65%) is the pilot's resting posture, so
      the fixed 'must be 100%' check turned every launch into a NO-GO whose fixes
      fought the pilot. Pass when the knobs match the declared rung; FAIL only when
      they disagree (a second writer). Stale or absent state keeps the old strict
      behaviour.
      PLN (Algolia) authored
  2. 06 Oct, 2026 2 commits
  3. 28 Sep, 2026 12 commits
  4. 26 Sep, 2026 3 commits