Architecture decision records

Each ADR records one significant decision: the context that forced a choice, the decision taken, and the consequences that follow. They are append-only — a later ADR may supersede an earlier one, but earlier records are not rewritten.

The decisions are drawn from internal design notes and from the shape of the code under packages/. Where a decision is implemented today the ADR says so; where it is designed but not yet built, it says that too.

# Decision Status
0001 Native REAC, not AES67, for Roland stageboxes Accepted (designed)
0002 PipeWire-native summing; mod-host for inserts only Accepted (both built; the live engine diverged — see the ADR's 2026-07-29 note)
0003 The server is the single source of truth; surfaces are thin clients Accepted (built)
0004 One canonical device-neutral model with per-device adapters Accepted (built)
0005 Declarative desired-graph reconcile for audio routing Accepted (built)
0006 The channel strip is an ordered processor list; the fader is a processor Accepted (built for inserts)
0007 Persist routing and scenes by node/port name, never by numeric id Accepted (designed)
0008 DCA/VCA is control-domain gain coupling, not an audio sub-bus Accepted (built)
0009 C for hot paths, with the PipeWire node as the language boundary Accepted (built; the inventory of what is C has grown — see the ADR's 2026-07-29 note)
0010 An auto-generated, metadata-driven plugin editor Accepted (built)
0011 Faders are a 0..1 position plus dB, with a per-adapter scale Accepted (built)
0012 Menus and config files are two front-ends to one AdapterManager Accepted (built)
0013 Latency telemetry is measured in the audio engine Accepted (built)
0014 Touch, keyboard, mouse and surface are all first-class input Accepted (built for web)
0015 A modular, single-process, multi-window web UI Accepted (built, incl. in-app window management)
0016 GPL-3.0-or-later, with no AGPL code copied in Accepted (built)
0017 A per-destination output trim, not multiple mains, is the output-gain floor Accepted (layers 1–2 built; layer 3 sequenced — see the ADR's 2026-07-29 note)
0018 clock.force-rate is the live re-clock lever; the reported rate is measured from hardware Accepted (built)
0019 Cue/solo is a monitor bus; the monitor auto-takeover is never the mains Accepted (built; live acceptance pending)
0020 Plugin tiers are fixed by measured latency; LV2 ships as tiered subpackages Accepted (built, incl. tiered RPM packaging)
0021 Time-based FX are send/return channels on the existing summing buses; delay + reverb are native Accepted (built — mix_delay.h, mix_reverb.h)