Skip to content
Русский

Reachability: gates the probe never drove both ways

The gates and ceils counts are not measured from pixels at all. They come from walking each preset’s expression trees while evaluating them over 12 s of dynamic:110 through the real analyzer, recording which way every comparison and every select() condition went, and how close every clamp() came to its upper bound. A frame differential structurally cannot answer this — select(c, 6, 8) and select(c, 6, 6) diff identically, and neither names which gate.

Four kinds of finding come out of that walk. Three are named one per line underneath the table; the ceilings are summarized:

  • GATE — a select() whose condition never went both ways. One branch of the preset has never rendered. Named with its source text, so the threshold to re-gain is in front of you.
  • COMP — a comparison (> < >= <= == !=) that only ever took one value, so it read as a constant 0 or 1 (ADR-0043). This catches two shapes a GATE line cannot. One is the bare comparison as a whole binding — reseed = "onset > 0.55", the idiomatic boolean-param form, which holds no select() at all. The other is one half of a composite condition: in select(min(tempo > 124, bass + treb > 0.38), 4, 1) the GATE line names the whole min(...), and since a tempo gate is legitimately one-sided here (below), a reader would dismiss it — so each half is also reported on its own, and the excusable one can no longer launder the other.
  • SAT — a clamp() whose inner value sat at its upper bound for 90 % or more of the probe (ADR-0062). The binding is a gain that has stopped being a function of the audio: it reads as the constant its ceiling is, for anything above a whisper. Named one per line with its occupancy, because unlike a decorative ceiling this is a HARD failure — see the saturation gate.
  • clamp ceilings — a clamp() upper bound the value never approached. The bound is decorative and the parameter’s real range is narrower than it reads. These are not printed one per line: a single summary line per family gives the count and names the furthest three. All of them are in --json.

A comparison that is the direct condition of a select() reports once, as the GATE line only — that line already names it and says which branch never ran, which a COMP line cannot. So GATE and COMP never double-report the same finding.

The gates column counts GATE + COMP together: both say a branch of the preset’s behavior has never happened. ceils counts the ceilings, and occ counts the saturated clamps.

ceils and occ are opposite ends of one measurement, taken on the same traversal from the same two numbers — a clamp()’s inner value and its upper bound. ceils asks how close the value ever came (its peak, as a fraction of the bound) and fires when the answer is “never near”: the ceiling is decorative. occ asks how long the value stayed there (the fraction of hops at or above the bound) and fires when the answer is “always”: the ceiling never released. A clamp can trip at most one of them, and the healthy state is neither — a bound reached on peaks and released in between. occ is by far the more serious of the two, which is why it is the one that is gated.

A flag is a suspect, not a conviction. It says this stimulus never drove the gate both ways, which is a fact about the probe as much as about the preset. The standing false positive is tempo: the probe runs at one BPM, so select(tempo > 132, ...) is correctly one-sided and will flag forever. Check those two by hand with --set tempo=90 / --set tempo=160 (see Examples); a gate on a band is the one worth acting on.

The probe runs 12 s rather than the 4 s a --signal filmstrip synthesizes, because the tempo tracker needs about 4 s to lock. Under a short clip tempo reads a flat 0 and every tempo comparison flags for the wrong reason.

The GATE and COMP half of this is advisory output. It is not a CI gate, and deliberately so — and as of Plan 0048 both of the reasons are live again. (The SAT half is gated, for reasons that do not apply to it — see below.)

The instrument is one of them, and that has not changed: the tempo single-BPM false positive above accounts for 17 of the 26 flags the shipped set currently produces, so a naive “fail if flags > 0” would fail CI permanently and a threshold would be tuned to noise. The precondition remains a multi-BPM probe or an explicit tempo exemption (ADR-0043).

The library is the other, and it regressed on purpose before being put back. Plan 0042’s re-audit measured 0 genuinely dead gates, and that held until ADR-0049 changed what a band level means: nine bindings written against raw levels then compared against normalized ones and never went false, so their else branches were dead. That was the priced cost of the one-time retune ADR-0049 chose, and Plan 0048 Phase 7 cleared it — the library is back to zero genuinely dead gates, with the residual flags all tempo one-sidedness.

The walk used to be unable to see a gain, and now it can. A comparison is a fork it can watch; clamp(bass * 16, 0, 0.3) is not — it has no select(), no comparison, nothing two-valued, and it is simply an arithmetic expression that has quietly become a constant. Plan 0048 Phase 7 measured 263 of 332 clamped band terms pinned at their ceiling, and 14 presets with no live audio term at all, none of it visible to any instrument this project had. The occ column and the SAT lines are that instrument (ADR-0062), and unlike the rest of the reachability block they are backed by a gate.

Built from 13c7582 at version 0.158.0. This site tracks main and is not versioned per release.