One model, multiple booths
The active large-club deployment decision is one dedicated mixer container plus four CDJ containers, initially two CDJs per DJ. That runtime lives in aidj-club-emulator; the following platform diagram describes the broader actor/adapter contract, whose integration with the new distributed runtime remains pending.
Human / AI / Scripted / Replay actors
|
command envelope
v
booth-engine + dj-domain
validation / ownership / scheduling
|
+---------+----------+
| |
Virtual booth Physical adapter
decks + DSP MIDI / PRO DJ LINK
| |
+------ events ------+
|
state / sessions / metrics
|
booth-api (HTTP + WS)
|
Browser / CLI / Tauri
Actors submit intent. The engine validates capabilities, ownership, values, and scheduling before routing an action. Accepted events update the domain projection. Adapters report observations through the same engine boundary; they never expose vendor packet layouts to actors.
| Component | Responsibility | Boundary |
|---|---|---|
dj-domain | Typed state, commands, events, IDs, capability model | No UI, vendor protocols, networking, or wall clock |
booth-engine | Arbitration, scheduling, event order, state reduction | Does not run network work in the audio callback |
virtual-booth | Deterministic virtual transport and deck behavior | Uses injected clock and renderer |
| Physical adapters | Translate supported actions and observations | Preserve uncertainty, latency, and provenance |
audio-engine | Decode, DSP, monitoring, offline rendering | Bounded real-time work |
sessions / evaluation | Durable logs, replay, comparison | Consume versioned records |
booth-api | Client commands, snapshots, subscriptions | Never the clock authority |
A shared interface means shared semantics for supported capabilities. Physical devices may expose read-only fields, delayed observations, or no remote control for an operation. An accepted command is not evidence that hardware performed it.
See hardware abstraction, event model, and timing.