Skip to content

AI Party Ui24R Scene-Arming Design

Date: 2026-06-04 Status: design complete for dry-run MVP; live Ui24R execution blocked pending bench and venue validation Harness: tdmcp-ai-party-mixer-design

Summary

Expand AI-Controlled Party with Soundcraft Ui24R mixer awareness through operator-approved scene arming. The AI may prepare a specific Ui24R show, snapshot, or cue change, but a human operator must approve one exact action before any adapter can dispatch it.

The first implementation should ship contract + dry-run adapter only. Bitfocus Companion is the recommended first live backend after isolated bench validation. A direct Node bridge is a later backend after protocol validation on the target Ui24R firmware.

Source Baseline

MVP Flow

text
voice / ChatGPT / setlist / TD audio analysis
  -> AI Show Director
  -> arm_mixer_scene
  -> MixerScenePolicy + venue scene catalog
  -> approval queue
  -> authenticated operator approval
  -> dry-run adapter first
  -> Companion live backend after bench validation
  -> audit log + dashboard

Non-Goals

  • No autonomous mixer execution.
  • No mixer gain, PA mute, routing, patching, mute groups, phantom power, or channel-strip control.
  • No raw Ui24R, Companion, WebSocket, HTTP, or arbitrary adapter command path.
  • No claim that approval means hardware changed.
  • No inferred rollback of mixer state.

Contract

Add a new ShowIntent variant, separate from arm_effect:

ts
type MixerSceneIntent = {
  type: "arm_mixer_scene";
  adapter_target: {
    kind: "soundcraft_ui24r";
    mixer_id: string;
  };
  target:
    | { kind: "show"; show_name?: string; scene_id?: string; setlist_ref?: string }
    | {
        kind: "snapshot";
        show_name?: string;
        snapshot_name?: string;
        scene_id?: string;
        setlist_ref?: string;
      }
    | { kind: "cue"; show_name?: string; cue_name?: string; scene_id?: string; setlist_ref?: string };
  request?: {
    source?: "voice" | "chatgpt" | "setlist" | "td_audio_analysis" | "operator" | "scheduler";
    raw_text?: string;
    reason?: string;
    requested_for?: string;
  };
};

Policy result:

  • valid catalog-backed mixer scene requests return require_approval;
  • the MVP never returns allow for mixer scenes;
  • missing config, unknown target, unresolved setlist_ref, unsupported target, changed catalog hash, or unsafe scene diff returns block;
  • mixer_gain, pa_mute, and audio_routing remain blocked arm_effect operations.

Approval model:

  • add a generic ShowApprovalTarget;
  • preserve old effect approvals for backwards compatibility;
  • support target.kind = "mixer_scene" with exact adapter and scene target;
  • keep CLI verbs as tdmcp-agent show-director approve <id> and tdmcp-agent show-director cancel <id>.

Approved dry-run plan:

json
{
  "kind": "mixer_scene",
  "action": "arm",
  "adapter_target": { "kind": "soundcraft_ui24r", "mixer_id": "foh-ui24r" },
  "mixer_scene": {
    "kind": "snapshot",
    "show_name": "AI Party Demo",
    "snapshot_name": "Band A Intro"
  },
  "approval_id": "approval_0001",
  "operator": "front-of-house",
  "dry_run_only": true
}

Scene Catalog And Safety Manifest

Every AI-armable mixer scene must be in a trusted venue catalog. The LLM may not invent or live-match scene names.

Minimum catalog fields:

  • stable scene ID;
  • operator display label;
  • adapter target and operation: recall_show, recall_snapshot, or recall_cue;
  • Ui24R show/snapshot/cue reference;
  • policy hash or catalog version;
  • exported checksum/hash or equivalent evidence;
  • allowed setlist sections;
  • last rehearsal/bench validation time;
  • rollback/manual recovery target;
  • safety notes;
  • forbidden-delta result.

Hard gate: if the system cannot prove that a scene excludes gain, PA mute, routing, patch, channel-strip, mute-group, phantom-power, or other forbidden changes, that scene is not AI-armable in the MVP. It may still be manually recalled by the audio operator outside the AI path.

Adapter Strategy

Dry-Run

The dry-run adapter is the first shipped backend. It consumes only approved mixer-scene plans, validates the catalog, and returns hardware_changed: false.

It should simulate missing targets, stale approvals, policy hash mismatch, backend health failures, timeouts, readback mismatch, and duplicate idempotency keys.

Companion

Companion is the first live backend after bench validation. tdmcp maps an approved scene ID to a preconfigured Companion button; Companion owns the Soundcraft Ui connection.

Live states must stay precise:

  • HTTP button press accepted -> sent or acknowledged;
  • Soundcraft readback or operator confirmation -> confirmed;
  • timeout after send -> unknown;
  • no readback -> never claim confirmed.

Direct Node

Direct Node bridge is later. It should use a typed allowlist around the Soundcraft Ui protocol and must not expose raw commands. It requires bench proof against the target Ui24R firmware before any live backend is enabled.

Policy Invariants

  • Caller-provided policy can make rules stricter, never softer.
  • Hard denies override all user/LLM policy input.
  • preapproved, operator, approval_id, state, and target metadata from LLM/voice/ChatGPT are untrusted for live authority.
  • Approval must be explicit, fresh, one-shot, operator-authenticated, and tied to the exact scene hash/version shown to the operator.
  • Approval re-runs policy immediately before adapter dispatch.
  • One idempotency key may produce at most one live send.
  • Unknown adapter state stops further AI mixer actions until operator review.
  • Panic/fallback bypasses the LLM and approval queue.

Dashboard And Runbook

The operator surface must show current/next cue context, mixer adapter backend and health, pending approvals, exact scene label, adapter target, policy reason, safety summary, approval state, audit log, and panic/fallback state.

Runbook language should use "arms", "prepares", "queues", and "requires approval" for AI behavior. Use "executes" only for operator-approved adapter actions. Use "confirmed" only with readback or explicit operator confirmation.

Implementation Slices

Slice 1: Contract + Dry-Run

  • Add arm_mixer_scene schema.
  • Add MixerScenePolicy/catalog validation.
  • Add generic approval target while preserving effect approvals.
  • Add mixer_scene dry-run action plan.
  • Add dry-run adapter interface/stub.
  • Add CLI schema/help examples.
  • Add unit tests and CLI tests.

Slice 2: Docs + Runbook

  • Update EN/PT AI-Controlled Party docs.
  • Add dry-run CLI example once implemented.
  • Add rehearsal/show-day checklist.
  • Keep live Soundcraft execution marked not live-validated.

Slice 3: Companion Bench Spike

  • Add Companion backend behind live-enable flag.
  • Map one bench-validated scene to one button.
  • Health-check Companion and Soundcraft connection.
  • Record sent, acknowledged, confirmed, failed, unknown.
  • Do not proceed without isolated Ui24R bench validation.

Slice 4: Direct Node Research

  • Prove exact Ui24R show/snapshot/cue APIs against target firmware.
  • Build fixture tests before live code.
  • Keep raw commands and non-MVP mixer operations unavailable.

Verification Gates

Run for Slice 1:

bash
npm run typecheck
npm run build
npm run lint
npm test -- tests/unit/showDirector.test.ts tests/unit/cliAgent.test.ts

Add tests for valid show/snapshot/cue mixer targets, blocked unknown adapter/mixer IDs, unresolved setlist_ref, approval revalidation, dry-run-only plans, hard-deny custom-policy bypass attempts, and the CLI guarantee that no TD/Soundcraft/Companion/Node client is built during dry-run.

Live gates:

  1. Contract gate.
  2. Dry-run CI gate.
  3. Companion bench gate.
  4. Direct Node bench gate.
  5. Venue rehearsal gate.
  6. Show-day gate.
  7. Post-show audit gate.

Handoff Prompt

text
Use the tdmcp-pipeline harness to implement Slice 1 of
docs/superpowers/specs/2026-06-04-ai-party-ui24r-scene-arming-design.md.

Scope:
- Add an operator-approved Soundcraft Ui24R mixer scene-arming contract to the
  existing dry-run AI Show Director.
- Add `arm_mixer_scene` as a new ShowIntent variant.
- Add a MixerScenePolicy/catalog validator for predeclared Soundcraft Ui24R
  show/snapshot/cue targets.
- Add generic approval targets while preserving existing effect approvals.
- Emit a dry-run-only `mixer_scene` action plan after authenticated approval.
- Add a dry-run adapter interface/stub that never contacts hardware.
- Keep `mixer_gain`, `pa_mute`, `audio_routing`, routing, patching,
  channel-strip edits, phantom power and raw adapter commands blocked.
- Include unit and CLI tests proving custom policy cannot soften hard denies and
  no TD/Soundcraft/Companion/Node client is built during dry-run.

Do not implement live Companion or direct Ui24R execution in this slice. Add only
typed stubs or not-configured results for future live backends.

Open Decisions

  • Panic handling for pending mixer approvals: recommended default is mark them stale/cancelled after panic, requiring a new arm cycle.
  • Public term: use "show/snapshot/cue" in technical docs and "mixer scene arming" as the umbrella term.
  • Live backend priority: dry-run first, Companion bench second, direct Node later.
  • Confirmation wording: use confirmed only with readback or explicit operator confirmation.