What the five preset gates can and cannot see
A preset ships when the behavioral suite is green (ADR-0081), so what “green” is evidence of is worth stating rather than inferring. Five gates sweep the shipped set, and one of them drives real audio:
| gate | where its numbers come from | would it notice a preset that ignores the music? |
|---|---|---|
reactivity | PCM → the real analyzer — four core::signal clips (60 Hz sine, a mid chord, a 12 kHz tone, a 240 BPM click track) pushed hop-by-hop through Analyzer via Renderer::capture_audio_after_warmup, which advances the analyzer’s warm-up hops without pixels and rasterizes only the measured window | Yes. This is the only one. A preset that reads no band moves identically under all four clips and fails |
sanity | one synthesized AnalysisFrame | No — it asks whether the frame is lit, spread and tonally structured |
animation | a zeroed AnalysisFrame held constant, and a synthesized fully-driven one for the second reading — both held constant, neither from PCM | No, by design — it asks whether the picture moves at all, on the scene’s own clock or against full drive. Neither reading passes a sample through the analyzer, so a preset whose bindings are wired to the wrong band still animates on both |
distinctness | one synthesized AnalysisFrame, shared across a family | No — it asks whether two presets look alike |
golden | frozen fixtures with constant params | No — it asks whether the renderer still draws what it drew |
Four of the five are right to synthesize. Their questions are about the frame — is it lit, does it move, is it distinct, does it match its baseline — and a made-up analysis frame answers those correctly and several times faster than pushing samples would. Converting them would buy nothing and cost the sweep a multiple of what it costs now. That is a decision, not an omission (Plan 0067, “What this plan does NOT do”). The price of converting one has dropped since that decision — Plan 0067 measured it at ~1.8x when every hop rasterized, and Plan 0084 removed the warm-up renders from that figure — but the reasoning above does not turn on the price, so the decision stands.
So read a green suite as: the renderer produced a plausible, distinct, moving
frame, and the preset responds to at least one band of real audio. It also says nothing about
whether the library wants another preset like this one; that is a curation judgement made at a
plan’s close, not a property a gate can hold. What green
still does not say is that the preset responds well — reactivity compares a
driven band against silence, and against silence a binding that saturates just
above the noise floor is maximally responsive. That gap is saturation’s
(a CPU-only expression walk over a 12 s dynamic:110 probe), and it is the
second gate that sees real signal even though it renders nothing. beat,
chain and dsp also push PCM, but they test fixtures and the DSP itself rather
than the shipped set.
A fourth caveat, since Plan 0090: on an emitter world, a green gate means
something different at prewarm = 0 than at prewarm = 1, and no gate can see
which. Every behavioral gate captures 30 frames — half a second — and an
emitter’s population ramps toward spawn_rate * lifetime over a whole lifetime
from an empty pool. prewarm back-dates that ramp so the first frame is already
the steady state, which means the gates score the world the author is designing
rather than the first 3 % of it. The same draft, changed in nothing else:
| statistic | prewarm = 0 | prewarm = 1 | floor |
|---|---|---|---|
sanity coverage / radial shells | 0.0074, 0 of 10 — convicted blank | 0.1470, 10 of 10 — structurally present | 0.25 / 4 shells |
animation footprint motion | 0.0629 | 0.1702 | 0.01 |
reactivity best band | 0.0002 | 0.0195 | 0.02 |
Two things follow. A slow emitter world that fails sanity may be failing its
warm-up rather than its design — check prewarm before touching the look. And
a green row on a prewarmed world says nothing about what the first seconds of a
live set look like, which is the question prewarm = 0 was answering all along.
Neither the capture length nor any floor moved to accommodate this
(ADR-0104 rejected
that; the warm-up is what got attacked instead).
A fifth caveat: sanity’s blot check convicts nothing in the library, and that
is a landmine rather than a clean bill of health. The check is a conjunction —
tonally flat and structureless — and no shipped frame fails both, so a
regression in its wiring would look exactly like a healthy library. What stops
that regression from being invisible is two frozen fixtures rather than the
library: Blown Out, a stroke figure clipped to one tone, and Ragged Blot, a
particle cloud stacked past the same ceiling, are both convicted by both terms,
and core/tests/sanity.rs asserts each conviction term by term. Two limits
follow, and reading only the first will mis-price the gate:
- The conviction rests on three frames. Two blots and one composition
(
fragment_tiledmono) are what the1.17cut and the0.23floor are measured between, and a three-point calibration is not a general one — ADR-0200 says so in its own Consequences. The second blot is what makes the calibration state a property of the defect class rather than of one fixture’s rim: the separation it buys is wider than the two blots’ own spread, which a single anchor cannot even express.boundary_densitystill reads pixel-scale perimeter, so a blot raggeder than either fixture has more perimeter per lit pixel than a composition does, and that decay mode is ADR-0130’s accepted cost rather than a solved problem. - Over half the library is below the structural floor already and is held only
by the tonal term. 62 of 112 shipped presets read under their family’s
boundary_floor— the whole ofshape_collageandwarp_mesh, 15 of 20attractor, 11 of 14fragment_fieldincludingSumiat0.1001. They pass because they have tonal structure, not because they have interior. So converting any of them to a two-ink print flips them from passing to convicted, since that raisestonal_flatnesstoward1.0and leavesboundary_densityuntouched. Each such conversion needs its own floor arm with its own derivation before it can ship. The gate prints the full list and the count on every run, unasserted — there is no measured basis for a threshold on it, and it is expected to move.
If one of the other four ever needs to answer an audio question, reactivity.rs
is the pattern: synthesize with core::signal, drive
Renderer::capture_audio_after_warmup, and keep the clip only as long as the
analyzer’s window needs to fill — WARMUP_HOPS of the ~40-hop clip publish
nothing at all, so they are fed as warm-up and never rasterized.
Copying it carries one consequence that is easy to miss (Plan 0084 Phase 4,
2026-08-13). Skipping the warm-up renders is safe for the analyzer — analysis
is a pure function of its window and the render pass never touches it, which
core/tests/suite/capture_advance.rs asserts bit-for-bit — but it is not a no-op
for the scene. A scene that integrates on the GPU (trails, particles,
reaction-diffusion) now meets the measured window WARMUP_HOPS steps colder
than it would have, because those hops used to double as the scene warm-up.
Time-driven scenes are unaffected, since the clock advances either way. When
that change landed on reactivity it moved 35 of 36 per-band vectors — all
upward, none regressed, and the tightest headroom in the library roughly
doubled — but a gate copying the pattern should expect its own numbers to be a
fresh baseline rather than comparable to a rendered-warm-up run. Nothing asserts
this; it is documented here and in the two source docstrings because no
instrument in the repo can see it.
Built from 13c7582 at version 0.158.0. This site tracks main and is not versioned per release.