openmixer — generated API reference
    Preparing search index...

    Interface StageboxDevice

    A REAC stagebox grouped as one logical device: its capture ports become the desk's inputs, its playback ports the desk's outputs. Plain serialisable data — it doubles as the wire shape the server broadcasts and the UI renders.

    interface StageboxDevice {
        address?: Record<string, string>;
        boxId?: string;
        contradictions?: readonly HardwareContradiction[];
        firmware?: string;
        id: string;
        inputs?: StageboxEndpointGroup;
        key?: string;
        linkState?: string;
        mac?: string;
        model?: string;
        name: string;
        operatorName?: string;
        outputs?: StageboxEndpointGroup;
        presence?: HardwarePresence;
        protocol: "reac";
        reacVersion?: string;
        segment?: string;
        width?: number;
    }
    Index
    address?: Record<string, string>

    The changeable facts about where this box is, keyed by name (mac, and later ip/ serial/card) — matched on by nothing, display-only. Carried alongside key because the key is opaque: a surface wanting to SHOW the MAC reads it from here, never by parsing the key.

    boxId?: string

    The box's registry identity — the stable boxId the server minted when this box was adopted (virtual-stagebox spec §3). Absent for a box that has never enrolled.

    This is what addresses the box's rows (/stagebox/{boxId}), and what a patch names instead of a socket. It is published on the device precisely so a surface never has to build an address out of a MAC: a MAC survives a segment swap while meaning a different box, which is how an S-0808's input 8 came to feed the channel that belonged to an S-1608 (2026-08-21).

    contradictions?: readonly HardwareContradiction[]

    Where something WRITTEN DOWN about this box disagrees with what the box reports — overlaid by the server (overlayStageboxContradictions) from the reac adapter settings and the persistent registry. Absent (the normal case) means everything agrees, or nothing was written down to disagree.

    It rides the device rather than a channel of its own because the CARD is where it has to be seen, and the card renders this object. A second delivery path for one fact is how a disagreement ends up surfaced everywhere except where the operator is looking — which is the whole failure being fixed: the truth was on the node all evening and nothing compared it to the configuration.

    firmware?: string

    The box's system firmware, D.DDD (StageboxNodeView.reacBoxFirmware) — a RECORDING of what the box last announced, never a claim. Absent exactly when the box has not answered the identity page, or is not on the wire right now.

    id: string

    Stable device id (reac:stagebox, or reac:stagebox:<key> for a discriminated box).

    The box's inputs (its mic preamps → the desk), if a capture node is present.

    key?: string

    The box's recognition key (StageboxKey), built from mac by stageboxKeyed. This is what every registry lookup (name, identity, presence) is keyed on — never the bare MAC, which is a wire address a third transport could coincide with. Absent exactly when mac is: a box that has declared no address has not been recognised, and there is nothing to build a key from.

    linkState?: string

    The box's live link state (reac.link-state): 'probing', 'connected', or 'no-box'. Drives the stagebox card's link badge + the session-manifest presence check (issue #154). Absent when reac-pw does not publish it (older reac-pw, non-REAC).

    mac?: string

    The box's MAC (reac.discovery.devices owned peer) — how it is identified ON THE WIRE. Absent when reac-pw publishes no discovery snapshot, or no single box is owned yet.

    A MAC is an address, not an identity: it changes the moment dead metal is replaced. What a patch and a name hang off is the boxId.

    model?: string

    The box model (reac.box-model, e.g. S-4000S) — recorded in the session manifest.

    name: string

    Human label, e.g. "REAC stagebox (40 in / 40 out)".

    operatorName?: string

    The raw operator name the registry restored onto this box (Build A), set by stageboxWithOperatorName alongside the composed name. Distinct from name (which folds in the in/out counts): this is the bare label the operator typed, so a surface wanting a SHORT band label (the patchbay.devices crosspoint header) shows the operator's name instead of the Roland model. Absent on a box the operator has not named — that surface then falls back to the model / generic label as before.

    The box's outputs (the desk → its analog outs), if a playback node is present.

    presence?: HardwarePresence

    Where this box stands right now — core's one hardware rule (HardwarePresence), overlaid by the console (overlayStageboxPresence) from what the registry has enrolled and what the wire reports.

    Published, not left to each surface to infer. Before this field a disconnected box and a connected one were the same record with a different free-form linkState string, so the patchbay read "the S-0808 is still there" while none of its channels could pass audio (rig, 2026-08-05). A surface that has to derive presence itself derives it three different ways in three components, and the first one that gets it wrong is a desk lying about what is on stage.

    absent is the state with consequences: every control backed by this box is DISABLED showing the last value it held, and every channel patched to it is marked. The FIELD being absent means the producer does not compute presence (an older server, the offline mock) — and unknown disables nothing.

    protocol: "reac"

    Always 'reac' for now.

    reacVersion?: string

    The box's REAC protocol version, D.DDD (StageboxNodeView.reacBoxReacVersion) — a different number from firmware. Same absence rule.

    segment?: string

    The REAC segment this box is heard on right now (reac.segment) — the interface (untagged NIC or VLAN sub-interface) reac-pw currently carries it on (2026-07-03-reac-stagebox-autodetect.md amendment 2026-09-11). Derived on every graph read, same as everything else here; absent exactly when the box itself has nothing to report (an older reac-pw, or the box is gone — a device with no segment is not on any wire right now).

    width?: number

    The box channel width (reac.box-width) — the expected I/O count in the manifest.