| Spec | Status | Phase 2 | Phase 3 | Phase 4 candidate |
|---|---|---|---|---|
| IS-04 Discovery | Stable | ✓ | ✓ + asset-grouping read | — |
| IS-05 Connection | Stable | ✓ | ✓ + snapshot rollback + SDP-aware | — |
| IS-08 Channel Mapping | Stable | ✓ | ✓ | — |
| IS-09 System | Stable | — | ✓ read | write configuration |
| IS-11 Stream Compatibility | Stable v1.0.0 | — | ✓ read | PATCH (configure sender) |
| IS-12 / MS-05-02 | Stable v1.0.1 | — | — | Device-control adapter |
| BCP-002-01 Natural Grouping | Stable | — | ✓ read | — |
| BCP-004-01 Receiver Caps | Stable v1.0.0 | passthrough | ✓ full walker (17 URNs) | — |
| Ember+ (read) | — | in-process | ✓ real TCP+s101+BER | — |
| Ember+ (write) | — | — | — | Console parameter + matrix |
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.
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=falsesets are skipped.meta:preferenceresolves ties and surfaces inmatched_preference. - Rationals.
grain_rate,sample_rateuse {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_setsfall 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.
How batch_connect atomic mode unwinds
- Before any mutation, the handler captures each receiver's prior
subscription.sender_idviagetConnectionStatus(). The snapshot is persisted to the audit journal as a record withkind: 'batch_snapshot'. - If snapshot capture fails for any receiver, the batch aborts before mutation. Atomicity is preserved.
- On mid-batch failure, the restore loop iterates over
'ok'items in reverse:prior_sender_id === null→ disconnect → statusrolled_back.prior_sender_id !== null→ reconnect to prior sender → statusrestored.- Compatibility error during restore →
restore_failed_compat(likely the prior sender was removed mid-batch). - Other restore error →
restore_failed.
- New tool
aurora_replay_snapshot(snapshot_id, dry_run?)lets an operator replay a captured snapshot manually — useful after an Aurora crash. aurora_audit_recentaccepts akindfilter to find snapshots.- Dry-run batches return the snapshot in the response but do not journal it.
AuditRecord.kindis optional and defaults to'route'on read for backward compatibility with pre-Phase-3 journal files on disk.
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-connectionpullsasn1fromevs-broadcast/node-asn1via GitHub URL rather than npm. Mitigations:.npmrc ignore-scripts=trueneutralizes install-script risk,pnpm-lock.yamlpins the commit SHA,dep-guardpre-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
SemanticHintRulesare 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 agenericfallback. - 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
nToOneornToNtypes, the spec'd plan is to synthesise a primary-source NMOS receiver and expose the full source set in anaurora_additional_sources[]extension.
- 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.
- In-house s101/BER stack replacing
emberplus-connection. ~1500–2000 LOC. User preference once Phase 3 is stable. - IS-12 / MS-05-02 device-control adapter. Strategic peer to Ember+; activate when first shipping device exposes it.
- IS-10 authorization (OAuth2 + TLS) for hardened deployments.
- IS-11 PATCH (
/constraints/active) — configure sender to match receiver. - BCP-006-01 JPEG XS (2110-22) when first vendor in scope requires it.
- AMWA nmos-testing conformance with an Aurora-controlled mock node as the test target.
- Group-based
batch_connectwith explicit source/destination group mapping. - Multi-source matrix projection in Ember+ adapter (
aurora_additional_sources[]extension + audit flag + strict-mode reject). - WebSocket IS-04 subscriptions to replace polling.
- IPMX bridge (BCP-005-01 EDID-derived caps + 2110-22 JPEG XS).
- Operator UI — out of scope; revisit at user request.
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.
| Doc | Title | Type |
|---|---|---|
| NMS001 | NMOS MCP Server Overview | Overview |
| NMS002 | Sprint 1 Completion Report | Report |
| NMS003 | Sprint 3 Completion Report | Report |
| NMS004 | Sprint 4 Plan | Plan |
| NMS005 | Sprint 4 Completion Report | Report |
| NMS006 | Sprint 5 Plan (superseded by Aurora) | Plan |
| NMS007 | Aurora Phase 1 Completion Report | Report |
| NMS008 | Aurora Phase 2 Plan | Plan |
| NMS009 | Aurora Phase 2 Completion Report | Report |
| NMS010 | Aurora Phase 3 Plan | Plan |
| NMS011 | Aurora Phase 3 Completion Report | Report |
| NMS012 | Aurora Product Design Brief | Brief |