A fortnight of debugging produced a shelf of good checks: check-boot,
check-mix, silent-eval, fix-mute-roles, pvlint, orphan-orbits. Every one of
them worked. Every one of them was also a command PLN would have to REMEMBER —
and on Sat 8 Aug at ~19:00 he is in a field, alone, with a soundcheck window
and no assistant. A check you have to remember under pressure is a check you
do not run.
So gig-up.sh contains no new checking logic at all. It is a running order, an
exit code, and a decision about which failures are GO-BLOCKING. Its whole value
is that there is now one thing to type.
WHAT IS HARD vs SOFT, and why the line is drawn there
HARD boot helpers one parse error in BootTidal.hs silences EVERY track
at once, invisibly, while a stale ghci holds the old
definitions. First check for that reason.
HARD ardour faders earned it three sessions running, a DIFFERENT set of
tracks each time: 07-28 had 05/06/08/10 at -inf,
07-30 had 06/10/12, 07-31 had 10. Three recurrences is
not bad luck, it is a property of MIDI-learned faders
that drift from the saved session in both directions.
HARD compiles / mute map / pvlint
SOFT transition ghosts real (#77) and known-open. A gate that goes red for
work you have consciously deferred is a gate that
gets ignored.
SOFT LCXL present legitimately unplugged at a kitchen table. At the
venue, a warn here means the set has no hands.
TWO BUGS FOUND BY THE FIRST RUN — which is the argument for building it
1. check-boot.sh and check-tracks.sh were mode 644. NOT EXECUTABLE. The
pre-gig audio gate has never once been runnable as `tools/check-tracks.sh`
since it was written; it only ever ran when someone typed `zsh tools/...`.
Every green memory of it is a green memory of a different invocation.
2. pvlint's `--setlist` is a MODIFIER ("these paths are ordered"), not a
mode — it still requires paths. `python3 -m pvlint --setlist` exits 2 on
an argparse error, which from the outside looks exactly like a lint
failure. gig-up now borrows set-coherence's setlist_tracks() rather than
teaching a fourth file to parse the setlist.
Both are the same shape and it is this rig's signature failure: a thing that
was verified once, in a context that no longer holds. Assembling the checks
into one caller is what re-executed them under fresh conditions.
DESIGN NOTES
* Cold by default. Makes no sound, sends no MIDI, writes no .tidal. Safe to
run mid-set, at 3am, or backstage. The audio gate is --audio, and it skips
itself if the cold gate is already red — booting 13 tracks to confirm what
a typecheck just told you is 10 wasted minutes at a venue.
* Never touches CC 77-84 (Ardour track gains; 77 down is total silence) and
never sweeps 93 (gPanic).
* Scope is the SETLIST, not the corpus. 14 corpus tracks do not compile
(#112) and must never make the gig gate red.
* Failures print FIRST and carry their fix command inline, because the read
order in a field is "what is broken / what do I type".
* GO states its own limit every time: check-mix reads the SAVED session, so
green means "Ardour will BOOT with this fader up", never "the mixer IS
correct". Saying it in those words is how the -inf bug stops hiding behind
a clean report.
Verified: NO-GO path observed for real (2 failures, both genuine, both fixed);
GO path 7/7 green; --help, --quiet and unknown-flag paths exercised.
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| at | Loading commit data... | |
| bridge | Loading commit data... | |
| foundry | Loading commit data... | |
| pulsar-parvagues-hud | Loading commit data... | |
| pvlint | Loading commit data... | |
| tests | Loading commit data... | |
| README.md | Loading commit data... | |
| analyze_samples.py | Loading commit data... | |
| button_roles.py | Loading commit data... | |
| check-boot-blocks.py | Loading commit data... | |
| check-boot.sh | Loading commit data... | |
| check-drift.sh | Loading commit data... | |
| check-mix.py | Loading commit data... | |
| check-tracks.sh | Loading commit data... | |
| control-lens.py | Loading commit data... | |
| deshadow-helpers.py | Loading commit data... | |
| fan_check.sh | Loading commit data... | |
| fix-button-roles.py | Loading commit data... | |
| fix-mute-roles.py | Loading commit data... | |
| gen_tokens.py | Loading commit data... | |
| gen_ts_types.py | Loading commit data... | |
| gig-log.py | Loading commit data... | |
| gig-up.sh | Loading commit data... | |
| gig_record.sh | Loading commit data... | |
| lcxl-init.py | Loading commit data... | |
| lcxl-leds-watch.service | Loading commit data... | |
| lcxl-leds.py | Loading commit data... | |
| lcxl_grid.json | Loading commit data... | |
| lcxl_grid.py | Loading commit data... | |
| migrate-columns.py | Loading commit data... | |
| mock-lcxl.py | Loading commit data... | |
| mute.tidal | Loading commit data... | |
| orphan-orbits.py | Loading commit data... | |
| probe-chain.py | Loading commit data... | |
| sample_tfidf.py | Loading commit data... | |
| set-coherence.py | Loading commit data... | |
| setlist_samples.py | Loading commit data... | |
| shipowiz.py | Loading commit data... | |
| silent-eval.py | Loading commit data... | |
| solo.tidal | Loading commit data... | |
| surface-columns.py | Loading commit data... | |
| take-lens.py | Loading commit data... | |
| tempo-lens.py | Loading commit data... | |
| tidal-remote.py | Loading commit data... | |
| tools.png | Loading commit data... | |
| unmute.tidal | Loading commit data... | |
| unsolo.tidal | Loading commit data... |