Skip to content

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:

gatewhere its numbers come fromwould it notice a preset that ignores the music?
reactivityPCM → 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 windowYes. This is the only one. A preset that reads no band moves identically under all four clips and fails
sanityone synthesized AnalysisFrameNo — it asks whether the frame is lit, spread and tonally structured
animationa zeroed AnalysisFrame held constant, and a synthesized fully-driven one for the second reading — both held constant, neither from PCMNo, 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
distinctnessone synthesized AnalysisFrame, shared across a familyNo — it asks whether two presets look alike
goldenfrozen fixtures with constant paramsNo — 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 wellreactivity 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:

statisticprewarm = 0prewarm = 1floor
sanity coverage / radial shells0.0074, 0 of 10 — convicted blank0.1470, 10 of 10 — structurally present0.25 / 4 shells
animation footprint motion0.06290.17020.01
reactivity best band0.00020.01950.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_density reads pixel-scale perimeter over lit area, so a particle field noisier than the frozen Blown Out fixture 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 is 1.37x, inside the library’s own 0.0440..0.9839 spread.
  • 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 of parametric_curve, shape_field’s Facet, 12 of 17 attractor, and 7 of 9 fragment_field including Sumi at 0.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 raises tonal_flatness toward 1.0 and leaves boundary_density untouched. Each such conversion needs its own floor arm with its own derivation before it can ship; for attractor the ceremony-derived number is 0.0220, 12x below 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.