testing
Three layers in CI today, by ascending integration scope: unit → ART → E2E. The PR gate
(flox activate -- task ci) runs typecheck + unit + ART + E2E. VRT (Visual
Regression Tests) is planned for the video domain but not yet implemented — see below.
Unit
Vitest, fast, scoped per workspace. Lives next to the code (foo.ts ↔ foo.test.ts). Run all unit tests:
flox activate -- task test Coverage areas today: graph store mutations, capacity logic, auth handshake, layout merging, note-entry coercion, docs module-manifest generator.
Port-surface consistency gates
Three gates keep each module’s I/O surface consistent across def, published manifest, and rendered UI — drift between them was the root cause of a past regression where a def grew dozens of CV inputs but the card only rendered three handles per voice (cables had nothing visible to land on).
- The module def at
packages/web/src/lib/{audio,video}/modules/<type>.ts(the runtime source of truth — what the engine wires up). - The published manifest at
/docs/modules/<type>(built frompackages/web/src/lib/docs/module-manifest.ts). - The card UI at
packages/web/src/lib/ui/modules/<Type>Card.svelte(the Svelte Flow Handle elements the user can plug cables into).
- Unit — manifest stays in sync with defs:
packages/web/src/lib/docs/module-manifest.test.tsiterates overgetAllModuleSpecs()and asserts the manifest’s input/output ids equal the def’s. Catches drift between the def and the docs builder. - E2E — UI matches def:
e2e/tests/io-spec-consistency.spec.tsis the registry-wide card sweep: it spawns each module type once and asserts every Handle’sdata-handleidset equals the def’s port ids (both directions, with a per-port failure message), plus handle count, card identity, card box, control bounds and no console/page errors — all off that one spawn. - E2E — CV range uniformity:
e2e/tests/cv-range-uniformity.spec.tswalks everycvinput port and asserts acvScalehint is declared, then drives an LFO at ±1 to confirm the target slider sweeps edge-to-edge. Catches the regression where a new module is added with a rawpassthroughCV input, leaving an LFO touching only ~10% of the natural range. Seedocs/adr/004-cv-range-convention.md.
Adding a new module: both tests iterate the registry automatically — no
edit needed. The E2E sweep reads the synthesised registry manifest
(e2e/.generated/registry-manifest.json), so just make sure the
card’s <Handle> id= values match the def’s port ids
exactly. If the UI is intentionally lagging the def (e.g. some CV ports kept off-card to avoid
chrome overload), add an entry to SKIP_DEF_VS_UI with a TODO pointing at the
follow-up branch.
Helper: packages/web/src/lib/dev/module-specs.ts exposes getAllModuleSpecs() as a thin projection of the registry. In dev / VITE_E2E_HOOKS=1 builds it’s also published as window.__moduleSpecs.
ART — Audio Regression Tests
Offline render of compiled DSP through node-web-audio-api → Float32 PCM. Tests
assert on FFT peak frequency, harmonic ratios, silence floor, and where deterministic,
byte-identical match against a .f32 baseline pinned in Git LFS. The harness lives
at art/setup/render.ts.
flox activate -- task art # run
flox activate -- task art:update # regenerate .f32 + .sha baselines Browse a rendered gallery of every .f32 baseline — a
waveform + log-frequency spectrogram per baseline, grouped by scenario — published to
GitHub Pages: ART gallery →. It’s generated by art/build_gallery.py and republished on every push to
main (.github/workflows/art-gallery.yml), the audio sibling of the VRT gallery.
Scenarios (141)
| group | spec |
|---|---|
| _meta | audio-profile-gate.test.ts |
| _meta | baseline-uniqueness.test.ts |
| adsr-invert | env-invert.test.ts |
| adsr | profile.test.ts |
| analog-logic-maths | algebra.test.ts |
| analog-logic-maths | face-audit.test.ts |
| analog-logic-maths | profile.test.ts |
| analog-vco | fm-sync-model.test.ts |
| analog-vco | hard-sync.test.ts |
| analog-vco | mirror-fidelity.test.ts |
| analog-vco | pw-pm-morph.test.ts |
| attenumix | mix-saturation.test.ts |
| attenumix | profile.test.ts |
| audio-out | dc-blocker-and-limiter.test.ts |
| audio-out | master-limiter-sub-pump.test.ts |
| audio-out | per-channel-taps.test.ts |
| bluebox | profile.test.ts |
| buggles | woggle-events.test.ts |
| cartesian-lfo | cartesian-lfo.test.ts |
| charlottes-echos | cv-path.test.ts |
| charlottes-echos | face-law.test.ts |
| charlottes-echos | profile.test.ts |
| charlottes-echos | single-tap.test.ts |
| charlottes-echos | wet-output.test.ts |
| clap | profile.test.ts |
| clouds | granular-texture.test.ts |
| clouds | size-travel.test.ts |
| cloudseed | impulse-response.test.ts |
| cofefve | profile.test.ts |
| cube | slice-readout.test.ts |
| cv-display-param-reach | cv-display-param-reach.test.ts |
| cv-range-uniformity | cv-scale-coverage.test.ts |
| cv-terminal | cv-terminal.test.ts |
| cv-terminal | sample.test.ts |
| delay | profile.test.ts |
| depolarizer | profile.test.ts |
| destroy | face-audit.test.ts |
| destroy | profile.test.ts |
| drummergirl | gate-voice.test.ts |
| dx7 | algorithm-spectra.test.ts |
| dx7 | envelope.test.ts |
| dx7 | polyphony.test.ts |
| dx7 | preset-spectra.test.ts |
| dx7 | spectral-audit.test.ts |
| dx7 | syx-spectra.test.ts |
| equal-power-pan | pan-law.test.ts |
| featurecv | analysis.test.ts |
| featurecv | feature-extract.test.ts |
| filter | profile.test.ts |
| flipper | profile.test.ts |
| fourplexer | profile.test.ts |
| gatemaiden | profile.test.ts |
| grand-integration | combined-master.test.ts |
| illogic | attenuverter-and-logic.test.ts |
| illogic | face-audit.test.ts |
| illogic | profile.test.ts |
| karplus | profile.test.ts |
| kickdrum | profile.test.ts |
| lfo-shared-clock | deterministic-phase.test.ts |
| macrooscillator | spectral-character.test.ts |
| marbles | gate-and-cv.test.ts |
| meowbox | meow-c4.test.ts |
| meowbox | voct-real-dsp.test.ts |
| meowbox | voct-tracking.test.ts |
| mixer | profile.test.ts |
| mixmstrs | cv-path.test.ts |
| mixmstrs | face-premises.test.ts |
| mixmstrs | passthrough.test.ts |
| mixmstrs | prefader-sends.test.ts |
| mixmstrs | profile.test.ts |
| modtris | gate-pulses.test.ts |
| moog-cp3 | face-audit.test.ts |
| moog-cp3 | profile.test.ts |
| moog-filterbank | response-model.test.ts |
| moog904a | profile.test.ts |
| moog904b | profile.test.ts |
| moog904c | profile.test.ts |
| moog905 | profile.test.ts |
| moog907a | profile.test.ts |
| moog911 | face-audit.test.ts |
| moog911 | profile.test.ts |
| moog911a | face-audit.test.ts |
| moog911a | profile.test.ts |
| moog912 | face-audit.test.ts |
| moog914 | profile.test.ts |
| moog921-vco | profile.test.ts |
| moog923 | face-audit.test.ts |
| moog960 | profile.test.ts |
| moog962 | profile.test.ts |
| ninelives | ladder.test.ts |
| ninelives | profile.test.ts |
| noise | profile.test.ts |
| noise | spectral-shape.test.ts |
| note-pitch | note-pitch.test.ts |
| polarizer | profile.test.ts |
| poly-chord | maj-triad.test.ts |
| pong | gate-pulses.test.ts |
| qbrt | svf-modes.test.ts |
| resofilter | profile.test.ts |
| reverb | profile.test.ts |
| ringback | profile.test.ts |
| rings | resonator-character.test.ts |
| sample-hold | quantized-vco-steps.test.ts |
| samsloop | varispeed-spectrum.test.ts |
| scaler | profile.test.ts |
| scope-tuner | internal-references.test.ts |
| scope-tuner | real-world.test.ts |
| scope | profile.test.ts |
| score | score-pitch-and-envelope.test.ts |
| shimmershine | octave-up-tail.test.ts |
| sidecar | profile.test.ts |
| sidecar | static-ratio-curve.test.ts |
| sixstrum | profile.test.ts |
| slew-switch | profile.test.ts |
| snaredrum | profile.test.ts |
| stereo-dual-mono | dual-mono-signal.test.ts |
| stereovca | profile.test.ts |
| stereovca | ring-mod-spectrum.test.ts |
| swolevco | mode-gating-and-face-readouts.test.ts |
| swolevco | spectral-and-routing.test.ts |
| synesthesia | band-filtering.test.ts |
| tempo-stability | tempo-stability.test.ts |
| tidy-vco | profile.test.ts |
| timelorde | bpm-120-internal.test.ts |
| tomtom | profile.test.ts |
| treeohvox | voice-character.test.ts |
| twotracks | twotracks-lofi-error.test.ts |
| twotracks | twotracks-lofi-high.test.ts |
| twotracks | twotracks-lofi-low.test.ts |
| twotracks | twotracks-lofi-off.test.ts |
| unityscalemathematik | cv-path.test.ts |
| unityscalemathematik | profile.test.ts |
| vca-invert | sign-flip.test.ts |
| vca | profile.test.ts |
| video | phase1-defs.test.ts |
| video | waveform-video-defs.test.ts |
| warrensspectrum | cv-path.test.ts |
| warrensspectrum | profile.test.ts |
| wavecel | wavecel.test.ts |
| wavefolder | wavefolder-spectrum.test.ts |
| wavetable-vco | cv-path.test.ts |
Baselines (240)
Pinned in Git LFS at art/baselines/. .f32 = raw 32-bit PCM, .sha = sidecar hash.
| group | file |
|---|---|
| adsr | env.f32 |
| adsr | env.sha |
| analog-logic-maths | diff.f32 |
| analog-logic-maths | diff.sha |
| analog-logic-maths | max.f32 |
| analog-logic-maths | max.sha |
| analog-logic-maths | min.f32 |
| analog-logic-maths | min.sha |
| analog-logic-maths | product.f32 |
| analog-logic-maths | product.sha |
| analog-logic-maths | sum.f32 |
| analog-logic-maths | sum.sha |
| analog-vco | fm-morph-sine.f32 |
| analog-vco | fm-morph-sine.sha |
| analog-vco | fm-sync-c1-bsaw.f32 |
| analog-vco | fm-sync-c1-bsaw.sha |
| analog-vco | fm-sync-c1-bsine.f32 |
| analog-vco | fm-sync-c1-bsine.sha |
| analog-vco | fm-sync-c1-bsquare.f32 |
| analog-vco | fm-sync-c1-bsquare.sha |
| analog-vco | fm-sync-c1-vibrato.f32 |
| analog-vco | fm-sync-c1-vibrato.sha |
| analog-vco | fm-sync-c2-bmaster.f32 |
| analog-vco | fm-sync-c2-bmaster.sha |
| analog-vco | fm-sync-c3-feedback-a.f32 |
| analog-vco | fm-sync-c3-feedback-a.sha |
| analog-vco | fm-sync-c3-feedback-b.f32 |
| analog-vco | fm-sync-c3-feedback-b.sha |
| analog-vco | fm-sync-c4-mutual-a.f32 |
| analog-vco | fm-sync-c4-mutual-a.sha |
| analog-vco | fm-sync-c4-mutual-b.f32 |
| analog-vco | fm-sync-c4-mutual-b.sha |
| analog-vco | hard-sync.f32 |
| analog-vco | hard-sync.sha |
| analog-vco | pm-morph-saw.f32 |
| analog-vco | pm-morph-saw.sha |
| analog-vco | pm-morph-sine.f32 |
| analog-vco | pm-morph-sine.sha |
| analog-vco | pm-morph-square.f32 |
| analog-vco | pm-morph-square.sha |
| analog-vco | pw-sweep-50.f32 |
| analog-vco | pw-sweep-50.sha |
| analog-vco | pw-sweep-narrow.f32 |
| analog-vco | pw-sweep-narrow.sha |
| analog-vco | pw-sweep-wide.f32 |
| analog-vco | pw-sweep-wide.sha |
| attenumix | mix.f32 |
| attenumix | mix.sha |
| attenumix | out2.f32 |
| attenumix | out2.sha |
| bluebox | out.f32 |
| bluebox | out.sha |
| charlottes-echos | L.f32 |
| charlottes-echos | L.sha |
| clap | audio_out.f32 |
| clap | audio_out.sha |
| cofefve | out.f32 |
| cofefve | out.sha |
| cube | axis-aligned.f32 |
| cube | connect-strength-circle.f32 |
| cube | connect-strength-hard.f32 |
| cube | connect-strength-vee.f32 |
| cube | connect-vee.f32 |
| cube | crushed.f32 |
| cube | hard-material.f32 |
| cube | morph-ceiling.f32 |
| cube | rotated.f32 |
| cube | space-crush-and-crush.f32 |
| cube | space-crush-max.f32 |
| cube | space-crush-mid.f32 |
| cube | space-diffuse-max.f32 |
| cube | space-diffuse-mid.f32 |
| cube | space-diffuse-rotated.f32 |
| cube | space-diffuse-wrap.f32 |
| cube | spread-right.f32 |
| cube | wrap-outside.f32 |
| delay | audio.f32 |
| delay | audio.sha |
| depolarizer | out.f32 |
| depolarizer | out.sha |
| destroy | audio.f32 |
| destroy | audio.sha |
| featurecv | noise-bright.f32 |
| featurecv | ramp-loud.f32 |
| featurecv | sine-punch.f32 |
| featurecv | transient-onset.f32 |
| filter | audio.f32 |
| filter | audio.sha |
| flipper | flip.f32 |
| flipper | flip.sha |
| flipper | flop.f32 |
| flipper | flop.sha |
| fourplexer | out1.f32 |
| fourplexer | out1.sha |
| gatemaiden | gate.f32 |
| gatemaiden | gate.sha |
| gatemaiden | trig.f32 |
| gatemaiden | trig.sha |
| grand-integration | combined-master.f32 |
| grand-integration | combined-master.sha |
| illogic | and.f32 |
| illogic | and.sha |
| illogic | diff.f32 |
| illogic | diff.sha |
| illogic | or.f32 |
| illogic | or.sha |
| illogic | sum.f32 |
| illogic | sum.sha |
| karplus | melody.f32 |
| karplus | melody.sha |
| karplus | out.f32 |
| karplus | out.sha |
| kickdrum | audio_l.f32 |
| kickdrum | audio_l.sha |
| mixer | audio.f32 |
| mixer | audio.sha |
| mixmstrs | masterL.f32 |
| mixmstrs | masterL.sha |
| mixmstrs | send1L.f32 |
| mixmstrs | send1L.sha |
| mixmstrs | send2L.f32 |
| mixmstrs | send2L.sha |
| moog-cp3 | out_positive.f32 |
| moog-cp3 | out_positive.sha |
| moog904a | audio.f32 |
| moog904a | audio.sha |
| moog904b | audio.f32 |
| moog904b | audio.sha |
| moog904c | audio.f32 |
| moog904c | audio.sha |
| moog905 | audio.f32 |
| moog905 | audio.sha |
| moog907a | audio.f32 |
| moog907a | audio.sha |
| moog911 | env.f32 |
| moog911 | env.sha |
| moog911a | out1.f32 |
| moog911a | out1.sha |
| moog911a | out2.f32 |
| moog911a | out2.sha |
| moog914 | audio.f32 |
| moog914 | audio.sha |
| moog921-vco | rectangular.f32 |
| moog921-vco | rectangular.sha |
| moog921-vco | sawtooth.f32 |
| moog921-vco | sawtooth.sha |
| moog921-vco | sine.f32 |
| moog921-vco | sine.sha |
| moog921-vco | triangle.f32 |
| moog921-vco | triangle.sha |
| moog960 | row1.f32 |
| moog960 | row1.sha |
| moog960 | row2.f32 |
| moog960 | row2.sha |
| moog960 | row3.f32 |
| moog960 | row3.sha |
| moog962 | out.f32 |
| moog962 | out.sha |
| ninelives | out1.f32 |
| ninelives | out1.sha |
| ninelives | out2.f32 |
| ninelives | out2.sha |
| ninelives | out3.f32 |
| ninelives | out3.sha |
| noise | brown.f32 |
| noise | brown.sha |
| noise | pink.f32 |
| noise | pink.sha |
| noise | white.f32 |
| noise | white.sha |
| polarizer | out.f32 |
| polarizer | out.sha |
| resofilter | out.f32 |
| resofilter | out.sha |
| reverb | audio.f32 |
| reverb | audio.sha |
| ringback | out.f32 |
| ringback | out.sha |
| sample-hold | continuous-quant-curve.f32 |
| sample-hold | gated-quant-steps.f32 |
| scaler | out.f32 |
| scaler | out.sha |
| scope | ch1_out.f32 |
| scope | ch1_out.sha |
| scope | ch2_out.f32 |
| scope | ch2_out.sha |
| sidecar | audio_l_out.f32 |
| sidecar | audio_l_out.sha |
| sidecar | env_out.f32 |
| sidecar | env_out.sha |
| sixstrum | out.f32 |
| sixstrum | out.sha |
| sixstrum | poly.f32 |
| sixstrum | poly.sha |
| slew-switch | out2.f32 |
| slew-switch | out2.sha |
| slew-switch | switched.f32 |
| slew-switch | switched.sha |
| snaredrum | hit_l.f32 |
| snaredrum | hit_l.sha |
| snaredrum | roll_l.f32 |
| snaredrum | roll_l.sha |
| snaredrum | roll_r.f32 |
| snaredrum | roll_r.sha |
| stereovca | out_l.f32 |
| stereovca | out_l.sha |
| stereovca | out_r.f32 |
| stereovca | out_r.sha |
| synesthesia | band1-65hz.f32 |
| synesthesia | band2-400hz.f32 |
| synesthesia | band3-2000hz.f32 |
| synesthesia | band4-8000hz.f32 |
| tidy-vco | out_l.f32 |
| tidy-vco | out_l.sha |
| tidy-vco | out_r.f32 |
| tidy-vco | out_r.sha |
| tomtom | audio_out.f32 |
| tomtom | audio_out.sha |
| tomtom | tune_spread.f32 |
| tomtom | tune_spread.sha |
| treeohvox | c-d-eb-f-eb-d-c.f32 |
| treeohvox | c-d-eb-f-eb-d-c.sha |
| unityscalemathematik | a_out.f32 |
| unityscalemathematik | a_out.sha |
| unityscalemathematik | b_out.f32 |
| unityscalemathematik | b_out.sha |
| unityscalemathematik | u_out.f32 |
| unityscalemathematik | u_out.sha |
| vca | audio.f32 |
| vca | audio.sha |
| warrensspectrum | freeze-hold.f32 |
| warrensspectrum | freeze-hold.sha |
| warrensspectrum | masspass-24.f32 |
| warrensspectrum | masspass-24.sha |
| warrensspectrum | masspass-99.f32 |
| warrensspectrum | masspass-99.sha |
| warrensspectrum | residual-off.f32 |
| warrensspectrum | residual-off.sha |
| warrensspectrum | resynth.f32 |
| warrensspectrum | resynth.sha |
VRT — Visual Regression Tests
E2E — Playwright
Headless Chromium, real Web Audio (worklets and all), against the actual SvelteKit app. Boots a
Vite dev server (or vite preview when E2E_USE_PREVIEW=1). Lives under e2e/tests/; specs tagged @smoke double as the post-deploy live check
on autotest.
flox activate -- task e2e # full suite
flox activate -- task e2e:headed # with the browser visible
flox activate -- task ci:smoke:live # smoke vs autotest.patchtogether.live Specs (484)
4plexer.spec.ts4plexvid.spec.tsacidwarp-face-screen.spec.tsacidwarp-render-smoke.spec.tsadsr-face.spec.tsadsr-poly-midilane.spec.tsadsr-vca-invert.spec.tsai-debug.spec.tsai-smoke.spec.tsanalog-vco-fm-sync.spec.tsanalog-vco-hard-sync.spec.tsarchivist.spec.tsaudio-controls.spec.tsaudio-health-readout.spec.tsaudio-in.spec.tsaudio-input-survives-card-collapse.spec.tsaudioctx-sample-rate.spec.tsaudioout-face.spec.tsaut-patch-panel.spec.tsauth-handshake.spec.tsauth-routes.spec.tsautomation-video-nostuck.spec.tsawareness.spec.tsb3ntb0x-hue-claim.spec.tsb3ntb0x.spec.tsbackdraft-clocked-delay.spec.tsbackdraft-full-output.spec.tsbackdraft-panic.spec.tsbackdraft-preview-toggle.spec.tsbackdraft-pure-tv.spec.tsbackdraft-render-smoke.spec.tsbackdraft.spec.tsbehavioral-observation-window.spec.tsbentbox.spec.tsblood-audio-output.spec.tsblood-ingame.spec.tsblood-mount.spec.tsbluebox.spec.tsbridge-late-materialization.spec.tsbuggles.spec.tscable-drag-drilldown.spec.tscable-drag-panel-lock.spec.tscable-drag-section-expand.spec.tscable-z-order.spec.tscadillac-collab.spec.tscadillac.spec.tscamera-input.spec.tscamerainput-shell-source.spec.tscapacity.spec.tscard-control-overflow.spec.tscard-drop-patch.spec.tscard-producer-lifetime.spec.tscarl-rackspace.spec.tscartesian-face.spec.tscellshade-functional.spec.tscellshade.spec.tschromaconsole.spec.tsclap.spec.tsclear-load-multiwindow.spec.tsclear-patch-undo.spec.tsclear.spec.tsclick-pickup-cable.spec.tsclip-automation.spec.tsclip-prob-default.spec.tsclipplayer-card-erase.spec.tsclipplayer-card-parity.spec.tsclipplayer-clip-delete.spec.tsclipplayer-clip-view-grid.spec.tsclipplayer-controls.spec.tsclipplayer-custom-scale.spec.tsclipplayer-edit-launch.spec.tsclipplayer-grid-stability.spec.tsclipplayer-pitch-probability.spec.tsclipplayer-play-every.spec.tsclipplayer-queue-boundary.spec.tsclipplayer-rate-reset.spec.tsclipplayer-right-click-menu.spec.tsclipplayer-songmode.spec.tsclipplayer-transport-no-controller.spec.tsclipplayer.spec.tsclouds-face.spec.tsclouds.spec.tscloudseed-face.spec.tscloudseed.spec.tscofefve.spec.tscollab.spec.tscollapse-keeps-playing.spec.tscolor-field.spec.tscolourofmagic.spec.tsconnection-validate-edge.spec.tscontrol-color.spec.tscontrol-surface.spec.tscoverage-group-1-sinks.spec.tscoverage-group-2-sources.spec.tscoverage-groups-3-4-5.spec.tscoverage-groups-6-7-8-9.spec.tscube.spec.tscv-buddy-face.spec.tscv-range-uniformity.spec.tsdelay-face.spec.tsdestructor-render-smoke.spec.tsdock-pane-close-chrome.spec.tsdock-tray-shrink-to-content.spec.tsdocs-virtual-module.spec.tsdocs.spec.tsdoom-aspect.spec.tsdoom-audio-output.spec.tsdoom-cheat-gates.spec.tsdoom-controls.spec.tsdoom-identity-crossview.spec.tsdoom-keyboard-routing.spec.tsdoom-late-join.spec.tsdoom-launch.spec.tsdoom-mp-latejoin-freeze.spec.tsdoom-mp-lockstep-sharedstate.spec.tsdoom-mp-real.spec.tsdoom-multiplayer.spec.tsdoom-per-type-death-gates.spec.tsdoom-session-survives-card-collapse.spec.tsdoom-wasm.spec.tsduplicate-module.spec.tsdx7-algorithm-picker.spec.tsdx7-operator-panel.spec.tsdx7-syx-load.spec.tsdx7.spec.tsedges.spec.tseditor-edit-survives-collapse.spec.tselectra-control.spec.tselectra-reconnect.spec.tses9-card-shows-state.spec.tses9-face.spec.tses9-hardware.spec.tses9-per-leg-patching.spec.tses9-shell-lifetime.spec.tsexport-state-only.spec.tsextras-producer-lifetime.spec.tsface-screen-render-2.spec.tsface-screen-render-3.spec.tsface-screen-render-4.spec.tsface-screen-render.spec.tsfaceplate-platform.spec.tsfaces-parity-2.spec.tsfaces-parity-3.spec.tsfaces-parity-4.spec.tsfaces-parity.spec.tsfader-midi-assign.spec.tsfader.spec.tsfeaturecv-source-chain.spec.tsfeedback.spec.tsfilter-cv-depth.spec.tsflip-rack-rear-view.spec.tsfour-modules.spec.tsfoxy-face-surface.spec.tsfoxy-freeze-locks-wavetable.spec.tsfoxy.spec.tsframetable.spec.tsfreezeframe-screen-toggle.spec.tsfreezeframe.spec.tsfrogger.spec.tsgamepad-face.spec.tsgamepad.spec.tsgibribbon.spec.tsgl-feedback-loop.spec.tsgrains-of-vision.spec.tsgraphic-eq-render-smoke.spec.tsgroup-exposed-controls.spec.tsgrouping-phase1.spec.tsgrouping-phase2.spec.tsgrouping-phase3.spec.tshouse-style.spec.tsillogic-face.spec.tsillogic.spec.tsin-card-title.spec.tsinsert-on-cable.spec.tsinstrument-exposed-port-patching.spec.tsinstruments.spec.tsintegration.spec.tsinwards-render-smoke.spec.tsio-spec-consistency.spec.tsjoystick.spec.tskarplus-face.spec.tskarplus.spec.tskeyboard-nav.spec.tskeyer-functional.spec.tskickdrum-face.spec.tskickdrum.spec.tskria.spec.tslanding-links.spec.tslanding-new-rack-is-fresh.spec.tslanding-routing.spec.tslasso-group.spec.tslasso-viewport-reanchor.spec.tslaunchpad-arp.spec.tslaunchpad-clip-launch.spec.tslaunchpad-face.spec.tslaunchpad-keys-record.spec.tslaunchpad-monitor-survives-card-collapse.spec.tslaunchpad-perf-controls.spec.tslaunchpad-scene-repeats.spec.tslayers-survive-card-collapse.spec.tslfo-face.spec.tslfo-modulation-visible.spec.tslines-render-smoke.spec.tslive-glyphs.spec.tslivecode.spec.tsload-patch.spec.tslogin-smoke.spec.tsloopback-shell-source.spec.tsloopback.spec.tslushgarden.spec.tsmain-thread-cost.spec.tsmandelbulb-render-smoke.spec.tsmandleblot-render-smoke.spec.tsmapper.spec.tsmappy-export-import.spec.tsmappy-output.spec.tsmarbles-face.spec.tsmatrixmix.spec.tsmedia-loader.spec.tsmenu-viewport-clamp.spec.tsmeowbox.spec.tsmidi-autobind-perfzip.spec.tsmidi-binding-node-lifetime.spec.tsmidi-cv-buddy.spec.tsmidi-lane.spec.tsmidi-learn-note.spec.tsmidi-learn.spec.tsmidi-out-buddy.spec.tsmidi.spec.tsmidiclock.spec.tsmike-rackspace.spec.tsmilkdrop-render-smoke.spec.tsmixmstrs-face-console.spec.tsmixmstrs-stereo-expand.spec.tsmodtris.spec.tsmodulation.spec.tsmodule-annotate.spec.tsmodule-rename.spec.tsmulti-output.spec.tsmulti-video-playback.spec.tsnested-module-menu.spec.tsnew-rack-return-to-last.spec.tsnibbles-cv-scope.spec.tsnibbles-render-smoke.spec.tsnibbles.spec.tsnode-context-menu.spec.tsnode-source-hls.spec.tsnode-source-videobox.spec.tsnode-source-videovarispeed.spec.tsnoise-face.spec.tsnoise.spec.tsnote-entry.spec.tsnumpad-plus-face.spec.tsnumpad-plus.spec.tsonetonine.spec.tsorganize-modules.spec.tsout-to-launch-face.spec.tsoutlines-render-smoke.spec.tsoutlines.spec.tsp1-batch2-faces.spec.tspage-error-filter.spec.tspainter.spec.tspalette.spec.tsparam-edit-undo.spec.tsparam-grid.spec.tspatch-convenience.spec.tspatch-load-leak.spec.tspatch-menu-redesign.spec.tspatch-menu-ux.spec.tspatch-panel-jack-indicator.spec.tspatch-panel-nested.spec.tspatch-panel.spec.tspatch-to-cascade.spec.tspeakstate-render-smoke.spec.tspeertube.spec.tspentemelodica.spec.tsper-module-per-port-behavioral.spec.tsper-module-per-port-inputs.spec.tsper-module-per-port-outputs.spec.tsper-module.spec.tsperf-midi-cc-coalesce.spec.tsperf-tempo-under-modulation.spec.tspicturebox-asset-select.spec.tspicturebox-gif.spec.tspicturebox-limits.spec.tspicturebox-sync.spec.tspoly-chord.spec.tspong.spec.tsposterbox-functional.spec.tspresent-second-display.spec.tspresent-survives-card-collapse.spec.tspreset-slots-and-sets.spec.tsptzcam.spec.tspush2-clip-launch.spec.tspush2-face.spec.tsquadralogical-assign.spec.tsquadralogical-face-screen.spec.tsquadralogical.spec.tsrack-audio-gate.spec.tsrackspace-isolation.spec.tsrackspace-persistence.spec.tsrear-card-hit-target.spec.tsrear-view-patching.spec.tsrecorderbox-recover-reachable.spec.tsrecorderbox.spec.tsrecording-survives-card-collapse.spec.tsrename-aware-peer-labels.spec.tsrender-worker-acidwarp.spec.tsrender-worker-locus.spec.tsrender-worker-toybox.spec.tsreshaper-shapedramps.spec.tsresofilter-face.spec.tsresofilter.spec.tsringback-face.spec.tsringback.spec.tsrings-face.spec.tsrings.spec.tssample-hold.spec.tssamsloop-boundaries-roundtrip.spec.tssamsloop-download.spec.tssamsloop-memory-bench.spec.tssamsloop-persistence.spec.tssamsloop-poly-source-chain.spec.tssamsloop-record.spec.tssamsloop-take-survives-card-collapse.spec.tssamsloop-window.spec.tssamsloop.spec.tssave-group-and-naming.spec.tssave-load.spec.tssaved-groups-wiring.spec.tsscaler-cv-passthrough.spec.tsscope-tuner.spec.tsscope-video-out.spec.tsscope-xy-intensity.spec.tsscore-face.spec.tsscore.spec.tsscoreboard-face-screen.spec.tsscoreboard.spec.tsscratch-persist-video-live.spec.tsscratch-persist.spec.tsseed-none-fixture.spec.tsshapegen-clock.spec.tsshapegen.spec.tsshared-clock.spec.tsshared-rack-sync.spec.tssidecar.spec.tssixstrum-poly.spec.tsskifree-node-lifetime.spec.tsskifree.spec.tsskin-persists-app-wide.spec.tsskins.spec.tsslider-drag.spec.tssnaredrum-face.spec.tssnaredrum-roll.spec.tssnh-hold.spec.tssoak.spec.tssourcery.spec.tsspawn-at-cursor.spec.tsspawn-mount-budget.spec.tsspirographs-render-smoke.spec.tsstereo-autowire.spec.tsstereo-drop-choice.spec.tsstereo-mono-normal.spec.tsstereo-only-channel.spec.tssticky-note.spec.tsswolevco.spec.tssynesthesia-video-mode.spec.tstempest-render-smoke.spec.tstempo-stability.spec.tstempolock.spec.tstextmarquee-render-smoke.spec.tstextmarquee.spec.tstidy-vco.spec.tstiler.spec.tstimelorde-auto-spawn.spec.tstimelorde-pinned-source.spec.tstimelorde-tap-tempo.spec.tstimelorde-transport-state.spec.tstimelorde-video.spec.tstomtom.spec.tstopbar-1024.spec.tstopbar-buttons.spec.tstoybox-combine-editor.spec.tstoybox-control-surface.spec.tstoybox-cv-section.spec.tstoybox-disk-loading.spec.tstoybox-feedback.spec.tstoybox-fixture-behavior.spec.tstoybox-fixtures.spec.tstoybox-layer-input.spec.tstoybox-layer-selector.spec.tstoybox-new-content.spec.tstoybox-node-batch.spec.tstoybox-node-controls.spec.tstoybox-node-menu.spec.tstoybox-presets-io.spec.tstoybox-presets.spec.tstoybox-randomize.spec.tstoybox-shader-validate.spec.tstoybox-shadertoy.spec.tstoybox-video-inputs.spec.tstoybox-video-projection.spec.tstreeohvox-strike.spec.tstv-librarian-audio.spec.tstv-librarian-face.spec.tstv-librarian.spec.tstwotracks-perfzip.spec.tstwotracks-stereo.spec.tstwotracks.spec.tsui-refresh.spec.tsunpatch-patch-point.spec.tsvarispeed-multislot-persist.spec.tsvarispeed-panel-layout.spec.tsvca-face.spec.tsvco-pitch-tracking.spec.tsversion-heading.spec.tsvfpga-floorplan.spec.tsvfpga-p2-cells.spec.tsvfpga-p3-composite.spec.tsvfpga-p4-early-hd.spec.tsvfpga-patchpanel-presets.spec.tsvfpga-runner-face-screen.spec.tsvfpga-runner-render-smoke.spec.tsvfpga-runner.spec.tsvideo-aspect-switch.spec.tsvideo-audio-cvgate-coverage.spec.tsvideo-audio-output.spec.tsvideo-chain.spec.tsvideo-controls.spec.tsvideo-full-frame.spec.tsvideo-fullscreen-multimonitor.spec.tsvideo-fullscreen.spec.tsvideo-hide-controls.spec.tsvideo-orientation.spec.tsvideo-preview-downscale.spec.tsvideo-preview-gate.spec.tsvideo-pull-eval.spec.tsvideobox-output.spec.tsvideobox-performance-bundle.spec.tsvideobox-upload-perf.spec.tsvideocube-assign.spec.tsvideocube.spec.tsvideoout-detach-display.spec.tsvideoout-drop-patch.spec.tsvideovarispeed-crop.spec.tsvideovarispeed-output.spec.tsvideovarispeed-perfzip.spec.tsvideovarispeed-switch.spec.tsvoice-chain-art.spec.tsvoice-chain.spec.tsvoice-pitch-accuracy.spec.tsvst-bridge.spec.tsvst-lane-autowire.spec.tswarrensspectrum-stereo.spec.tswarrensvisions.spec.tswavecel-video-outs.spec.tswavecel-viz.spec.tswaveform-trace-shape.spec.tswavesculpt.spec.tsworkflow-audio-io-face.spec.tsworkflow-camera.spec.tsworkflow-channel-columns.spec.tsworkflow-dock-collab.spec.tsworkflow-dock-occupancy.spec.tsworkflow-dock-ux.spec.tsworkflow-dock.spec.tsworkflow-drawer-face.spec.tsworkflow-lane-add-safety.spec.tsworkflow-lane-membership-is-positional.spec.tsworkflow-lane-uniform-binding.spec.tsworkflow-master-transport.spec.tsworkflow-media.spec.tsworkflow-mode.spec.tsworkflow-rear-card.spec.tsworkflow-shell-dual-glyph.spec.tsworkflow-shell-faces.spec.tsworkflow-shell-live-glyphs.spec.tsworkflow-shell-video.spec.tsworkflow-shell.spec.tsworkflow-spawn-reveal.spec.tsworkflow-surfaces.spec.tsworkflow-video-zone-defaults.spec.tsworkflow-viewport-nav.spec.tsxy-pad-cell.spec.ts
Chaos
Single-user randomized intent fuzzer. Drives the canvas through 200+ random patches / mutations; checks invariants between each. Multi-user invariants land post-Stage B.
flox activate -- task chaos:run CI shape
The full gate runs in .github/workflows/ci.yml inside Flox so the toolchain (Node
22, Faust 2.85.5, esbuild) matches local. Postgres 17 is a service container; the DB schema is
applied before task ci runs.