AURORA — DOCS

Reference

Spec coverage matrix, compatibility engine internals, snapshot rollback semantics, Ember+ transport caveats, and the Phase 4 candidate list. For diagrams see the Diagrams tab. Press \ to cycle themes, 1/2/3 for tabs.

VERSION0.1.0 Aurora Phase 3
UPDATED2026-05-12
TESTS148 / 148
Spec coverage matrix
SpecStatusPhase 2Phase 3Phase 4 candidate
IS-04 DiscoveryStable✓ + asset-grouping read
IS-05 ConnectionStable✓ + snapshot rollback + SDP-aware
IS-08 Channel MappingStable
IS-09 SystemStable✓ readwrite configuration
IS-11 Stream CompatibilityStable v1.0.0✓ readPATCH (configure sender)
IS-12 / MS-05-02Stable v1.0.1Device-control adapter
BCP-002-01 Natural GroupingStable✓ read
BCP-004-01 Receiver CapsStable v1.0.0passthrough✓ full walker (17 URNs)
Ember+ (read)in-process✓ real TCP+s101+BER
Ember+ (write)Console parameter + matrix
Compatibility engine detail

What the 17 URN evaluators check

src/control/compatibility.ts was rewritten on top of a new pure-function module src/control/constraint-sets.ts.

  • OR-of-AND semantics. A receiver is compatible iff ∃ constraint_set such that ∀ URN-constraints inside are satisfied (BCP-004-01 v1.0.0).
  • 17 URN evaluators. Format: media_type, grain_rate, frame_width, frame_height, interlace_mode, colorspace, transfer_characteristic, color_sampling, component_depth, channel_count, sample_rate, sample_depth, event_type. Transport: packet_time, max_packet_time, packet_transmission_mode, st2110_21_sender_type.
  • Meta URNs honoured. meta:enabled=false sets are skipped. meta:preference resolves ties and surfaces in matched_preference.
  • Rationals. grain_rate, sample_rate use {numerator, denominator}; equality via float comparison after reduction.
  • Vendor extensions skipped silently. Phase 3 doesn't fail on urn:x-acme:cap:*; it skips them — vendors retain control over their own constraint URNs.
  • Sender parameter merging precedence: IS-11 constraints_active → SDP fmtp (authoritative for TP=2110TPN/TPNL/TPW, packet_time, PM=2110GPM/BPM) → Flow JSON (authoritative for media_type, frame_*, colorspace, grain_rate, interlace_mode) → NmosSource.channels.length → channel_count for audio.
  • Back-compat. Receivers without constraint_sets fall back to the original v1 format/transport/media_type behavior. All 7 pre-existing compatibility tests still pass.
  • New issue code: constraint_set_no_match (error) with per-set failure detail in the message.
Snapshot rollback semantics

How batch_connect atomic mode unwinds

  1. Before any mutation, the handler captures each receiver's prior subscription.sender_id via getConnectionStatus(). The snapshot is persisted to the audit journal as a record with kind: 'batch_snapshot'.
  2. If snapshot capture fails for any receiver, the batch aborts before mutation. Atomicity is preserved.
  3. On mid-batch failure, the restore loop iterates over 'ok' items in reverse:
    • prior_sender_id === null → disconnect → status rolled_back.
    • prior_sender_id !== null → reconnect to prior sender → status restored.
    • Compatibility error during restore → restore_failed_compat (likely the prior sender was removed mid-batch).
    • Other restore error → restore_failed.
  4. New tool aurora_replay_snapshot(snapshot_id, dry_run?) lets an operator replay a captured snapshot manually — useful after an Aurora crash.
  5. aurora_audit_recent accepts a kind filter to find snapshots.
  6. Dry-run batches return the snapshot in the response but do not journal it.
  7. AuditRecord.kind is optional and defaults to 'route' on read for backward compatibility with pre-Phase-3 journal files on disk.
Ember+ transport caveats

What's read-only, why, and what's in Phase 4

SofieEmberPlusProvider wraps emberplus-connection@0.3.1 (NRK Sofie, MIT-licensed, field-tested against Lawo Ruby/R3lay/MxGUI). It implements the same EmberTreeProvider interface as InProcessEmberTreeProvider, so swapping providers is a single-file change.

  • Transitive git-URL dependency. emberplus-connection pulls asn1 from evs-broadcast/node-asn1 via GitHub URL rather than npm. Mitigations: .npmrc ignore-scripts=true neutralizes install-script risk, pnpm-lock.yaml pins the commit SHA, dep-guard pre-commit hook validates other dependencies as usual. Recommended Phase 4 follow-up: in-house s101/BER stack (~1500–2000 LOC) replacing the package entirely.
  • Vendor SemanticHintRules are best-effort starters. Derived from public docs + the Sofie production codebase, not from live device captures. Production tuning needs at least one bench capture per vendor. Default rulesets ship for Lawo, Calrec, Studer, Grass Valley, and a generic fallback.
  • Writes are feature-flagged off. Phase 3 ships read-only Ember+ support. Matrix writes require protocol-specific verification semantics (Lawo surface arbitration overrides Ember+ writes silently; GV NP0017 has User-ID Lock/Protect/Release that must be acquired before any GV write). These land in Phase 4.
  • Multi-source matrix handling planned, not implemented. When real Ember+ matrices report nToOne or nToN types, the spec'd plan is to synthesise a primary-source NMOS receiver and expose the full source set in an aurora_additional_sources[] extension.
Phase 4 candidate list
  1. Ember+ matrix writes (single-vendor PoC; Lawo mc² fader gain or Calrec H2O alias as first target). Requires: surface-arbitration verification loop for Lawo; User-ID lock acquisition for GV NP0017; multi-source matrix projection.
  2. In-house s101/BER stack replacing emberplus-connection. ~1500–2000 LOC. User preference once Phase 3 is stable.
  3. IS-12 / MS-05-02 device-control adapter. Strategic peer to Ember+; activate when first shipping device exposes it.
  4. IS-10 authorization (OAuth2 + TLS) for hardened deployments.
  5. IS-11 PATCH (/constraints/active) — configure sender to match receiver.
  6. BCP-006-01 JPEG XS (2110-22) when first vendor in scope requires it.
  7. AMWA nmos-testing conformance with an Aurora-controlled mock node as the test target.
  8. Group-based batch_connect with explicit source/destination group mapping.
  9. Multi-source matrix projection in Ember+ adapter (aurora_additional_sources[] extension + audit flag + strict-mode reject).
  10. WebSocket IS-04 subscriptions to replace polling.
  11. IPMX bridge (BCP-005-01 EDID-derived caps + 2110-22 JPEG XS).
  12. Operator UI — out of scope; revisit at user request.
Internal documentation

Sprint plans, completion reports, and design briefs maintained alongside the source tree under docs/nms/. Not currently published; listed here so stakeholders know what exists.

DocTitleType
NMS001NMOS MCP Server OverviewOverview
NMS002Sprint 1 Completion ReportReport
NMS003Sprint 3 Completion ReportReport
NMS004Sprint 4 PlanPlan
NMS005Sprint 4 Completion ReportReport
NMS006Sprint 5 Plan (superseded by Aurora)Plan
NMS007Aurora Phase 1 Completion ReportReport
NMS008Aurora Phase 2 PlanPlan
NMS009Aurora Phase 2 Completion ReportReport
NMS010Aurora Phase 3 PlanPlan
NMS011Aurora Phase 3 Completion ReportReport
NMS012Aurora Product Design BriefBrief