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, since Plan 0119: sanity’s blot check convicts nothing in the
library today, and it 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. Two limits follow, and reading only the first will mis-price the
gate:
- A raggeder blot passes the structural term.
boundary_densityreads pixel-scale perimeter over lit area, so a particle field noisier than the frozenBlown Outfixture has more perimeter per lit pixel than a composition does and clears the floor while still being a mass of one tone. That is the known decay mode, it is the mechanism ADR-0129 was written to escape, and ADR-0130 accepts it knowingly after measuring that the escape route was never open. The margin the term ships on is1.37x, inside the library’s own0.0440..0.9839spread. - Over half the library is below the structural floor already and is held only
by the tonal term. 22 of 43 shipped presets read under their family’s
boundary_floor— the whole ofparametric_curve,shape_field’sFacet, 12 of 17attractor, and 7 of 9fragment_fieldincludingSumiat0.1008. 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; forattractorthe ceremony-derived number is0.0220,12xbelow the blot and vacuous, so mono attractors and blot-catching cannot both be had on this term. 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/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 a8ce055 at version 0.115.0. This site tracks main and is not versioned per release.