asyncapi: 3.0.0
info:
  title: Freedome media server — WebSocket
  version: 1.0.0
  description: >
    `GET /api/v1/ws` with `Sec-WebSocket-Protocol: freedome.v1`. Text frames
    only (JSON envelope, 02e §7.1); messages

    larger than `welcome.maxMessageBytes` (default 1 MB) are rejected (close
    4413). Auth: `hello.token`, the

    `Authorization` header, or `?access_token=` for browsers. Heartbeat: `ping`
    / `pong` every `heartbeatSec` (20 s);

    two missed → close 4408. Server `bye` precedes close codes 4401
    unauthenticated, 4403 forbidden, 4409 superseded,

    1012 restart. Resume: `hello.resume.sinceSeq` or `subscribe.sinceSeq`; a gap
    older than the ring buffer → `resync`.

    `call.op` is an OpenAPI operationId (openapi/mediaserver.yaml); the envelope
    id is the idempotency key.

    Versions before 1.0.0 are previews / release candidates. Support:
    support@freedome.nativemind.net.
  license:
    name: NativeMindNONC
    url: https://freedome.nativemind.us/license
defaultContentType: application/json
servers:
  mediaserver:
    host: '{host}:{port}'
    protocol: ws
    pathname: /api/v1/ws
    description: Media server of a dome installation (wss when TLS is enabled).
    variables:
      host:
        default: freedome.local
      port:
        default: '8080'
    security:
      - type: http
        scheme: bearer
        bearerFormat: JWT or fdk_ API key
        description: >-
          Access JWT (POST /auth/session) or API key `fdk_…`; scopes as in
          openapi/mediaserver.yaml.
channels:
  ws:
    address: /api/v1/ws
    title: freedome.v1
    description: >-
      One bidirectional socket per client; topics are multiplexed in the
      envelope (`topic`).
    servers:
      - $ref: '#/servers/mediaserver'
    messages:
      hello:
        name: hello
        title: hello (C→S)
        payload:
          description: C→S first message.
          type: object
          allOf:
            - $schema: https://json-schema.org/draft/2020-12/schema
              $id: >-
                https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
              $comment: >-
                NativeMindNONC — freedome_contract (see LICENSE). Message
                envelope for plain WS (sub-protocol freedome.v1), socket.io
                `event` payload, GraphQL Event and OSC JSON events, 02e §7.1 /
                §8.1. `type`, `id`, `ts`, `data` on every message; `topic` on
                events; `replyTo` on result / error replies. Message types are
                open (readers ignore unknown ones).
              title: Message envelope
              type: object
              required:
                - type
                - id
                - ts
                - data
              properties:
                type:
                  description: >-
                    Known: hello, welcome, subscribe, unsubscribe, call, result,
                    event, error, resync, ping, pong, bye.
                  type: string
                  pattern: ^[a-z][a-zA-Z0-9]*$
                id:
                  description: Unique per message; the idempotency key of `call`.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts:
                  description: >-
                    RFC 3339 UTC with milliseconds, e.g.
                    2026-10-19T12:00:00.000Z.
                  type: string
                  format: date-time
                  pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                topic:
                  description: >-
                    Concrete event topic (02e §7.2), e.g.
                    venues/default/players/main.
                  type: string
                  maxLength: 512
                  pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
                replyTo:
                  description: >-
                    Server-owned resource id: UUIDv7, lowercase, sortable by
                    creation time.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                data: {}
              allOf:
                - if:
                    properties:
                      type:
                        const: event
                    required:
                      - type
                  then:
                    required:
                      - topic
                    properties:
                      data:
                        type: object
                        required:
                          - seq
                          - kind
                        properties:
                          seq:
                            type: integer
                            minimum: 0
                            description: >-
                              Per-server monotonically increasing sequence
                              (resume with sinceSeq).
                          kind:
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                            description: >-
                              Event kind from events/topics.yaml, e.g.
                              player.state.
                          resource:
                            description: Full new representation.
                          patch:
                            type: object
                            description: JSON merge patch (high-rate kinds).
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                        not:
                          required:
                            - resource
                            - patch
                        additionalProperties: true
                - if:
                    properties:
                      type:
                        const: result
                    required:
                      - type
                  then:
                    required:
                      - replyTo
                - if:
                    properties:
                      type:
                        const: error
                    required:
                      - type
                  then:
                    properties:
                      data:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE). RFC
                          9457 problem details with the Freedome `code`
                          catalogue, 02e §3.3. Also the `data` of WS `error`,
                          the socket.io ack error and GraphQL
                          errors[].extensions.problem. The catalogue is open:
                          unknown codes are allowed; known codes are bound to
                          their HTTP status.
                        title: Problem details
                        type: object
                        required:
                          - type
                          - title
                          - code
                        properties:
                          type:
                            type: string
                            format: uri
                            description: >-
                              https://freedome.nativemind.us/problems/<code> for
                              catalogue codes.
                          title:
                            type: string
                            minLength: 1
                          status:
                            type: integer
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                          instance:
                            type: string
                            format: uri-reference
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          traceId:
                            type: string
                            pattern: ^[0-9a-f]{16,32}$
                          errors:
                            type: array
                            items:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        allOf:
                          - if:
                              properties:
                                code:
                                  const: validation-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: not-found
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 404
                          - if:
                              properties:
                                code:
                                  const: conflict
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: precondition-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 412
                          - if:
                              properties:
                                code:
                                  const: precondition-required
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 428
                          - if:
                              properties:
                                code:
                                  const: unauthenticated
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: forbidden
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: rate-limited
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 429
                          - if:
                              properties:
                                code:
                                  const: payload-too-large
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 413
                          - if:
                              properties:
                                code:
                                  const: unsupported-format
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 415
                          - if:
                              properties:
                                code:
                                  const: engine-unavailable
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: engine-incompatible
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: degraded
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: upload-checksum-mismatch
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: legacy-unsupported
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 501
                          - if:
                              properties:
                                code:
                                  const: internal
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 500
                          - if:
                              properties:
                                code:
                                  const: clock-unlocked
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: not-configured
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: authorization-pending
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: slow-down
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: access-denied
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: expired-token
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: token-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: idempotency-key-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: idempotency-in-progress
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                        additionalProperties: true
                        examples:
                          - type: >-
                              https://freedome.nativemind.us/problems/engine-unavailable
                            title: Visual engine unavailable
                            status: 503
                            detail: >-
                              freedome-engined not reachable at
                              unix:/run/freedome/engine.sock
                            instance: /api/v1/venues/default/players/main/play
                            code: engine-unavailable
                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                        $defs:
                          knownCode:
                            enum:
                              - validation-failed
                              - not-found
                              - conflict
                              - precondition-failed
                              - precondition-required
                              - unauthenticated
                              - forbidden
                              - rate-limited
                              - payload-too-large
                              - unsupported-format
                              - engine-unavailable
                              - engine-incompatible
                              - degraded
                              - job-failed
                              - upload-checksum-mismatch
                              - legacy-unsupported
                              - internal
                              - clock-unlocked
                              - not-configured
                              - authorization-pending
                              - slow-down
                              - access-denied
                              - expired-token
                              - token-reused
                              - idempotency-key-reused
                              - idempotency-in-progress
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          fieldError:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                - if:
                    properties:
                      type:
                        const: call
                    required:
                      - type
                  then:
                    properties:
                      data:
                        type: object
                        required:
                          - op
                        properties:
                          op:
                            description: >-
                              OpenAPI operationId (camelCase); also the `op` of
                              WS / socket.io `call`.
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*$
                          params:
                            type: object
                          body: {}
                          ifMatch:
                            type: string
                        additionalProperties: true
              additionalProperties: true
              examples:
                - type: event
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                  ts: '2026-10-19T12:00:00.123Z'
                  topic: venues/default/players/main
                  data:
                    seq: 48213
                    kind: player.state
                    resource:
                      status: playing
                      position: 12.5
              $defs:
                knownType:
                  enum:
                    - hello
                    - welcome
                    - subscribe
                    - unsubscribe
                    - call
                    - result
                    - event
                    - error
                    - resync
                    - ping
                    - pong
                    - bye
                eventData:
                  type: object
                  required:
                    - seq
                    - kind
                  properties:
                    seq:
                      type: integer
                      minimum: 0
                      description: >-
                        Per-server monotonically increasing sequence (resume
                        with sinceSeq).
                    kind:
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                      description: Event kind from events/topics.yaml, e.g. player.state.
                    resource:
                      description: Full new representation.
                    patch:
                      type: object
                      description: JSON merge patch (high-rate kinds).
                    revision:
                      description: >-
                        Monotonic resource revision; the strong ETag is derived
                        from it.
                      type: integer
                      minimum: 0
                  not:
                    required:
                      - resource
                      - patch
                  additionalProperties: true
                callData:
                  type: object
                  required:
                    - op
                  properties:
                    op:
                      description: >-
                        OpenAPI operationId (camelCase); also the `op` of WS /
                        socket.io `call`.
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*$
                    params:
                      type: object
                    body: {}
                    ifMatch:
                      type: string
                  additionalProperties: true
          required:
            - type
            - id
            - ts
            - data
          properties:
            type:
              const: hello
            data:
              type: object
              required:
                - app
              properties:
                token:
                  type: string
                  description: >-
                    access JWT or fdk_ key (or Authorization header /
                    ?access_token= for browsers)
                app:
                  type: string
                  minLength: 1
                appVersion:
                  type: string
                sdk:
                  type: string
                  examples:
                    - freedome_client/1.0.0
                resume:
                  type: object
                  required:
                    - sinceSeq
                  properties:
                    sinceSeq:
                      type: integer
                      minimum: 0
                  patternProperties:
                    ^x-: true
                  additionalProperties: false
              patternProperties:
                ^x-: true
              additionalProperties: false
        examples:
          - name: manager
            payload:
              type: hello
              id: 0192f3a4-5b6c-7d8e-9f01-23456789abd3
              ts: '2026-10-19T12:00:00.000Z'
              data:
                app: freedome_manager
                appVersion: 4.0.0
                sdk: freedome_client/0.1.0
      welcome:
        name: welcome
        title: welcome (S→C)
        payload:
          description: S→C answer to hello.
          type: object
          allOf:
            - $schema: https://json-schema.org/draft/2020-12/schema
              $id: >-
                https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
              $comment: >-
                NativeMindNONC — freedome_contract (see LICENSE). Message
                envelope for plain WS (sub-protocol freedome.v1), socket.io
                `event` payload, GraphQL Event and OSC JSON events, 02e §7.1 /
                §8.1. `type`, `id`, `ts`, `data` on every message; `topic` on
                events; `replyTo` on result / error replies. Message types are
                open (readers ignore unknown ones).
              title: Message envelope
              type: object
              required:
                - type
                - id
                - ts
                - data
              properties:
                type:
                  description: >-
                    Known: hello, welcome, subscribe, unsubscribe, call, result,
                    event, error, resync, ping, pong, bye.
                  type: string
                  pattern: ^[a-z][a-zA-Z0-9]*$
                id:
                  description: Unique per message; the idempotency key of `call`.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts:
                  description: >-
                    RFC 3339 UTC with milliseconds, e.g.
                    2026-10-19T12:00:00.000Z.
                  type: string
                  format: date-time
                  pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                topic:
                  description: >-
                    Concrete event topic (02e §7.2), e.g.
                    venues/default/players/main.
                  type: string
                  maxLength: 512
                  pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
                replyTo:
                  description: >-
                    Server-owned resource id: UUIDv7, lowercase, sortable by
                    creation time.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                data: {}
              allOf:
                - if:
                    properties:
                      type:
                        const: event
                    required:
                      - type
                  then:
                    required:
                      - topic
                    properties:
                      data:
                        type: object
                        required:
                          - seq
                          - kind
                        properties:
                          seq:
                            type: integer
                            minimum: 0
                            description: >-
                              Per-server monotonically increasing sequence
                              (resume with sinceSeq).
                          kind:
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                            description: >-
                              Event kind from events/topics.yaml, e.g.
                              player.state.
                          resource:
                            description: Full new representation.
                          patch:
                            type: object
                            description: JSON merge patch (high-rate kinds).
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                        not:
                          required:
                            - resource
                            - patch
                        additionalProperties: true
                - if:
                    properties:
                      type:
                        const: result
                    required:
                      - type
                  then:
                    required:
                      - replyTo
                - if:
                    properties:
                      type:
                        const: error
                    required:
                      - type
                  then:
                    properties:
                      data:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE). RFC
                          9457 problem details with the Freedome `code`
                          catalogue, 02e §3.3. Also the `data` of WS `error`,
                          the socket.io ack error and GraphQL
                          errors[].extensions.problem. The catalogue is open:
                          unknown codes are allowed; known codes are bound to
                          their HTTP status.
                        title: Problem details
                        type: object
                        required:
                          - type
                          - title
                          - code
                        properties:
                          type:
                            type: string
                            format: uri
                            description: >-
                              https://freedome.nativemind.us/problems/<code> for
                              catalogue codes.
                          title:
                            type: string
                            minLength: 1
                          status:
                            type: integer
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                          instance:
                            type: string
                            format: uri-reference
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          traceId:
                            type: string
                            pattern: ^[0-9a-f]{16,32}$
                          errors:
                            type: array
                            items:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        allOf:
                          - if:
                              properties:
                                code:
                                  const: validation-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: not-found
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 404
                          - if:
                              properties:
                                code:
                                  const: conflict
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: precondition-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 412
                          - if:
                              properties:
                                code:
                                  const: precondition-required
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 428
                          - if:
                              properties:
                                code:
                                  const: unauthenticated
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: forbidden
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: rate-limited
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 429
                          - if:
                              properties:
                                code:
                                  const: payload-too-large
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 413
                          - if:
                              properties:
                                code:
                                  const: unsupported-format
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 415
                          - if:
                              properties:
                                code:
                                  const: engine-unavailable
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: engine-incompatible
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: degraded
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: upload-checksum-mismatch
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: legacy-unsupported
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 501
                          - if:
                              properties:
                                code:
                                  const: internal
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 500
                          - if:
                              properties:
                                code:
                                  const: clock-unlocked
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: not-configured
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: authorization-pending
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: slow-down
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: access-denied
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: expired-token
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: token-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: idempotency-key-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: idempotency-in-progress
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                        additionalProperties: true
                        examples:
                          - type: >-
                              https://freedome.nativemind.us/problems/engine-unavailable
                            title: Visual engine unavailable
                            status: 503
                            detail: >-
                              freedome-engined not reachable at
                              unix:/run/freedome/engine.sock
                            instance: /api/v1/venues/default/players/main/play
                            code: engine-unavailable
                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                        $defs:
                          knownCode:
                            enum:
                              - validation-failed
                              - not-found
                              - conflict
                              - precondition-failed
                              - precondition-required
                              - unauthenticated
                              - forbidden
                              - rate-limited
                              - payload-too-large
                              - unsupported-format
                              - engine-unavailable
                              - engine-incompatible
                              - degraded
                              - job-failed
                              - upload-checksum-mismatch
                              - legacy-unsupported
                              - internal
                              - clock-unlocked
                              - not-configured
                              - authorization-pending
                              - slow-down
                              - access-denied
                              - expired-token
                              - token-reused
                              - idempotency-key-reused
                              - idempotency-in-progress
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          fieldError:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                - if:
                    properties:
                      type:
                        const: call
                    required:
                      - type
                  then:
                    properties:
                      data:
                        type: object
                        required:
                          - op
                        properties:
                          op:
                            description: >-
                              OpenAPI operationId (camelCase); also the `op` of
                              WS / socket.io `call`.
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*$
                          params:
                            type: object
                          body: {}
                          ifMatch:
                            type: string
                        additionalProperties: true
              additionalProperties: true
              examples:
                - type: event
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                  ts: '2026-10-19T12:00:00.123Z'
                  topic: venues/default/players/main
                  data:
                    seq: 48213
                    kind: player.state
                    resource:
                      status: playing
                      position: 12.5
              $defs:
                knownType:
                  enum:
                    - hello
                    - welcome
                    - subscribe
                    - unsubscribe
                    - call
                    - result
                    - event
                    - error
                    - resync
                    - ping
                    - pong
                    - bye
                eventData:
                  type: object
                  required:
                    - seq
                    - kind
                  properties:
                    seq:
                      type: integer
                      minimum: 0
                      description: >-
                        Per-server monotonically increasing sequence (resume
                        with sinceSeq).
                    kind:
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                      description: Event kind from events/topics.yaml, e.g. player.state.
                    resource:
                      description: Full new representation.
                    patch:
                      type: object
                      description: JSON merge patch (high-rate kinds).
                    revision:
                      description: >-
                        Monotonic resource revision; the strong ETag is derived
                        from it.
                      type: integer
                      minimum: 0
                  not:
                    required:
                      - resource
                      - patch
                  additionalProperties: true
                callData:
                  type: object
                  required:
                    - op
                  properties:
                    op:
                      description: >-
                        OpenAPI operationId (camelCase); also the `op` of WS /
                        socket.io `call`.
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*$
                    params:
                      type: object
                    body: {}
                    ifMatch:
                      type: string
                  additionalProperties: true
          required:
            - type
            - id
            - ts
            - data
            - replyTo
          properties:
            type:
              const: welcome
            data:
              type: object
              required:
                - sessionId
                - server
                - scopes
                - heartbeatSec
              properties:
                sessionId:
                  description: >-
                    Server-owned resource id: UUIDv7, lowercase, sortable by
                    creation time.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                server:
                  $schema: https://json-schema.org/draft/2020-12/schema
                  $id: >-
                    https://freedome.nativemind.us/schemas/api/1.0/info.schema.json
                  $comment: >-
                    NativeMindNONC — freedome_contract (see LICENSE). GET
                    /api/v1/info (02e §5.1) and the unversioned /health, /ready
                    bodies ($defs/health).
                  title: Server info
                  type: object
                  required:
                    - product
                    - serverVersion
                    - instanceId
                    - apiVersions
                  properties:
                    product:
                      anyOf:
                        - enum:
                            - freedome-mediaserver
                            - freedome-cloud
                        - type: string
                          minLength: 1
                    serverVersion:
                      description: Semantic version 2.0.0.
                      type: string
                      pattern: >-
                        ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$
                    contractVersion:
                      description: Semantic version 2.0.0.
                      type: string
                      pattern: >-
                        ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$
                    instanceId:
                      description: >-
                        Server-owned resource id: UUIDv7, lowercase, sortable by
                        creation time.
                      type: string
                      pattern: >-
                        ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                      examples:
                        - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                    name:
                      type: string
                    apiVersions:
                      type: array
                      minItems: 1
                      items:
                        type: string
                        pattern: ^v\d+$
                    legacyProfile:
                      type: boolean
                      description: >-
                        legacy (flutter_freedome 3.0 / razvivalka) listener
                        enabled
                    transports:
                      type: object
                      properties:
                        rest:
                          type: object
                          properties:
                            basePath:
                              type: string
                          additionalProperties: true
                        graphql:
                          type: object
                          properties:
                            enabled:
                              type: boolean
                            path:
                              type: string
                          additionalProperties: true
                        ws:
                          type: object
                          properties:
                            path:
                              type: string
                            subprotocol:
                              type: string
                          additionalProperties: true
                        socketio:
                          type: object
                          properties:
                            path:
                              type: string
                            namespace:
                              type: string
                          additionalProperties: true
                        osc:
                          type: object
                          properties:
                            udpIn:
                              type: integer
                              minimum: 1
                              maximum: 65535
                            udpOut:
                              type: integer
                              minimum: 1
                              maximum: 65535
                            tcp:
                              type: integer
                              minimum: 1
                              maximum: 65535
                          additionalProperties: true
                      additionalProperties: true
                    auth:
                      type: object
                      properties:
                        methods:
                          type: array
                          items:
                            anyOf:
                              - enum:
                                  - password
                                  - apiKey
                                  - pairing
                                  - cloud
                                  - anonymous
                              - type: string
                      additionalProperties: true
                    venues:
                      type: array
                      items:
                        type: object
                        required:
                          - id
                        properties:
                          id:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          title:
                            $schema: https://json-schema.org/draft/2020-12/schema
                            $id: >-
                              https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                            $comment: >-
                              NativeMindNONC — freedome_contract (see LICENSE).
                              Localised text map {"en":…,"ru":…}, 02e §3.1 (as
                              .dome meta.title).
                            title: Localised text
                            type: object
                            minProperties: 1
                            propertyNames:
                              pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                            additionalProperties:
                              type: string
                            examples:
                              - en: Intro
                                ru: Вступление
                            $defs:
                              textOrI18n:
                                description: >-
                                  Plain string (treated as `en`) or a localised
                                  map. (map branch = the root schema, inlined
                                  for tools that mis-handle self references)
                                anyOf:
                                  - type: string
                                  - type: object
                                    minProperties: 1
                                    propertyNames:
                                      pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                    additionalProperties:
                                      type: string
                                    examples:
                                      - en: Intro
                                        ru: Вступление
                          default:
                            type: boolean
                          status:
                            type: string
                        additionalProperties: true
                    capabilities:
                      description: >-
                        Engines, audio modes, display types, test patterns,
                        gateways … (open object; clients ignore unknown keys).
                      type: object
                      additionalProperties: true
                    links:
                      type: object
                      additionalProperties:
                        type: string
                        format: uri-reference
                  additionalProperties: true
                  $defs:
                    health:
                      description: GET /health and /ready (unversioned, anonymous).
                      type: object
                      required:
                        - status
                      properties:
                        status:
                          enum:
                            - ok
                            - degraded
                            - down
                        checks:
                          type: object
                          additionalProperties:
                            type: object
                            required:
                              - status
                            properties:
                              status:
                                enum:
                                  - ok
                                  - degraded
                                  - down
                              detail:
                                type: string
                            additionalProperties: false
                      additionalProperties: false
                scopes:
                  type: array
                  items:
                    description: Authorisation scope (02e §3.6), `<area>:<action>`.
                    type: string
                    pattern: ^[a-z]+:[a-z]+$
                    examples:
                      - info:read
                      - playback:control
                      - system:admin
                heartbeatSec:
                  type: integer
                  minimum: 1
                  default: 20
                maxMessageBytes:
                  type: integer
                  minimum: 1024
                  default: 1048576
              patternProperties:
                ^x-: true
              additionalProperties: false
        examples:
          - name: operator
            payload:
              type: welcome
              id: 0192f3a4-5b6c-7d8e-9f01-23456789abd4
              ts: '2026-10-19T12:00:00.010Z'
              replyTo: 0192f3a4-5b6c-7d8e-9f01-23456789abd3
              data:
                sessionId: 0192f3a4-5b6c-7d8e-9f01-23456789abd9
                server:
                  product: freedome-mediaserver
                  serverVersion: 0.1.0
                  instanceId: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                  apiVersions:
                    - v1
                scopes:
                  - info:read
                  - events:subscribe
                  - playback:read
                  - playback:control
                  - displays:control
                heartbeatSec: 20
                maxMessageBytes: 1048576
      subscribe:
        name: subscribe
        title: subscribe (C→S)
        payload:
          description: C→S; answered by result (subscribeResult).
          type: object
          allOf:
            - $schema: https://json-schema.org/draft/2020-12/schema
              $id: >-
                https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
              $comment: >-
                NativeMindNONC — freedome_contract (see LICENSE). Message
                envelope for plain WS (sub-protocol freedome.v1), socket.io
                `event` payload, GraphQL Event and OSC JSON events, 02e §7.1 /
                §8.1. `type`, `id`, `ts`, `data` on every message; `topic` on
                events; `replyTo` on result / error replies. Message types are
                open (readers ignore unknown ones).
              title: Message envelope
              type: object
              required:
                - type
                - id
                - ts
                - data
              properties:
                type:
                  description: >-
                    Known: hello, welcome, subscribe, unsubscribe, call, result,
                    event, error, resync, ping, pong, bye.
                  type: string
                  pattern: ^[a-z][a-zA-Z0-9]*$
                id:
                  description: Unique per message; the idempotency key of `call`.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts:
                  description: >-
                    RFC 3339 UTC with milliseconds, e.g.
                    2026-10-19T12:00:00.000Z.
                  type: string
                  format: date-time
                  pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                topic:
                  description: >-
                    Concrete event topic (02e §7.2), e.g.
                    venues/default/players/main.
                  type: string
                  maxLength: 512
                  pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
                replyTo:
                  description: >-
                    Server-owned resource id: UUIDv7, lowercase, sortable by
                    creation time.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                data: {}
              allOf:
                - if:
                    properties:
                      type:
                        const: event
                    required:
                      - type
                  then:
                    required:
                      - topic
                    properties:
                      data:
                        type: object
                        required:
                          - seq
                          - kind
                        properties:
                          seq:
                            type: integer
                            minimum: 0
                            description: >-
                              Per-server monotonically increasing sequence
                              (resume with sinceSeq).
                          kind:
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                            description: >-
                              Event kind from events/topics.yaml, e.g.
                              player.state.
                          resource:
                            description: Full new representation.
                          patch:
                            type: object
                            description: JSON merge patch (high-rate kinds).
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                        not:
                          required:
                            - resource
                            - patch
                        additionalProperties: true
                - if:
                    properties:
                      type:
                        const: result
                    required:
                      - type
                  then:
                    required:
                      - replyTo
                - if:
                    properties:
                      type:
                        const: error
                    required:
                      - type
                  then:
                    properties:
                      data:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE). RFC
                          9457 problem details with the Freedome `code`
                          catalogue, 02e §3.3. Also the `data` of WS `error`,
                          the socket.io ack error and GraphQL
                          errors[].extensions.problem. The catalogue is open:
                          unknown codes are allowed; known codes are bound to
                          their HTTP status.
                        title: Problem details
                        type: object
                        required:
                          - type
                          - title
                          - code
                        properties:
                          type:
                            type: string
                            format: uri
                            description: >-
                              https://freedome.nativemind.us/problems/<code> for
                              catalogue codes.
                          title:
                            type: string
                            minLength: 1
                          status:
                            type: integer
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                          instance:
                            type: string
                            format: uri-reference
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          traceId:
                            type: string
                            pattern: ^[0-9a-f]{16,32}$
                          errors:
                            type: array
                            items:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        allOf:
                          - if:
                              properties:
                                code:
                                  const: validation-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: not-found
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 404
                          - if:
                              properties:
                                code:
                                  const: conflict
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: precondition-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 412
                          - if:
                              properties:
                                code:
                                  const: precondition-required
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 428
                          - if:
                              properties:
                                code:
                                  const: unauthenticated
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: forbidden
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: rate-limited
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 429
                          - if:
                              properties:
                                code:
                                  const: payload-too-large
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 413
                          - if:
                              properties:
                                code:
                                  const: unsupported-format
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 415
                          - if:
                              properties:
                                code:
                                  const: engine-unavailable
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: engine-incompatible
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: degraded
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: upload-checksum-mismatch
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: legacy-unsupported
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 501
                          - if:
                              properties:
                                code:
                                  const: internal
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 500
                          - if:
                              properties:
                                code:
                                  const: clock-unlocked
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: not-configured
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: authorization-pending
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: slow-down
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: access-denied
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: expired-token
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: token-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: idempotency-key-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: idempotency-in-progress
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                        additionalProperties: true
                        examples:
                          - type: >-
                              https://freedome.nativemind.us/problems/engine-unavailable
                            title: Visual engine unavailable
                            status: 503
                            detail: >-
                              freedome-engined not reachable at
                              unix:/run/freedome/engine.sock
                            instance: /api/v1/venues/default/players/main/play
                            code: engine-unavailable
                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                        $defs:
                          knownCode:
                            enum:
                              - validation-failed
                              - not-found
                              - conflict
                              - precondition-failed
                              - precondition-required
                              - unauthenticated
                              - forbidden
                              - rate-limited
                              - payload-too-large
                              - unsupported-format
                              - engine-unavailable
                              - engine-incompatible
                              - degraded
                              - job-failed
                              - upload-checksum-mismatch
                              - legacy-unsupported
                              - internal
                              - clock-unlocked
                              - not-configured
                              - authorization-pending
                              - slow-down
                              - access-denied
                              - expired-token
                              - token-reused
                              - idempotency-key-reused
                              - idempotency-in-progress
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          fieldError:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                - if:
                    properties:
                      type:
                        const: call
                    required:
                      - type
                  then:
                    properties:
                      data:
                        type: object
                        required:
                          - op
                        properties:
                          op:
                            description: >-
                              OpenAPI operationId (camelCase); also the `op` of
                              WS / socket.io `call`.
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*$
                          params:
                            type: object
                          body: {}
                          ifMatch:
                            type: string
                        additionalProperties: true
              additionalProperties: true
              examples:
                - type: event
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                  ts: '2026-10-19T12:00:00.123Z'
                  topic: venues/default/players/main
                  data:
                    seq: 48213
                    kind: player.state
                    resource:
                      status: playing
                      position: 12.5
              $defs:
                knownType:
                  enum:
                    - hello
                    - welcome
                    - subscribe
                    - unsubscribe
                    - call
                    - result
                    - event
                    - error
                    - resync
                    - ping
                    - pong
                    - bye
                eventData:
                  type: object
                  required:
                    - seq
                    - kind
                  properties:
                    seq:
                      type: integer
                      minimum: 0
                      description: >-
                        Per-server monotonically increasing sequence (resume
                        with sinceSeq).
                    kind:
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                      description: Event kind from events/topics.yaml, e.g. player.state.
                    resource:
                      description: Full new representation.
                    patch:
                      type: object
                      description: JSON merge patch (high-rate kinds).
                    revision:
                      description: >-
                        Monotonic resource revision; the strong ETag is derived
                        from it.
                      type: integer
                      minimum: 0
                  not:
                    required:
                      - resource
                      - patch
                  additionalProperties: true
                callData:
                  type: object
                  required:
                    - op
                  properties:
                    op:
                      description: >-
                        OpenAPI operationId (camelCase); also the `op` of WS /
                        socket.io `call`.
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*$
                    params:
                      type: object
                    body: {}
                    ifMatch:
                      type: string
                  additionalProperties: true
          required:
            - type
            - id
            - ts
            - data
          properties:
            type:
              const: subscribe
            data:
              type: object
              required:
                - topics
              properties:
                topics:
                  type: array
                  minItems: 1
                  maxItems: 256
                  items:
                    description: >-
                      Subscription filter: a topic where a level may be `+` (one
                      level) and the last level may be `#` (rest), MQTT style.
                    type: string
                    maxLength: 512
                    pattern: >-
                      ^(?:[A-Za-z0-9._@-]+|\+)(?:/(?:[A-Za-z0-9._@-]+|\+))*(?:/#)?$|^#$
                sinceSeq:
                  type: integer
                  minimum: 0
                options:
                  type: object
                  properties:
                    positionHz:
                      type: number
                      exclusiveMinimum: 0
                      maximum: 30
                      description: player.position rate (default 4)
                    analysisHz:
                      type: number
                      exclusiveMinimum: 0
                      maximum: 60
                      description: >-
                        audio.analysis rate (default 15); the server sends the
                        newest frame
                  patternProperties:
                    ^x-: true
                  additionalProperties: false
              patternProperties:
                ^x-: true
              additionalProperties: false
        examples:
          - name: displays-and-calibration
            payload:
              type: subscribe
              id: 0192f3a4-5b6c-7d8e-9f01-23456789abd5
              ts: '2026-10-19T12:00:00.020Z'
              data:
                topics:
                  - venues/default/displays/+
                  - venues/default/calibration/#
                sinceSeq: 48000
      unsubscribe:
        name: unsubscribe
        title: unsubscribe (C→S)
        payload:
          description: C→S; answered by result.
          type: object
          allOf:
            - $schema: https://json-schema.org/draft/2020-12/schema
              $id: >-
                https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
              $comment: >-
                NativeMindNONC — freedome_contract (see LICENSE). Message
                envelope for plain WS (sub-protocol freedome.v1), socket.io
                `event` payload, GraphQL Event and OSC JSON events, 02e §7.1 /
                §8.1. `type`, `id`, `ts`, `data` on every message; `topic` on
                events; `replyTo` on result / error replies. Message types are
                open (readers ignore unknown ones).
              title: Message envelope
              type: object
              required:
                - type
                - id
                - ts
                - data
              properties:
                type:
                  description: >-
                    Known: hello, welcome, subscribe, unsubscribe, call, result,
                    event, error, resync, ping, pong, bye.
                  type: string
                  pattern: ^[a-z][a-zA-Z0-9]*$
                id:
                  description: Unique per message; the idempotency key of `call`.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts:
                  description: >-
                    RFC 3339 UTC with milliseconds, e.g.
                    2026-10-19T12:00:00.000Z.
                  type: string
                  format: date-time
                  pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                topic:
                  description: >-
                    Concrete event topic (02e §7.2), e.g.
                    venues/default/players/main.
                  type: string
                  maxLength: 512
                  pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
                replyTo:
                  description: >-
                    Server-owned resource id: UUIDv7, lowercase, sortable by
                    creation time.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                data: {}
              allOf:
                - if:
                    properties:
                      type:
                        const: event
                    required:
                      - type
                  then:
                    required:
                      - topic
                    properties:
                      data:
                        type: object
                        required:
                          - seq
                          - kind
                        properties:
                          seq:
                            type: integer
                            minimum: 0
                            description: >-
                              Per-server monotonically increasing sequence
                              (resume with sinceSeq).
                          kind:
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                            description: >-
                              Event kind from events/topics.yaml, e.g.
                              player.state.
                          resource:
                            description: Full new representation.
                          patch:
                            type: object
                            description: JSON merge patch (high-rate kinds).
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                        not:
                          required:
                            - resource
                            - patch
                        additionalProperties: true
                - if:
                    properties:
                      type:
                        const: result
                    required:
                      - type
                  then:
                    required:
                      - replyTo
                - if:
                    properties:
                      type:
                        const: error
                    required:
                      - type
                  then:
                    properties:
                      data:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE). RFC
                          9457 problem details with the Freedome `code`
                          catalogue, 02e §3.3. Also the `data` of WS `error`,
                          the socket.io ack error and GraphQL
                          errors[].extensions.problem. The catalogue is open:
                          unknown codes are allowed; known codes are bound to
                          their HTTP status.
                        title: Problem details
                        type: object
                        required:
                          - type
                          - title
                          - code
                        properties:
                          type:
                            type: string
                            format: uri
                            description: >-
                              https://freedome.nativemind.us/problems/<code> for
                              catalogue codes.
                          title:
                            type: string
                            minLength: 1
                          status:
                            type: integer
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                          instance:
                            type: string
                            format: uri-reference
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          traceId:
                            type: string
                            pattern: ^[0-9a-f]{16,32}$
                          errors:
                            type: array
                            items:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        allOf:
                          - if:
                              properties:
                                code:
                                  const: validation-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: not-found
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 404
                          - if:
                              properties:
                                code:
                                  const: conflict
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: precondition-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 412
                          - if:
                              properties:
                                code:
                                  const: precondition-required
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 428
                          - if:
                              properties:
                                code:
                                  const: unauthenticated
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: forbidden
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: rate-limited
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 429
                          - if:
                              properties:
                                code:
                                  const: payload-too-large
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 413
                          - if:
                              properties:
                                code:
                                  const: unsupported-format
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 415
                          - if:
                              properties:
                                code:
                                  const: engine-unavailable
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: engine-incompatible
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: degraded
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: upload-checksum-mismatch
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: legacy-unsupported
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 501
                          - if:
                              properties:
                                code:
                                  const: internal
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 500
                          - if:
                              properties:
                                code:
                                  const: clock-unlocked
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: not-configured
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: authorization-pending
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: slow-down
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: access-denied
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: expired-token
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: token-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: idempotency-key-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: idempotency-in-progress
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                        additionalProperties: true
                        examples:
                          - type: >-
                              https://freedome.nativemind.us/problems/engine-unavailable
                            title: Visual engine unavailable
                            status: 503
                            detail: >-
                              freedome-engined not reachable at
                              unix:/run/freedome/engine.sock
                            instance: /api/v1/venues/default/players/main/play
                            code: engine-unavailable
                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                        $defs:
                          knownCode:
                            enum:
                              - validation-failed
                              - not-found
                              - conflict
                              - precondition-failed
                              - precondition-required
                              - unauthenticated
                              - forbidden
                              - rate-limited
                              - payload-too-large
                              - unsupported-format
                              - engine-unavailable
                              - engine-incompatible
                              - degraded
                              - job-failed
                              - upload-checksum-mismatch
                              - legacy-unsupported
                              - internal
                              - clock-unlocked
                              - not-configured
                              - authorization-pending
                              - slow-down
                              - access-denied
                              - expired-token
                              - token-reused
                              - idempotency-key-reused
                              - idempotency-in-progress
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          fieldError:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                - if:
                    properties:
                      type:
                        const: call
                    required:
                      - type
                  then:
                    properties:
                      data:
                        type: object
                        required:
                          - op
                        properties:
                          op:
                            description: >-
                              OpenAPI operationId (camelCase); also the `op` of
                              WS / socket.io `call`.
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*$
                          params:
                            type: object
                          body: {}
                          ifMatch:
                            type: string
                        additionalProperties: true
              additionalProperties: true
              examples:
                - type: event
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                  ts: '2026-10-19T12:00:00.123Z'
                  topic: venues/default/players/main
                  data:
                    seq: 48213
                    kind: player.state
                    resource:
                      status: playing
                      position: 12.5
              $defs:
                knownType:
                  enum:
                    - hello
                    - welcome
                    - subscribe
                    - unsubscribe
                    - call
                    - result
                    - event
                    - error
                    - resync
                    - ping
                    - pong
                    - bye
                eventData:
                  type: object
                  required:
                    - seq
                    - kind
                  properties:
                    seq:
                      type: integer
                      minimum: 0
                      description: >-
                        Per-server monotonically increasing sequence (resume
                        with sinceSeq).
                    kind:
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                      description: Event kind from events/topics.yaml, e.g. player.state.
                    resource:
                      description: Full new representation.
                    patch:
                      type: object
                      description: JSON merge patch (high-rate kinds).
                    revision:
                      description: >-
                        Monotonic resource revision; the strong ETag is derived
                        from it.
                      type: integer
                      minimum: 0
                  not:
                    required:
                      - resource
                      - patch
                  additionalProperties: true
                callData:
                  type: object
                  required:
                    - op
                  properties:
                    op:
                      description: >-
                        OpenAPI operationId (camelCase); also the `op` of WS /
                        socket.io `call`.
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*$
                    params:
                      type: object
                    body: {}
                    ifMatch:
                      type: string
                  additionalProperties: true
          required:
            - type
            - id
            - ts
            - data
          properties:
            type:
              const: unsubscribe
            data:
              type: object
              required:
                - topics
              properties:
                topics:
                  type: array
                  minItems: 1
                  maxItems: 256
                  items:
                    description: >-
                      Subscription filter: a topic where a level may be `+` (one
                      level) and the last level may be `#` (rest), MQTT style.
                    type: string
                    maxLength: 512
                    pattern: >-
                      ^(?:[A-Za-z0-9._@-]+|\+)(?:/(?:[A-Za-z0-9._@-]+|\+))*(?:/#)?$|^#$
              patternProperties:
                ^x-: true
              additionalProperties: false
        examples:
          - name: calibration
            payload:
              type: unsubscribe
              id: 0192f3a4-5b6c-7d8e-9f01-23456789abd6
              ts: '2026-10-19T12:10:00.000Z'
              data:
                topics:
                  - venues/default/calibration/#
      call:
        name: call
        title: call (C→S)
        payload:
          description: >-
            C→S operation call (`op` = OpenAPI operationId; envelope id =
            idempotency key).
          type: object
          allOf:
            - $schema: https://json-schema.org/draft/2020-12/schema
              $id: >-
                https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
              $comment: >-
                NativeMindNONC — freedome_contract (see LICENSE). Message
                envelope for plain WS (sub-protocol freedome.v1), socket.io
                `event` payload, GraphQL Event and OSC JSON events, 02e §7.1 /
                §8.1. `type`, `id`, `ts`, `data` on every message; `topic` on
                events; `replyTo` on result / error replies. Message types are
                open (readers ignore unknown ones).
              title: Message envelope
              type: object
              required:
                - type
                - id
                - ts
                - data
              properties:
                type:
                  description: >-
                    Known: hello, welcome, subscribe, unsubscribe, call, result,
                    event, error, resync, ping, pong, bye.
                  type: string
                  pattern: ^[a-z][a-zA-Z0-9]*$
                id:
                  description: Unique per message; the idempotency key of `call`.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts:
                  description: >-
                    RFC 3339 UTC with milliseconds, e.g.
                    2026-10-19T12:00:00.000Z.
                  type: string
                  format: date-time
                  pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                topic:
                  description: >-
                    Concrete event topic (02e §7.2), e.g.
                    venues/default/players/main.
                  type: string
                  maxLength: 512
                  pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
                replyTo:
                  description: >-
                    Server-owned resource id: UUIDv7, lowercase, sortable by
                    creation time.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                data: {}
              allOf:
                - if:
                    properties:
                      type:
                        const: event
                    required:
                      - type
                  then:
                    required:
                      - topic
                    properties:
                      data:
                        type: object
                        required:
                          - seq
                          - kind
                        properties:
                          seq:
                            type: integer
                            minimum: 0
                            description: >-
                              Per-server monotonically increasing sequence
                              (resume with sinceSeq).
                          kind:
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                            description: >-
                              Event kind from events/topics.yaml, e.g.
                              player.state.
                          resource:
                            description: Full new representation.
                          patch:
                            type: object
                            description: JSON merge patch (high-rate kinds).
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                        not:
                          required:
                            - resource
                            - patch
                        additionalProperties: true
                - if:
                    properties:
                      type:
                        const: result
                    required:
                      - type
                  then:
                    required:
                      - replyTo
                - if:
                    properties:
                      type:
                        const: error
                    required:
                      - type
                  then:
                    properties:
                      data:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE). RFC
                          9457 problem details with the Freedome `code`
                          catalogue, 02e §3.3. Also the `data` of WS `error`,
                          the socket.io ack error and GraphQL
                          errors[].extensions.problem. The catalogue is open:
                          unknown codes are allowed; known codes are bound to
                          their HTTP status.
                        title: Problem details
                        type: object
                        required:
                          - type
                          - title
                          - code
                        properties:
                          type:
                            type: string
                            format: uri
                            description: >-
                              https://freedome.nativemind.us/problems/<code> for
                              catalogue codes.
                          title:
                            type: string
                            minLength: 1
                          status:
                            type: integer
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                          instance:
                            type: string
                            format: uri-reference
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          traceId:
                            type: string
                            pattern: ^[0-9a-f]{16,32}$
                          errors:
                            type: array
                            items:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        allOf:
                          - if:
                              properties:
                                code:
                                  const: validation-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: not-found
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 404
                          - if:
                              properties:
                                code:
                                  const: conflict
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: precondition-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 412
                          - if:
                              properties:
                                code:
                                  const: precondition-required
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 428
                          - if:
                              properties:
                                code:
                                  const: unauthenticated
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: forbidden
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: rate-limited
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 429
                          - if:
                              properties:
                                code:
                                  const: payload-too-large
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 413
                          - if:
                              properties:
                                code:
                                  const: unsupported-format
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 415
                          - if:
                              properties:
                                code:
                                  const: engine-unavailable
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: engine-incompatible
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: degraded
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: upload-checksum-mismatch
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: legacy-unsupported
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 501
                          - if:
                              properties:
                                code:
                                  const: internal
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 500
                          - if:
                              properties:
                                code:
                                  const: clock-unlocked
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: not-configured
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: authorization-pending
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: slow-down
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: access-denied
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: expired-token
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: token-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: idempotency-key-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: idempotency-in-progress
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                        additionalProperties: true
                        examples:
                          - type: >-
                              https://freedome.nativemind.us/problems/engine-unavailable
                            title: Visual engine unavailable
                            status: 503
                            detail: >-
                              freedome-engined not reachable at
                              unix:/run/freedome/engine.sock
                            instance: /api/v1/venues/default/players/main/play
                            code: engine-unavailable
                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                        $defs:
                          knownCode:
                            enum:
                              - validation-failed
                              - not-found
                              - conflict
                              - precondition-failed
                              - precondition-required
                              - unauthenticated
                              - forbidden
                              - rate-limited
                              - payload-too-large
                              - unsupported-format
                              - engine-unavailable
                              - engine-incompatible
                              - degraded
                              - job-failed
                              - upload-checksum-mismatch
                              - legacy-unsupported
                              - internal
                              - clock-unlocked
                              - not-configured
                              - authorization-pending
                              - slow-down
                              - access-denied
                              - expired-token
                              - token-reused
                              - idempotency-key-reused
                              - idempotency-in-progress
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          fieldError:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                - if:
                    properties:
                      type:
                        const: call
                    required:
                      - type
                  then:
                    properties:
                      data:
                        type: object
                        required:
                          - op
                        properties:
                          op:
                            description: >-
                              OpenAPI operationId (camelCase); also the `op` of
                              WS / socket.io `call`.
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*$
                          params:
                            type: object
                          body: {}
                          ifMatch:
                            type: string
                        additionalProperties: true
              additionalProperties: true
              examples:
                - type: event
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                  ts: '2026-10-19T12:00:00.123Z'
                  topic: venues/default/players/main
                  data:
                    seq: 48213
                    kind: player.state
                    resource:
                      status: playing
                      position: 12.5
              $defs:
                knownType:
                  enum:
                    - hello
                    - welcome
                    - subscribe
                    - unsubscribe
                    - call
                    - result
                    - event
                    - error
                    - resync
                    - ping
                    - pong
                    - bye
                eventData:
                  type: object
                  required:
                    - seq
                    - kind
                  properties:
                    seq:
                      type: integer
                      minimum: 0
                      description: >-
                        Per-server monotonically increasing sequence (resume
                        with sinceSeq).
                    kind:
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                      description: Event kind from events/topics.yaml, e.g. player.state.
                    resource:
                      description: Full new representation.
                    patch:
                      type: object
                      description: JSON merge patch (high-rate kinds).
                    revision:
                      description: >-
                        Monotonic resource revision; the strong ETag is derived
                        from it.
                      type: integer
                      minimum: 0
                  not:
                    required:
                      - resource
                      - patch
                  additionalProperties: true
                callData:
                  type: object
                  required:
                    - op
                  properties:
                    op:
                      description: >-
                        OpenAPI operationId (camelCase); also the `op` of WS /
                        socket.io `call`.
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*$
                    params:
                      type: object
                    body: {}
                    ifMatch:
                      type: string
                  additionalProperties: true
          required:
            - type
            - id
            - ts
            - data
          properties:
            type:
              const: call
            data:
              type: object
              required:
                - op
              properties:
                op:
                  description: >-
                    OpenAPI operationId (camelCase); also the `op` of WS /
                    socket.io `call`.
                  type: string
                  pattern: ^[a-z][a-zA-Z0-9]*$
                params:
                  type: object
                body: {}
                ifMatch:
                  type: string
              additionalProperties: true
        examples:
          - name: setTestPattern
            payload:
              type: call
              id: 0192f3a4-5b6c-7d8e-9f01-23456789abd7
              ts: '2026-10-19T12:00:01.000Z'
              data:
                op: setTestPattern
                params:
                  venueId: default
                  displayId: p1
                body:
                  kind: grid
      result:
        name: result
        title: result (S→C)
        payload:
          description: S→C reply to subscribe / unsubscribe / call.
          type: object
          allOf:
            - $schema: https://json-schema.org/draft/2020-12/schema
              $id: >-
                https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
              $comment: >-
                NativeMindNONC — freedome_contract (see LICENSE). Message
                envelope for plain WS (sub-protocol freedome.v1), socket.io
                `event` payload, GraphQL Event and OSC JSON events, 02e §7.1 /
                §8.1. `type`, `id`, `ts`, `data` on every message; `topic` on
                events; `replyTo` on result / error replies. Message types are
                open (readers ignore unknown ones).
              title: Message envelope
              type: object
              required:
                - type
                - id
                - ts
                - data
              properties:
                type:
                  description: >-
                    Known: hello, welcome, subscribe, unsubscribe, call, result,
                    event, error, resync, ping, pong, bye.
                  type: string
                  pattern: ^[a-z][a-zA-Z0-9]*$
                id:
                  description: Unique per message; the idempotency key of `call`.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts:
                  description: >-
                    RFC 3339 UTC with milliseconds, e.g.
                    2026-10-19T12:00:00.000Z.
                  type: string
                  format: date-time
                  pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                topic:
                  description: >-
                    Concrete event topic (02e §7.2), e.g.
                    venues/default/players/main.
                  type: string
                  maxLength: 512
                  pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
                replyTo:
                  description: >-
                    Server-owned resource id: UUIDv7, lowercase, sortable by
                    creation time.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                data: {}
              allOf:
                - if:
                    properties:
                      type:
                        const: event
                    required:
                      - type
                  then:
                    required:
                      - topic
                    properties:
                      data:
                        type: object
                        required:
                          - seq
                          - kind
                        properties:
                          seq:
                            type: integer
                            minimum: 0
                            description: >-
                              Per-server monotonically increasing sequence
                              (resume with sinceSeq).
                          kind:
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                            description: >-
                              Event kind from events/topics.yaml, e.g.
                              player.state.
                          resource:
                            description: Full new representation.
                          patch:
                            type: object
                            description: JSON merge patch (high-rate kinds).
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                        not:
                          required:
                            - resource
                            - patch
                        additionalProperties: true
                - if:
                    properties:
                      type:
                        const: result
                    required:
                      - type
                  then:
                    required:
                      - replyTo
                - if:
                    properties:
                      type:
                        const: error
                    required:
                      - type
                  then:
                    properties:
                      data:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE). RFC
                          9457 problem details with the Freedome `code`
                          catalogue, 02e §3.3. Also the `data` of WS `error`,
                          the socket.io ack error and GraphQL
                          errors[].extensions.problem. The catalogue is open:
                          unknown codes are allowed; known codes are bound to
                          their HTTP status.
                        title: Problem details
                        type: object
                        required:
                          - type
                          - title
                          - code
                        properties:
                          type:
                            type: string
                            format: uri
                            description: >-
                              https://freedome.nativemind.us/problems/<code> for
                              catalogue codes.
                          title:
                            type: string
                            minLength: 1
                          status:
                            type: integer
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                          instance:
                            type: string
                            format: uri-reference
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          traceId:
                            type: string
                            pattern: ^[0-9a-f]{16,32}$
                          errors:
                            type: array
                            items:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        allOf:
                          - if:
                              properties:
                                code:
                                  const: validation-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: not-found
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 404
                          - if:
                              properties:
                                code:
                                  const: conflict
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: precondition-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 412
                          - if:
                              properties:
                                code:
                                  const: precondition-required
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 428
                          - if:
                              properties:
                                code:
                                  const: unauthenticated
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: forbidden
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: rate-limited
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 429
                          - if:
                              properties:
                                code:
                                  const: payload-too-large
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 413
                          - if:
                              properties:
                                code:
                                  const: unsupported-format
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 415
                          - if:
                              properties:
                                code:
                                  const: engine-unavailable
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: engine-incompatible
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: degraded
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: upload-checksum-mismatch
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: legacy-unsupported
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 501
                          - if:
                              properties:
                                code:
                                  const: internal
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 500
                          - if:
                              properties:
                                code:
                                  const: clock-unlocked
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: not-configured
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: authorization-pending
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: slow-down
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: access-denied
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: expired-token
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: token-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: idempotency-key-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: idempotency-in-progress
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                        additionalProperties: true
                        examples:
                          - type: >-
                              https://freedome.nativemind.us/problems/engine-unavailable
                            title: Visual engine unavailable
                            status: 503
                            detail: >-
                              freedome-engined not reachable at
                              unix:/run/freedome/engine.sock
                            instance: /api/v1/venues/default/players/main/play
                            code: engine-unavailable
                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                        $defs:
                          knownCode:
                            enum:
                              - validation-failed
                              - not-found
                              - conflict
                              - precondition-failed
                              - precondition-required
                              - unauthenticated
                              - forbidden
                              - rate-limited
                              - payload-too-large
                              - unsupported-format
                              - engine-unavailable
                              - engine-incompatible
                              - degraded
                              - job-failed
                              - upload-checksum-mismatch
                              - legacy-unsupported
                              - internal
                              - clock-unlocked
                              - not-configured
                              - authorization-pending
                              - slow-down
                              - access-denied
                              - expired-token
                              - token-reused
                              - idempotency-key-reused
                              - idempotency-in-progress
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          fieldError:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                - if:
                    properties:
                      type:
                        const: call
                    required:
                      - type
                  then:
                    properties:
                      data:
                        type: object
                        required:
                          - op
                        properties:
                          op:
                            description: >-
                              OpenAPI operationId (camelCase); also the `op` of
                              WS / socket.io `call`.
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*$
                          params:
                            type: object
                          body: {}
                          ifMatch:
                            type: string
                        additionalProperties: true
              additionalProperties: true
              examples:
                - type: event
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                  ts: '2026-10-19T12:00:00.123Z'
                  topic: venues/default/players/main
                  data:
                    seq: 48213
                    kind: player.state
                    resource:
                      status: playing
                      position: 12.5
              $defs:
                knownType:
                  enum:
                    - hello
                    - welcome
                    - subscribe
                    - unsubscribe
                    - call
                    - result
                    - event
                    - error
                    - resync
                    - ping
                    - pong
                    - bye
                eventData:
                  type: object
                  required:
                    - seq
                    - kind
                  properties:
                    seq:
                      type: integer
                      minimum: 0
                      description: >-
                        Per-server monotonically increasing sequence (resume
                        with sinceSeq).
                    kind:
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                      description: Event kind from events/topics.yaml, e.g. player.state.
                    resource:
                      description: Full new representation.
                    patch:
                      type: object
                      description: JSON merge patch (high-rate kinds).
                    revision:
                      description: >-
                        Monotonic resource revision; the strong ETag is derived
                        from it.
                      type: integer
                      minimum: 0
                  not:
                    required:
                      - resource
                      - patch
                  additionalProperties: true
                callData:
                  type: object
                  required:
                    - op
                  properties:
                    op:
                      description: >-
                        OpenAPI operationId (camelCase); also the `op` of WS /
                        socket.io `call`.
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*$
                    params:
                      type: object
                    body: {}
                    ifMatch:
                      type: string
                  additionalProperties: true
          required:
            - type
            - id
            - ts
            - data
            - replyTo
          properties:
            type:
              const: result
            data:
              type: object
              required:
                - status
              properties:
                status:
                  type: integer
                  minimum: 100
                  maximum: 599
                  description: HTTP status of the equivalent REST call
                etag:
                  type: string
                body:
                  description: REST response body of the operation (absent for 204)
              patternProperties:
                ^x-: true
              additionalProperties: false
        examples:
          - name: setTestPattern
            payload:
              type: result
              id: 0192f3a4-5b6c-7d8e-9f01-23456789abd8
              ts: '2026-10-19T12:00:01.050Z'
              replyTo: 0192f3a4-5b6c-7d8e-9f01-23456789abd7
              data:
                status: 200
                body:
                  online: true
                  pattern:
                    kind: grid
          - name: subscribe
            payload:
              type: result
              id: 0192f3a4-5b6c-7d8e-9f01-23456789abda
              ts: '2026-10-19T12:00:00.030Z'
              replyTo: 0192f3a4-5b6c-7d8e-9f01-23456789abd5
              data:
                status: 200
                body:
                  topics:
                    - venues/default/displays/+
                    - venues/default/calibration/#
                  denied: []
      error:
        name: error
        title: error (S→C)
        payload:
          description: S→C problem reply (replyTo set when answering a message).
          type: object
          allOf:
            - $schema: https://json-schema.org/draft/2020-12/schema
              $id: >-
                https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
              $comment: >-
                NativeMindNONC — freedome_contract (see LICENSE). Message
                envelope for plain WS (sub-protocol freedome.v1), socket.io
                `event` payload, GraphQL Event and OSC JSON events, 02e §7.1 /
                §8.1. `type`, `id`, `ts`, `data` on every message; `topic` on
                events; `replyTo` on result / error replies. Message types are
                open (readers ignore unknown ones).
              title: Message envelope
              type: object
              required:
                - type
                - id
                - ts
                - data
              properties:
                type:
                  description: >-
                    Known: hello, welcome, subscribe, unsubscribe, call, result,
                    event, error, resync, ping, pong, bye.
                  type: string
                  pattern: ^[a-z][a-zA-Z0-9]*$
                id:
                  description: Unique per message; the idempotency key of `call`.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts:
                  description: >-
                    RFC 3339 UTC with milliseconds, e.g.
                    2026-10-19T12:00:00.000Z.
                  type: string
                  format: date-time
                  pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                topic:
                  description: >-
                    Concrete event topic (02e §7.2), e.g.
                    venues/default/players/main.
                  type: string
                  maxLength: 512
                  pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
                replyTo:
                  description: >-
                    Server-owned resource id: UUIDv7, lowercase, sortable by
                    creation time.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                data: {}
              allOf:
                - if:
                    properties:
                      type:
                        const: event
                    required:
                      - type
                  then:
                    required:
                      - topic
                    properties:
                      data:
                        type: object
                        required:
                          - seq
                          - kind
                        properties:
                          seq:
                            type: integer
                            minimum: 0
                            description: >-
                              Per-server monotonically increasing sequence
                              (resume with sinceSeq).
                          kind:
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                            description: >-
                              Event kind from events/topics.yaml, e.g.
                              player.state.
                          resource:
                            description: Full new representation.
                          patch:
                            type: object
                            description: JSON merge patch (high-rate kinds).
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                        not:
                          required:
                            - resource
                            - patch
                        additionalProperties: true
                - if:
                    properties:
                      type:
                        const: result
                    required:
                      - type
                  then:
                    required:
                      - replyTo
                - if:
                    properties:
                      type:
                        const: error
                    required:
                      - type
                  then:
                    properties:
                      data:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE). RFC
                          9457 problem details with the Freedome `code`
                          catalogue, 02e §3.3. Also the `data` of WS `error`,
                          the socket.io ack error and GraphQL
                          errors[].extensions.problem. The catalogue is open:
                          unknown codes are allowed; known codes are bound to
                          their HTTP status.
                        title: Problem details
                        type: object
                        required:
                          - type
                          - title
                          - code
                        properties:
                          type:
                            type: string
                            format: uri
                            description: >-
                              https://freedome.nativemind.us/problems/<code> for
                              catalogue codes.
                          title:
                            type: string
                            minLength: 1
                          status:
                            type: integer
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                          instance:
                            type: string
                            format: uri-reference
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          traceId:
                            type: string
                            pattern: ^[0-9a-f]{16,32}$
                          errors:
                            type: array
                            items:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        allOf:
                          - if:
                              properties:
                                code:
                                  const: validation-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: not-found
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 404
                          - if:
                              properties:
                                code:
                                  const: conflict
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: precondition-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 412
                          - if:
                              properties:
                                code:
                                  const: precondition-required
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 428
                          - if:
                              properties:
                                code:
                                  const: unauthenticated
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: forbidden
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: rate-limited
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 429
                          - if:
                              properties:
                                code:
                                  const: payload-too-large
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 413
                          - if:
                              properties:
                                code:
                                  const: unsupported-format
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 415
                          - if:
                              properties:
                                code:
                                  const: engine-unavailable
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: engine-incompatible
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: degraded
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: upload-checksum-mismatch
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: legacy-unsupported
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 501
                          - if:
                              properties:
                                code:
                                  const: internal
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 500
                          - if:
                              properties:
                                code:
                                  const: clock-unlocked
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: not-configured
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: authorization-pending
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: slow-down
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: access-denied
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: expired-token
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: token-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: idempotency-key-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: idempotency-in-progress
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                        additionalProperties: true
                        examples:
                          - type: >-
                              https://freedome.nativemind.us/problems/engine-unavailable
                            title: Visual engine unavailable
                            status: 503
                            detail: >-
                              freedome-engined not reachable at
                              unix:/run/freedome/engine.sock
                            instance: /api/v1/venues/default/players/main/play
                            code: engine-unavailable
                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                        $defs:
                          knownCode:
                            enum:
                              - validation-failed
                              - not-found
                              - conflict
                              - precondition-failed
                              - precondition-required
                              - unauthenticated
                              - forbidden
                              - rate-limited
                              - payload-too-large
                              - unsupported-format
                              - engine-unavailable
                              - engine-incompatible
                              - degraded
                              - job-failed
                              - upload-checksum-mismatch
                              - legacy-unsupported
                              - internal
                              - clock-unlocked
                              - not-configured
                              - authorization-pending
                              - slow-down
                              - access-denied
                              - expired-token
                              - token-reused
                              - idempotency-key-reused
                              - idempotency-in-progress
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          fieldError:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                - if:
                    properties:
                      type:
                        const: call
                    required:
                      - type
                  then:
                    properties:
                      data:
                        type: object
                        required:
                          - op
                        properties:
                          op:
                            description: >-
                              OpenAPI operationId (camelCase); also the `op` of
                              WS / socket.io `call`.
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*$
                          params:
                            type: object
                          body: {}
                          ifMatch:
                            type: string
                        additionalProperties: true
              additionalProperties: true
              examples:
                - type: event
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                  ts: '2026-10-19T12:00:00.123Z'
                  topic: venues/default/players/main
                  data:
                    seq: 48213
                    kind: player.state
                    resource:
                      status: playing
                      position: 12.5
              $defs:
                knownType:
                  enum:
                    - hello
                    - welcome
                    - subscribe
                    - unsubscribe
                    - call
                    - result
                    - event
                    - error
                    - resync
                    - ping
                    - pong
                    - bye
                eventData:
                  type: object
                  required:
                    - seq
                    - kind
                  properties:
                    seq:
                      type: integer
                      minimum: 0
                      description: >-
                        Per-server monotonically increasing sequence (resume
                        with sinceSeq).
                    kind:
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                      description: Event kind from events/topics.yaml, e.g. player.state.
                    resource:
                      description: Full new representation.
                    patch:
                      type: object
                      description: JSON merge patch (high-rate kinds).
                    revision:
                      description: >-
                        Monotonic resource revision; the strong ETag is derived
                        from it.
                      type: integer
                      minimum: 0
                  not:
                    required:
                      - resource
                      - patch
                  additionalProperties: true
                callData:
                  type: object
                  required:
                    - op
                  properties:
                    op:
                      description: >-
                        OpenAPI operationId (camelCase); also the `op` of WS /
                        socket.io `call`.
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*$
                    params:
                      type: object
                    body: {}
                    ifMatch:
                      type: string
                  additionalProperties: true
          required:
            - type
            - id
            - ts
            - data
          properties:
            type:
              const: error
            data:
              $schema: https://json-schema.org/draft/2020-12/schema
              $id: >-
                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
              $comment: >-
                NativeMindNONC — freedome_contract (see LICENSE). RFC 9457
                problem details with the Freedome `code` catalogue, 02e §3.3.
                Also the `data` of WS `error`, the socket.io ack error and
                GraphQL errors[].extensions.problem. The catalogue is open:
                unknown codes are allowed; known codes are bound to their HTTP
                status.
              title: Problem details
              type: object
              required:
                - type
                - title
                - code
              properties:
                type:
                  type: string
                  format: uri
                  description: >-
                    https://freedome.nativemind.us/problems/<code> for catalogue
                    codes.
                title:
                  type: string
                  minLength: 1
                status:
                  type: integer
                  minimum: 100
                  maximum: 599
                detail:
                  type: string
                instance:
                  type: string
                  format: uri-reference
                code:
                  description: >-
                    Stable machine key; also the last path segment of `type`.
                    Open set: see knownCode.
                  type: string
                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                traceId:
                  type: string
                  pattern: ^[0-9a-f]{16,32}$
                errors:
                  type: array
                  items:
                    type: object
                    required:
                      - pointer
                      - detail
                    properties:
                      pointer:
                        type: string
                        format: json-pointer
                      detail:
                        type: string
                      code:
                        description: >-
                          Stable machine key; also the last path segment of
                          `type`. Open set: see knownCode.
                        type: string
                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                    additionalProperties: true
              allOf:
                - if:
                    properties:
                      code:
                        const: validation-failed
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 422
                - if:
                    properties:
                      code:
                        const: not-found
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 404
                - if:
                    properties:
                      code:
                        const: conflict
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 409
                - if:
                    properties:
                      code:
                        const: precondition-failed
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 412
                - if:
                    properties:
                      code:
                        const: precondition-required
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 428
                - if:
                    properties:
                      code:
                        const: unauthenticated
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 401
                - if:
                    properties:
                      code:
                        const: forbidden
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 403
                - if:
                    properties:
                      code:
                        const: rate-limited
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 429
                - if:
                    properties:
                      code:
                        const: payload-too-large
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 413
                - if:
                    properties:
                      code:
                        const: unsupported-format
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 415
                - if:
                    properties:
                      code:
                        const: engine-unavailable
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 503
                - if:
                    properties:
                      code:
                        const: engine-incompatible
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 503
                - if:
                    properties:
                      code:
                        const: degraded
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 503
                - if:
                    properties:
                      code:
                        const: upload-checksum-mismatch
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 422
                - if:
                    properties:
                      code:
                        const: legacy-unsupported
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 501
                - if:
                    properties:
                      code:
                        const: internal
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 500
                - if:
                    properties:
                      code:
                        const: clock-unlocked
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 409
                - if:
                    properties:
                      code:
                        const: not-configured
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 503
                - if:
                    properties:
                      code:
                        const: authorization-pending
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 400
                - if:
                    properties:
                      code:
                        const: slow-down
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 400
                - if:
                    properties:
                      code:
                        const: access-denied
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 403
                - if:
                    properties:
                      code:
                        const: expired-token
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 400
                - if:
                    properties:
                      code:
                        const: token-reused
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 401
                - if:
                    properties:
                      code:
                        const: idempotency-key-reused
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 409
                - if:
                    properties:
                      code:
                        const: idempotency-in-progress
                    required:
                      - code
                  then:
                    properties:
                      status:
                        const: 409
              additionalProperties: true
              examples:
                - type: https://freedome.nativemind.us/problems/engine-unavailable
                  title: Visual engine unavailable
                  status: 503
                  detail: >-
                    freedome-engined not reachable at
                    unix:/run/freedome/engine.sock
                  instance: /api/v1/venues/default/players/main/play
                  code: engine-unavailable
                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
              $defs:
                knownCode:
                  enum:
                    - validation-failed
                    - not-found
                    - conflict
                    - precondition-failed
                    - precondition-required
                    - unauthenticated
                    - forbidden
                    - rate-limited
                    - payload-too-large
                    - unsupported-format
                    - engine-unavailable
                    - engine-incompatible
                    - degraded
                    - job-failed
                    - upload-checksum-mismatch
                    - legacy-unsupported
                    - internal
                    - clock-unlocked
                    - not-configured
                    - authorization-pending
                    - slow-down
                    - access-denied
                    - expired-token
                    - token-reused
                    - idempotency-key-reused
                    - idempotency-in-progress
                code:
                  description: >-
                    Stable machine key; also the last path segment of `type`.
                    Open set: see knownCode.
                  type: string
                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                fieldError:
                  type: object
                  required:
                    - pointer
                    - detail
                  properties:
                    pointer:
                      type: string
                      format: json-pointer
                    detail:
                      type: string
                    code:
                      description: >-
                        Stable machine key; also the last path segment of
                        `type`. Open set: see knownCode.
                      type: string
                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                  additionalProperties: true
        examples:
          - name: forbidden
            payload:
              type: error
              id: 0192f3a4-5b6c-7d8e-9f01-23456789abdb
              ts: '2026-10-19T12:00:01.050Z'
              replyTo: 0192f3a4-5b6c-7d8e-9f01-23456789abd7
              data:
                type: https://freedome.nativemind.us/problems/forbidden
                title: Forbidden
                status: 403
                code: forbidden
                detail: missing scope displays:control
      event:
        name: event
        title: event (S→C)
        payload:
          description: S→C event (02e §7.1).
          type: object
          allOf:
            - $schema: https://json-schema.org/draft/2020-12/schema
              $id: >-
                https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
              $comment: >-
                NativeMindNONC — freedome_contract (see LICENSE). Message
                envelope for plain WS (sub-protocol freedome.v1), socket.io
                `event` payload, GraphQL Event and OSC JSON events, 02e §7.1 /
                §8.1. `type`, `id`, `ts`, `data` on every message; `topic` on
                events; `replyTo` on result / error replies. Message types are
                open (readers ignore unknown ones).
              title: Message envelope
              type: object
              required:
                - type
                - id
                - ts
                - data
              properties:
                type:
                  description: >-
                    Known: hello, welcome, subscribe, unsubscribe, call, result,
                    event, error, resync, ping, pong, bye.
                  type: string
                  pattern: ^[a-z][a-zA-Z0-9]*$
                id:
                  description: Unique per message; the idempotency key of `call`.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts:
                  description: >-
                    RFC 3339 UTC with milliseconds, e.g.
                    2026-10-19T12:00:00.000Z.
                  type: string
                  format: date-time
                  pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                topic:
                  description: >-
                    Concrete event topic (02e §7.2), e.g.
                    venues/default/players/main.
                  type: string
                  maxLength: 512
                  pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
                replyTo:
                  description: >-
                    Server-owned resource id: UUIDv7, lowercase, sortable by
                    creation time.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                data: {}
              allOf:
                - if:
                    properties:
                      type:
                        const: event
                    required:
                      - type
                  then:
                    required:
                      - topic
                    properties:
                      data:
                        type: object
                        required:
                          - seq
                          - kind
                        properties:
                          seq:
                            type: integer
                            minimum: 0
                            description: >-
                              Per-server monotonically increasing sequence
                              (resume with sinceSeq).
                          kind:
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                            description: >-
                              Event kind from events/topics.yaml, e.g.
                              player.state.
                          resource:
                            description: Full new representation.
                          patch:
                            type: object
                            description: JSON merge patch (high-rate kinds).
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                        not:
                          required:
                            - resource
                            - patch
                        additionalProperties: true
                - if:
                    properties:
                      type:
                        const: result
                    required:
                      - type
                  then:
                    required:
                      - replyTo
                - if:
                    properties:
                      type:
                        const: error
                    required:
                      - type
                  then:
                    properties:
                      data:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE). RFC
                          9457 problem details with the Freedome `code`
                          catalogue, 02e §3.3. Also the `data` of WS `error`,
                          the socket.io ack error and GraphQL
                          errors[].extensions.problem. The catalogue is open:
                          unknown codes are allowed; known codes are bound to
                          their HTTP status.
                        title: Problem details
                        type: object
                        required:
                          - type
                          - title
                          - code
                        properties:
                          type:
                            type: string
                            format: uri
                            description: >-
                              https://freedome.nativemind.us/problems/<code> for
                              catalogue codes.
                          title:
                            type: string
                            minLength: 1
                          status:
                            type: integer
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                          instance:
                            type: string
                            format: uri-reference
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          traceId:
                            type: string
                            pattern: ^[0-9a-f]{16,32}$
                          errors:
                            type: array
                            items:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        allOf:
                          - if:
                              properties:
                                code:
                                  const: validation-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: not-found
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 404
                          - if:
                              properties:
                                code:
                                  const: conflict
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: precondition-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 412
                          - if:
                              properties:
                                code:
                                  const: precondition-required
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 428
                          - if:
                              properties:
                                code:
                                  const: unauthenticated
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: forbidden
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: rate-limited
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 429
                          - if:
                              properties:
                                code:
                                  const: payload-too-large
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 413
                          - if:
                              properties:
                                code:
                                  const: unsupported-format
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 415
                          - if:
                              properties:
                                code:
                                  const: engine-unavailable
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: engine-incompatible
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: degraded
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: upload-checksum-mismatch
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: legacy-unsupported
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 501
                          - if:
                              properties:
                                code:
                                  const: internal
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 500
                          - if:
                              properties:
                                code:
                                  const: clock-unlocked
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: not-configured
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: authorization-pending
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: slow-down
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: access-denied
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: expired-token
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: token-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: idempotency-key-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: idempotency-in-progress
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                        additionalProperties: true
                        examples:
                          - type: >-
                              https://freedome.nativemind.us/problems/engine-unavailable
                            title: Visual engine unavailable
                            status: 503
                            detail: >-
                              freedome-engined not reachable at
                              unix:/run/freedome/engine.sock
                            instance: /api/v1/venues/default/players/main/play
                            code: engine-unavailable
                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                        $defs:
                          knownCode:
                            enum:
                              - validation-failed
                              - not-found
                              - conflict
                              - precondition-failed
                              - precondition-required
                              - unauthenticated
                              - forbidden
                              - rate-limited
                              - payload-too-large
                              - unsupported-format
                              - engine-unavailable
                              - engine-incompatible
                              - degraded
                              - job-failed
                              - upload-checksum-mismatch
                              - legacy-unsupported
                              - internal
                              - clock-unlocked
                              - not-configured
                              - authorization-pending
                              - slow-down
                              - access-denied
                              - expired-token
                              - token-reused
                              - idempotency-key-reused
                              - idempotency-in-progress
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          fieldError:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                - if:
                    properties:
                      type:
                        const: call
                    required:
                      - type
                  then:
                    properties:
                      data:
                        type: object
                        required:
                          - op
                        properties:
                          op:
                            description: >-
                              OpenAPI operationId (camelCase); also the `op` of
                              WS / socket.io `call`.
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*$
                          params:
                            type: object
                          body: {}
                          ifMatch:
                            type: string
                        additionalProperties: true
              additionalProperties: true
              examples:
                - type: event
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                  ts: '2026-10-19T12:00:00.123Z'
                  topic: venues/default/players/main
                  data:
                    seq: 48213
                    kind: player.state
                    resource:
                      status: playing
                      position: 12.5
              $defs:
                knownType:
                  enum:
                    - hello
                    - welcome
                    - subscribe
                    - unsubscribe
                    - call
                    - result
                    - event
                    - error
                    - resync
                    - ping
                    - pong
                    - bye
                eventData:
                  type: object
                  required:
                    - seq
                    - kind
                  properties:
                    seq:
                      type: integer
                      minimum: 0
                      description: >-
                        Per-server monotonically increasing sequence (resume
                        with sinceSeq).
                    kind:
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                      description: Event kind from events/topics.yaml, e.g. player.state.
                    resource:
                      description: Full new representation.
                    patch:
                      type: object
                      description: JSON merge patch (high-rate kinds).
                    revision:
                      description: >-
                        Monotonic resource revision; the strong ETag is derived
                        from it.
                      type: integer
                      minimum: 0
                  not:
                    required:
                      - resource
                      - patch
                  additionalProperties: true
                callData:
                  type: object
                  required:
                    - op
                  properties:
                    op:
                      description: >-
                        OpenAPI operationId (camelCase); also the `op` of WS /
                        socket.io `call`.
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*$
                    params:
                      type: object
                    body: {}
                    ifMatch:
                      type: string
                  additionalProperties: true
          required:
            - type
            - id
            - ts
            - data
            - topic
          properties:
            type:
              const: event
            data:
              $schema: https://json-schema.org/draft/2020-12/schema
              $id: >-
                https://freedome.nativemind.us/schemas/api/1.0/event-kinds.schema.json
              $comment: >-
                NativeMindNONC — freedome_contract (see LICENSE). `data` of an
                event message (02e §7.1) with the payload bound to its `kind`
                (events/topics.yaml). v1: every kind of the topic tree (02e §7.2
                + scenarios, parameters, nodes, devices). Unknown kinds stay
                valid (open catalogue, 02e §13).
              title: Event data by kind
              type: object
              allOf:
                - type: object
                  required:
                    - seq
                    - kind
                  properties:
                    seq:
                      type: integer
                      minimum: 0
                      description: >-
                        Per-server monotonically increasing sequence (resume
                        with sinceSeq).
                    kind:
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                      description: Event kind from events/topics.yaml, e.g. player.state.
                    resource:
                      description: Full new representation.
                    patch:
                      type: object
                      description: JSON merge patch (high-rate kinds).
                    revision:
                      description: >-
                        Monotonic resource revision; the strong ETag is derived
                        from it.
                      type: integer
                      minimum: 0
                  not:
                    required:
                      - resource
                      - patch
                  additionalProperties: true
                - if:
                    properties:
                      kind:
                        const: system.info
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/api/1.0/info.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE). GET
                          /api/v1/info (02e §5.1) and the unversioned /health,
                          /ready bodies ($defs/health).
                        title: Server info
                        type: object
                        required:
                          - product
                          - serverVersion
                          - instanceId
                          - apiVersions
                        properties:
                          product:
                            anyOf:
                              - enum:
                                  - freedome-mediaserver
                                  - freedome-cloud
                              - type: string
                                minLength: 1
                          serverVersion:
                            description: Semantic version 2.0.0.
                            type: string
                            pattern: >-
                              ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$
                          contractVersion:
                            description: Semantic version 2.0.0.
                            type: string
                            pattern: >-
                              ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$
                          instanceId:
                            description: >-
                              Server-owned resource id: UUIDv7, lowercase,
                              sortable by creation time.
                            type: string
                            pattern: >-
                              ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                            examples:
                              - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                          name:
                            type: string
                          apiVersions:
                            type: array
                            minItems: 1
                            items:
                              type: string
                              pattern: ^v\d+$
                          legacyProfile:
                            type: boolean
                            description: >-
                              legacy (flutter_freedome 3.0 / razvivalka)
                              listener enabled
                          transports:
                            type: object
                            properties:
                              rest:
                                type: object
                                properties:
                                  basePath:
                                    type: string
                                additionalProperties: true
                              graphql:
                                type: object
                                properties:
                                  enabled:
                                    type: boolean
                                  path:
                                    type: string
                                additionalProperties: true
                              ws:
                                type: object
                                properties:
                                  path:
                                    type: string
                                  subprotocol:
                                    type: string
                                additionalProperties: true
                              socketio:
                                type: object
                                properties:
                                  path:
                                    type: string
                                  namespace:
                                    type: string
                                additionalProperties: true
                              osc:
                                type: object
                                properties:
                                  udpIn:
                                    type: integer
                                    minimum: 1
                                    maximum: 65535
                                  udpOut:
                                    type: integer
                                    minimum: 1
                                    maximum: 65535
                                  tcp:
                                    type: integer
                                    minimum: 1
                                    maximum: 65535
                                additionalProperties: true
                            additionalProperties: true
                          auth:
                            type: object
                            properties:
                              methods:
                                type: array
                                items:
                                  anyOf:
                                    - enum:
                                        - password
                                        - apiKey
                                        - pairing
                                        - cloud
                                        - anonymous
                                    - type: string
                            additionalProperties: true
                          venues:
                            type: array
                            items:
                              type: object
                              required:
                                - id
                              properties:
                                id:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                title:
                                  $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). Localised text map
                                    {"en":…,"ru":…}, 02e §3.1 (as .dome
                                    meta.title).
                                  title: Localised text
                                  type: object
                                  minProperties: 1
                                  propertyNames:
                                    pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                  additionalProperties:
                                    type: string
                                  examples:
                                    - en: Intro
                                      ru: Вступление
                                  $defs:
                                    textOrI18n:
                                      description: >-
                                        Plain string (treated as `en`) or a
                                        localised map. (map branch = the root
                                        schema, inlined for tools that
                                        mis-handle self references)
                                      anyOf:
                                        - type: string
                                        - type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                          examples:
                                            - en: Intro
                                              ru: Вступление
                                default:
                                  type: boolean
                                status:
                                  type: string
                              additionalProperties: true
                          capabilities:
                            description: >-
                              Engines, audio modes, display types, test
                              patterns, gateways … (open object; clients ignore
                              unknown keys).
                            type: object
                            additionalProperties: true
                          links:
                            type: object
                            additionalProperties:
                              type: string
                              format: uri-reference
                        additionalProperties: true
                        $defs:
                          health:
                            description: GET /health and /ready (unversioned, anonymous).
                            type: object
                            required:
                              - status
                            properties:
                              status:
                                enum:
                                  - ok
                                  - degraded
                                  - down
                              checks:
                                type: object
                                additionalProperties:
                                  type: object
                                  required:
                                    - status
                                  properties:
                                    status:
                                      enum:
                                        - ok
                                        - degraded
                                        - down
                                    detail:
                                      type: string
                                  additionalProperties: false
                            additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: system.health
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: GET /health and /ready (unversioned, anonymous).
                        type: object
                        required:
                          - status
                        properties:
                          status:
                            enum:
                              - ok
                              - degraded
                              - down
                          checks:
                            type: object
                            additionalProperties:
                              type: object
                              required:
                                - status
                              properties:
                                status:
                                  enum:
                                    - ok
                                    - degraded
                                    - down
                                detail:
                                  type: string
                              additionalProperties: false
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: engine.status
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        type: object
                        required:
                          - name
                          - status
                        properties:
                          name:
                            anyOf:
                              - enum:
                                  - visual
                                  - anantasound
                                  - anantadigital
                              - type: string
                                pattern: >-
                                  ^[a-z][a-z0-9_-]{0,31}(@[A-Za-z0-9._-]{1,64})?$
                          status:
                            enum:
                              - up
                              - degraded
                              - down
                              - incompatible
                          version:
                            type: string
                          protocol:
                            type: string
                            examples:
                              - freedome.engine.v1
                          capabilities:
                            type: array
                            items:
                              type: string
                          message:
                            type: string
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: engine.metrics
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: ≤ 1 Hz; any subset (patch) of the metrics.
                        type: object
                        properties:
                          fps:
                            type: number
                            minimum: 0
                          frameTimeMs:
                            type: number
                            minimum: 0
                          droppedFrames:
                            type: integer
                            minimum: 0
                          gpuLoad:
                            type: number
                            minimum: 0
                            maximum: 1
                          cpuLoad:
                            type: number
                            minimum: 0
                            maximum: 1
                          temperatureC:
                            type: number
                        patternProperties:
                          ^x-: true
                        additionalProperties: false
                      patch:
                        description: ≤ 1 Hz; any subset (patch) of the metrics.
                        type: object
                        properties:
                          fps:
                            type: number
                            minimum: 0
                          frameTimeMs:
                            type: number
                            minimum: 0
                          droppedFrames:
                            type: integer
                            minimum: 0
                          gpuLoad:
                            type: number
                            minimum: 0
                            maximum: 1
                          cpuLoad:
                            type: number
                            minimum: 0
                            maximum: 1
                          temperatureC:
                            type: number
                        patternProperties:
                          ^x-: true
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: engine.error
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE). RFC
                          9457 problem details with the Freedome `code`
                          catalogue, 02e §3.3. Also the `data` of WS `error`,
                          the socket.io ack error and GraphQL
                          errors[].extensions.problem. The catalogue is open:
                          unknown codes are allowed; known codes are bound to
                          their HTTP status.
                        title: Problem details
                        type: object
                        required:
                          - type
                          - title
                          - code
                        properties:
                          type:
                            type: string
                            format: uri
                            description: >-
                              https://freedome.nativemind.us/problems/<code> for
                              catalogue codes.
                          title:
                            type: string
                            minLength: 1
                          status:
                            type: integer
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                          instance:
                            type: string
                            format: uri-reference
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          traceId:
                            type: string
                            pattern: ^[0-9a-f]{16,32}$
                          errors:
                            type: array
                            items:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        allOf:
                          - if:
                              properties:
                                code:
                                  const: validation-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: not-found
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 404
                          - if:
                              properties:
                                code:
                                  const: conflict
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: precondition-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 412
                          - if:
                              properties:
                                code:
                                  const: precondition-required
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 428
                          - if:
                              properties:
                                code:
                                  const: unauthenticated
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: forbidden
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: rate-limited
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 429
                          - if:
                              properties:
                                code:
                                  const: payload-too-large
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 413
                          - if:
                              properties:
                                code:
                                  const: unsupported-format
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 415
                          - if:
                              properties:
                                code:
                                  const: engine-unavailable
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: engine-incompatible
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: degraded
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: upload-checksum-mismatch
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: legacy-unsupported
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 501
                          - if:
                              properties:
                                code:
                                  const: internal
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 500
                          - if:
                              properties:
                                code:
                                  const: clock-unlocked
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: not-configured
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: authorization-pending
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: slow-down
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: access-denied
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: expired-token
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: token-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: idempotency-key-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: idempotency-in-progress
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                        additionalProperties: true
                        examples:
                          - type: >-
                              https://freedome.nativemind.us/problems/engine-unavailable
                            title: Visual engine unavailable
                            status: 503
                            detail: >-
                              freedome-engined not reachable at
                              unix:/run/freedome/engine.sock
                            instance: /api/v1/venues/default/players/main/play
                            code: engine-unavailable
                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                        $defs:
                          knownCode:
                            enum:
                              - validation-failed
                              - not-found
                              - conflict
                              - precondition-failed
                              - precondition-required
                              - unauthenticated
                              - forbidden
                              - rate-limited
                              - payload-too-large
                              - unsupported-format
                              - engine-unavailable
                              - engine-incompatible
                              - degraded
                              - job-failed
                              - upload-checksum-mismatch
                              - legacy-unsupported
                              - internal
                              - clock-unlocked
                              - not-configured
                              - authorization-pending
                              - slow-down
                              - access-denied
                              - expired-token
                              - token-reused
                              - idempotency-key-reused
                              - idempotency-in-progress
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          fieldError:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                - if:
                    properties:
                      kind:
                        const: venue.updated
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/api/1.0/venue.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE).
                          Venue resource (02e §4, §5.2) = .dome 1.1 venue
                          manifest without format / kind ($defs reused from
                          dome/1.1) + server fields. Root = GET representation.
                        title: Venue
                        allOf:
                          - type: object
                            allOf:
                              - description: >-
                                  Venue content shared by GET / PUT / POST: the
                                  .dome venue sections.
                                type: object
                                properties:
                                  meta:
                                    type: object
                                    required:
                                      - id
                                      - title
                                    properties:
                                      id:
                                        description: >-
                                          Stable document id (UUID, lowercase);
                                          the venue / show id on import (02e
                                          §3.2).
                                        type: string
                                        pattern: >-
                                          ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                      title:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). Localised text map
                                          {"en":…,"ru":…}, 02e §3.1 (as .dome
                                          meta.title).
                                        title: Localised text
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                                        $defs:
                                          textOrI18n:
                                            description: >-
                                              Plain string (treated as `en`) or a
                                              localised map. (map branch = the root
                                              schema, inlined for tools that
                                              mis-handle self references)
                                            anyOf:
                                              - type: string
                                              - type: object
                                                minProperties: 1
                                                propertyNames:
                                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                additionalProperties:
                                                  type: string
                                                examples:
                                                  - en: Intro
                                                    ru: Вступление
                                      description:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). Localised text map
                                          {"en":…,"ru":…}, 02e §3.1 (as .dome
                                          meta.title).
                                        title: Localised text
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                                        $defs:
                                          textOrI18n:
                                            description: >-
                                              Plain string (treated as `en`) or a
                                              localised map. (map branch = the root
                                              schema, inlined for tools that
                                              mis-handle self references)
                                            anyOf:
                                              - type: string
                                              - type: object
                                                minProperties: 1
                                                propertyNames:
                                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                additionalProperties:
                                                  type: string
                                                examples:
                                                  - en: Intro
                                                    ru: Вступление
                                      authors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - name
                                          properties:
                                            name:
                                              type: string
                                              minLength: 1
                                            email:
                                              type: string
                                              format: email
                                            url:
                                              type: string
                                              format: uri
                                            role:
                                              type: string
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      created:
                                        type: string
                                        format: date-time
                                      modified:
                                        type: string
                                        format: date-time
                                      generator:
                                        type: object
                                        required:
                                          - name
                                        properties:
                                          name:
                                            type: string
                                            minLength: 1
                                          version:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      license:
                                        type: string
                                        minLength: 1
                                        default: NativeMindNONC
                                      tags:
                                        type: array
                                        items:
                                          type: string
                                          minLength: 1
                                          maxLength: 64
                                        uniqueItems: true
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  dome:
                                    description: >-
                                      Dome geometry (01b §4.1). Right-handed,
                                      metres, degrees; +Y zenith, -Z front.
                                    type: object
                                    required:
                                      - mode
                                      - shape
                                      - radius
                                    properties:
                                      mode:
                                        anyOf:
                                          - enum:
                                              - classical
                                              - quantum
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      shape:
                                        anyOf:
                                          - enum:
                                              - hemisphere
                                              - sphere
                                              - truncated
                                              - cylinder
                                              - cylinder_outer
                                              - cone
                                              - pyramid
                                              - geodesic
                                              - flat
                                              - multiwall
                                              - cave
                                              - volumetric
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      radius:
                                        type: number
                                        exclusiveMinimum: 0
                                        description: m
                                      tilt:
                                        type: number
                                        minimum: -90
                                        maximum: 90
                                        description: ° forward tilt of the dome axis
                                      truncation:
                                        type: number
                                        minimum: -90
                                        maximum: 90
                                        description: >-
                                          ° below the spring line projected
                                          (negative = cut off)
                                      orientation:
                                        anyOf:
                                          - enum:
                                              - upright
                                              - inverted
                                              - tilted
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      springLineHeight:
                                        type: number
                                        description: m above floor
                                      surface:
                                        type: object
                                        properties:
                                          gain:
                                            type: number
                                            minimum: 0
                                          material:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      seating:
                                        anyOf:
                                          - enum:
                                              - unidirectional
                                              - concentric
                                              - free
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      sweetSpot:
                                        type: array
                                        items:
                                          type: number
                                        minItems: 3
                                        maxItems: 3
                                        description: '[x, y, z], metres, dome frame (01b §3).'
                                      angularBase:
                                        type: integer
                                        minimum: 1
                                        description: >-
                                          Quantum mode only: presentation base of
                                          the circle (e.g. 108); values stay in
                                          degrees.
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                    if:
                                      required:
                                        - angularBase
                                    then:
                                      properties:
                                        mode:
                                          const: quantum
                                  displays:
                                    type: array
                                    items:
                                      description: >-
                                        Visual device (01b §4.2): projector
                                        (incl. fisheye), LED, prism unit,
                                        smartphone + lens, NDI output.
                                      type: object
                                      required:
                                        - id
                                        - type
                                      properties:
                                        id:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        name:
                                          type: string
                                        type:
                                          anyOf:
                                            - enum:
                                                - projector
                                                - led
                                                - prism_unit
                                                - smartphone_lens
                                                - ndi_output
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        model:
                                          type: object
                                          properties:
                                            vendor:
                                              type: string
                                            product:
                                              type: string
                                            variant:
                                              type: string
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        resolution:
                                          type: array
                                          items:
                                            type: integer
                                            minimum: 1
                                          minItems: 2
                                          maxItems: 2
                                          description: '[width, height] or [cols, rows].'
                                        refreshRate:
                                          type: number
                                          exclusiveMinimum: 0
                                          description: Hz
                                        lens:
                                          type: object
                                          required:
                                            - kind
                                          properties:
                                            kind:
                                              anyOf:
                                                - enum:
                                                    - fisheye
                                                    - standard
                                                    - pyramid
                                                    - prism
                                                    - equirect
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            fov:
                                              type: number
                                              exclusiveMinimum: 0
                                              maximum: 360
                                              description: °
                                            throwRatio:
                                              type:
                                                - number
                                                - 'null'
                                              exclusiveMinimum: 0
                                            shift:
                                              description: >-
                                                lens shift [x, y] as a fraction of the
                                                image size
                                              type: array
                                              items:
                                                type: number
                                              minItems: 2
                                              maxItems: 2
                                            distortion:
                                              description: '1.1 (02b E4): lens distortion model.'
                                              type: object
                                              required:
                                                - model
                                              properties:
                                                model:
                                                  anyOf:
                                                    - enum:
                                                        - brown-conrady
                                                        - fisheye-equidistant
                                                        - fisheye-equisolid
                                                        - fisheye-poly
                                                        - radial
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                coefficients:
                                                  type: array
                                                  items:
                                                    type: number
                                                  maxItems: 16
                                                  description: >-
                                                    brown-conrady [k1,k2,k3,p1,p2];
                                                    fisheye-poly [k1..k4]; radial [k1,k2,k3]
                                                    (01b §4.2.1)
                                                centre:
                                                  type: array
                                                  items:
                                                    type: number
                                                    minimum: 0
                                                    maximum: 1
                                                  minItems: 2
                                                  maxItems: 2
                                                  description: >-
                                                    distortion centre, normalised image
                                                    coordinates
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            profileRef:
                                              description: >-
                                                1.1 (02b E4): lens profile id shipped as
                                                data (engine
                                                data/lens_profiles/<id>.json), e.g.
                                                sh001.
                                              type: string
                                              pattern: ^[a-z0-9][a-z0-9._-]{0,63}$
                                            curvature:
                                              description: >-
                                                1.1 (EN, curved LED walls): the display
                                                surface is a cylinder (axis vertical =
                                                curved horizontally, the usual curved
                                                wall) or a sphere section; absent =
                                                flat.
                                              type: object
                                              required:
                                                - radius
                                              properties:
                                                radius:
                                                  type: number
                                                  exclusiveMinimum: 0
                                                  description: m, curvature radius of the panel surface
                                                axis:
                                                  anyOf:
                                                    - enum:
                                                        - vertical
                                                        - horizontal
                                                        - spherical
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                  default: vertical
                                                concave:
                                                  type: boolean
                                                  default: true
                                                  description: true = curved towards the audience
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        pose:
                                          type: object
                                          properties:
                                            position:
                                              type: array
                                              items:
                                                type: number
                                              minItems: 3
                                              maxItems: 3
                                              description: '[x, y, z], metres, dome frame (01b §3).'
                                            rotation:
                                              type: array
                                              items:
                                                type: number
                                                minimum: -1
                                                maximum: 1
                                              minItems: 4
                                              maxItems: 4
                                              description: Rotation quaternion [x, y, z, w].
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        output:
                                          type: object
                                          properties:
                                            host:
                                              type: string
                                              minLength: 1
                                            connector:
                                              type: string
                                              minLength: 1
                                              description: e.g. DP-1, HDMI-1, stream:<displayId>
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        colour:
                                          type: object
                                          properties:
                                            gamut:
                                              anyOf:
                                                - enum:
                                                    - rec709
                                                    - dci-p3
                                                    - display-p3
                                                    - rec2020
                                                    - srgb
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            gamma:
                                              type: number
                                              exclusiveMinimum: 0
                                            whitePoint:
                                              type: string
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        stereo:
                                          oneOf:
                                            - type: 'null'
                                            - type: object
                                              required:
                                                - eye
                                              properties:
                                                eye:
                                                  enum:
                                                    - left
                                                    - right
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                        optics:
                                          description: >-
                                            1.1 (02a V12, replaces
                                            x-freedome-optics): per-face layout of
                                            prism / pyramid optics on the display
                                            frame.
                                          type: object
                                          required:
                                            - faces
                                          properties:
                                            faces:
                                              enum:
                                                - 1
                                                - 3
                                                - 4
                                                - 6
                                            faceAngle:
                                              type: number
                                              exclusiveMinimum: 0
                                              exclusiveMaximum: 90
                                              description: ° between a face and the screen plane
                                            viewports:
                                              type: array
                                              maxItems: 6
                                              items:
                                                type: object
                                                required:
                                                  - face
                                                  - rect
                                                properties:
                                                  face:
                                                    type: integer
                                                    minimum: 0
                                                    maximum: 5
                                                    description: 0 = front, clockwise from above
                                                  rect:
                                                    description: >-
                                                      Normalised [x, y, w, h] of the display
                                                      frame (0..1, origin top-left, y down;
                                                      01b §3).
                                                    type: array
                                                    items:
                                                      type: number
                                                      minimum: 0
                                                      maximum: 1
                                                    minItems: 4
                                                    maxItems: 4
                                                  rotation:
                                                    type: number
                                                    minimum: -360
                                                    maximum: 360
                                                    description: ° clockwise
                                                  mirror:
                                                    enum:
                                                      - none
                                                      - horizontal
                                                      - vertical
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                            activeRegion:
                                              description: >-
                                                Normalised [x, y, w, h] of the display
                                                frame (0..1, origin top-left, y down;
                                                01b §3).
                                              type: array
                                              items:
                                                type: number
                                                minimum: 0
                                                maximum: 1
                                              minItems: 4
                                              maxItems: 4
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        prism:
                                          description: >-
                                            1.1 (02b E4): physical prism / pyramid
                                            geometry (engine PrismGeometry).
                                          type: object
                                          required:
                                            - faces
                                          properties:
                                            faces:
                                              type: integer
                                              minimum: 1
                                              maximum: 12
                                            baseMm:
                                              type: number
                                              exclusiveMinimum: 0
                                            heightMm:
                                              type: number
                                              exclusiveMinimum: 0
                                            faceAngle:
                                              type: number
                                              exclusiveMinimum: 0
                                              exclusiveMaximum: 90
                                            refractiveIndex:
                                              type: number
                                              minimum: 1
                                            solid:
                                              type: boolean
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                  calibration:
                                    description: >-
                                      Per-display calibration (01b §4.3); keys
                                      of `displays` are display ids (checked by
                                      the codecs).
                                    type: object
                                    properties:
                                      displays:
                                        type: object
                                        propertyNames:
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                        additionalProperties:
                                          type: object
                                          properties:
                                            warp:
                                              type: object
                                              required:
                                                - file
                                              properties:
                                                file:
                                                  description: FDMESH file (01b §5)
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                kind:
                                                  anyOf:
                                                    - enum:
                                                        - uv-grid
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                size:
                                                  type: array
                                                  items:
                                                    type: integer
                                                    minimum: 1
                                                  minItems: 2
                                                  maxItems: 2
                                                  description: '[width, height] or [cols, rows].'
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            blend:
                                              type: object
                                              required:
                                                - file
                                              properties:
                                                file:
                                                  description: 16-bit greyscale PNG
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                bitDepth:
                                                  enum:
                                                    - 8
                                                    - 16
                                                gamma:
                                                  type: number
                                                  exclusiveMinimum: 0
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            colour:
                                              type: object
                                              properties:
                                                lut:
                                                  description: Adobe / Resolve .cube 3D LUT
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                blackLevel:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 1
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            report:
                                              type: object
                                              properties:
                                                method:
                                                  anyOf:
                                                    - enum:
                                                        - camera-homography
                                                        - manual
                                                        - imported
                                                        - model
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                date:
                                                  type: string
                                                  format: date-time
                                                meanError:
                                                  type: number
                                                  minimum: 0
                                                maxError:
                                                  type: number
                                                  minimum: 0
                                                unit:
                                                  anyOf:
                                                    - enum:
                                                        - px
                                                        - deg
                                                        - mm
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                file:
                                                  description: >-
                                                    Entry path inside the container:
                                                    relative, `/`-separated, no `..`
                                                    segment, no backslash, no NUL.
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  audio:
                                    description: AnantaSound layout (01b §4.4).
                                    type: object
                                    properties:
                                      ambisonics:
                                        type: object
                                        properties:
                                          order:
                                            type: integer
                                            minimum: 0
                                            maximum: 7
                                          normalisation:
                                            anyOf:
                                              - enum:
                                                  - SN3D
                                                  - N3D
                                                  - FuMa
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          channelOrder:
                                            anyOf:
                                              - enum:
                                                  - ACN
                                                  - FuMa
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      decoder:
                                        type: object
                                        properties:
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - allrad
                                                  - sad
                                                  - mmd
                                                  - epad
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          dualBand:
                                            type: boolean
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      speakers:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - id
                                            - azimuth
                                            - elevation
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            azimuth:
                                              type: number
                                              minimum: -360
                                              maximum: 360
                                              description: ° (0 = front, clockwise from above)
                                            elevation:
                                              type: number
                                              minimum: -90
                                              maximum: 90
                                              description: ° (0 = spring line)
                                            distance:
                                              type: number
                                              exclusiveMinimum: 0
                                              description: m
                                            channel:
                                              type: integer
                                              minimum: 1
                                            delayMs:
                                              type: number
                                              minimum: 0
                                            gainDb:
                                              type: number
                                              minimum: -144
                                              maximum: 24
                                            kind:
                                              anyOf:
                                                - enum:
                                                    - fullrange
                                                    - subwoofer
                                                    - satellite
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            lfe:
                                              type: boolean
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      roomCorrection:
                                        type: object
                                        required:
                                          - file
                                        properties:
                                          file:
                                            description: >-
                                              Entry path inside the container:
                                              relative, `/`-separated, no `..`
                                              segment, no backslash, no NUL.
                                            type: string
                                            minLength: 1
                                            maxLength: 1024
                                            pattern: >-
                                              ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - fir
                                                  - iir
                                                  - peq
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      devices:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - id
                                            - kind
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            name:
                                              type: string
                                            kind:
                                              anyOf:
                                                - enum:
                                                    - qrd
                                                    - patefon
                                                    - karmic_cluster
                                                    - speaker_amp
                                                    - microphone
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            address:
                                              type: string
                                              minLength: 1
                                              description: e.g. osc://10.0.0.20:9000
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  compat:
                                    description: >-
                                      Declarative mappings for the A6 gateways
                                      (01b §4.7); never required for playback.
                                    type: object
                                    propertyNames:
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
                                    additionalProperties:
                                      type: object
                                patternProperties:
                                  ^x-: true
                            required:
                              - id
                              - revision
                              - status
                              - meta
                              - dome
                              - displays
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              revision:
                                description: >-
                                  Monotonic resource revision; the strong ETag
                                  is derived from it.
                                type: integer
                                minimum: 0
                              status:
                                anyOf:
                                  - enum:
                                      - idle
                                      - loading
                                      - ready
                                      - playing
                                      - degraded
                                      - error
                                  - type: string
                                    pattern: ^[a-z][a-z_-]{0,31}$
                              default:
                                type: boolean
                                description: >-
                                  true for the venue the alias `default`
                                  resolves to
                              activeShowId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              createdAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            unevaluatedProperties: false
                        $defs:
                          venue:
                            type: object
                            allOf:
                              - description: >-
                                  Venue content shared by GET / PUT / POST: the
                                  .dome venue sections.
                                type: object
                                properties:
                                  meta:
                                    type: object
                                    required:
                                      - id
                                      - title
                                    properties:
                                      id:
                                        description: >-
                                          Stable document id (UUID, lowercase);
                                          the venue / show id on import (02e
                                          §3.2).
                                        type: string
                                        pattern: >-
                                          ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                      title:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). Localised text map
                                          {"en":…,"ru":…}, 02e §3.1 (as .dome
                                          meta.title).
                                        title: Localised text
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                                        $defs:
                                          textOrI18n:
                                            description: >-
                                              Plain string (treated as `en`) or a
                                              localised map. (map branch = the root
                                              schema, inlined for tools that
                                              mis-handle self references)
                                            anyOf:
                                              - type: string
                                              - type: object
                                                minProperties: 1
                                                propertyNames:
                                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                additionalProperties:
                                                  type: string
                                                examples:
                                                  - en: Intro
                                                    ru: Вступление
                                      description:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). Localised text map
                                          {"en":…,"ru":…}, 02e §3.1 (as .dome
                                          meta.title).
                                        title: Localised text
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                                        $defs:
                                          textOrI18n:
                                            description: >-
                                              Plain string (treated as `en`) or a
                                              localised map. (map branch = the root
                                              schema, inlined for tools that
                                              mis-handle self references)
                                            anyOf:
                                              - type: string
                                              - type: object
                                                minProperties: 1
                                                propertyNames:
                                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                additionalProperties:
                                                  type: string
                                                examples:
                                                  - en: Intro
                                                    ru: Вступление
                                      authors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - name
                                          properties:
                                            name:
                                              type: string
                                              minLength: 1
                                            email:
                                              type: string
                                              format: email
                                            url:
                                              type: string
                                              format: uri
                                            role:
                                              type: string
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      created:
                                        type: string
                                        format: date-time
                                      modified:
                                        type: string
                                        format: date-time
                                      generator:
                                        type: object
                                        required:
                                          - name
                                        properties:
                                          name:
                                            type: string
                                            minLength: 1
                                          version:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      license:
                                        type: string
                                        minLength: 1
                                        default: NativeMindNONC
                                      tags:
                                        type: array
                                        items:
                                          type: string
                                          minLength: 1
                                          maxLength: 64
                                        uniqueItems: true
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  dome:
                                    description: >-
                                      Dome geometry (01b §4.1). Right-handed,
                                      metres, degrees; +Y zenith, -Z front.
                                    type: object
                                    required:
                                      - mode
                                      - shape
                                      - radius
                                    properties:
                                      mode:
                                        anyOf:
                                          - enum:
                                              - classical
                                              - quantum
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      shape:
                                        anyOf:
                                          - enum:
                                              - hemisphere
                                              - sphere
                                              - truncated
                                              - cylinder
                                              - cylinder_outer
                                              - cone
                                              - pyramid
                                              - geodesic
                                              - flat
                                              - multiwall
                                              - cave
                                              - volumetric
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      radius:
                                        type: number
                                        exclusiveMinimum: 0
                                        description: m
                                      tilt:
                                        type: number
                                        minimum: -90
                                        maximum: 90
                                        description: ° forward tilt of the dome axis
                                      truncation:
                                        type: number
                                        minimum: -90
                                        maximum: 90
                                        description: >-
                                          ° below the spring line projected
                                          (negative = cut off)
                                      orientation:
                                        anyOf:
                                          - enum:
                                              - upright
                                              - inverted
                                              - tilted
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      springLineHeight:
                                        type: number
                                        description: m above floor
                                      surface:
                                        type: object
                                        properties:
                                          gain:
                                            type: number
                                            minimum: 0
                                          material:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      seating:
                                        anyOf:
                                          - enum:
                                              - unidirectional
                                              - concentric
                                              - free
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      sweetSpot:
                                        type: array
                                        items:
                                          type: number
                                        minItems: 3
                                        maxItems: 3
                                        description: '[x, y, z], metres, dome frame (01b §3).'
                                      angularBase:
                                        type: integer
                                        minimum: 1
                                        description: >-
                                          Quantum mode only: presentation base of
                                          the circle (e.g. 108); values stay in
                                          degrees.
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                    if:
                                      required:
                                        - angularBase
                                    then:
                                      properties:
                                        mode:
                                          const: quantum
                                  displays:
                                    type: array
                                    items:
                                      description: >-
                                        Visual device (01b §4.2): projector
                                        (incl. fisheye), LED, prism unit,
                                        smartphone + lens, NDI output.
                                      type: object
                                      required:
                                        - id
                                        - type
                                      properties:
                                        id:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        name:
                                          type: string
                                        type:
                                          anyOf:
                                            - enum:
                                                - projector
                                                - led
                                                - prism_unit
                                                - smartphone_lens
                                                - ndi_output
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        model:
                                          type: object
                                          properties:
                                            vendor:
                                              type: string
                                            product:
                                              type: string
                                            variant:
                                              type: string
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        resolution:
                                          type: array
                                          items:
                                            type: integer
                                            minimum: 1
                                          minItems: 2
                                          maxItems: 2
                                          description: '[width, height] or [cols, rows].'
                                        refreshRate:
                                          type: number
                                          exclusiveMinimum: 0
                                          description: Hz
                                        lens:
                                          type: object
                                          required:
                                            - kind
                                          properties:
                                            kind:
                                              anyOf:
                                                - enum:
                                                    - fisheye
                                                    - standard
                                                    - pyramid
                                                    - prism
                                                    - equirect
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            fov:
                                              type: number
                                              exclusiveMinimum: 0
                                              maximum: 360
                                              description: °
                                            throwRatio:
                                              type:
                                                - number
                                                - 'null'
                                              exclusiveMinimum: 0
                                            shift:
                                              description: >-
                                                lens shift [x, y] as a fraction of the
                                                image size
                                              type: array
                                              items:
                                                type: number
                                              minItems: 2
                                              maxItems: 2
                                            distortion:
                                              description: '1.1 (02b E4): lens distortion model.'
                                              type: object
                                              required:
                                                - model
                                              properties:
                                                model:
                                                  anyOf:
                                                    - enum:
                                                        - brown-conrady
                                                        - fisheye-equidistant
                                                        - fisheye-equisolid
                                                        - fisheye-poly
                                                        - radial
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                coefficients:
                                                  type: array
                                                  items:
                                                    type: number
                                                  maxItems: 16
                                                  description: >-
                                                    brown-conrady [k1,k2,k3,p1,p2];
                                                    fisheye-poly [k1..k4]; radial [k1,k2,k3]
                                                    (01b §4.2.1)
                                                centre:
                                                  type: array
                                                  items:
                                                    type: number
                                                    minimum: 0
                                                    maximum: 1
                                                  minItems: 2
                                                  maxItems: 2
                                                  description: >-
                                                    distortion centre, normalised image
                                                    coordinates
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            profileRef:
                                              description: >-
                                                1.1 (02b E4): lens profile id shipped as
                                                data (engine
                                                data/lens_profiles/<id>.json), e.g.
                                                sh001.
                                              type: string
                                              pattern: ^[a-z0-9][a-z0-9._-]{0,63}$
                                            curvature:
                                              description: >-
                                                1.1 (EN, curved LED walls): the display
                                                surface is a cylinder (axis vertical =
                                                curved horizontally, the usual curved
                                                wall) or a sphere section; absent =
                                                flat.
                                              type: object
                                              required:
                                                - radius
                                              properties:
                                                radius:
                                                  type: number
                                                  exclusiveMinimum: 0
                                                  description: m, curvature radius of the panel surface
                                                axis:
                                                  anyOf:
                                                    - enum:
                                                        - vertical
                                                        - horizontal
                                                        - spherical
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                  default: vertical
                                                concave:
                                                  type: boolean
                                                  default: true
                                                  description: true = curved towards the audience
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        pose:
                                          type: object
                                          properties:
                                            position:
                                              type: array
                                              items:
                                                type: number
                                              minItems: 3
                                              maxItems: 3
                                              description: '[x, y, z], metres, dome frame (01b §3).'
                                            rotation:
                                              type: array
                                              items:
                                                type: number
                                                minimum: -1
                                                maximum: 1
                                              minItems: 4
                                              maxItems: 4
                                              description: Rotation quaternion [x, y, z, w].
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        output:
                                          type: object
                                          properties:
                                            host:
                                              type: string
                                              minLength: 1
                                            connector:
                                              type: string
                                              minLength: 1
                                              description: e.g. DP-1, HDMI-1, stream:<displayId>
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        colour:
                                          type: object
                                          properties:
                                            gamut:
                                              anyOf:
                                                - enum:
                                                    - rec709
                                                    - dci-p3
                                                    - display-p3
                                                    - rec2020
                                                    - srgb
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            gamma:
                                              type: number
                                              exclusiveMinimum: 0
                                            whitePoint:
                                              type: string
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        stereo:
                                          oneOf:
                                            - type: 'null'
                                            - type: object
                                              required:
                                                - eye
                                              properties:
                                                eye:
                                                  enum:
                                                    - left
                                                    - right
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                        optics:
                                          description: >-
                                            1.1 (02a V12, replaces
                                            x-freedome-optics): per-face layout of
                                            prism / pyramid optics on the display
                                            frame.
                                          type: object
                                          required:
                                            - faces
                                          properties:
                                            faces:
                                              enum:
                                                - 1
                                                - 3
                                                - 4
                                                - 6
                                            faceAngle:
                                              type: number
                                              exclusiveMinimum: 0
                                              exclusiveMaximum: 90
                                              description: ° between a face and the screen plane
                                            viewports:
                                              type: array
                                              maxItems: 6
                                              items:
                                                type: object
                                                required:
                                                  - face
                                                  - rect
                                                properties:
                                                  face:
                                                    type: integer
                                                    minimum: 0
                                                    maximum: 5
                                                    description: 0 = front, clockwise from above
                                                  rect:
                                                    description: >-
                                                      Normalised [x, y, w, h] of the display
                                                      frame (0..1, origin top-left, y down;
                                                      01b §3).
                                                    type: array
                                                    items:
                                                      type: number
                                                      minimum: 0
                                                      maximum: 1
                                                    minItems: 4
                                                    maxItems: 4
                                                  rotation:
                                                    type: number
                                                    minimum: -360
                                                    maximum: 360
                                                    description: ° clockwise
                                                  mirror:
                                                    enum:
                                                      - none
                                                      - horizontal
                                                      - vertical
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                            activeRegion:
                                              description: >-
                                                Normalised [x, y, w, h] of the display
                                                frame (0..1, origin top-left, y down;
                                                01b §3).
                                              type: array
                                              items:
                                                type: number
                                                minimum: 0
                                                maximum: 1
                                              minItems: 4
                                              maxItems: 4
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        prism:
                                          description: >-
                                            1.1 (02b E4): physical prism / pyramid
                                            geometry (engine PrismGeometry).
                                          type: object
                                          required:
                                            - faces
                                          properties:
                                            faces:
                                              type: integer
                                              minimum: 1
                                              maximum: 12
                                            baseMm:
                                              type: number
                                              exclusiveMinimum: 0
                                            heightMm:
                                              type: number
                                              exclusiveMinimum: 0
                                            faceAngle:
                                              type: number
                                              exclusiveMinimum: 0
                                              exclusiveMaximum: 90
                                            refractiveIndex:
                                              type: number
                                              minimum: 1
                                            solid:
                                              type: boolean
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                  calibration:
                                    description: >-
                                      Per-display calibration (01b §4.3); keys
                                      of `displays` are display ids (checked by
                                      the codecs).
                                    type: object
                                    properties:
                                      displays:
                                        type: object
                                        propertyNames:
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                        additionalProperties:
                                          type: object
                                          properties:
                                            warp:
                                              type: object
                                              required:
                                                - file
                                              properties:
                                                file:
                                                  description: FDMESH file (01b §5)
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                kind:
                                                  anyOf:
                                                    - enum:
                                                        - uv-grid
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                size:
                                                  type: array
                                                  items:
                                                    type: integer
                                                    minimum: 1
                                                  minItems: 2
                                                  maxItems: 2
                                                  description: '[width, height] or [cols, rows].'
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            blend:
                                              type: object
                                              required:
                                                - file
                                              properties:
                                                file:
                                                  description: 16-bit greyscale PNG
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                bitDepth:
                                                  enum:
                                                    - 8
                                                    - 16
                                                gamma:
                                                  type: number
                                                  exclusiveMinimum: 0
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            colour:
                                              type: object
                                              properties:
                                                lut:
                                                  description: Adobe / Resolve .cube 3D LUT
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                blackLevel:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 1
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            report:
                                              type: object
                                              properties:
                                                method:
                                                  anyOf:
                                                    - enum:
                                                        - camera-homography
                                                        - manual
                                                        - imported
                                                        - model
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                date:
                                                  type: string
                                                  format: date-time
                                                meanError:
                                                  type: number
                                                  minimum: 0
                                                maxError:
                                                  type: number
                                                  minimum: 0
                                                unit:
                                                  anyOf:
                                                    - enum:
                                                        - px
                                                        - deg
                                                        - mm
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                file:
                                                  description: >-
                                                    Entry path inside the container:
                                                    relative, `/`-separated, no `..`
                                                    segment, no backslash, no NUL.
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  audio:
                                    description: AnantaSound layout (01b §4.4).
                                    type: object
                                    properties:
                                      ambisonics:
                                        type: object
                                        properties:
                                          order:
                                            type: integer
                                            minimum: 0
                                            maximum: 7
                                          normalisation:
                                            anyOf:
                                              - enum:
                                                  - SN3D
                                                  - N3D
                                                  - FuMa
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          channelOrder:
                                            anyOf:
                                              - enum:
                                                  - ACN
                                                  - FuMa
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      decoder:
                                        type: object
                                        properties:
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - allrad
                                                  - sad
                                                  - mmd
                                                  - epad
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          dualBand:
                                            type: boolean
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      speakers:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - id
                                            - azimuth
                                            - elevation
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            azimuth:
                                              type: number
                                              minimum: -360
                                              maximum: 360
                                              description: ° (0 = front, clockwise from above)
                                            elevation:
                                              type: number
                                              minimum: -90
                                              maximum: 90
                                              description: ° (0 = spring line)
                                            distance:
                                              type: number
                                              exclusiveMinimum: 0
                                              description: m
                                            channel:
                                              type: integer
                                              minimum: 1
                                            delayMs:
                                              type: number
                                              minimum: 0
                                            gainDb:
                                              type: number
                                              minimum: -144
                                              maximum: 24
                                            kind:
                                              anyOf:
                                                - enum:
                                                    - fullrange
                                                    - subwoofer
                                                    - satellite
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            lfe:
                                              type: boolean
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      roomCorrection:
                                        type: object
                                        required:
                                          - file
                                        properties:
                                          file:
                                            description: >-
                                              Entry path inside the container:
                                              relative, `/`-separated, no `..`
                                              segment, no backslash, no NUL.
                                            type: string
                                            minLength: 1
                                            maxLength: 1024
                                            pattern: >-
                                              ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - fir
                                                  - iir
                                                  - peq
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      devices:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - id
                                            - kind
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            name:
                                              type: string
                                            kind:
                                              anyOf:
                                                - enum:
                                                    - qrd
                                                    - patefon
                                                    - karmic_cluster
                                                    - speaker_amp
                                                    - microphone
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            address:
                                              type: string
                                              minLength: 1
                                              description: e.g. osc://10.0.0.20:9000
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  compat:
                                    description: >-
                                      Declarative mappings for the A6 gateways
                                      (01b §4.7); never required for playback.
                                    type: object
                                    propertyNames:
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
                                    additionalProperties:
                                      type: object
                                patternProperties:
                                  ^x-: true
                            required:
                              - id
                              - revision
                              - status
                              - meta
                              - dome
                              - displays
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              revision:
                                description: >-
                                  Monotonic resource revision; the strong ETag
                                  is derived from it.
                                type: integer
                                minimum: 0
                              status:
                                anyOf:
                                  - enum:
                                      - idle
                                      - loading
                                      - ready
                                      - playing
                                      - degraded
                                      - error
                                  - type: string
                                    pattern: ^[a-z][a-z_-]{0,31}$
                              default:
                                type: boolean
                                description: >-
                                  true for the venue the alias `default`
                                  resolves to
                              activeShowId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              createdAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            unevaluatedProperties: false
                          body:
                            description: >-
                              Venue content shared by GET / PUT / POST: the
                              .dome venue sections.
                            type: object
                            properties:
                              meta:
                                type: object
                                required:
                                  - id
                                  - title
                                properties:
                                  id:
                                    description: >-
                                      Stable document id (UUID, lowercase); the
                                      venue / show id on import (02e §3.2).
                                    type: string
                                    pattern: >-
                                      ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                  title:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). Localised text map
                                      {"en":…,"ru":…}, 02e §3.1 (as .dome
                                      meta.title).
                                    title: Localised text
                                    type: object
                                    minProperties: 1
                                    propertyNames:
                                      pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                    additionalProperties:
                                      type: string
                                    examples:
                                      - en: Intro
                                        ru: Вступление
                                    $defs:
                                      textOrI18n:
                                        description: >-
                                          Plain string (treated as `en`) or a
                                          localised map. (map branch = the root
                                          schema, inlined for tools that
                                          mis-handle self references)
                                        anyOf:
                                          - type: string
                                          - type: object
                                            minProperties: 1
                                            propertyNames:
                                              pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                            additionalProperties:
                                              type: string
                                            examples:
                                              - en: Intro
                                                ru: Вступление
                                  description:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). Localised text map
                                      {"en":…,"ru":…}, 02e §3.1 (as .dome
                                      meta.title).
                                    title: Localised text
                                    type: object
                                    minProperties: 1
                                    propertyNames:
                                      pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                    additionalProperties:
                                      type: string
                                    examples:
                                      - en: Intro
                                        ru: Вступление
                                    $defs:
                                      textOrI18n:
                                        description: >-
                                          Plain string (treated as `en`) or a
                                          localised map. (map branch = the root
                                          schema, inlined for tools that
                                          mis-handle self references)
                                        anyOf:
                                          - type: string
                                          - type: object
                                            minProperties: 1
                                            propertyNames:
                                              pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                            additionalProperties:
                                              type: string
                                            examples:
                                              - en: Intro
                                                ru: Вступление
                                  authors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - name
                                      properties:
                                        name:
                                          type: string
                                          minLength: 1
                                        email:
                                          type: string
                                          format: email
                                        url:
                                          type: string
                                          format: uri
                                        role:
                                          type: string
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                  created:
                                    type: string
                                    format: date-time
                                  modified:
                                    type: string
                                    format: date-time
                                  generator:
                                    type: object
                                    required:
                                      - name
                                    properties:
                                      name:
                                        type: string
                                        minLength: 1
                                      version:
                                        type: string
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  license:
                                    type: string
                                    minLength: 1
                                    default: NativeMindNONC
                                  tags:
                                    type: array
                                    items:
                                      type: string
                                      minLength: 1
                                      maxLength: 64
                                    uniqueItems: true
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                              dome:
                                description: >-
                                  Dome geometry (01b §4.1). Right-handed,
                                  metres, degrees; +Y zenith, -Z front.
                                type: object
                                required:
                                  - mode
                                  - shape
                                  - radius
                                properties:
                                  mode:
                                    anyOf:
                                      - enum:
                                          - classical
                                          - quantum
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  shape:
                                    anyOf:
                                      - enum:
                                          - hemisphere
                                          - sphere
                                          - truncated
                                          - cylinder
                                          - cylinder_outer
                                          - cone
                                          - pyramid
                                          - geodesic
                                          - flat
                                          - multiwall
                                          - cave
                                          - volumetric
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  radius:
                                    type: number
                                    exclusiveMinimum: 0
                                    description: m
                                  tilt:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                    description: ° forward tilt of the dome axis
                                  truncation:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                    description: >-
                                      ° below the spring line projected
                                      (negative = cut off)
                                  orientation:
                                    anyOf:
                                      - enum:
                                          - upright
                                          - inverted
                                          - tilted
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  springLineHeight:
                                    type: number
                                    description: m above floor
                                  surface:
                                    type: object
                                    properties:
                                      gain:
                                        type: number
                                        minimum: 0
                                      material:
                                        type: string
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  seating:
                                    anyOf:
                                      - enum:
                                          - unidirectional
                                          - concentric
                                          - free
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  sweetSpot:
                                    type: array
                                    items:
                                      type: number
                                    minItems: 3
                                    maxItems: 3
                                    description: '[x, y, z], metres, dome frame (01b §3).'
                                  angularBase:
                                    type: integer
                                    minimum: 1
                                    description: >-
                                      Quantum mode only: presentation base of
                                      the circle (e.g. 108); values stay in
                                      degrees.
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                if:
                                  required:
                                    - angularBase
                                then:
                                  properties:
                                    mode:
                                      const: quantum
                              displays:
                                type: array
                                items:
                                  description: >-
                                    Visual device (01b §4.2): projector (incl.
                                    fisheye), LED, prism unit, smartphone +
                                    lens, NDI output.
                                  type: object
                                  required:
                                    - id
                                    - type
                                  properties:
                                    id:
                                      description: Document-scoped id (02e §3.2).
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    name:
                                      type: string
                                    type:
                                      anyOf:
                                        - enum:
                                            - projector
                                            - led
                                            - prism_unit
                                            - smartphone_lens
                                            - ndi_output
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    model:
                                      type: object
                                      properties:
                                        vendor:
                                          type: string
                                        product:
                                          type: string
                                        variant:
                                          type: string
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    resolution:
                                      type: array
                                      items:
                                        type: integer
                                        minimum: 1
                                      minItems: 2
                                      maxItems: 2
                                      description: '[width, height] or [cols, rows].'
                                    refreshRate:
                                      type: number
                                      exclusiveMinimum: 0
                                      description: Hz
                                    lens:
                                      type: object
                                      required:
                                        - kind
                                      properties:
                                        kind:
                                          anyOf:
                                            - enum:
                                                - fisheye
                                                - standard
                                                - pyramid
                                                - prism
                                                - equirect
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        fov:
                                          type: number
                                          exclusiveMinimum: 0
                                          maximum: 360
                                          description: °
                                        throwRatio:
                                          type:
                                            - number
                                            - 'null'
                                          exclusiveMinimum: 0
                                        shift:
                                          description: >-
                                            lens shift [x, y] as a fraction of the
                                            image size
                                          type: array
                                          items:
                                            type: number
                                          minItems: 2
                                          maxItems: 2
                                        distortion:
                                          description: '1.1 (02b E4): lens distortion model.'
                                          type: object
                                          required:
                                            - model
                                          properties:
                                            model:
                                              anyOf:
                                                - enum:
                                                    - brown-conrady
                                                    - fisheye-equidistant
                                                    - fisheye-equisolid
                                                    - fisheye-poly
                                                    - radial
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            coefficients:
                                              type: array
                                              items:
                                                type: number
                                              maxItems: 16
                                              description: >-
                                                brown-conrady [k1,k2,k3,p1,p2];
                                                fisheye-poly [k1..k4]; radial [k1,k2,k3]
                                                (01b §4.2.1)
                                            centre:
                                              type: array
                                              items:
                                                type: number
                                                minimum: 0
                                                maximum: 1
                                              minItems: 2
                                              maxItems: 2
                                              description: >-
                                                distortion centre, normalised image
                                                coordinates
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        profileRef:
                                          description: >-
                                            1.1 (02b E4): lens profile id shipped as
                                            data (engine
                                            data/lens_profiles/<id>.json), e.g.
                                            sh001.
                                          type: string
                                          pattern: ^[a-z0-9][a-z0-9._-]{0,63}$
                                        curvature:
                                          description: >-
                                            1.1 (EN, curved LED walls): the display
                                            surface is a cylinder (axis vertical =
                                            curved horizontally, the usual curved
                                            wall) or a sphere section; absent =
                                            flat.
                                          type: object
                                          required:
                                            - radius
                                          properties:
                                            radius:
                                              type: number
                                              exclusiveMinimum: 0
                                              description: m, curvature radius of the panel surface
                                            axis:
                                              anyOf:
                                                - enum:
                                                    - vertical
                                                    - horizontal
                                                    - spherical
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              default: vertical
                                            concave:
                                              type: boolean
                                              default: true
                                              description: true = curved towards the audience
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    pose:
                                      type: object
                                      properties:
                                        position:
                                          type: array
                                          items:
                                            type: number
                                          minItems: 3
                                          maxItems: 3
                                          description: '[x, y, z], metres, dome frame (01b §3).'
                                        rotation:
                                          type: array
                                          items:
                                            type: number
                                            minimum: -1
                                            maximum: 1
                                          minItems: 4
                                          maxItems: 4
                                          description: Rotation quaternion [x, y, z, w].
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    output:
                                      type: object
                                      properties:
                                        host:
                                          type: string
                                          minLength: 1
                                        connector:
                                          type: string
                                          minLength: 1
                                          description: e.g. DP-1, HDMI-1, stream:<displayId>
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    colour:
                                      type: object
                                      properties:
                                        gamut:
                                          anyOf:
                                            - enum:
                                                - rec709
                                                - dci-p3
                                                - display-p3
                                                - rec2020
                                                - srgb
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        gamma:
                                          type: number
                                          exclusiveMinimum: 0
                                        whitePoint:
                                          type: string
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    stereo:
                                      oneOf:
                                        - type: 'null'
                                        - type: object
                                          required:
                                            - eye
                                          properties:
                                            eye:
                                              enum:
                                                - left
                                                - right
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                    optics:
                                      description: >-
                                        1.1 (02a V12, replaces
                                        x-freedome-optics): per-face layout of
                                        prism / pyramid optics on the display
                                        frame.
                                      type: object
                                      required:
                                        - faces
                                      properties:
                                        faces:
                                          enum:
                                            - 1
                                            - 3
                                            - 4
                                            - 6
                                        faceAngle:
                                          type: number
                                          exclusiveMinimum: 0
                                          exclusiveMaximum: 90
                                          description: ° between a face and the screen plane
                                        viewports:
                                          type: array
                                          maxItems: 6
                                          items:
                                            type: object
                                            required:
                                              - face
                                              - rect
                                            properties:
                                              face:
                                                type: integer
                                                minimum: 0
                                                maximum: 5
                                                description: 0 = front, clockwise from above
                                              rect:
                                                description: >-
                                                  Normalised [x, y, w, h] of the display
                                                  frame (0..1, origin top-left, y down;
                                                  01b §3).
                                                type: array
                                                items:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 1
                                                minItems: 4
                                                maxItems: 4
                                              rotation:
                                                type: number
                                                minimum: -360
                                                maximum: 360
                                                description: ° clockwise
                                              mirror:
                                                enum:
                                                  - none
                                                  - horizontal
                                                  - vertical
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        activeRegion:
                                          description: >-
                                            Normalised [x, y, w, h] of the display
                                            frame (0..1, origin top-left, y down;
                                            01b §3).
                                          type: array
                                          items:
                                            type: number
                                            minimum: 0
                                            maximum: 1
                                          minItems: 4
                                          maxItems: 4
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    prism:
                                      description: >-
                                        1.1 (02b E4): physical prism / pyramid
                                        geometry (engine PrismGeometry).
                                      type: object
                                      required:
                                        - faces
                                      properties:
                                        faces:
                                          type: integer
                                          minimum: 1
                                          maximum: 12
                                        baseMm:
                                          type: number
                                          exclusiveMinimum: 0
                                        heightMm:
                                          type: number
                                          exclusiveMinimum: 0
                                        faceAngle:
                                          type: number
                                          exclusiveMinimum: 0
                                          exclusiveMaximum: 90
                                        refractiveIndex:
                                          type: number
                                          minimum: 1
                                        solid:
                                          type: boolean
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                              calibration:
                                description: >-
                                  Per-display calibration (01b §4.3); keys of
                                  `displays` are display ids (checked by the
                                  codecs).
                                type: object
                                properties:
                                  displays:
                                    type: object
                                    propertyNames:
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                    additionalProperties:
                                      type: object
                                      properties:
                                        warp:
                                          type: object
                                          required:
                                            - file
                                          properties:
                                            file:
                                              description: FDMESH file (01b §5)
                                              type: string
                                              minLength: 1
                                              maxLength: 1024
                                              pattern: >-
                                                ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                            kind:
                                              anyOf:
                                                - enum:
                                                    - uv-grid
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            size:
                                              type: array
                                              items:
                                                type: integer
                                                minimum: 1
                                              minItems: 2
                                              maxItems: 2
                                              description: '[width, height] or [cols, rows].'
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        blend:
                                          type: object
                                          required:
                                            - file
                                          properties:
                                            file:
                                              description: 16-bit greyscale PNG
                                              type: string
                                              minLength: 1
                                              maxLength: 1024
                                              pattern: >-
                                                ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                            bitDepth:
                                              enum:
                                                - 8
                                                - 16
                                            gamma:
                                              type: number
                                              exclusiveMinimum: 0
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        colour:
                                          type: object
                                          properties:
                                            lut:
                                              description: Adobe / Resolve .cube 3D LUT
                                              type: string
                                              minLength: 1
                                              maxLength: 1024
                                              pattern: >-
                                                ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                            blackLevel:
                                              type: number
                                              minimum: 0
                                              maximum: 1
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        report:
                                          type: object
                                          properties:
                                            method:
                                              anyOf:
                                                - enum:
                                                    - camera-homography
                                                    - manual
                                                    - imported
                                                    - model
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            date:
                                              type: string
                                              format: date-time
                                            meanError:
                                              type: number
                                              minimum: 0
                                            maxError:
                                              type: number
                                              minimum: 0
                                            unit:
                                              anyOf:
                                                - enum:
                                                    - px
                                                    - deg
                                                    - mm
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            file:
                                              description: >-
                                                Entry path inside the container:
                                                relative, `/`-separated, no `..`
                                                segment, no backslash, no NUL.
                                              type: string
                                              minLength: 1
                                              maxLength: 1024
                                              pattern: >-
                                                ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                              audio:
                                description: AnantaSound layout (01b §4.4).
                                type: object
                                properties:
                                  ambisonics:
                                    type: object
                                    properties:
                                      order:
                                        type: integer
                                        minimum: 0
                                        maximum: 7
                                      normalisation:
                                        anyOf:
                                          - enum:
                                              - SN3D
                                              - N3D
                                              - FuMa
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      channelOrder:
                                        anyOf:
                                          - enum:
                                              - ACN
                                              - FuMa
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  decoder:
                                    type: object
                                    properties:
                                      kind:
                                        anyOf:
                                          - enum:
                                              - allrad
                                              - sad
                                              - mmd
                                              - epad
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      dualBand:
                                        type: boolean
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  speakers:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - id
                                        - azimuth
                                        - elevation
                                      properties:
                                        id:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        azimuth:
                                          type: number
                                          minimum: -360
                                          maximum: 360
                                          description: ° (0 = front, clockwise from above)
                                        elevation:
                                          type: number
                                          minimum: -90
                                          maximum: 90
                                          description: ° (0 = spring line)
                                        distance:
                                          type: number
                                          exclusiveMinimum: 0
                                          description: m
                                        channel:
                                          type: integer
                                          minimum: 1
                                        delayMs:
                                          type: number
                                          minimum: 0
                                        gainDb:
                                          type: number
                                          minimum: -144
                                          maximum: 24
                                        kind:
                                          anyOf:
                                            - enum:
                                                - fullrange
                                                - subwoofer
                                                - satellite
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        lfe:
                                          type: boolean
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                  roomCorrection:
                                    type: object
                                    required:
                                      - file
                                    properties:
                                      file:
                                        description: >-
                                          Entry path inside the container:
                                          relative, `/`-separated, no `..`
                                          segment, no backslash, no NUL.
                                        type: string
                                        minLength: 1
                                        maxLength: 1024
                                        pattern: >-
                                          ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                      kind:
                                        anyOf:
                                          - enum:
                                              - fir
                                              - iir
                                              - peq
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  devices:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - id
                                        - kind
                                      properties:
                                        id:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        name:
                                          type: string
                                        kind:
                                          anyOf:
                                            - enum:
                                                - qrd
                                                - patefon
                                                - karmic_cluster
                                                - speaker_amp
                                                - microphone
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        address:
                                          type: string
                                          minLength: 1
                                          description: e.g. osc://10.0.0.20:9000
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                              compat:
                                description: >-
                                  Declarative mappings for the A6 gateways (01b
                                  §4.7); never required for playback.
                                type: object
                                propertyNames:
                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
                                additionalProperties:
                                  type: object
                            patternProperties:
                              ^x-: true
                          input:
                            description: POST /venues and PUT /venues/{venueId} body.
                            type: object
                            allOf:
                              - description: >-
                                  Venue content shared by GET / PUT / POST: the
                                  .dome venue sections.
                                type: object
                                properties:
                                  meta:
                                    type: object
                                    required:
                                      - id
                                      - title
                                    properties:
                                      id:
                                        description: >-
                                          Stable document id (UUID, lowercase);
                                          the venue / show id on import (02e
                                          §3.2).
                                        type: string
                                        pattern: >-
                                          ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                      title:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). Localised text map
                                          {"en":…,"ru":…}, 02e §3.1 (as .dome
                                          meta.title).
                                        title: Localised text
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                                        $defs:
                                          textOrI18n:
                                            description: >-
                                              Plain string (treated as `en`) or a
                                              localised map. (map branch = the root
                                              schema, inlined for tools that
                                              mis-handle self references)
                                            anyOf:
                                              - type: string
                                              - type: object
                                                minProperties: 1
                                                propertyNames:
                                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                additionalProperties:
                                                  type: string
                                                examples:
                                                  - en: Intro
                                                    ru: Вступление
                                      description:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). Localised text map
                                          {"en":…,"ru":…}, 02e §3.1 (as .dome
                                          meta.title).
                                        title: Localised text
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                                        $defs:
                                          textOrI18n:
                                            description: >-
                                              Plain string (treated as `en`) or a
                                              localised map. (map branch = the root
                                              schema, inlined for tools that
                                              mis-handle self references)
                                            anyOf:
                                              - type: string
                                              - type: object
                                                minProperties: 1
                                                propertyNames:
                                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                additionalProperties:
                                                  type: string
                                                examples:
                                                  - en: Intro
                                                    ru: Вступление
                                      authors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - name
                                          properties:
                                            name:
                                              type: string
                                              minLength: 1
                                            email:
                                              type: string
                                              format: email
                                            url:
                                              type: string
                                              format: uri
                                            role:
                                              type: string
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      created:
                                        type: string
                                        format: date-time
                                      modified:
                                        type: string
                                        format: date-time
                                      generator:
                                        type: object
                                        required:
                                          - name
                                        properties:
                                          name:
                                            type: string
                                            minLength: 1
                                          version:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      license:
                                        type: string
                                        minLength: 1
                                        default: NativeMindNONC
                                      tags:
                                        type: array
                                        items:
                                          type: string
                                          minLength: 1
                                          maxLength: 64
                                        uniqueItems: true
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  dome:
                                    description: >-
                                      Dome geometry (01b §4.1). Right-handed,
                                      metres, degrees; +Y zenith, -Z front.
                                    type: object
                                    required:
                                      - mode
                                      - shape
                                      - radius
                                    properties:
                                      mode:
                                        anyOf:
                                          - enum:
                                              - classical
                                              - quantum
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      shape:
                                        anyOf:
                                          - enum:
                                              - hemisphere
                                              - sphere
                                              - truncated
                                              - cylinder
                                              - cylinder_outer
                                              - cone
                                              - pyramid
                                              - geodesic
                                              - flat
                                              - multiwall
                                              - cave
                                              - volumetric
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      radius:
                                        type: number
                                        exclusiveMinimum: 0
                                        description: m
                                      tilt:
                                        type: number
                                        minimum: -90
                                        maximum: 90
                                        description: ° forward tilt of the dome axis
                                      truncation:
                                        type: number
                                        minimum: -90
                                        maximum: 90
                                        description: >-
                                          ° below the spring line projected
                                          (negative = cut off)
                                      orientation:
                                        anyOf:
                                          - enum:
                                              - upright
                                              - inverted
                                              - tilted
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      springLineHeight:
                                        type: number
                                        description: m above floor
                                      surface:
                                        type: object
                                        properties:
                                          gain:
                                            type: number
                                            minimum: 0
                                          material:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      seating:
                                        anyOf:
                                          - enum:
                                              - unidirectional
                                              - concentric
                                              - free
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      sweetSpot:
                                        type: array
                                        items:
                                          type: number
                                        minItems: 3
                                        maxItems: 3
                                        description: '[x, y, z], metres, dome frame (01b §3).'
                                      angularBase:
                                        type: integer
                                        minimum: 1
                                        description: >-
                                          Quantum mode only: presentation base of
                                          the circle (e.g. 108); values stay in
                                          degrees.
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                    if:
                                      required:
                                        - angularBase
                                    then:
                                      properties:
                                        mode:
                                          const: quantum
                                  displays:
                                    type: array
                                    items:
                                      description: >-
                                        Visual device (01b §4.2): projector
                                        (incl. fisheye), LED, prism unit,
                                        smartphone + lens, NDI output.
                                      type: object
                                      required:
                                        - id
                                        - type
                                      properties:
                                        id:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        name:
                                          type: string
                                        type:
                                          anyOf:
                                            - enum:
                                                - projector
                                                - led
                                                - prism_unit
                                                - smartphone_lens
                                                - ndi_output
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        model:
                                          type: object
                                          properties:
                                            vendor:
                                              type: string
                                            product:
                                              type: string
                                            variant:
                                              type: string
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        resolution:
                                          type: array
                                          items:
                                            type: integer
                                            minimum: 1
                                          minItems: 2
                                          maxItems: 2
                                          description: '[width, height] or [cols, rows].'
                                        refreshRate:
                                          type: number
                                          exclusiveMinimum: 0
                                          description: Hz
                                        lens:
                                          type: object
                                          required:
                                            - kind
                                          properties:
                                            kind:
                                              anyOf:
                                                - enum:
                                                    - fisheye
                                                    - standard
                                                    - pyramid
                                                    - prism
                                                    - equirect
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            fov:
                                              type: number
                                              exclusiveMinimum: 0
                                              maximum: 360
                                              description: °
                                            throwRatio:
                                              type:
                                                - number
                                                - 'null'
                                              exclusiveMinimum: 0
                                            shift:
                                              description: >-
                                                lens shift [x, y] as a fraction of the
                                                image size
                                              type: array
                                              items:
                                                type: number
                                              minItems: 2
                                              maxItems: 2
                                            distortion:
                                              description: '1.1 (02b E4): lens distortion model.'
                                              type: object
                                              required:
                                                - model
                                              properties:
                                                model:
                                                  anyOf:
                                                    - enum:
                                                        - brown-conrady
                                                        - fisheye-equidistant
                                                        - fisheye-equisolid
                                                        - fisheye-poly
                                                        - radial
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                coefficients:
                                                  type: array
                                                  items:
                                                    type: number
                                                  maxItems: 16
                                                  description: >-
                                                    brown-conrady [k1,k2,k3,p1,p2];
                                                    fisheye-poly [k1..k4]; radial [k1,k2,k3]
                                                    (01b §4.2.1)
                                                centre:
                                                  type: array
                                                  items:
                                                    type: number
                                                    minimum: 0
                                                    maximum: 1
                                                  minItems: 2
                                                  maxItems: 2
                                                  description: >-
                                                    distortion centre, normalised image
                                                    coordinates
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            profileRef:
                                              description: >-
                                                1.1 (02b E4): lens profile id shipped as
                                                data (engine
                                                data/lens_profiles/<id>.json), e.g.
                                                sh001.
                                              type: string
                                              pattern: ^[a-z0-9][a-z0-9._-]{0,63}$
                                            curvature:
                                              description: >-
                                                1.1 (EN, curved LED walls): the display
                                                surface is a cylinder (axis vertical =
                                                curved horizontally, the usual curved
                                                wall) or a sphere section; absent =
                                                flat.
                                              type: object
                                              required:
                                                - radius
                                              properties:
                                                radius:
                                                  type: number
                                                  exclusiveMinimum: 0
                                                  description: m, curvature radius of the panel surface
                                                axis:
                                                  anyOf:
                                                    - enum:
                                                        - vertical
                                                        - horizontal
                                                        - spherical
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                  default: vertical
                                                concave:
                                                  type: boolean
                                                  default: true
                                                  description: true = curved towards the audience
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        pose:
                                          type: object
                                          properties:
                                            position:
                                              type: array
                                              items:
                                                type: number
                                              minItems: 3
                                              maxItems: 3
                                              description: '[x, y, z], metres, dome frame (01b §3).'
                                            rotation:
                                              type: array
                                              items:
                                                type: number
                                                minimum: -1
                                                maximum: 1
                                              minItems: 4
                                              maxItems: 4
                                              description: Rotation quaternion [x, y, z, w].
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        output:
                                          type: object
                                          properties:
                                            host:
                                              type: string
                                              minLength: 1
                                            connector:
                                              type: string
                                              minLength: 1
                                              description: e.g. DP-1, HDMI-1, stream:<displayId>
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        colour:
                                          type: object
                                          properties:
                                            gamut:
                                              anyOf:
                                                - enum:
                                                    - rec709
                                                    - dci-p3
                                                    - display-p3
                                                    - rec2020
                                                    - srgb
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            gamma:
                                              type: number
                                              exclusiveMinimum: 0
                                            whitePoint:
                                              type: string
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        stereo:
                                          oneOf:
                                            - type: 'null'
                                            - type: object
                                              required:
                                                - eye
                                              properties:
                                                eye:
                                                  enum:
                                                    - left
                                                    - right
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                        optics:
                                          description: >-
                                            1.1 (02a V12, replaces
                                            x-freedome-optics): per-face layout of
                                            prism / pyramid optics on the display
                                            frame.
                                          type: object
                                          required:
                                            - faces
                                          properties:
                                            faces:
                                              enum:
                                                - 1
                                                - 3
                                                - 4
                                                - 6
                                            faceAngle:
                                              type: number
                                              exclusiveMinimum: 0
                                              exclusiveMaximum: 90
                                              description: ° between a face and the screen plane
                                            viewports:
                                              type: array
                                              maxItems: 6
                                              items:
                                                type: object
                                                required:
                                                  - face
                                                  - rect
                                                properties:
                                                  face:
                                                    type: integer
                                                    minimum: 0
                                                    maximum: 5
                                                    description: 0 = front, clockwise from above
                                                  rect:
                                                    description: >-
                                                      Normalised [x, y, w, h] of the display
                                                      frame (0..1, origin top-left, y down;
                                                      01b §3).
                                                    type: array
                                                    items:
                                                      type: number
                                                      minimum: 0
                                                      maximum: 1
                                                    minItems: 4
                                                    maxItems: 4
                                                  rotation:
                                                    type: number
                                                    minimum: -360
                                                    maximum: 360
                                                    description: ° clockwise
                                                  mirror:
                                                    enum:
                                                      - none
                                                      - horizontal
                                                      - vertical
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                            activeRegion:
                                              description: >-
                                                Normalised [x, y, w, h] of the display
                                                frame (0..1, origin top-left, y down;
                                                01b §3).
                                              type: array
                                              items:
                                                type: number
                                                minimum: 0
                                                maximum: 1
                                              minItems: 4
                                              maxItems: 4
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        prism:
                                          description: >-
                                            1.1 (02b E4): physical prism / pyramid
                                            geometry (engine PrismGeometry).
                                          type: object
                                          required:
                                            - faces
                                          properties:
                                            faces:
                                              type: integer
                                              minimum: 1
                                              maximum: 12
                                            baseMm:
                                              type: number
                                              exclusiveMinimum: 0
                                            heightMm:
                                              type: number
                                              exclusiveMinimum: 0
                                            faceAngle:
                                              type: number
                                              exclusiveMinimum: 0
                                              exclusiveMaximum: 90
                                            refractiveIndex:
                                              type: number
                                              minimum: 1
                                            solid:
                                              type: boolean
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                  calibration:
                                    description: >-
                                      Per-display calibration (01b §4.3); keys
                                      of `displays` are display ids (checked by
                                      the codecs).
                                    type: object
                                    properties:
                                      displays:
                                        type: object
                                        propertyNames:
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                        additionalProperties:
                                          type: object
                                          properties:
                                            warp:
                                              type: object
                                              required:
                                                - file
                                              properties:
                                                file:
                                                  description: FDMESH file (01b §5)
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                kind:
                                                  anyOf:
                                                    - enum:
                                                        - uv-grid
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                size:
                                                  type: array
                                                  items:
                                                    type: integer
                                                    minimum: 1
                                                  minItems: 2
                                                  maxItems: 2
                                                  description: '[width, height] or [cols, rows].'
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            blend:
                                              type: object
                                              required:
                                                - file
                                              properties:
                                                file:
                                                  description: 16-bit greyscale PNG
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                bitDepth:
                                                  enum:
                                                    - 8
                                                    - 16
                                                gamma:
                                                  type: number
                                                  exclusiveMinimum: 0
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            colour:
                                              type: object
                                              properties:
                                                lut:
                                                  description: Adobe / Resolve .cube 3D LUT
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                blackLevel:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 1
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            report:
                                              type: object
                                              properties:
                                                method:
                                                  anyOf:
                                                    - enum:
                                                        - camera-homography
                                                        - manual
                                                        - imported
                                                        - model
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                date:
                                                  type: string
                                                  format: date-time
                                                meanError:
                                                  type: number
                                                  minimum: 0
                                                maxError:
                                                  type: number
                                                  minimum: 0
                                                unit:
                                                  anyOf:
                                                    - enum:
                                                        - px
                                                        - deg
                                                        - mm
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                file:
                                                  description: >-
                                                    Entry path inside the container:
                                                    relative, `/`-separated, no `..`
                                                    segment, no backslash, no NUL.
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  audio:
                                    description: AnantaSound layout (01b §4.4).
                                    type: object
                                    properties:
                                      ambisonics:
                                        type: object
                                        properties:
                                          order:
                                            type: integer
                                            minimum: 0
                                            maximum: 7
                                          normalisation:
                                            anyOf:
                                              - enum:
                                                  - SN3D
                                                  - N3D
                                                  - FuMa
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          channelOrder:
                                            anyOf:
                                              - enum:
                                                  - ACN
                                                  - FuMa
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      decoder:
                                        type: object
                                        properties:
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - allrad
                                                  - sad
                                                  - mmd
                                                  - epad
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          dualBand:
                                            type: boolean
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      speakers:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - id
                                            - azimuth
                                            - elevation
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            azimuth:
                                              type: number
                                              minimum: -360
                                              maximum: 360
                                              description: ° (0 = front, clockwise from above)
                                            elevation:
                                              type: number
                                              minimum: -90
                                              maximum: 90
                                              description: ° (0 = spring line)
                                            distance:
                                              type: number
                                              exclusiveMinimum: 0
                                              description: m
                                            channel:
                                              type: integer
                                              minimum: 1
                                            delayMs:
                                              type: number
                                              minimum: 0
                                            gainDb:
                                              type: number
                                              minimum: -144
                                              maximum: 24
                                            kind:
                                              anyOf:
                                                - enum:
                                                    - fullrange
                                                    - subwoofer
                                                    - satellite
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            lfe:
                                              type: boolean
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      roomCorrection:
                                        type: object
                                        required:
                                          - file
                                        properties:
                                          file:
                                            description: >-
                                              Entry path inside the container:
                                              relative, `/`-separated, no `..`
                                              segment, no backslash, no NUL.
                                            type: string
                                            minLength: 1
                                            maxLength: 1024
                                            pattern: >-
                                              ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - fir
                                                  - iir
                                                  - peq
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      devices:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - id
                                            - kind
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            name:
                                              type: string
                                            kind:
                                              anyOf:
                                                - enum:
                                                    - qrd
                                                    - patefon
                                                    - karmic_cluster
                                                    - speaker_amp
                                                    - microphone
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            address:
                                              type: string
                                              minLength: 1
                                              description: e.g. osc://10.0.0.20:9000
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  compat:
                                    description: >-
                                      Declarative mappings for the A6 gateways
                                      (01b §4.7); never required for playback.
                                    type: object
                                    propertyNames:
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
                                    additionalProperties:
                                      type: object
                                patternProperties:
                                  ^x-: true
                            required:
                              - meta
                              - dome
                              - displays
                            unevaluatedProperties: false
                          patch:
                            description: >-
                              PATCH body (application/merge-patch+json, RFC
                              7396) over the venue sections; the merged result
                              must be a valid input.
                            type: object
                            minProperties: 1
                            propertyNames:
                              pattern: >-
                                ^(meta|dome|displays|calibration|audio|compat|x-.+)$
                          page:
                            description: GET /venues page.
                            type: object
                            allOf:
                              - $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/pagination.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). Cursor pagination, 02e §3.4. Root =
                                  collection page; specialise with allOf +
                                  items.
                                title: Collection page
                                type: object
                                required:
                                  - items
                                  - nextCursor
                                properties:
                                  items:
                                    type: array
                                  nextCursor:
                                    anyOf:
                                      - description: Opaque continuation token.
                                        type: string
                                        minLength: 1
                                        maxLength: 1024
                                      - type: 'null'
                                  count:
                                    type: integer
                                    minimum: 0
                                    description: Only with ?count=true where cheap.
                                additionalProperties: true
                                $defs:
                                  limit:
                                    type: integer
                                    minimum: 1
                                    maximum: 500
                                    default: 50
                                  cursor:
                                    description: Opaque continuation token.
                                    type: string
                                    minLength: 1
                                    maxLength: 1024
                                  sort:
                                    description: >-
                                      Comma-separated fields, `-` prefix =
                                      descending.
                                    type: string
                                    pattern: >-
                                      ^-?[a-zA-Z][a-zA-Z0-9]*(,-?[a-zA-Z][a-zA-Z0-9]*)*$
                            properties:
                              items:
                                type: array
                                items:
                                  type: object
                                  allOf:
                                    - description: >-
                                        Venue content shared by GET / PUT /
                                        POST: the .dome venue sections.
                                      type: object
                                      properties:
                                        meta:
                                          type: object
                                          required:
                                            - id
                                            - title
                                          properties:
                                            id:
                                              description: >-
                                                Stable document id (UUID, lowercase);
                                                the venue / show id on import (02e
                                                §3.2).
                                              type: string
                                              pattern: >-
                                                ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                            title:
                                              $schema: >-
                                                https://json-schema.org/draft/2020-12/schema
                                              $id: >-
                                                https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                              $comment: >-
                                                NativeMindNONC — freedome_contract (see
                                                LICENSE). Localised text map
                                                {"en":…,"ru":…}, 02e §3.1 (as .dome
                                                meta.title).
                                              title: Localised text
                                              type: object
                                              minProperties: 1
                                              propertyNames:
                                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                              additionalProperties:
                                                type: string
                                              examples:
                                                - en: Intro
                                                  ru: Вступление
                                              $defs:
                                                textOrI18n:
                                                  description: >-
                                                    Plain string (treated as `en`) or a
                                                    localised map. (map branch = the root
                                                    schema, inlined for tools that
                                                    mis-handle self references)
                                                  anyOf:
                                                    - type: string
                                                    - type: object
                                                      minProperties: 1
                                                      propertyNames:
                                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                      additionalProperties:
                                                        type: string
                                                      examples:
                                                        - en: Intro
                                                          ru: Вступление
                                            description:
                                              $schema: >-
                                                https://json-schema.org/draft/2020-12/schema
                                              $id: >-
                                                https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                              $comment: >-
                                                NativeMindNONC — freedome_contract (see
                                                LICENSE). Localised text map
                                                {"en":…,"ru":…}, 02e §3.1 (as .dome
                                                meta.title).
                                              title: Localised text
                                              type: object
                                              minProperties: 1
                                              propertyNames:
                                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                              additionalProperties:
                                                type: string
                                              examples:
                                                - en: Intro
                                                  ru: Вступление
                                              $defs:
                                                textOrI18n:
                                                  description: >-
                                                    Plain string (treated as `en`) or a
                                                    localised map. (map branch = the root
                                                    schema, inlined for tools that
                                                    mis-handle self references)
                                                  anyOf:
                                                    - type: string
                                                    - type: object
                                                      minProperties: 1
                                                      propertyNames:
                                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                      additionalProperties:
                                                        type: string
                                                      examples:
                                                        - en: Intro
                                                          ru: Вступление
                                            authors:
                                              type: array
                                              items:
                                                type: object
                                                required:
                                                  - name
                                                properties:
                                                  name:
                                                    type: string
                                                    minLength: 1
                                                  email:
                                                    type: string
                                                    format: email
                                                  url:
                                                    type: string
                                                    format: uri
                                                  role:
                                                    type: string
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                            created:
                                              type: string
                                              format: date-time
                                            modified:
                                              type: string
                                              format: date-time
                                            generator:
                                              type: object
                                              required:
                                                - name
                                              properties:
                                                name:
                                                  type: string
                                                  minLength: 1
                                                version:
                                                  type: string
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            license:
                                              type: string
                                              minLength: 1
                                              default: NativeMindNONC
                                            tags:
                                              type: array
                                              items:
                                                type: string
                                                minLength: 1
                                                maxLength: 64
                                              uniqueItems: true
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        dome:
                                          description: >-
                                            Dome geometry (01b §4.1). Right-handed,
                                            metres, degrees; +Y zenith, -Z front.
                                          type: object
                                          required:
                                            - mode
                                            - shape
                                            - radius
                                          properties:
                                            mode:
                                              anyOf:
                                                - enum:
                                                    - classical
                                                    - quantum
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            shape:
                                              anyOf:
                                                - enum:
                                                    - hemisphere
                                                    - sphere
                                                    - truncated
                                                    - cylinder
                                                    - cylinder_outer
                                                    - cone
                                                    - pyramid
                                                    - geodesic
                                                    - flat
                                                    - multiwall
                                                    - cave
                                                    - volumetric
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            radius:
                                              type: number
                                              exclusiveMinimum: 0
                                              description: m
                                            tilt:
                                              type: number
                                              minimum: -90
                                              maximum: 90
                                              description: ° forward tilt of the dome axis
                                            truncation:
                                              type: number
                                              minimum: -90
                                              maximum: 90
                                              description: >-
                                                ° below the spring line projected
                                                (negative = cut off)
                                            orientation:
                                              anyOf:
                                                - enum:
                                                    - upright
                                                    - inverted
                                                    - tilted
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            springLineHeight:
                                              type: number
                                              description: m above floor
                                            surface:
                                              type: object
                                              properties:
                                                gain:
                                                  type: number
                                                  minimum: 0
                                                material:
                                                  type: string
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            seating:
                                              anyOf:
                                                - enum:
                                                    - unidirectional
                                                    - concentric
                                                    - free
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            sweetSpot:
                                              type: array
                                              items:
                                                type: number
                                              minItems: 3
                                              maxItems: 3
                                              description: '[x, y, z], metres, dome frame (01b §3).'
                                            angularBase:
                                              type: integer
                                              minimum: 1
                                              description: >-
                                                Quantum mode only: presentation base of
                                                the circle (e.g. 108); values stay in
                                                degrees.
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                          if:
                                            required:
                                              - angularBase
                                          then:
                                            properties:
                                              mode:
                                                const: quantum
                                        displays:
                                          type: array
                                          items:
                                            description: >-
                                              Visual device (01b §4.2): projector
                                              (incl. fisheye), LED, prism unit,
                                              smartphone + lens, NDI output.
                                            type: object
                                            required:
                                              - id
                                              - type
                                            properties:
                                              id:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              name:
                                                type: string
                                              type:
                                                anyOf:
                                                  - enum:
                                                      - projector
                                                      - led
                                                      - prism_unit
                                                      - smartphone_lens
                                                      - ndi_output
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              model:
                                                type: object
                                                properties:
                                                  vendor:
                                                    type: string
                                                  product:
                                                    type: string
                                                  variant:
                                                    type: string
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                              resolution:
                                                type: array
                                                items:
                                                  type: integer
                                                  minimum: 1
                                                minItems: 2
                                                maxItems: 2
                                                description: '[width, height] or [cols, rows].'
                                              refreshRate:
                                                type: number
                                                exclusiveMinimum: 0
                                                description: Hz
                                              lens:
                                                type: object
                                                required:
                                                  - kind
                                                properties:
                                                  kind:
                                                    anyOf:
                                                      - enum:
                                                          - fisheye
                                                          - standard
                                                          - pyramid
                                                          - prism
                                                          - equirect
                                                      - description: >-
                                                          Value of an open enum: one of the listed
                                                          values or any other token (clients
                                                          tolerate unknown values).
                                                        type: string
                                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                  fov:
                                                    type: number
                                                    exclusiveMinimum: 0
                                                    maximum: 360
                                                    description: °
                                                  throwRatio:
                                                    type:
                                                      - number
                                                      - 'null'
                                                    exclusiveMinimum: 0
                                                  shift:
                                                    description: >-
                                                      lens shift [x, y] as a fraction of the
                                                      image size
                                                    type: array
                                                    items:
                                                      type: number
                                                    minItems: 2
                                                    maxItems: 2
                                                  distortion:
                                                    description: '1.1 (02b E4): lens distortion model.'
                                                    type: object
                                                    required:
                                                      - model
                                                    properties:
                                                      model:
                                                        anyOf:
                                                          - enum:
                                                              - brown-conrady
                                                              - fisheye-equidistant
                                                              - fisheye-equisolid
                                                              - fisheye-poly
                                                              - radial
                                                          - description: >-
                                                              Value of an open enum: one of the listed
                                                              values or any other token (clients
                                                              tolerate unknown values).
                                                            type: string
                                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                      coefficients:
                                                        type: array
                                                        items:
                                                          type: number
                                                        maxItems: 16
                                                        description: >-
                                                          brown-conrady [k1,k2,k3,p1,p2];
                                                          fisheye-poly [k1..k4]; radial [k1,k2,k3]
                                                          (01b §4.2.1)
                                                      centre:
                                                        type: array
                                                        items:
                                                          type: number
                                                          minimum: 0
                                                          maximum: 1
                                                        minItems: 2
                                                        maxItems: 2
                                                        description: >-
                                                          distortion centre, normalised image
                                                          coordinates
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                  profileRef:
                                                    description: >-
                                                      1.1 (02b E4): lens profile id shipped as
                                                      data (engine
                                                      data/lens_profiles/<id>.json), e.g.
                                                      sh001.
                                                    type: string
                                                    pattern: ^[a-z0-9][a-z0-9._-]{0,63}$
                                                  curvature:
                                                    description: >-
                                                      1.1 (EN, curved LED walls): the display
                                                      surface is a cylinder (axis vertical =
                                                      curved horizontally, the usual curved
                                                      wall) or a sphere section; absent =
                                                      flat.
                                                    type: object
                                                    required:
                                                      - radius
                                                    properties:
                                                      radius:
                                                        type: number
                                                        exclusiveMinimum: 0
                                                        description: m, curvature radius of the panel surface
                                                      axis:
                                                        anyOf:
                                                          - enum:
                                                              - vertical
                                                              - horizontal
                                                              - spherical
                                                          - description: >-
                                                              Value of an open enum: one of the listed
                                                              values or any other token (clients
                                                              tolerate unknown values).
                                                            type: string
                                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                        default: vertical
                                                      concave:
                                                        type: boolean
                                                        default: true
                                                        description: true = curved towards the audience
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                              pose:
                                                type: object
                                                properties:
                                                  position:
                                                    type: array
                                                    items:
                                                      type: number
                                                    minItems: 3
                                                    maxItems: 3
                                                    description: '[x, y, z], metres, dome frame (01b §3).'
                                                  rotation:
                                                    type: array
                                                    items:
                                                      type: number
                                                      minimum: -1
                                                      maximum: 1
                                                    minItems: 4
                                                    maxItems: 4
                                                    description: Rotation quaternion [x, y, z, w].
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                              output:
                                                type: object
                                                properties:
                                                  host:
                                                    type: string
                                                    minLength: 1
                                                  connector:
                                                    type: string
                                                    minLength: 1
                                                    description: e.g. DP-1, HDMI-1, stream:<displayId>
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                              colour:
                                                type: object
                                                properties:
                                                  gamut:
                                                    anyOf:
                                                      - enum:
                                                          - rec709
                                                          - dci-p3
                                                          - display-p3
                                                          - rec2020
                                                          - srgb
                                                      - description: >-
                                                          Value of an open enum: one of the listed
                                                          values or any other token (clients
                                                          tolerate unknown values).
                                                        type: string
                                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                  gamma:
                                                    type: number
                                                    exclusiveMinimum: 0
                                                  whitePoint:
                                                    type: string
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                              stereo:
                                                oneOf:
                                                  - type: 'null'
                                                  - type: object
                                                    required:
                                                      - eye
                                                    properties:
                                                      eye:
                                                        enum:
                                                          - left
                                                          - right
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                              optics:
                                                description: >-
                                                  1.1 (02a V12, replaces
                                                  x-freedome-optics): per-face layout of
                                                  prism / pyramid optics on the display
                                                  frame.
                                                type: object
                                                required:
                                                  - faces
                                                properties:
                                                  faces:
                                                    enum:
                                                      - 1
                                                      - 3
                                                      - 4
                                                      - 6
                                                  faceAngle:
                                                    type: number
                                                    exclusiveMinimum: 0
                                                    exclusiveMaximum: 90
                                                    description: ° between a face and the screen plane
                                                  viewports:
                                                    type: array
                                                    maxItems: 6
                                                    items:
                                                      type: object
                                                      required:
                                                        - face
                                                        - rect
                                                      properties:
                                                        face:
                                                          type: integer
                                                          minimum: 0
                                                          maximum: 5
                                                          description: 0 = front, clockwise from above
                                                        rect:
                                                          description: >-
                                                            Normalised [x, y, w, h] of the display
                                                            frame (0..1, origin top-left, y down;
                                                            01b §3).
                                                          type: array
                                                          items:
                                                            type: number
                                                            minimum: 0
                                                            maximum: 1
                                                          minItems: 4
                                                          maxItems: 4
                                                        rotation:
                                                          type: number
                                                          minimum: -360
                                                          maximum: 360
                                                          description: ° clockwise
                                                        mirror:
                                                          enum:
                                                            - none
                                                            - horizontal
                                                            - vertical
                                                      patternProperties:
                                                        ^x-: true
                                                      additionalProperties: false
                                                  activeRegion:
                                                    description: >-
                                                      Normalised [x, y, w, h] of the display
                                                      frame (0..1, origin top-left, y down;
                                                      01b §3).
                                                    type: array
                                                    items:
                                                      type: number
                                                      minimum: 0
                                                      maximum: 1
                                                    minItems: 4
                                                    maxItems: 4
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                              prism:
                                                description: >-
                                                  1.1 (02b E4): physical prism / pyramid
                                                  geometry (engine PrismGeometry).
                                                type: object
                                                required:
                                                  - faces
                                                properties:
                                                  faces:
                                                    type: integer
                                                    minimum: 1
                                                    maximum: 12
                                                  baseMm:
                                                    type: number
                                                    exclusiveMinimum: 0
                                                  heightMm:
                                                    type: number
                                                    exclusiveMinimum: 0
                                                  faceAngle:
                                                    type: number
                                                    exclusiveMinimum: 0
                                                    exclusiveMaximum: 90
                                                  refractiveIndex:
                                                    type: number
                                                    minimum: 1
                                                  solid:
                                                    type: boolean
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        calibration:
                                          description: >-
                                            Per-display calibration (01b §4.3); keys
                                            of `displays` are display ids (checked
                                            by the codecs).
                                          type: object
                                          properties:
                                            displays:
                                              type: object
                                              propertyNames:
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                              additionalProperties:
                                                type: object
                                                properties:
                                                  warp:
                                                    type: object
                                                    required:
                                                      - file
                                                    properties:
                                                      file:
                                                        description: FDMESH file (01b §5)
                                                        type: string
                                                        minLength: 1
                                                        maxLength: 1024
                                                        pattern: >-
                                                          ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                      kind:
                                                        anyOf:
                                                          - enum:
                                                              - uv-grid
                                                          - description: >-
                                                              Value of an open enum: one of the listed
                                                              values or any other token (clients
                                                              tolerate unknown values).
                                                            type: string
                                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                      size:
                                                        type: array
                                                        items:
                                                          type: integer
                                                          minimum: 1
                                                        minItems: 2
                                                        maxItems: 2
                                                        description: '[width, height] or [cols, rows].'
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                  blend:
                                                    type: object
                                                    required:
                                                      - file
                                                    properties:
                                                      file:
                                                        description: 16-bit greyscale PNG
                                                        type: string
                                                        minLength: 1
                                                        maxLength: 1024
                                                        pattern: >-
                                                          ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                      bitDepth:
                                                        enum:
                                                          - 8
                                                          - 16
                                                      gamma:
                                                        type: number
                                                        exclusiveMinimum: 0
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                  colour:
                                                    type: object
                                                    properties:
                                                      lut:
                                                        description: Adobe / Resolve .cube 3D LUT
                                                        type: string
                                                        minLength: 1
                                                        maxLength: 1024
                                                        pattern: >-
                                                          ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                      blackLevel:
                                                        type: number
                                                        minimum: 0
                                                        maximum: 1
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                  report:
                                                    type: object
                                                    properties:
                                                      method:
                                                        anyOf:
                                                          - enum:
                                                              - camera-homography
                                                              - manual
                                                              - imported
                                                              - model
                                                          - description: >-
                                                              Value of an open enum: one of the listed
                                                              values or any other token (clients
                                                              tolerate unknown values).
                                                            type: string
                                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                      date:
                                                        type: string
                                                        format: date-time
                                                      meanError:
                                                        type: number
                                                        minimum: 0
                                                      maxError:
                                                        type: number
                                                        minimum: 0
                                                      unit:
                                                        anyOf:
                                                          - enum:
                                                              - px
                                                              - deg
                                                              - mm
                                                          - description: >-
                                                              Value of an open enum: one of the listed
                                                              values or any other token (clients
                                                              tolerate unknown values).
                                                            type: string
                                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                      file:
                                                        description: >-
                                                          Entry path inside the container:
                                                          relative, `/`-separated, no `..`
                                                          segment, no backslash, no NUL.
                                                        type: string
                                                        minLength: 1
                                                        maxLength: 1024
                                                        pattern: >-
                                                          ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        audio:
                                          description: AnantaSound layout (01b §4.4).
                                          type: object
                                          properties:
                                            ambisonics:
                                              type: object
                                              properties:
                                                order:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 7
                                                normalisation:
                                                  anyOf:
                                                    - enum:
                                                        - SN3D
                                                        - N3D
                                                        - FuMa
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                channelOrder:
                                                  anyOf:
                                                    - enum:
                                                        - ACN
                                                        - FuMa
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            decoder:
                                              type: object
                                              properties:
                                                kind:
                                                  anyOf:
                                                    - enum:
                                                        - allrad
                                                        - sad
                                                        - mmd
                                                        - epad
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                dualBand:
                                                  type: boolean
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            speakers:
                                              type: array
                                              items:
                                                type: object
                                                required:
                                                  - id
                                                  - azimuth
                                                  - elevation
                                                properties:
                                                  id:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  azimuth:
                                                    type: number
                                                    minimum: -360
                                                    maximum: 360
                                                    description: ° (0 = front, clockwise from above)
                                                  elevation:
                                                    type: number
                                                    minimum: -90
                                                    maximum: 90
                                                    description: ° (0 = spring line)
                                                  distance:
                                                    type: number
                                                    exclusiveMinimum: 0
                                                    description: m
                                                  channel:
                                                    type: integer
                                                    minimum: 1
                                                  delayMs:
                                                    type: number
                                                    minimum: 0
                                                  gainDb:
                                                    type: number
                                                    minimum: -144
                                                    maximum: 24
                                                  kind:
                                                    anyOf:
                                                      - enum:
                                                          - fullrange
                                                          - subwoofer
                                                          - satellite
                                                      - description: >-
                                                          Value of an open enum: one of the listed
                                                          values or any other token (clients
                                                          tolerate unknown values).
                                                        type: string
                                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                  lfe:
                                                    type: boolean
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                            roomCorrection:
                                              type: object
                                              required:
                                                - file
                                              properties:
                                                file:
                                                  description: >-
                                                    Entry path inside the container:
                                                    relative, `/`-separated, no `..`
                                                    segment, no backslash, no NUL.
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                kind:
                                                  anyOf:
                                                    - enum:
                                                        - fir
                                                        - iir
                                                        - peq
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            devices:
                                              type: array
                                              items:
                                                type: object
                                                required:
                                                  - id
                                                  - kind
                                                properties:
                                                  id:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  name:
                                                    type: string
                                                  kind:
                                                    anyOf:
                                                      - enum:
                                                          - qrd
                                                          - patefon
                                                          - karmic_cluster
                                                          - speaker_amp
                                                          - microphone
                                                      - description: >-
                                                          Value of an open enum: one of the listed
                                                          values or any other token (clients
                                                          tolerate unknown values).
                                                        type: string
                                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                  address:
                                                    type: string
                                                    minLength: 1
                                                    description: e.g. osc://10.0.0.20:9000
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        compat:
                                          description: >-
                                            Declarative mappings for the A6 gateways
                                            (01b §4.7); never required for playback.
                                          type: object
                                          propertyNames:
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
                                          additionalProperties:
                                            type: object
                                      patternProperties:
                                        ^x-: true
                                  required:
                                    - id
                                    - revision
                                    - status
                                    - meta
                                    - dome
                                    - displays
                                  properties:
                                    id:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    revision:
                                      description: >-
                                        Monotonic resource revision; the strong
                                        ETag is derived from it.
                                      type: integer
                                      minimum: 0
                                    status:
                                      anyOf:
                                        - enum:
                                            - idle
                                            - loading
                                            - ready
                                            - playing
                                            - degraded
                                            - error
                                        - type: string
                                          pattern: ^[a-z][a-z_-]{0,31}$
                                    default:
                                      type: boolean
                                      description: >-
                                        true for the venue the alias `default`
                                        resolves to
                                    activeShowId:
                                      anyOf:
                                        - description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        - type: 'null'
                                    createdAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    updatedAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  unevaluatedProperties: false
                      patch:
                        description: >-
                          PATCH body (application/merge-patch+json, RFC 7396)
                          over the venue sections; the merged result must be a
                          valid input.
                        type: object
                        minProperties: 1
                        propertyNames:
                          pattern: ^(meta|dome|displays|calibration|audio|compat|x-.+)$
                - if:
                    properties:
                      kind:
                        const: venue.deleted
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        type: object
                        required:
                          - id
                        properties:
                          id:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: venue.activeShow
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        type: object
                        required:
                          - activeShowId
                        properties:
                          activeShowId:
                            anyOf:
                              - description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              - type: 'null'
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: output.state
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/api/1.0/output.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE).
                          Venue output state (02e §5.2 GET/PATCH
                          /venues/{venueId}/output; fulldome /@1/* coverage).
                        title: Venue output
                        type: object
                        required:
                          - brightness
                          - volume
                          - blackout
                        properties:
                          brightness:
                            description: master brightness 0..1
                            type: number
                            minimum: 0
                            maximum: 1
                          volume:
                            description: master volume, linear 0..1 (C5)
                            type: number
                            minimum: 0
                            maximum: 1
                          gainDb:
                            description: >-
                              Gain in dB (C5: optional companion of linear
                              `volume`).
                            type: number
                            minimum: -144
                            maximum: 24
                          mute:
                            type: boolean
                          blackout:
                            type: boolean
                          rotation:
                            type: number
                            minimum: -360
                            maximum: 360
                            description: ° content rotation about the dome axis
                          lighting:
                            type: boolean
                            description: stage / house light relay
                          ndi:
                            type: object
                            properties:
                              enabled:
                                type: boolean
                              name:
                                type: string
                            additionalProperties: false
                        patternProperties:
                          ^x-: true
                        additionalProperties: false
                        $defs:
                          patch:
                            description: >-
                              PATCH body (application/merge-patch+json): any
                              subset of the output fields.
                            type: object
                            minProperties: 1
                            properties:
                              brightness:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              volume:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              gainDb:
                                description: >-
                                  Gain in dB (C5: optional companion of linear
                                  `volume`).
                                type: number
                                minimum: -144
                                maximum: 24
                              mute:
                                type: boolean
                              blackout:
                                type: boolean
                              rotation:
                                type: number
                                minimum: -360
                                maximum: 360
                              lighting:
                                type: boolean
                              ndi:
                                type: object
                                properties:
                                  enabled:
                                    type: boolean
                                  name:
                                    type: string
                                additionalProperties: false
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                      patch:
                        description: >-
                          PATCH body (application/merge-patch+json): any subset
                          of the output fields.
                        type: object
                        minProperties: 1
                        properties:
                          brightness:
                            description: 0..1 (brightness, linear volume gain, progress).
                            type: number
                            minimum: 0
                            maximum: 1
                          volume:
                            description: 0..1 (brightness, linear volume gain, progress).
                            type: number
                            minimum: 0
                            maximum: 1
                          gainDb:
                            description: >-
                              Gain in dB (C5: optional companion of linear
                              `volume`).
                            type: number
                            minimum: -144
                            maximum: 24
                          mute:
                            type: boolean
                          blackout:
                            type: boolean
                          rotation:
                            type: number
                            minimum: -360
                            maximum: 360
                          lighting:
                            type: boolean
                          ndi:
                            type: object
                            properties:
                              enabled:
                                type: boolean
                              name:
                                type: string
                            additionalProperties: false
                        patternProperties:
                          ^x-: true
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: display.state
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        type: object
                        required:
                          - online
                        properties:
                          online:
                            type: boolean
                            description: engine output / device agent reachable
                          power:
                            anyOf:
                              - enum:
                                  - 'on'
                                  - 'off'
                                  - standby
                                  - warming
                                  - cooling
                                  - unknown
                              - type: string
                                pattern: ^[a-z][a-z_-]{0,31}$
                          shutter:
                            enum:
                              - open
                              - closed
                              - unknown
                          signal:
                            type: boolean
                          temperatureC:
                            type:
                              - number
                              - 'null'
                          pattern:
                            anyOf:
                              - description: >-
                                  PUT
                                  /venues/{venueId}/displays/{displayId}/pattern
                                  body (engine freedome_pattern_*).
                                type: object
                                required:
                                  - kind
                                properties:
                                  kind:
                                    anyOf:
                                      - enum:
                                          - 'off'
                                          - grid
                                          - checker
                                          - gray-ramp
                                          - colour-bars
                                          - dots
                                          - crosshair
                                          - solid
                                          - structured-light
                                      - type: string
                                        pattern: ^[a-z][a-z0-9_-]{0,31}$
                                  params:
                                    description: >-
                                      Kind-specific: grid {spacingDeg,
                                      lineWidthPx, colour}, checker {cells},
                                      solid {colour}, structured-light
                                      {sequence, index} …
                                    type: object
                                  face:
                                    type: integer
                                    minimum: 0
                                    maximum: 5
                                    description: 'prism / pyramid: limit to one optics face'
                                additionalProperties: false
                              - type: 'null'
                          lastSeen:
                            description: >-
                              RFC 3339 UTC with milliseconds, e.g.
                              2026-10-19T12:00:00.000Z.
                            type: string
                            format: date-time
                            pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          capabilities:
                            type: array
                            items:
                              anyOf:
                                - enum:
                                    - power
                                    - shutter
                                    - identify
                                    - temperature
                                    - pjlink
                                - type: string
                          faults:
                            type: array
                            items:
                              type: object
                              required:
                                - code
                              properties:
                                code:
                                  type: string
                                detail:
                                  type: string
                              additionalProperties: false
                        additionalProperties: false
                      patch:
                        type: object
                - if:
                    properties:
                      kind:
                        const: display.pattern
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        anyOf:
                          - description: >-
                              PUT /venues/{venueId}/displays/{displayId}/pattern
                              body (engine freedome_pattern_*).
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                anyOf:
                                  - enum:
                                      - 'off'
                                      - grid
                                      - checker
                                      - gray-ramp
                                      - colour-bars
                                      - dots
                                      - crosshair
                                      - solid
                                      - structured-light
                                  - type: string
                                    pattern: ^[a-z][a-z0-9_-]{0,31}$
                              params:
                                description: >-
                                  Kind-specific: grid {spacingDeg, lineWidthPx,
                                  colour}, checker {cells}, solid {colour},
                                  structured-light {sequence, index} …
                                type: object
                              face:
                                type: integer
                                minimum: 0
                                maximum: 5
                                description: 'prism / pyramid: limit to one optics face'
                            additionalProperties: false
                          - type: 'null'
                - if:
                    properties:
                      kind:
                        const: display.error
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE). RFC
                          9457 problem details with the Freedome `code`
                          catalogue, 02e §3.3. Also the `data` of WS `error`,
                          the socket.io ack error and GraphQL
                          errors[].extensions.problem. The catalogue is open:
                          unknown codes are allowed; known codes are bound to
                          their HTTP status.
                        title: Problem details
                        type: object
                        required:
                          - type
                          - title
                          - code
                        properties:
                          type:
                            type: string
                            format: uri
                            description: >-
                              https://freedome.nativemind.us/problems/<code> for
                              catalogue codes.
                          title:
                            type: string
                            minLength: 1
                          status:
                            type: integer
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                          instance:
                            type: string
                            format: uri-reference
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          traceId:
                            type: string
                            pattern: ^[0-9a-f]{16,32}$
                          errors:
                            type: array
                            items:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        allOf:
                          - if:
                              properties:
                                code:
                                  const: validation-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: not-found
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 404
                          - if:
                              properties:
                                code:
                                  const: conflict
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: precondition-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 412
                          - if:
                              properties:
                                code:
                                  const: precondition-required
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 428
                          - if:
                              properties:
                                code:
                                  const: unauthenticated
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: forbidden
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: rate-limited
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 429
                          - if:
                              properties:
                                code:
                                  const: payload-too-large
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 413
                          - if:
                              properties:
                                code:
                                  const: unsupported-format
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 415
                          - if:
                              properties:
                                code:
                                  const: engine-unavailable
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: engine-incompatible
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: degraded
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: upload-checksum-mismatch
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: legacy-unsupported
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 501
                          - if:
                              properties:
                                code:
                                  const: internal
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 500
                          - if:
                              properties:
                                code:
                                  const: clock-unlocked
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: not-configured
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: authorization-pending
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: slow-down
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: access-denied
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: expired-token
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: token-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: idempotency-key-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: idempotency-in-progress
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                        additionalProperties: true
                        examples:
                          - type: >-
                              https://freedome.nativemind.us/problems/engine-unavailable
                            title: Visual engine unavailable
                            status: 503
                            detail: >-
                              freedome-engined not reachable at
                              unix:/run/freedome/engine.sock
                            instance: /api/v1/venues/default/players/main/play
                            code: engine-unavailable
                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                        $defs:
                          knownCode:
                            enum:
                              - validation-failed
                              - not-found
                              - conflict
                              - precondition-failed
                              - precondition-required
                              - unauthenticated
                              - forbidden
                              - rate-limited
                              - payload-too-large
                              - unsupported-format
                              - engine-unavailable
                              - engine-incompatible
                              - degraded
                              - job-failed
                              - upload-checksum-mismatch
                              - legacy-unsupported
                              - internal
                              - clock-unlocked
                              - not-configured
                              - authorization-pending
                              - slow-down
                              - access-denied
                              - expired-token
                              - token-reused
                              - idempotency-key-reused
                              - idempotency-in-progress
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          fieldError:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                - if:
                    properties:
                      kind:
                        const: calibration.updated
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: >-
                          Per-display calibration (01b §4.3); keys of `displays`
                          are display ids (checked by the codecs).
                        type: object
                        properties:
                          displays:
                            type: object
                            propertyNames:
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                            additionalProperties:
                              type: object
                              properties:
                                warp:
                                  type: object
                                  required:
                                    - file
                                  properties:
                                    file:
                                      description: FDMESH file (01b §5)
                                      type: string
                                      minLength: 1
                                      maxLength: 1024
                                      pattern: >-
                                        ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                    kind:
                                      anyOf:
                                        - enum:
                                            - uv-grid
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    size:
                                      type: array
                                      items:
                                        type: integer
                                        minimum: 1
                                      minItems: 2
                                      maxItems: 2
                                      description: '[width, height] or [cols, rows].'
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                blend:
                                  type: object
                                  required:
                                    - file
                                  properties:
                                    file:
                                      description: 16-bit greyscale PNG
                                      type: string
                                      minLength: 1
                                      maxLength: 1024
                                      pattern: >-
                                        ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                    bitDepth:
                                      enum:
                                        - 8
                                        - 16
                                    gamma:
                                      type: number
                                      exclusiveMinimum: 0
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                colour:
                                  type: object
                                  properties:
                                    lut:
                                      description: Adobe / Resolve .cube 3D LUT
                                      type: string
                                      minLength: 1
                                      maxLength: 1024
                                      pattern: >-
                                        ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                    blackLevel:
                                      type: number
                                      minimum: 0
                                      maximum: 1
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                report:
                                  type: object
                                  properties:
                                    method:
                                      anyOf:
                                        - enum:
                                            - camera-homography
                                            - manual
                                            - imported
                                            - model
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    date:
                                      type: string
                                      format: date-time
                                    meanError:
                                      type: number
                                      minimum: 0
                                    maxError:
                                      type: number
                                      minimum: 0
                                    unit:
                                      anyOf:
                                        - enum:
                                            - px
                                            - deg
                                            - mm
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    file:
                                      description: >-
                                        Entry path inside the container:
                                        relative, `/`-separated, no `..`
                                        segment, no backslash, no NUL.
                                      type: string
                                      minLength: 1
                                      maxLength: 1024
                                      pattern: >-
                                        ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                        patternProperties:
                          ^x-: true
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: calibrationJob.state
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/api/1.0/calibration-job.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE).
                          Calibration job (02e §5.2, 02a §2.5 / §4.7, 02b §4.5).
                          Root = GET …/calibration/jobs/{jobId}.
                        title: Calibration job
                        allOf:
                          - type: object
                            required:
                              - id
                              - venueId
                              - kind
                              - status
                              - steps
                              - createdAt
                            properties:
                              id:
                                description: >-
                                  Server-owned resource id: UUIDv7, lowercase,
                                  sortable by creation time.
                                type: string
                                pattern: >-
                                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                examples:
                                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                              venueId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              kind:
                                anyOf:
                                  - enum:
                                      - visual-camera
                                      - visual-manual
                                      - visual-import
                                      - audio-room
                                      - audio-speaker-check
                                  - type: string
                                    pattern: ^[a-z][a-z0-9-]{0,63}$
                              status:
                                description: >-
                                  queued → running ⇄ awaiting_input → succeeded
                                  | failed | cancelled.
                                enum:
                                  - queued
                                  - running
                                  - awaiting_input
                                  - succeeded
                                  - failed
                                  - cancelled
                              progress:
                                type: number
                                minimum: 0
                                maximum: 1
                              displays:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                              speakers:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                              steps:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - id
                                    - status
                                  properties:
                                    id:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    name:
                                      type: string
                                    displayId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    status:
                                      enum:
                                        - pending
                                        - running
                                        - awaiting_input
                                        - done
                                        - failed
                                        - skipped
                                  additionalProperties: false
                              currentStep:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              awaiting:
                                description: >-
                                  Set while status = awaiting_input: what the
                                  operator / camera must provide.
                                anyOf:
                                  - type: 'null'
                                  - type: object
                                    required:
                                      - kind
                                    properties:
                                      kind:
                                        anyOf:
                                          - enum:
                                              - camera-capture
                                              - manual-adjust
                                              - confirm
                                          - type: string
                                      stepId:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      displayId:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      pattern:
                                        description: >-
                                          PUT
                                          /venues/{venueId}/displays/{displayId}/pattern
                                          body (engine freedome_pattern_*).
                                        type: object
                                        required:
                                          - kind
                                        properties:
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - 'off'
                                                  - grid
                                                  - checker
                                                  - gray-ramp
                                                  - colour-bars
                                                  - dots
                                                  - crosshair
                                                  - solid
                                                  - structured-light
                                              - type: string
                                                pattern: ^[a-z][a-z0-9_-]{0,31}$
                                          params:
                                            description: >-
                                              Kind-specific: grid {spacingDeg,
                                              lineWidthPx, colour}, checker {cells},
                                              solid {colour}, structured-light
                                              {sequence, index} …
                                            type: object
                                          face:
                                            type: integer
                                            minimum: 0
                                            maximum: 5
                                            description: >-
                                              prism / pyramid: limit to one optics
                                              face
                                        additionalProperties: false
                                      instructions:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). Localised text map
                                          {"en":…,"ru":…}, 02e §3.1 (as .dome
                                          meta.title).
                                        title: Localised text
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                                        $defs:
                                          textOrI18n:
                                            description: >-
                                              Plain string (treated as `en`) or a
                                              localised map. (map branch = the root
                                              schema, inlined for tools that
                                              mis-handle self references)
                                            anyOf:
                                              - type: string
                                              - type: object
                                                minProperties: 1
                                                propertyNames:
                                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                additionalProperties:
                                                  type: string
                                                examples:
                                                  - en: Intro
                                                    ru: Вступление
                                    additionalProperties: false
                              errors:
                                description: Per-display residual error after solving.
                                type: array
                                items:
                                  type: object
                                  required:
                                    - displayId
                                  properties:
                                    displayId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    meanError:
                                      type: number
                                      minimum: 0
                                    maxError:
                                      type: number
                                      minimum: 0
                                    unit:
                                      type: string
                                  additionalProperties: false
                              result:
                                description: >-
                                  Proposed calibration (applied to the venue by
                                  POST …/apply).
                                anyOf:
                                  - type: 'null'
                                  - description: >-
                                      Per-display calibration (01b §4.3); keys
                                      of `displays` are display ids (checked by
                                      the codecs).
                                    type: object
                                    properties:
                                      displays:
                                        type: object
                                        propertyNames:
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                        additionalProperties:
                                          type: object
                                          properties:
                                            warp:
                                              type: object
                                              required:
                                                - file
                                              properties:
                                                file:
                                                  description: FDMESH file (01b §5)
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                kind:
                                                  anyOf:
                                                    - enum:
                                                        - uv-grid
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                size:
                                                  type: array
                                                  items:
                                                    type: integer
                                                    minimum: 1
                                                  minItems: 2
                                                  maxItems: 2
                                                  description: '[width, height] or [cols, rows].'
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            blend:
                                              type: object
                                              required:
                                                - file
                                              properties:
                                                file:
                                                  description: 16-bit greyscale PNG
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                bitDepth:
                                                  enum:
                                                    - 8
                                                    - 16
                                                gamma:
                                                  type: number
                                                  exclusiveMinimum: 0
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            colour:
                                              type: object
                                              properties:
                                                lut:
                                                  description: Adobe / Resolve .cube 3D LUT
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                blackLevel:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 1
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            report:
                                              type: object
                                              properties:
                                                method:
                                                  anyOf:
                                                    - enum:
                                                        - camera-homography
                                                        - manual
                                                        - imported
                                                        - model
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                date:
                                                  type: string
                                                  format: date-time
                                                meanError:
                                                  type: number
                                                  minimum: 0
                                                maxError:
                                                  type: number
                                                  minimum: 0
                                                unit:
                                                  anyOf:
                                                    - enum:
                                                        - px
                                                        - deg
                                                        - mm
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                file:
                                                  description: >-
                                                    Entry path inside the container:
                                                    relative, `/`-separated, no `..`
                                                    segment, no backslash, no NUL.
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              createdAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            additionalProperties: false
                        $defs:
                          calibrationJob:
                            type: object
                            required:
                              - id
                              - venueId
                              - kind
                              - status
                              - steps
                              - createdAt
                            properties:
                              id:
                                description: >-
                                  Server-owned resource id: UUIDv7, lowercase,
                                  sortable by creation time.
                                type: string
                                pattern: >-
                                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                examples:
                                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                              venueId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              kind:
                                anyOf:
                                  - enum:
                                      - visual-camera
                                      - visual-manual
                                      - visual-import
                                      - audio-room
                                      - audio-speaker-check
                                  - type: string
                                    pattern: ^[a-z][a-z0-9-]{0,63}$
                              status:
                                description: >-
                                  queued → running ⇄ awaiting_input → succeeded
                                  | failed | cancelled.
                                enum:
                                  - queued
                                  - running
                                  - awaiting_input
                                  - succeeded
                                  - failed
                                  - cancelled
                              progress:
                                type: number
                                minimum: 0
                                maximum: 1
                              displays:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                              speakers:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                              steps:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - id
                                    - status
                                  properties:
                                    id:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    name:
                                      type: string
                                    displayId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    status:
                                      enum:
                                        - pending
                                        - running
                                        - awaiting_input
                                        - done
                                        - failed
                                        - skipped
                                  additionalProperties: false
                              currentStep:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              awaiting:
                                description: >-
                                  Set while status = awaiting_input: what the
                                  operator / camera must provide.
                                anyOf:
                                  - type: 'null'
                                  - type: object
                                    required:
                                      - kind
                                    properties:
                                      kind:
                                        anyOf:
                                          - enum:
                                              - camera-capture
                                              - manual-adjust
                                              - confirm
                                          - type: string
                                      stepId:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      displayId:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      pattern:
                                        description: >-
                                          PUT
                                          /venues/{venueId}/displays/{displayId}/pattern
                                          body (engine freedome_pattern_*).
                                        type: object
                                        required:
                                          - kind
                                        properties:
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - 'off'
                                                  - grid
                                                  - checker
                                                  - gray-ramp
                                                  - colour-bars
                                                  - dots
                                                  - crosshair
                                                  - solid
                                                  - structured-light
                                              - type: string
                                                pattern: ^[a-z][a-z0-9_-]{0,31}$
                                          params:
                                            description: >-
                                              Kind-specific: grid {spacingDeg,
                                              lineWidthPx, colour}, checker {cells},
                                              solid {colour}, structured-light
                                              {sequence, index} …
                                            type: object
                                          face:
                                            type: integer
                                            minimum: 0
                                            maximum: 5
                                            description: >-
                                              prism / pyramid: limit to one optics
                                              face
                                        additionalProperties: false
                                      instructions:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). Localised text map
                                          {"en":…,"ru":…}, 02e §3.1 (as .dome
                                          meta.title).
                                        title: Localised text
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                                        $defs:
                                          textOrI18n:
                                            description: >-
                                              Plain string (treated as `en`) or a
                                              localised map. (map branch = the root
                                              schema, inlined for tools that
                                              mis-handle self references)
                                            anyOf:
                                              - type: string
                                              - type: object
                                                minProperties: 1
                                                propertyNames:
                                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                additionalProperties:
                                                  type: string
                                                examples:
                                                  - en: Intro
                                                    ru: Вступление
                                    additionalProperties: false
                              errors:
                                description: Per-display residual error after solving.
                                type: array
                                items:
                                  type: object
                                  required:
                                    - displayId
                                  properties:
                                    displayId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    meanError:
                                      type: number
                                      minimum: 0
                                    maxError:
                                      type: number
                                      minimum: 0
                                    unit:
                                      type: string
                                  additionalProperties: false
                              result:
                                description: >-
                                  Proposed calibration (applied to the venue by
                                  POST …/apply).
                                anyOf:
                                  - type: 'null'
                                  - description: >-
                                      Per-display calibration (01b §4.3); keys
                                      of `displays` are display ids (checked by
                                      the codecs).
                                    type: object
                                    properties:
                                      displays:
                                        type: object
                                        propertyNames:
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                        additionalProperties:
                                          type: object
                                          properties:
                                            warp:
                                              type: object
                                              required:
                                                - file
                                              properties:
                                                file:
                                                  description: FDMESH file (01b §5)
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                kind:
                                                  anyOf:
                                                    - enum:
                                                        - uv-grid
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                size:
                                                  type: array
                                                  items:
                                                    type: integer
                                                    minimum: 1
                                                  minItems: 2
                                                  maxItems: 2
                                                  description: '[width, height] or [cols, rows].'
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            blend:
                                              type: object
                                              required:
                                                - file
                                              properties:
                                                file:
                                                  description: 16-bit greyscale PNG
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                bitDepth:
                                                  enum:
                                                    - 8
                                                    - 16
                                                gamma:
                                                  type: number
                                                  exclusiveMinimum: 0
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            colour:
                                              type: object
                                              properties:
                                                lut:
                                                  description: Adobe / Resolve .cube 3D LUT
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                blackLevel:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 1
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            report:
                                              type: object
                                              properties:
                                                method:
                                                  anyOf:
                                                    - enum:
                                                        - camera-homography
                                                        - manual
                                                        - imported
                                                        - model
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                date:
                                                  type: string
                                                  format: date-time
                                                meanError:
                                                  type: number
                                                  minimum: 0
                                                maxError:
                                                  type: number
                                                  minimum: 0
                                                unit:
                                                  anyOf:
                                                    - enum:
                                                        - px
                                                        - deg
                                                        - mm
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                file:
                                                  description: >-
                                                    Entry path inside the container:
                                                    relative, `/`-separated, no `..`
                                                    segment, no backslash, no NUL.
                                                  type: string
                                                  minLength: 1
                                                  maxLength: 1024
                                                  pattern: >-
                                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              createdAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            additionalProperties: false
                          kind:
                            anyOf:
                              - enum:
                                  - visual-camera
                                  - visual-manual
                                  - visual-import
                                  - audio-room
                                  - audio-speaker-check
                              - type: string
                                pattern: ^[a-z][a-z0-9-]{0,63}$
                          start:
                            description: POST /venues/{venueId}/calibration/jobs body.
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                anyOf:
                                  - enum:
                                      - visual-camera
                                      - visual-manual
                                      - visual-import
                                      - audio-room
                                      - audio-speaker-check
                                  - type: string
                                    pattern: ^[a-z][a-z0-9-]{0,63}$
                              displays:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                uniqueItems: true
                              speakers:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                uniqueItems: true
                              options:
                                type: object
                                description: >-
                                  kind-specific (grid density, camera model,
                                  import format …)
                            additionalProperties: false
                          capture:
                            description: >-
                              POST …/captures JSON body: a camera frame uploaded
                              before (tus upload id); multipart/form-data with
                              an `image` part is the alternative (≤ 32 MB).
                            type: object
                            required:
                              - uploadId
                            properties:
                              uploadId:
                                description: >-
                                  Server-owned resource id: UUIDv7, lowercase,
                                  sortable by creation time.
                                type: string
                                pattern: >-
                                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                examples:
                                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                              stepId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                            additionalProperties: false
                          awaiting:
                            type: object
                            required:
                              - kind
                            properties:
                              kind:
                                anyOf:
                                  - enum:
                                      - camera-capture
                                      - manual-adjust
                                      - confirm
                                  - type: string
                              stepId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              displayId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              pattern:
                                description: >-
                                  PUT
                                  /venues/{venueId}/displays/{displayId}/pattern
                                  body (engine freedome_pattern_*).
                                type: object
                                required:
                                  - kind
                                properties:
                                  kind:
                                    anyOf:
                                      - enum:
                                          - 'off'
                                          - grid
                                          - checker
                                          - gray-ramp
                                          - colour-bars
                                          - dots
                                          - crosshair
                                          - solid
                                          - structured-light
                                      - type: string
                                        pattern: ^[a-z][a-z0-9_-]{0,31}$
                                  params:
                                    description: >-
                                      Kind-specific: grid {spacingDeg,
                                      lineWidthPx, colour}, checker {cells},
                                      solid {colour}, structured-light
                                      {sequence, index} …
                                    type: object
                                  face:
                                    type: integer
                                    minimum: 0
                                    maximum: 5
                                    description: 'prism / pyramid: limit to one optics face'
                                additionalProperties: false
                              instructions:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). Localised text map {"en":…,"ru":…},
                                  02e §3.1 (as .dome meta.title).
                                title: Localised text
                                type: object
                                minProperties: 1
                                propertyNames:
                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                additionalProperties:
                                  type: string
                                examples:
                                  - en: Intro
                                    ru: Вступление
                                $defs:
                                  textOrI18n:
                                    description: >-
                                      Plain string (treated as `en`) or a
                                      localised map. (map branch = the root
                                      schema, inlined for tools that mis-handle
                                      self references)
                                    anyOf:
                                      - type: string
                                      - type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                            additionalProperties: false
                          page:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - id
                                    - venueId
                                    - kind
                                    - status
                                    - steps
                                    - createdAt
                                  properties:
                                    id:
                                      description: >-
                                        Server-owned resource id: UUIDv7,
                                        lowercase, sortable by creation time.
                                      type: string
                                      pattern: >-
                                        ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                      examples:
                                        - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                                    venueId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    kind:
                                      anyOf:
                                        - enum:
                                            - visual-camera
                                            - visual-manual
                                            - visual-import
                                            - audio-room
                                            - audio-speaker-check
                                        - type: string
                                          pattern: ^[a-z][a-z0-9-]{0,63}$
                                    status:
                                      description: >-
                                        queued → running ⇄ awaiting_input →
                                        succeeded | failed | cancelled.
                                      enum:
                                        - queued
                                        - running
                                        - awaiting_input
                                        - succeeded
                                        - failed
                                        - cancelled
                                    progress:
                                      type: number
                                      minimum: 0
                                      maximum: 1
                                    displays:
                                      type: array
                                      items:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                    speakers:
                                      type: array
                                      items:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                    steps:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - status
                                        properties:
                                          id:
                                            description: >-
                                              Document-scoped id (.dome displays[].id,
                                              assets[].id, playlist / cue ids); unique
                                              within its parent.
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          name:
                                            type: string
                                          displayId:
                                            description: >-
                                              Document-scoped id (.dome displays[].id,
                                              assets[].id, playlist / cue ids); unique
                                              within its parent.
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          status:
                                            enum:
                                              - pending
                                              - running
                                              - awaiting_input
                                              - done
                                              - failed
                                              - skipped
                                        additionalProperties: false
                                    currentStep:
                                      anyOf:
                                        - description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        - type: 'null'
                                    awaiting:
                                      description: >-
                                        Set while status = awaiting_input: what
                                        the operator / camera must provide.
                                      anyOf:
                                        - type: 'null'
                                        - type: object
                                          required:
                                            - kind
                                          properties:
                                            kind:
                                              anyOf:
                                                - enum:
                                                    - camera-capture
                                                    - manual-adjust
                                                    - confirm
                                                - type: string
                                            stepId:
                                              description: >-
                                                Document-scoped id (.dome displays[].id,
                                                assets[].id, playlist / cue ids); unique
                                                within its parent.
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            displayId:
                                              description: >-
                                                Document-scoped id (.dome displays[].id,
                                                assets[].id, playlist / cue ids); unique
                                                within its parent.
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            pattern:
                                              description: >-
                                                PUT
                                                /venues/{venueId}/displays/{displayId}/pattern
                                                body (engine freedome_pattern_*).
                                              type: object
                                              required:
                                                - kind
                                              properties:
                                                kind:
                                                  anyOf:
                                                    - enum:
                                                        - 'off'
                                                        - grid
                                                        - checker
                                                        - gray-ramp
                                                        - colour-bars
                                                        - dots
                                                        - crosshair
                                                        - solid
                                                        - structured-light
                                                    - type: string
                                                      pattern: ^[a-z][a-z0-9_-]{0,31}$
                                                params:
                                                  description: >-
                                                    Kind-specific: grid {spacingDeg,
                                                    lineWidthPx, colour}, checker {cells},
                                                    solid {colour}, structured-light
                                                    {sequence, index} …
                                                  type: object
                                                face:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 5
                                                  description: >-
                                                    prism / pyramid: limit to one optics
                                                    face
                                              additionalProperties: false
                                            instructions:
                                              $schema: >-
                                                https://json-schema.org/draft/2020-12/schema
                                              $id: >-
                                                https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                              $comment: >-
                                                NativeMindNONC — freedome_contract (see
                                                LICENSE). Localised text map
                                                {"en":…,"ru":…}, 02e §3.1 (as .dome
                                                meta.title).
                                              title: Localised text
                                              type: object
                                              minProperties: 1
                                              propertyNames:
                                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                              additionalProperties:
                                                type: string
                                              examples:
                                                - en: Intro
                                                  ru: Вступление
                                              $defs:
                                                textOrI18n:
                                                  description: >-
                                                    Plain string (treated as `en`) or a
                                                    localised map. (map branch = the root
                                                    schema, inlined for tools that
                                                    mis-handle self references)
                                                  anyOf:
                                                    - type: string
                                                    - type: object
                                                      minProperties: 1
                                                      propertyNames:
                                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                      additionalProperties:
                                                        type: string
                                                      examples:
                                                        - en: Intro
                                                          ru: Вступление
                                          additionalProperties: false
                                    errors:
                                      description: >-
                                        Per-display residual error after
                                        solving.
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - displayId
                                        properties:
                                          displayId:
                                            description: >-
                                              Document-scoped id (.dome displays[].id,
                                              assets[].id, playlist / cue ids); unique
                                              within its parent.
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          meanError:
                                            type: number
                                            minimum: 0
                                          maxError:
                                            type: number
                                            minimum: 0
                                          unit:
                                            type: string
                                        additionalProperties: false
                                    result:
                                      description: >-
                                        Proposed calibration (applied to the
                                        venue by POST …/apply).
                                      anyOf:
                                        - type: 'null'
                                        - description: >-
                                            Per-display calibration (01b §4.3); keys
                                            of `displays` are display ids (checked
                                            by the codecs).
                                          type: object
                                          properties:
                                            displays:
                                              type: object
                                              propertyNames:
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                              additionalProperties:
                                                type: object
                                                properties:
                                                  warp:
                                                    type: object
                                                    required:
                                                      - file
                                                    properties:
                                                      file:
                                                        description: FDMESH file (01b §5)
                                                        type: string
                                                        minLength: 1
                                                        maxLength: 1024
                                                        pattern: >-
                                                          ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                      kind:
                                                        anyOf:
                                                          - enum:
                                                              - uv-grid
                                                          - description: >-
                                                              Value of an open enum: one of the listed
                                                              values or any other token (clients
                                                              tolerate unknown values).
                                                            type: string
                                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                      size:
                                                        type: array
                                                        items:
                                                          type: integer
                                                          minimum: 1
                                                        minItems: 2
                                                        maxItems: 2
                                                        description: '[width, height] or [cols, rows].'
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                  blend:
                                                    type: object
                                                    required:
                                                      - file
                                                    properties:
                                                      file:
                                                        description: 16-bit greyscale PNG
                                                        type: string
                                                        minLength: 1
                                                        maxLength: 1024
                                                        pattern: >-
                                                          ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                      bitDepth:
                                                        enum:
                                                          - 8
                                                          - 16
                                                      gamma:
                                                        type: number
                                                        exclusiveMinimum: 0
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                  colour:
                                                    type: object
                                                    properties:
                                                      lut:
                                                        description: Adobe / Resolve .cube 3D LUT
                                                        type: string
                                                        minLength: 1
                                                        maxLength: 1024
                                                        pattern: >-
                                                          ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                      blackLevel:
                                                        type: number
                                                        minimum: 0
                                                        maximum: 1
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                  report:
                                                    type: object
                                                    properties:
                                                      method:
                                                        anyOf:
                                                          - enum:
                                                              - camera-homography
                                                              - manual
                                                              - imported
                                                              - model
                                                          - description: >-
                                                              Value of an open enum: one of the listed
                                                              values or any other token (clients
                                                              tolerate unknown values).
                                                            type: string
                                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                      date:
                                                        type: string
                                                        format: date-time
                                                      meanError:
                                                        type: number
                                                        minimum: 0
                                                      maxError:
                                                        type: number
                                                        minimum: 0
                                                      unit:
                                                        anyOf:
                                                          - enum:
                                                              - px
                                                              - deg
                                                              - mm
                                                          - description: >-
                                                              Value of an open enum: one of the listed
                                                              values or any other token (clients
                                                              tolerate unknown values).
                                                            type: string
                                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                      file:
                                                        description: >-
                                                          Entry path inside the container:
                                                          relative, `/`-separated, no `..`
                                                          segment, no backslash, no NUL.
                                                        type: string
                                                        minLength: 1
                                                        maxLength: 1024
                                                        pattern: >-
                                                          ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                    problem:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). RFC 9457 problem details with
                                        the Freedome `code` catalogue, 02e §3.3.
                                        Also the `data` of WS `error`, the
                                        socket.io ack error and GraphQL
                                        errors[].extensions.problem. The
                                        catalogue is open: unknown codes are
                                        allowed; known codes are bound to their
                                        HTTP status.
                                      title: Problem details
                                      type: object
                                      required:
                                        - type
                                        - title
                                        - code
                                      properties:
                                        type:
                                          type: string
                                          format: uri
                                          description: >-
                                            https://freedome.nativemind.us/problems/<code>
                                            for catalogue codes.
                                        title:
                                          type: string
                                          minLength: 1
                                        status:
                                          type: integer
                                          minimum: 100
                                          maximum: 599
                                        detail:
                                          type: string
                                        instance:
                                          type: string
                                          format: uri-reference
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        traceId:
                                          type: string
                                          pattern: ^[0-9a-f]{16,32}$
                                        errors:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                      allOf:
                                        - if:
                                            properties:
                                              code:
                                                const: validation-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: not-found
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 404
                                        - if:
                                            properties:
                                              code:
                                                const: conflict
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 412
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-required
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 428
                                        - if:
                                            properties:
                                              code:
                                                const: unauthenticated
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: forbidden
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: rate-limited
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 429
                                        - if:
                                            properties:
                                              code:
                                                const: payload-too-large
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 413
                                        - if:
                                            properties:
                                              code:
                                                const: unsupported-format
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 415
                                        - if:
                                            properties:
                                              code:
                                                const: engine-unavailable
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: engine-incompatible
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: degraded
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: upload-checksum-mismatch
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: legacy-unsupported
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 501
                                        - if:
                                            properties:
                                              code:
                                                const: internal
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 500
                                        - if:
                                            properties:
                                              code:
                                                const: clock-unlocked
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: not-configured
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: authorization-pending
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: slow-down
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: access-denied
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: expired-token
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: token-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-key-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-in-progress
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                      additionalProperties: true
                                      examples:
                                        - type: >-
                                            https://freedome.nativemind.us/problems/engine-unavailable
                                          title: Visual engine unavailable
                                          status: 503
                                          detail: >-
                                            freedome-engined not reachable at
                                            unix:/run/freedome/engine.sock
                                          instance: /api/v1/venues/default/players/main/play
                                          code: engine-unavailable
                                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                      $defs:
                                        knownCode:
                                          enum:
                                            - validation-failed
                                            - not-found
                                            - conflict
                                            - precondition-failed
                                            - precondition-required
                                            - unauthenticated
                                            - forbidden
                                            - rate-limited
                                            - payload-too-large
                                            - unsupported-format
                                            - engine-unavailable
                                            - engine-incompatible
                                            - degraded
                                            - job-failed
                                            - upload-checksum-mismatch
                                            - legacy-unsupported
                                            - internal
                                            - clock-unlocked
                                            - not-configured
                                            - authorization-pending
                                            - slow-down
                                            - access-denied
                                            - expired-token
                                            - token-reused
                                            - idempotency-key-reused
                                            - idempotency-in-progress
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        fieldError:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    createdAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    updatedAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  additionalProperties: false
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                            additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: calibrationJob.progress
                    required:
                      - kind
                  then:
                    properties:
                      patch:
                        type: object
                        minProperties: 1
                        properties:
                          progress:
                            type: number
                            minimum: 0
                            maximum: 1
                          currentStep:
                            anyOf:
                              - description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              - type: 'null'
                          message:
                            type: string
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: calibrationJob.awaiting
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: >-
                          Same object as calibration-job `awaiting` (null when
                          nothing is awaited).
                        anyOf:
                          - type: 'null'
                          - type: object
                            required:
                              - kind
                            properties:
                              kind:
                                anyOf:
                                  - enum:
                                      - camera-capture
                                      - manual-adjust
                                      - confirm
                                  - type: string
                              stepId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              displayId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              pattern:
                                description: >-
                                  PUT
                                  /venues/{venueId}/displays/{displayId}/pattern
                                  body (engine freedome_pattern_*).
                                type: object
                                required:
                                  - kind
                                properties:
                                  kind:
                                    anyOf:
                                      - enum:
                                          - 'off'
                                          - grid
                                          - checker
                                          - gray-ramp
                                          - colour-bars
                                          - dots
                                          - crosshair
                                          - solid
                                          - structured-light
                                      - type: string
                                        pattern: ^[a-z][a-z0-9_-]{0,31}$
                                  params:
                                    description: >-
                                      Kind-specific: grid {spacingDeg,
                                      lineWidthPx, colour}, checker {cells},
                                      solid {colour}, structured-light
                                      {sequence, index} …
                                    type: object
                                  face:
                                    type: integer
                                    minimum: 0
                                    maximum: 5
                                    description: 'prism / pyramid: limit to one optics face'
                                additionalProperties: false
                              instructions:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). Localised text map {"en":…,"ru":…},
                                  02e §3.1 (as .dome meta.title).
                                title: Localised text
                                type: object
                                minProperties: 1
                                propertyNames:
                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                additionalProperties:
                                  type: string
                                examples:
                                  - en: Intro
                                    ru: Вступление
                                $defs:
                                  textOrI18n:
                                    description: >-
                                      Plain string (treated as `en`) or a
                                      localised map. (map branch = the root
                                      schema, inlined for tools that mis-handle
                                      self references)
                                    anyOf:
                                      - type: string
                                      - type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                            additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: job.state
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/api/1.0/job.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE).
                          Generic long-running operation (02e §3.1, §5.1 GET
                          /jobs/{jobId}).
                        title: Job
                        allOf:
                          - type: object
                            required:
                              - id
                              - kind
                              - status
                              - createdAt
                            properties:
                              id:
                                description: >-
                                  Server-owned resource id: UUIDv7, lowercase,
                                  sortable by creation time.
                                type: string
                                pattern: >-
                                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                examples:
                                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                              kind:
                                anyOf:
                                  - enum:
                                      - calibration
                                      - import
                                      - export
                                      - backup
                                      - restore
                                      - diagnostics
                                      - update
                                      - probe
                                  - type: string
                                    pattern: ^[a-z0-9][a-z0-9._-]{0,63}$
                              status:
                                description: >-
                                  queued → running ⇄ awaiting_input → succeeded
                                  | failed | cancelled.
                                enum:
                                  - queued
                                  - running
                                  - awaiting_input
                                  - succeeded
                                  - failed
                                  - cancelled
                              progress:
                                type: number
                                minimum: 0
                                maximum: 1
                              message:
                                type: string
                              createdAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              finishedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              result:
                                description: >-
                                  Kind-specific result (e.g. { venueId } of an
                                  import).
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              links:
                                type: object
                                properties:
                                  self:
                                    type: string
                                    format: uri-reference
                                  cancel:
                                    type: string
                                    format: uri-reference
                                  resource:
                                    type: string
                                    format: uri-reference
                                additionalProperties: false
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                            allOf:
                              - if:
                                  properties:
                                    status:
                                      const: failed
                                  required:
                                    - status
                                then:
                                  required:
                                    - problem
                        $defs:
                          job:
                            type: object
                            required:
                              - id
                              - kind
                              - status
                              - createdAt
                            properties:
                              id:
                                description: >-
                                  Server-owned resource id: UUIDv7, lowercase,
                                  sortable by creation time.
                                type: string
                                pattern: >-
                                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                examples:
                                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                              kind:
                                anyOf:
                                  - enum:
                                      - calibration
                                      - import
                                      - export
                                      - backup
                                      - restore
                                      - diagnostics
                                      - update
                                      - probe
                                  - type: string
                                    pattern: ^[a-z0-9][a-z0-9._-]{0,63}$
                              status:
                                description: >-
                                  queued → running ⇄ awaiting_input → succeeded
                                  | failed | cancelled.
                                enum:
                                  - queued
                                  - running
                                  - awaiting_input
                                  - succeeded
                                  - failed
                                  - cancelled
                              progress:
                                type: number
                                minimum: 0
                                maximum: 1
                              message:
                                type: string
                              createdAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              finishedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              result:
                                description: >-
                                  Kind-specific result (e.g. { venueId } of an
                                  import).
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              links:
                                type: object
                                properties:
                                  self:
                                    type: string
                                    format: uri-reference
                                  cancel:
                                    type: string
                                    format: uri-reference
                                  resource:
                                    type: string
                                    format: uri-reference
                                additionalProperties: false
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                            allOf:
                              - if:
                                  properties:
                                    status:
                                      const: failed
                                  required:
                                    - status
                                then:
                                  required:
                                    - problem
                          token:
                            type: string
                            pattern: ^[a-z0-9][a-z0-9._-]{0,63}$
                          status:
                            description: >-
                              queued → running ⇄ awaiting_input → succeeded |
                              failed | cancelled.
                            enum:
                              - queued
                              - running
                              - awaiting_input
                              - succeeded
                              - failed
                              - cancelled
                          page:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - id
                                    - kind
                                    - status
                                    - createdAt
                                  properties:
                                    id:
                                      description: >-
                                        Server-owned resource id: UUIDv7,
                                        lowercase, sortable by creation time.
                                      type: string
                                      pattern: >-
                                        ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                      examples:
                                        - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                                    kind:
                                      anyOf:
                                        - enum:
                                            - calibration
                                            - import
                                            - export
                                            - backup
                                            - restore
                                            - diagnostics
                                            - update
                                            - probe
                                        - type: string
                                          pattern: ^[a-z0-9][a-z0-9._-]{0,63}$
                                    status:
                                      description: >-
                                        queued → running ⇄ awaiting_input →
                                        succeeded | failed | cancelled.
                                      enum:
                                        - queued
                                        - running
                                        - awaiting_input
                                        - succeeded
                                        - failed
                                        - cancelled
                                    progress:
                                      type: number
                                      minimum: 0
                                      maximum: 1
                                    message:
                                      type: string
                                    createdAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    updatedAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    finishedAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    result:
                                      description: >-
                                        Kind-specific result (e.g. { venueId }
                                        of an import).
                                    problem:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). RFC 9457 problem details with
                                        the Freedome `code` catalogue, 02e §3.3.
                                        Also the `data` of WS `error`, the
                                        socket.io ack error and GraphQL
                                        errors[].extensions.problem. The
                                        catalogue is open: unknown codes are
                                        allowed; known codes are bound to their
                                        HTTP status.
                                      title: Problem details
                                      type: object
                                      required:
                                        - type
                                        - title
                                        - code
                                      properties:
                                        type:
                                          type: string
                                          format: uri
                                          description: >-
                                            https://freedome.nativemind.us/problems/<code>
                                            for catalogue codes.
                                        title:
                                          type: string
                                          minLength: 1
                                        status:
                                          type: integer
                                          minimum: 100
                                          maximum: 599
                                        detail:
                                          type: string
                                        instance:
                                          type: string
                                          format: uri-reference
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        traceId:
                                          type: string
                                          pattern: ^[0-9a-f]{16,32}$
                                        errors:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                      allOf:
                                        - if:
                                            properties:
                                              code:
                                                const: validation-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: not-found
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 404
                                        - if:
                                            properties:
                                              code:
                                                const: conflict
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 412
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-required
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 428
                                        - if:
                                            properties:
                                              code:
                                                const: unauthenticated
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: forbidden
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: rate-limited
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 429
                                        - if:
                                            properties:
                                              code:
                                                const: payload-too-large
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 413
                                        - if:
                                            properties:
                                              code:
                                                const: unsupported-format
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 415
                                        - if:
                                            properties:
                                              code:
                                                const: engine-unavailable
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: engine-incompatible
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: degraded
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: upload-checksum-mismatch
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: legacy-unsupported
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 501
                                        - if:
                                            properties:
                                              code:
                                                const: internal
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 500
                                        - if:
                                            properties:
                                              code:
                                                const: clock-unlocked
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: not-configured
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: authorization-pending
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: slow-down
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: access-denied
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: expired-token
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: token-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-key-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-in-progress
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                      additionalProperties: true
                                      examples:
                                        - type: >-
                                            https://freedome.nativemind.us/problems/engine-unavailable
                                          title: Visual engine unavailable
                                          status: 503
                                          detail: >-
                                            freedome-engined not reachable at
                                            unix:/run/freedome/engine.sock
                                          instance: /api/v1/venues/default/players/main/play
                                          code: engine-unavailable
                                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                      $defs:
                                        knownCode:
                                          enum:
                                            - validation-failed
                                            - not-found
                                            - conflict
                                            - precondition-failed
                                            - precondition-required
                                            - unauthenticated
                                            - forbidden
                                            - rate-limited
                                            - payload-too-large
                                            - unsupported-format
                                            - engine-unavailable
                                            - engine-incompatible
                                            - degraded
                                            - job-failed
                                            - upload-checksum-mismatch
                                            - legacy-unsupported
                                            - internal
                                            - clock-unlocked
                                            - not-configured
                                            - authorization-pending
                                            - slow-down
                                            - access-denied
                                            - expired-token
                                            - token-reused
                                            - idempotency-key-reused
                                            - idempotency-in-progress
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        fieldError:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    links:
                                      type: object
                                      properties:
                                        self:
                                          type: string
                                          format: uri-reference
                                        cancel:
                                          type: string
                                          format: uri-reference
                                        resource:
                                          type: string
                                          format: uri-reference
                                      additionalProperties: false
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                  allOf:
                                    - if:
                                        properties:
                                          status:
                                            const: failed
                                        required:
                                          - status
                                      then:
                                        required:
                                          - problem
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                            additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: job.progress
                    required:
                      - kind
                  then:
                    properties:
                      patch:
                        type: object
                        minProperties: 1
                        properties:
                          progress:
                            type: number
                            minimum: 0
                            maximum: 1
                          currentStep:
                            anyOf:
                              - description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              - type: 'null'
                          message:
                            type: string
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: log.entry
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        type: object
                        required:
                          - ts
                          - level
                          - message
                        properties:
                          seq:
                            type: integer
                            minimum: 0
                          ts:
                            description: >-
                              RFC 3339 UTC with milliseconds, e.g.
                              2026-10-19T12:00:00.000Z.
                            type: string
                            format: date-time
                            pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          level:
                            enum:
                              - trace
                              - debug
                              - info
                              - warn
                              - error
                          target:
                            type: string
                            description: module / component
                          message:
                            type: string
                          fields:
                            type: object
                            additionalProperties: true
                          traceId:
                            type: string
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: node.state
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: >-
                          Cluster node (02d UC-K1–K3): this server and the
                          engine hosts it drives.
                        type: object
                        required:
                          - id
                          - role
                          - status
                        properties:
                          id:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          name:
                            type: string
                          role:
                            anyOf:
                              - enum:
                                  - primary
                                  - engine
                                  - peer
                              - type: string
                          status:
                            anyOf:
                              - enum:
                                  - up
                                  - degraded
                                  - down
                              - type: string
                          address:
                            type: string
                          engines:
                            type: array
                            items:
                              type: string
                          clock:
                            description: Clock status of a node (02d ClockStatus).
                            type: object
                            required:
                              - source
                              - locked
                            properties:
                              source:
                                anyOf:
                                  - enum:
                                      - ptp
                                      - ntp
                                      - local
                                  - type: string
                              offsetMs:
                                type: number
                              jitterMs:
                                type: number
                                minimum: 0
                              masterId:
                                type: string
                              locked:
                                type: boolean
                            additionalProperties: false
                          lastSeen:
                            description: >-
                              RFC 3339 UTC with milliseconds, e.g.
                              2026-10-19T12:00:00.000Z.
                            type: string
                            format: date-time
                            pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                        patternProperties:
                          ^x-: true
                        additionalProperties: false
                      patch:
                        description: Merge patch of the resource (high-rate kinds).
                        type: object
                        minProperties: 1
                - if:
                    properties:
                      kind:
                        const: player.state
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/api/1.0/player.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE).
                          Media player state and playback command bodies (02e
                          §5.3: players, play / pause / resume / stop / next /
                          previous / seek, fireCue, setActiveShow, parameters).
                          Root = GET /venues/{venueId}/players/{playerId}.
                        title: Media player
                        allOf:
                          - type: object
                            required:
                              - id
                              - venueId
                              - status
                              - position
                              - revision
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              venueId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              name:
                                type: string
                              status:
                                anyOf:
                                  - enum:
                                      - idle
                                      - loading
                                      - playing
                                      - paused
                                      - stopped
                                      - error
                                  - type: string
                                    pattern: ^[a-z][a-z_-]{0,31}$
                              showId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              playlistId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              timelineId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              matrixCell:
                                anyOf:
                                  - type: object
                                    required:
                                      - row
                                      - column
                                    properties:
                                      matrixId:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      row:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      column:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                    additionalProperties: false
                                  - type: 'null'
                              itemIndex:
                                anyOf:
                                  - type: integer
                                    minimum: 0
                                  - type: 'null'
                              assetId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              position:
                                description: Media position in seconds from the start.
                                type: number
                                minimum: 0
                              duration:
                                anyOf:
                                  - description: Duration in seconds.
                                    type: number
                                    minimum: 0
                                  - type: 'null'
                              rate:
                                type: number
                                exclusiveMinimum: 0
                                maximum: 16
                                description: playback rate, 1 = normal
                              loop:
                                type: boolean
                              volume:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              opacity:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              brightness:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              rotation:
                                type: number
                                minimum: -360
                                maximum: 360
                              target:
                                type: object
                                properties:
                                  displays:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                  layer:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                              pending:
                                type: boolean
                                description: >-
                                  last command not yet acknowledged by the
                                  engine (2 s timeout); a later player.state
                                  resolves it
                              scheduledAt:
                                anyOf:
                                  - description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  - type: 'null'
                                description: pending scheduled start (play.at)
                              error:
                                anyOf:
                                  - $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  - type: 'null'
                              revision:
                                description: >-
                                  Monotonic resource revision; the strong ETag
                                  is derived from it.
                                type: integer
                                minimum: 0
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                        $defs:
                          player:
                            type: object
                            required:
                              - id
                              - venueId
                              - status
                              - position
                              - revision
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              venueId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              name:
                                type: string
                              status:
                                anyOf:
                                  - enum:
                                      - idle
                                      - loading
                                      - playing
                                      - paused
                                      - stopped
                                      - error
                                  - type: string
                                    pattern: ^[a-z][a-z_-]{0,31}$
                              showId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              playlistId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              timelineId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              matrixCell:
                                anyOf:
                                  - type: object
                                    required:
                                      - row
                                      - column
                                    properties:
                                      matrixId:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      row:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      column:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                    additionalProperties: false
                                  - type: 'null'
                              itemIndex:
                                anyOf:
                                  - type: integer
                                    minimum: 0
                                  - type: 'null'
                              assetId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              position:
                                description: Media position in seconds from the start.
                                type: number
                                minimum: 0
                              duration:
                                anyOf:
                                  - description: Duration in seconds.
                                    type: number
                                    minimum: 0
                                  - type: 'null'
                              rate:
                                type: number
                                exclusiveMinimum: 0
                                maximum: 16
                                description: playback rate, 1 = normal
                              loop:
                                type: boolean
                              volume:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              opacity:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              brightness:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              rotation:
                                type: number
                                minimum: -360
                                maximum: 360
                              target:
                                type: object
                                properties:
                                  displays:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                  layer:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                              pending:
                                type: boolean
                                description: >-
                                  last command not yet acknowledged by the
                                  engine (2 s timeout); a later player.state
                                  resolves it
                              scheduledAt:
                                anyOf:
                                  - description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  - type: 'null'
                                description: pending scheduled start (play.at)
                              error:
                                anyOf:
                                  - $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  - type: 'null'
                              revision:
                                description: >-
                                  Monotonic resource revision; the strong ETag
                                  is derived from it.
                                type: integer
                                minimum: 0
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          status:
                            anyOf:
                              - enum:
                                  - idle
                                  - loading
                                  - playing
                                  - paused
                                  - stopped
                                  - error
                              - type: string
                                pattern: ^[a-z][a-z_-]{0,31}$
                          rate:
                            type: number
                            exclusiveMinimum: 0
                            maximum: 16
                            description: playback rate, 1 = normal
                          matrixCell:
                            type: object
                            required:
                              - row
                              - column
                            properties:
                              matrixId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              row:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              column:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                            additionalProperties: false
                          page:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - id
                                    - venueId
                                    - status
                                    - position
                                    - revision
                                  properties:
                                    id:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    venueId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    name:
                                      type: string
                                    status:
                                      anyOf:
                                        - enum:
                                            - idle
                                            - loading
                                            - playing
                                            - paused
                                            - stopped
                                            - error
                                        - type: string
                                          pattern: ^[a-z][a-z_-]{0,31}$
                                    showId:
                                      anyOf:
                                        - description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        - type: 'null'
                                    playlistId:
                                      anyOf:
                                        - description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        - type: 'null'
                                    timelineId:
                                      anyOf:
                                        - description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        - type: 'null'
                                    matrixCell:
                                      anyOf:
                                        - type: object
                                          required:
                                            - row
                                            - column
                                          properties:
                                            matrixId:
                                              description: >-
                                                Document-scoped id (.dome displays[].id,
                                                assets[].id, playlist / cue ids); unique
                                                within its parent.
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            row:
                                              description: >-
                                                Document-scoped id (.dome displays[].id,
                                                assets[].id, playlist / cue ids); unique
                                                within its parent.
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            column:
                                              description: >-
                                                Document-scoped id (.dome displays[].id,
                                                assets[].id, playlist / cue ids); unique
                                                within its parent.
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                          additionalProperties: false
                                        - type: 'null'
                                    itemIndex:
                                      anyOf:
                                        - type: integer
                                          minimum: 0
                                        - type: 'null'
                                    assetId:
                                      anyOf:
                                        - description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        - type: 'null'
                                    position:
                                      description: >-
                                        Media position in seconds from the
                                        start.
                                      type: number
                                      minimum: 0
                                    duration:
                                      anyOf:
                                        - description: Duration in seconds.
                                          type: number
                                          minimum: 0
                                        - type: 'null'
                                    rate:
                                      type: number
                                      exclusiveMinimum: 0
                                      maximum: 16
                                      description: playback rate, 1 = normal
                                    loop:
                                      type: boolean
                                    volume:
                                      description: >-
                                        0..1 (brightness, linear volume gain,
                                        progress).
                                      type: number
                                      minimum: 0
                                      maximum: 1
                                    opacity:
                                      description: >-
                                        0..1 (brightness, linear volume gain,
                                        progress).
                                      type: number
                                      minimum: 0
                                      maximum: 1
                                    brightness:
                                      description: >-
                                        0..1 (brightness, linear volume gain,
                                        progress).
                                      type: number
                                      minimum: 0
                                      maximum: 1
                                    rotation:
                                      type: number
                                      minimum: -360
                                      maximum: 360
                                    target:
                                      type: object
                                      properties:
                                        displays:
                                          type: array
                                          items:
                                            description: >-
                                              Document-scoped id (.dome displays[].id,
                                              assets[].id, playlist / cue ids); unique
                                              within its parent.
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                        layer:
                                          type: integer
                                          minimum: 0
                                      additionalProperties: false
                                    pending:
                                      type: boolean
                                      description: >-
                                        last command not yet acknowledged by the
                                        engine (2 s timeout); a later
                                        player.state resolves it
                                    scheduledAt:
                                      anyOf:
                                        - description: >-
                                            RFC 3339 UTC with milliseconds, e.g.
                                            2026-10-19T12:00:00.000Z.
                                          type: string
                                          format: date-time
                                          pattern: >-
                                            ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                        - type: 'null'
                                      description: pending scheduled start (play.at)
                                    error:
                                      anyOf:
                                        - $schema: >-
                                            https://json-schema.org/draft/2020-12/schema
                                          $id: >-
                                            https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                          $comment: >-
                                            NativeMindNONC — freedome_contract (see
                                            LICENSE). RFC 9457 problem details with
                                            the Freedome `code` catalogue, 02e §3.3.
                                            Also the `data` of WS `error`, the
                                            socket.io ack error and GraphQL
                                            errors[].extensions.problem. The
                                            catalogue is open: unknown codes are
                                            allowed; known codes are bound to their
                                            HTTP status.
                                          title: Problem details
                                          type: object
                                          required:
                                            - type
                                            - title
                                            - code
                                          properties:
                                            type:
                                              type: string
                                              format: uri
                                              description: >-
                                                https://freedome.nativemind.us/problems/<code>
                                                for catalogue codes.
                                            title:
                                              type: string
                                              minLength: 1
                                            status:
                                              type: integer
                                              minimum: 100
                                              maximum: 599
                                            detail:
                                              type: string
                                            instance:
                                              type: string
                                              format: uri-reference
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            traceId:
                                              type: string
                                              pattern: ^[0-9a-f]{16,32}$
                                            errors:
                                              type: array
                                              items:
                                                type: object
                                                required:
                                                  - pointer
                                                  - detail
                                                properties:
                                                  pointer:
                                                    type: string
                                                    format: json-pointer
                                                  detail:
                                                    type: string
                                                  code:
                                                    description: >-
                                                      Stable machine key; also the last path
                                                      segment of `type`. Open set: see
                                                      knownCode.
                                                    type: string
                                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                additionalProperties: true
                                          allOf:
                                            - if:
                                                properties:
                                                  code:
                                                    const: validation-failed
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 422
                                            - if:
                                                properties:
                                                  code:
                                                    const: not-found
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 404
                                            - if:
                                                properties:
                                                  code:
                                                    const: conflict
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 409
                                            - if:
                                                properties:
                                                  code:
                                                    const: precondition-failed
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 412
                                            - if:
                                                properties:
                                                  code:
                                                    const: precondition-required
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 428
                                            - if:
                                                properties:
                                                  code:
                                                    const: unauthenticated
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 401
                                            - if:
                                                properties:
                                                  code:
                                                    const: forbidden
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 403
                                            - if:
                                                properties:
                                                  code:
                                                    const: rate-limited
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 429
                                            - if:
                                                properties:
                                                  code:
                                                    const: payload-too-large
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 413
                                            - if:
                                                properties:
                                                  code:
                                                    const: unsupported-format
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 415
                                            - if:
                                                properties:
                                                  code:
                                                    const: engine-unavailable
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 503
                                            - if:
                                                properties:
                                                  code:
                                                    const: engine-incompatible
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 503
                                            - if:
                                                properties:
                                                  code:
                                                    const: degraded
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 503
                                            - if:
                                                properties:
                                                  code:
                                                    const: upload-checksum-mismatch
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 422
                                            - if:
                                                properties:
                                                  code:
                                                    const: legacy-unsupported
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 501
                                            - if:
                                                properties:
                                                  code:
                                                    const: internal
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 500
                                            - if:
                                                properties:
                                                  code:
                                                    const: clock-unlocked
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 409
                                            - if:
                                                properties:
                                                  code:
                                                    const: not-configured
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 503
                                            - if:
                                                properties:
                                                  code:
                                                    const: authorization-pending
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 400
                                            - if:
                                                properties:
                                                  code:
                                                    const: slow-down
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 400
                                            - if:
                                                properties:
                                                  code:
                                                    const: access-denied
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 403
                                            - if:
                                                properties:
                                                  code:
                                                    const: expired-token
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 400
                                            - if:
                                                properties:
                                                  code:
                                                    const: token-reused
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 401
                                            - if:
                                                properties:
                                                  code:
                                                    const: idempotency-key-reused
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 409
                                            - if:
                                                properties:
                                                  code:
                                                    const: idempotency-in-progress
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 409
                                          additionalProperties: true
                                          examples:
                                            - type: >-
                                                https://freedome.nativemind.us/problems/engine-unavailable
                                              title: Visual engine unavailable
                                              status: 503
                                              detail: >-
                                                freedome-engined not reachable at
                                                unix:/run/freedome/engine.sock
                                              instance: /api/v1/venues/default/players/main/play
                                              code: engine-unavailable
                                              traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                          $defs:
                                            knownCode:
                                              enum:
                                                - validation-failed
                                                - not-found
                                                - conflict
                                                - precondition-failed
                                                - precondition-required
                                                - unauthenticated
                                                - forbidden
                                                - rate-limited
                                                - payload-too-large
                                                - unsupported-format
                                                - engine-unavailable
                                                - engine-incompatible
                                                - degraded
                                                - job-failed
                                                - upload-checksum-mismatch
                                                - legacy-unsupported
                                                - internal
                                                - clock-unlocked
                                                - not-configured
                                                - authorization-pending
                                                - slow-down
                                                - access-denied
                                                - expired-token
                                                - token-reused
                                                - idempotency-key-reused
                                                - idempotency-in-progress
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            fieldError:
                                              type: object
                                              required:
                                                - pointer
                                                - detail
                                              properties:
                                                pointer:
                                                  type: string
                                                  format: json-pointer
                                                detail:
                                                  type: string
                                                code:
                                                  description: >-
                                                    Stable machine key; also the last path
                                                    segment of `type`. Open set: see
                                                    knownCode.
                                                  type: string
                                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                              additionalProperties: true
                                        - type: 'null'
                                    revision:
                                      description: >-
                                        Monotonic resource revision; the strong
                                        ETag is derived from it.
                                      type: integer
                                      minimum: 0
                                    updatedAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                            additionalProperties: false
                          patch:
                            description: >-
                              PATCH /venues/{venueId}/players/{playerId}
                              (merge-patch; playback is last-writer-wins, no
                              If-Match).
                            type: object
                            minProperties: 1
                            properties:
                              rate:
                                type: number
                                exclusiveMinimum: 0
                                maximum: 16
                                description: playback rate, 1 = normal
                              loop:
                                type: boolean
                              volume:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              opacity:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              brightness:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              rotation:
                                type: number
                                minimum: -360
                                maximum: 360
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          play:
                            description: >-
                              POST …/play: what to play (absent = resume the
                              loaded source / startup) and when. `at` =
                              scheduled start on the server clock (multi-node
                              sync, 02d UC-K5).
                            type: object
                            properties:
                              showId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              playlistId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              itemIndex:
                                type: integer
                                minimum: 0
                              timelineId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              matrixCell:
                                type: object
                                required:
                                  - row
                                  - column
                                properties:
                                  matrixId:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  row:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  column:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                additionalProperties: false
                              assetId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              position:
                                description: Media position in seconds from the start.
                                type: number
                                minimum: 0
                              at:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              loop:
                                type: boolean
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                            not:
                              anyOf:
                                - required:
                                    - playlistId
                                    - timelineId
                                - required:
                                    - playlistId
                                    - assetId
                                - required:
                                    - timelineId
                                    - assetId
                                - required:
                                    - matrixCell
                                    - playlistId
                                - required:
                                    - matrixCell
                                    - timelineId
                                - required:
                                    - matrixCell
                                    - assetId
                          seek:
                            description: >-
                              POST …/seek: exactly one of position (s), marker
                              (timeline marker id) or normalized (0..1).
                            type: object
                            properties:
                              position:
                                description: Media position in seconds from the start.
                                type: number
                                minimum: 0
                              marker:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              normalized:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              at:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            additionalProperties: false
                            oneOf:
                              - required:
                                  - position
                              - required:
                                  - marker
                              - required:
                                  - normalized
                          activeShow:
                            description: >-
                              PUT /venues/{venueId}/active-show: load a show
                              onto the venue (mapped onto its geometry); showId
                              null unloads.
                            type: object
                            required:
                              - showId
                            properties:
                              showId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              autoplay:
                                type: boolean
                                default: false
                                description: start `show.startup` on player main
                            additionalProperties: false
                          activeShowState:
                            type: object
                            required:
                              - venueId
                              - showId
                            properties:
                              venueId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              showId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              warnings:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - code
                                    - detail
                                  properties:
                                    code:
                                      type: string
                                      pattern: ^[a-z][a-z0-9-]{0,63}$
                                    detail:
                                      type: string
                                    pointer:
                                      type: string
                                  additionalProperties: false
                            additionalProperties: false
                          fireCue:
                            type: object
                            properties:
                              showId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                            additionalProperties: false
                          cueFired:
                            type: object
                            required:
                              - cueId
                              - showId
                              - firedAt
                            properties:
                              cueId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              showId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              firedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              actions:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - do
                                    - status
                                  properties:
                                    do:
                                      type: string
                                    status:
                                      enum:
                                        - ok
                                        - failed
                                        - skipped
                                    problem:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). RFC 9457 problem details with
                                        the Freedome `code` catalogue, 02e §3.3.
                                        Also the `data` of WS `error`, the
                                        socket.io ack error and GraphQL
                                        errors[].extensions.problem. The
                                        catalogue is open: unknown codes are
                                        allowed; known codes are bound to their
                                        HTTP status.
                                      title: Problem details
                                      type: object
                                      required:
                                        - type
                                        - title
                                        - code
                                      properties:
                                        type:
                                          type: string
                                          format: uri
                                          description: >-
                                            https://freedome.nativemind.us/problems/<code>
                                            for catalogue codes.
                                        title:
                                          type: string
                                          minLength: 1
                                        status:
                                          type: integer
                                          minimum: 100
                                          maximum: 599
                                        detail:
                                          type: string
                                        instance:
                                          type: string
                                          format: uri-reference
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        traceId:
                                          type: string
                                          pattern: ^[0-9a-f]{16,32}$
                                        errors:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                      allOf:
                                        - if:
                                            properties:
                                              code:
                                                const: validation-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: not-found
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 404
                                        - if:
                                            properties:
                                              code:
                                                const: conflict
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 412
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-required
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 428
                                        - if:
                                            properties:
                                              code:
                                                const: unauthenticated
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: forbidden
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: rate-limited
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 429
                                        - if:
                                            properties:
                                              code:
                                                const: payload-too-large
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 413
                                        - if:
                                            properties:
                                              code:
                                                const: unsupported-format
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 415
                                        - if:
                                            properties:
                                              code:
                                                const: engine-unavailable
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: engine-incompatible
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: degraded
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: upload-checksum-mismatch
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: legacy-unsupported
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 501
                                        - if:
                                            properties:
                                              code:
                                                const: internal
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 500
                                        - if:
                                            properties:
                                              code:
                                                const: clock-unlocked
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: not-configured
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: authorization-pending
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: slow-down
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: access-denied
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: expired-token
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: token-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-key-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-in-progress
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                      additionalProperties: true
                                      examples:
                                        - type: >-
                                            https://freedome.nativemind.us/problems/engine-unavailable
                                          title: Visual engine unavailable
                                          status: 503
                                          detail: >-
                                            freedome-engined not reachable at
                                            unix:/run/freedome/engine.sock
                                          instance: /api/v1/venues/default/players/main/play
                                          code: engine-unavailable
                                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                      $defs:
                                        knownCode:
                                          enum:
                                            - validation-failed
                                            - not-found
                                            - conflict
                                            - precondition-failed
                                            - precondition-required
                                            - unauthenticated
                                            - forbidden
                                            - rate-limited
                                            - payload-too-large
                                            - unsupported-format
                                            - engine-unavailable
                                            - engine-incompatible
                                            - degraded
                                            - job-failed
                                            - upload-checksum-mismatch
                                            - legacy-unsupported
                                            - internal
                                            - clock-unlocked
                                            - not-configured
                                            - authorization-pending
                                            - slow-down
                                            - access-denied
                                            - expired-token
                                            - token-reused
                                            - idempotency-key-reused
                                            - idempotency-in-progress
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        fieldError:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                  additionalProperties: false
                            additionalProperties: false
                          parameterValue:
                            description: PUT /venues/{venueId}/parameters/{path} body.
                            type: object
                            required:
                              - value
                            properties:
                              value:
                                anyOf:
                                  - type: number
                                  - type: boolean
                                  - type: string
                              fadeSec:
                                type: number
                                minimum: 0
                                maximum: 3600
                            additionalProperties: false
                          parameter:
                            description: >-
                              A node / layer parameter (02d ParameterService
                              UC-N1–N3; Screenberry-compatible surface).
                            type: object
                            required:
                              - path
                              - type
                              - value
                            properties:
                              path:
                                type: string
                                pattern: ^[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+){0,15}$
                              type:
                                enum:
                                  - float
                                  - int
                                  - bool
                                  - string
                                  - enum
                                  - colour
                              value:
                                anyOf:
                                  - type: number
                                  - type: boolean
                                  - type: string
                              min:
                                type: number
                              max:
                                type: number
                              unit:
                                type: string
                              values:
                                type: array
                                items:
                                  type: string
                                description: allowed values of an enum parameter
                              readOnly:
                                type: boolean
                              description:
                                type: string
                            additionalProperties: false
                          parameterPage:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  description: >-
                                    A node / layer parameter (02d
                                    ParameterService UC-N1–N3;
                                    Screenberry-compatible surface).
                                  type: object
                                  required:
                                    - path
                                    - type
                                    - value
                                  properties:
                                    path:
                                      type: string
                                      pattern: ^[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+){0,15}$
                                    type:
                                      enum:
                                        - float
                                        - int
                                        - bool
                                        - string
                                        - enum
                                        - colour
                                    value:
                                      anyOf:
                                        - type: number
                                        - type: boolean
                                        - type: string
                                    min:
                                      type: number
                                    max:
                                      type: number
                                    unit:
                                      type: string
                                    values:
                                      type: array
                                      items:
                                        type: string
                                      description: allowed values of an enum parameter
                                    readOnly:
                                      type: boolean
                                    description:
                                      type: string
                                  additionalProperties: false
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                            additionalProperties: false
                      patch:
                        description: Merge patch of the resource (high-rate kinds).
                        type: object
                        minProperties: 1
                - if:
                    properties:
                      kind:
                        const: player.position
                    required:
                      - kind
                  then:
                    properties:
                      patch:
                        description: >-
                          player.position (default 4 Hz, ≤ 30 Hz per
                          subscription option positionHz).
                        type: object
                        required:
                          - position
                        properties:
                          position:
                            description: Media position in seconds from the start.
                            type: number
                            minimum: 0
                          duration:
                            anyOf:
                              - description: Duration in seconds.
                                type: number
                                minimum: 0
                              - type: 'null'
                          rate:
                            type: number
                          timecode:
                            type: string
                            pattern: ^\d{2}:\d{2}:\d{2}[:;]\d{2}$
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: player.ended
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/api/1.0/player.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE).
                          Media player state and playback command bodies (02e
                          §5.3: players, play / pause / resume / stop / next /
                          previous / seek, fireCue, setActiveShow, parameters).
                          Root = GET /venues/{venueId}/players/{playerId}.
                        title: Media player
                        allOf:
                          - type: object
                            required:
                              - id
                              - venueId
                              - status
                              - position
                              - revision
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              venueId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              name:
                                type: string
                              status:
                                anyOf:
                                  - enum:
                                      - idle
                                      - loading
                                      - playing
                                      - paused
                                      - stopped
                                      - error
                                  - type: string
                                    pattern: ^[a-z][a-z_-]{0,31}$
                              showId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              playlistId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              timelineId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              matrixCell:
                                anyOf:
                                  - type: object
                                    required:
                                      - row
                                      - column
                                    properties:
                                      matrixId:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      row:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      column:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                    additionalProperties: false
                                  - type: 'null'
                              itemIndex:
                                anyOf:
                                  - type: integer
                                    minimum: 0
                                  - type: 'null'
                              assetId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              position:
                                description: Media position in seconds from the start.
                                type: number
                                minimum: 0
                              duration:
                                anyOf:
                                  - description: Duration in seconds.
                                    type: number
                                    minimum: 0
                                  - type: 'null'
                              rate:
                                type: number
                                exclusiveMinimum: 0
                                maximum: 16
                                description: playback rate, 1 = normal
                              loop:
                                type: boolean
                              volume:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              opacity:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              brightness:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              rotation:
                                type: number
                                minimum: -360
                                maximum: 360
                              target:
                                type: object
                                properties:
                                  displays:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                  layer:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                              pending:
                                type: boolean
                                description: >-
                                  last command not yet acknowledged by the
                                  engine (2 s timeout); a later player.state
                                  resolves it
                              scheduledAt:
                                anyOf:
                                  - description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  - type: 'null'
                                description: pending scheduled start (play.at)
                              error:
                                anyOf:
                                  - $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  - type: 'null'
                              revision:
                                description: >-
                                  Monotonic resource revision; the strong ETag
                                  is derived from it.
                                type: integer
                                minimum: 0
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                        $defs:
                          player:
                            type: object
                            required:
                              - id
                              - venueId
                              - status
                              - position
                              - revision
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              venueId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              name:
                                type: string
                              status:
                                anyOf:
                                  - enum:
                                      - idle
                                      - loading
                                      - playing
                                      - paused
                                      - stopped
                                      - error
                                  - type: string
                                    pattern: ^[a-z][a-z_-]{0,31}$
                              showId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              playlistId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              timelineId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              matrixCell:
                                anyOf:
                                  - type: object
                                    required:
                                      - row
                                      - column
                                    properties:
                                      matrixId:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      row:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      column:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                    additionalProperties: false
                                  - type: 'null'
                              itemIndex:
                                anyOf:
                                  - type: integer
                                    minimum: 0
                                  - type: 'null'
                              assetId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              position:
                                description: Media position in seconds from the start.
                                type: number
                                minimum: 0
                              duration:
                                anyOf:
                                  - description: Duration in seconds.
                                    type: number
                                    minimum: 0
                                  - type: 'null'
                              rate:
                                type: number
                                exclusiveMinimum: 0
                                maximum: 16
                                description: playback rate, 1 = normal
                              loop:
                                type: boolean
                              volume:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              opacity:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              brightness:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              rotation:
                                type: number
                                minimum: -360
                                maximum: 360
                              target:
                                type: object
                                properties:
                                  displays:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                  layer:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                              pending:
                                type: boolean
                                description: >-
                                  last command not yet acknowledged by the
                                  engine (2 s timeout); a later player.state
                                  resolves it
                              scheduledAt:
                                anyOf:
                                  - description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  - type: 'null'
                                description: pending scheduled start (play.at)
                              error:
                                anyOf:
                                  - $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  - type: 'null'
                              revision:
                                description: >-
                                  Monotonic resource revision; the strong ETag
                                  is derived from it.
                                type: integer
                                minimum: 0
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          status:
                            anyOf:
                              - enum:
                                  - idle
                                  - loading
                                  - playing
                                  - paused
                                  - stopped
                                  - error
                              - type: string
                                pattern: ^[a-z][a-z_-]{0,31}$
                          rate:
                            type: number
                            exclusiveMinimum: 0
                            maximum: 16
                            description: playback rate, 1 = normal
                          matrixCell:
                            type: object
                            required:
                              - row
                              - column
                            properties:
                              matrixId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              row:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              column:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                            additionalProperties: false
                          page:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - id
                                    - venueId
                                    - status
                                    - position
                                    - revision
                                  properties:
                                    id:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    venueId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    name:
                                      type: string
                                    status:
                                      anyOf:
                                        - enum:
                                            - idle
                                            - loading
                                            - playing
                                            - paused
                                            - stopped
                                            - error
                                        - type: string
                                          pattern: ^[a-z][a-z_-]{0,31}$
                                    showId:
                                      anyOf:
                                        - description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        - type: 'null'
                                    playlistId:
                                      anyOf:
                                        - description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        - type: 'null'
                                    timelineId:
                                      anyOf:
                                        - description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        - type: 'null'
                                    matrixCell:
                                      anyOf:
                                        - type: object
                                          required:
                                            - row
                                            - column
                                          properties:
                                            matrixId:
                                              description: >-
                                                Document-scoped id (.dome displays[].id,
                                                assets[].id, playlist / cue ids); unique
                                                within its parent.
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            row:
                                              description: >-
                                                Document-scoped id (.dome displays[].id,
                                                assets[].id, playlist / cue ids); unique
                                                within its parent.
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            column:
                                              description: >-
                                                Document-scoped id (.dome displays[].id,
                                                assets[].id, playlist / cue ids); unique
                                                within its parent.
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                          additionalProperties: false
                                        - type: 'null'
                                    itemIndex:
                                      anyOf:
                                        - type: integer
                                          minimum: 0
                                        - type: 'null'
                                    assetId:
                                      anyOf:
                                        - description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        - type: 'null'
                                    position:
                                      description: >-
                                        Media position in seconds from the
                                        start.
                                      type: number
                                      minimum: 0
                                    duration:
                                      anyOf:
                                        - description: Duration in seconds.
                                          type: number
                                          minimum: 0
                                        - type: 'null'
                                    rate:
                                      type: number
                                      exclusiveMinimum: 0
                                      maximum: 16
                                      description: playback rate, 1 = normal
                                    loop:
                                      type: boolean
                                    volume:
                                      description: >-
                                        0..1 (brightness, linear volume gain,
                                        progress).
                                      type: number
                                      minimum: 0
                                      maximum: 1
                                    opacity:
                                      description: >-
                                        0..1 (brightness, linear volume gain,
                                        progress).
                                      type: number
                                      minimum: 0
                                      maximum: 1
                                    brightness:
                                      description: >-
                                        0..1 (brightness, linear volume gain,
                                        progress).
                                      type: number
                                      minimum: 0
                                      maximum: 1
                                    rotation:
                                      type: number
                                      minimum: -360
                                      maximum: 360
                                    target:
                                      type: object
                                      properties:
                                        displays:
                                          type: array
                                          items:
                                            description: >-
                                              Document-scoped id (.dome displays[].id,
                                              assets[].id, playlist / cue ids); unique
                                              within its parent.
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                        layer:
                                          type: integer
                                          minimum: 0
                                      additionalProperties: false
                                    pending:
                                      type: boolean
                                      description: >-
                                        last command not yet acknowledged by the
                                        engine (2 s timeout); a later
                                        player.state resolves it
                                    scheduledAt:
                                      anyOf:
                                        - description: >-
                                            RFC 3339 UTC with milliseconds, e.g.
                                            2026-10-19T12:00:00.000Z.
                                          type: string
                                          format: date-time
                                          pattern: >-
                                            ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                        - type: 'null'
                                      description: pending scheduled start (play.at)
                                    error:
                                      anyOf:
                                        - $schema: >-
                                            https://json-schema.org/draft/2020-12/schema
                                          $id: >-
                                            https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                          $comment: >-
                                            NativeMindNONC — freedome_contract (see
                                            LICENSE). RFC 9457 problem details with
                                            the Freedome `code` catalogue, 02e §3.3.
                                            Also the `data` of WS `error`, the
                                            socket.io ack error and GraphQL
                                            errors[].extensions.problem. The
                                            catalogue is open: unknown codes are
                                            allowed; known codes are bound to their
                                            HTTP status.
                                          title: Problem details
                                          type: object
                                          required:
                                            - type
                                            - title
                                            - code
                                          properties:
                                            type:
                                              type: string
                                              format: uri
                                              description: >-
                                                https://freedome.nativemind.us/problems/<code>
                                                for catalogue codes.
                                            title:
                                              type: string
                                              minLength: 1
                                            status:
                                              type: integer
                                              minimum: 100
                                              maximum: 599
                                            detail:
                                              type: string
                                            instance:
                                              type: string
                                              format: uri-reference
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            traceId:
                                              type: string
                                              pattern: ^[0-9a-f]{16,32}$
                                            errors:
                                              type: array
                                              items:
                                                type: object
                                                required:
                                                  - pointer
                                                  - detail
                                                properties:
                                                  pointer:
                                                    type: string
                                                    format: json-pointer
                                                  detail:
                                                    type: string
                                                  code:
                                                    description: >-
                                                      Stable machine key; also the last path
                                                      segment of `type`. Open set: see
                                                      knownCode.
                                                    type: string
                                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                additionalProperties: true
                                          allOf:
                                            - if:
                                                properties:
                                                  code:
                                                    const: validation-failed
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 422
                                            - if:
                                                properties:
                                                  code:
                                                    const: not-found
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 404
                                            - if:
                                                properties:
                                                  code:
                                                    const: conflict
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 409
                                            - if:
                                                properties:
                                                  code:
                                                    const: precondition-failed
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 412
                                            - if:
                                                properties:
                                                  code:
                                                    const: precondition-required
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 428
                                            - if:
                                                properties:
                                                  code:
                                                    const: unauthenticated
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 401
                                            - if:
                                                properties:
                                                  code:
                                                    const: forbidden
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 403
                                            - if:
                                                properties:
                                                  code:
                                                    const: rate-limited
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 429
                                            - if:
                                                properties:
                                                  code:
                                                    const: payload-too-large
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 413
                                            - if:
                                                properties:
                                                  code:
                                                    const: unsupported-format
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 415
                                            - if:
                                                properties:
                                                  code:
                                                    const: engine-unavailable
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 503
                                            - if:
                                                properties:
                                                  code:
                                                    const: engine-incompatible
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 503
                                            - if:
                                                properties:
                                                  code:
                                                    const: degraded
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 503
                                            - if:
                                                properties:
                                                  code:
                                                    const: upload-checksum-mismatch
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 422
                                            - if:
                                                properties:
                                                  code:
                                                    const: legacy-unsupported
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 501
                                            - if:
                                                properties:
                                                  code:
                                                    const: internal
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 500
                                            - if:
                                                properties:
                                                  code:
                                                    const: clock-unlocked
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 409
                                            - if:
                                                properties:
                                                  code:
                                                    const: not-configured
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 503
                                            - if:
                                                properties:
                                                  code:
                                                    const: authorization-pending
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 400
                                            - if:
                                                properties:
                                                  code:
                                                    const: slow-down
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 400
                                            - if:
                                                properties:
                                                  code:
                                                    const: access-denied
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 403
                                            - if:
                                                properties:
                                                  code:
                                                    const: expired-token
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 400
                                            - if:
                                                properties:
                                                  code:
                                                    const: token-reused
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 401
                                            - if:
                                                properties:
                                                  code:
                                                    const: idempotency-key-reused
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 409
                                            - if:
                                                properties:
                                                  code:
                                                    const: idempotency-in-progress
                                                required:
                                                  - code
                                              then:
                                                properties:
                                                  status:
                                                    const: 409
                                          additionalProperties: true
                                          examples:
                                            - type: >-
                                                https://freedome.nativemind.us/problems/engine-unavailable
                                              title: Visual engine unavailable
                                              status: 503
                                              detail: >-
                                                freedome-engined not reachable at
                                                unix:/run/freedome/engine.sock
                                              instance: /api/v1/venues/default/players/main/play
                                              code: engine-unavailable
                                              traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                          $defs:
                                            knownCode:
                                              enum:
                                                - validation-failed
                                                - not-found
                                                - conflict
                                                - precondition-failed
                                                - precondition-required
                                                - unauthenticated
                                                - forbidden
                                                - rate-limited
                                                - payload-too-large
                                                - unsupported-format
                                                - engine-unavailable
                                                - engine-incompatible
                                                - degraded
                                                - job-failed
                                                - upload-checksum-mismatch
                                                - legacy-unsupported
                                                - internal
                                                - clock-unlocked
                                                - not-configured
                                                - authorization-pending
                                                - slow-down
                                                - access-denied
                                                - expired-token
                                                - token-reused
                                                - idempotency-key-reused
                                                - idempotency-in-progress
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            fieldError:
                                              type: object
                                              required:
                                                - pointer
                                                - detail
                                              properties:
                                                pointer:
                                                  type: string
                                                  format: json-pointer
                                                detail:
                                                  type: string
                                                code:
                                                  description: >-
                                                    Stable machine key; also the last path
                                                    segment of `type`. Open set: see
                                                    knownCode.
                                                  type: string
                                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                              additionalProperties: true
                                        - type: 'null'
                                    revision:
                                      description: >-
                                        Monotonic resource revision; the strong
                                        ETag is derived from it.
                                      type: integer
                                      minimum: 0
                                    updatedAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                            additionalProperties: false
                          patch:
                            description: >-
                              PATCH /venues/{venueId}/players/{playerId}
                              (merge-patch; playback is last-writer-wins, no
                              If-Match).
                            type: object
                            minProperties: 1
                            properties:
                              rate:
                                type: number
                                exclusiveMinimum: 0
                                maximum: 16
                                description: playback rate, 1 = normal
                              loop:
                                type: boolean
                              volume:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              opacity:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              brightness:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              rotation:
                                type: number
                                minimum: -360
                                maximum: 360
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          play:
                            description: >-
                              POST …/play: what to play (absent = resume the
                              loaded source / startup) and when. `at` =
                              scheduled start on the server clock (multi-node
                              sync, 02d UC-K5).
                            type: object
                            properties:
                              showId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              playlistId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              itemIndex:
                                type: integer
                                minimum: 0
                              timelineId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              matrixCell:
                                type: object
                                required:
                                  - row
                                  - column
                                properties:
                                  matrixId:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  row:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  column:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                additionalProperties: false
                              assetId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              position:
                                description: Media position in seconds from the start.
                                type: number
                                minimum: 0
                              at:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              loop:
                                type: boolean
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                            not:
                              anyOf:
                                - required:
                                    - playlistId
                                    - timelineId
                                - required:
                                    - playlistId
                                    - assetId
                                - required:
                                    - timelineId
                                    - assetId
                                - required:
                                    - matrixCell
                                    - playlistId
                                - required:
                                    - matrixCell
                                    - timelineId
                                - required:
                                    - matrixCell
                                    - assetId
                          seek:
                            description: >-
                              POST …/seek: exactly one of position (s), marker
                              (timeline marker id) or normalized (0..1).
                            type: object
                            properties:
                              position:
                                description: Media position in seconds from the start.
                                type: number
                                minimum: 0
                              marker:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              normalized:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              at:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            additionalProperties: false
                            oneOf:
                              - required:
                                  - position
                              - required:
                                  - marker
                              - required:
                                  - normalized
                          activeShow:
                            description: >-
                              PUT /venues/{venueId}/active-show: load a show
                              onto the venue (mapped onto its geometry); showId
                              null unloads.
                            type: object
                            required:
                              - showId
                            properties:
                              showId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              autoplay:
                                type: boolean
                                default: false
                                description: start `show.startup` on player main
                            additionalProperties: false
                          activeShowState:
                            type: object
                            required:
                              - venueId
                              - showId
                            properties:
                              venueId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              showId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                              warnings:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - code
                                    - detail
                                  properties:
                                    code:
                                      type: string
                                      pattern: ^[a-z][a-z0-9-]{0,63}$
                                    detail:
                                      type: string
                                    pointer:
                                      type: string
                                  additionalProperties: false
                            additionalProperties: false
                          fireCue:
                            type: object
                            properties:
                              showId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                            additionalProperties: false
                          cueFired:
                            type: object
                            required:
                              - cueId
                              - showId
                              - firedAt
                            properties:
                              cueId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              showId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              firedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              actions:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - do
                                    - status
                                  properties:
                                    do:
                                      type: string
                                    status:
                                      enum:
                                        - ok
                                        - failed
                                        - skipped
                                    problem:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). RFC 9457 problem details with
                                        the Freedome `code` catalogue, 02e §3.3.
                                        Also the `data` of WS `error`, the
                                        socket.io ack error and GraphQL
                                        errors[].extensions.problem. The
                                        catalogue is open: unknown codes are
                                        allowed; known codes are bound to their
                                        HTTP status.
                                      title: Problem details
                                      type: object
                                      required:
                                        - type
                                        - title
                                        - code
                                      properties:
                                        type:
                                          type: string
                                          format: uri
                                          description: >-
                                            https://freedome.nativemind.us/problems/<code>
                                            for catalogue codes.
                                        title:
                                          type: string
                                          minLength: 1
                                        status:
                                          type: integer
                                          minimum: 100
                                          maximum: 599
                                        detail:
                                          type: string
                                        instance:
                                          type: string
                                          format: uri-reference
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        traceId:
                                          type: string
                                          pattern: ^[0-9a-f]{16,32}$
                                        errors:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                      allOf:
                                        - if:
                                            properties:
                                              code:
                                                const: validation-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: not-found
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 404
                                        - if:
                                            properties:
                                              code:
                                                const: conflict
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 412
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-required
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 428
                                        - if:
                                            properties:
                                              code:
                                                const: unauthenticated
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: forbidden
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: rate-limited
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 429
                                        - if:
                                            properties:
                                              code:
                                                const: payload-too-large
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 413
                                        - if:
                                            properties:
                                              code:
                                                const: unsupported-format
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 415
                                        - if:
                                            properties:
                                              code:
                                                const: engine-unavailable
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: engine-incompatible
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: degraded
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: upload-checksum-mismatch
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: legacy-unsupported
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 501
                                        - if:
                                            properties:
                                              code:
                                                const: internal
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 500
                                        - if:
                                            properties:
                                              code:
                                                const: clock-unlocked
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: not-configured
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: authorization-pending
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: slow-down
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: access-denied
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: expired-token
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: token-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-key-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-in-progress
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                      additionalProperties: true
                                      examples:
                                        - type: >-
                                            https://freedome.nativemind.us/problems/engine-unavailable
                                          title: Visual engine unavailable
                                          status: 503
                                          detail: >-
                                            freedome-engined not reachable at
                                            unix:/run/freedome/engine.sock
                                          instance: /api/v1/venues/default/players/main/play
                                          code: engine-unavailable
                                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                      $defs:
                                        knownCode:
                                          enum:
                                            - validation-failed
                                            - not-found
                                            - conflict
                                            - precondition-failed
                                            - precondition-required
                                            - unauthenticated
                                            - forbidden
                                            - rate-limited
                                            - payload-too-large
                                            - unsupported-format
                                            - engine-unavailable
                                            - engine-incompatible
                                            - degraded
                                            - job-failed
                                            - upload-checksum-mismatch
                                            - legacy-unsupported
                                            - internal
                                            - clock-unlocked
                                            - not-configured
                                            - authorization-pending
                                            - slow-down
                                            - access-denied
                                            - expired-token
                                            - token-reused
                                            - idempotency-key-reused
                                            - idempotency-in-progress
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        fieldError:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                  additionalProperties: false
                            additionalProperties: false
                          parameterValue:
                            description: PUT /venues/{venueId}/parameters/{path} body.
                            type: object
                            required:
                              - value
                            properties:
                              value:
                                anyOf:
                                  - type: number
                                  - type: boolean
                                  - type: string
                              fadeSec:
                                type: number
                                minimum: 0
                                maximum: 3600
                            additionalProperties: false
                          parameter:
                            description: >-
                              A node / layer parameter (02d ParameterService
                              UC-N1–N3; Screenberry-compatible surface).
                            type: object
                            required:
                              - path
                              - type
                              - value
                            properties:
                              path:
                                type: string
                                pattern: ^[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+){0,15}$
                              type:
                                enum:
                                  - float
                                  - int
                                  - bool
                                  - string
                                  - enum
                                  - colour
                              value:
                                anyOf:
                                  - type: number
                                  - type: boolean
                                  - type: string
                              min:
                                type: number
                              max:
                                type: number
                              unit:
                                type: string
                              values:
                                type: array
                                items:
                                  type: string
                                description: allowed values of an enum parameter
                              readOnly:
                                type: boolean
                              description:
                                type: string
                            additionalProperties: false
                          parameterPage:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  description: >-
                                    A node / layer parameter (02d
                                    ParameterService UC-N1–N3;
                                    Screenberry-compatible surface).
                                  type: object
                                  required:
                                    - path
                                    - type
                                    - value
                                  properties:
                                    path:
                                      type: string
                                      pattern: ^[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+){0,15}$
                                    type:
                                      enum:
                                        - float
                                        - int
                                        - bool
                                        - string
                                        - enum
                                        - colour
                                    value:
                                      anyOf:
                                        - type: number
                                        - type: boolean
                                        - type: string
                                    min:
                                      type: number
                                    max:
                                      type: number
                                    unit:
                                      type: string
                                    values:
                                      type: array
                                      items:
                                        type: string
                                      description: allowed values of an enum parameter
                                    readOnly:
                                      type: boolean
                                    description:
                                      type: string
                                  additionalProperties: false
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                            additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: player.error
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE). RFC
                          9457 problem details with the Freedome `code`
                          catalogue, 02e §3.3. Also the `data` of WS `error`,
                          the socket.io ack error and GraphQL
                          errors[].extensions.problem. The catalogue is open:
                          unknown codes are allowed; known codes are bound to
                          their HTTP status.
                        title: Problem details
                        type: object
                        required:
                          - type
                          - title
                          - code
                        properties:
                          type:
                            type: string
                            format: uri
                            description: >-
                              https://freedome.nativemind.us/problems/<code> for
                              catalogue codes.
                          title:
                            type: string
                            minLength: 1
                          status:
                            type: integer
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                          instance:
                            type: string
                            format: uri-reference
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          traceId:
                            type: string
                            pattern: ^[0-9a-f]{16,32}$
                          errors:
                            type: array
                            items:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        allOf:
                          - if:
                              properties:
                                code:
                                  const: validation-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: not-found
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 404
                          - if:
                              properties:
                                code:
                                  const: conflict
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: precondition-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 412
                          - if:
                              properties:
                                code:
                                  const: precondition-required
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 428
                          - if:
                              properties:
                                code:
                                  const: unauthenticated
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: forbidden
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: rate-limited
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 429
                          - if:
                              properties:
                                code:
                                  const: payload-too-large
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 413
                          - if:
                              properties:
                                code:
                                  const: unsupported-format
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 415
                          - if:
                              properties:
                                code:
                                  const: engine-unavailable
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: engine-incompatible
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: degraded
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: upload-checksum-mismatch
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: legacy-unsupported
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 501
                          - if:
                              properties:
                                code:
                                  const: internal
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 500
                          - if:
                              properties:
                                code:
                                  const: clock-unlocked
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: not-configured
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: authorization-pending
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: slow-down
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: access-denied
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: expired-token
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: token-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: idempotency-key-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: idempotency-in-progress
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                        additionalProperties: true
                        examples:
                          - type: >-
                              https://freedome.nativemind.us/problems/engine-unavailable
                            title: Visual engine unavailable
                            status: 503
                            detail: >-
                              freedome-engined not reachable at
                              unix:/run/freedome/engine.sock
                            instance: /api/v1/venues/default/players/main/play
                            code: engine-unavailable
                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                        $defs:
                          knownCode:
                            enum:
                              - validation-failed
                              - not-found
                              - conflict
                              - precondition-failed
                              - precondition-required
                              - unauthenticated
                              - forbidden
                              - rate-limited
                              - payload-too-large
                              - unsupported-format
                              - engine-unavailable
                              - engine-incompatible
                              - degraded
                              - job-failed
                              - upload-checksum-mismatch
                              - legacy-unsupported
                              - internal
                              - clock-unlocked
                              - not-configured
                              - authorization-pending
                              - slow-down
                              - access-denied
                              - expired-token
                              - token-reused
                              - idempotency-key-reused
                              - idempotency-in-progress
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          fieldError:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                - if:
                    properties:
                      kind:
                        const: cue.fired
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        type: object
                        required:
                          - cueId
                          - showId
                          - firedAt
                        properties:
                          cueId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          showId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          firedAt:
                            description: >-
                              RFC 3339 UTC with milliseconds, e.g.
                              2026-10-19T12:00:00.000Z.
                            type: string
                            format: date-time
                            pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          actions:
                            type: array
                            items:
                              type: object
                              required:
                                - do
                                - status
                              properties:
                                do:
                                  type: string
                                status:
                                  enum:
                                    - ok
                                    - failed
                                    - skipped
                                problem:
                                  $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). RFC 9457 problem details with the
                                    Freedome `code` catalogue, 02e §3.3. Also
                                    the `data` of WS `error`, the socket.io ack
                                    error and GraphQL
                                    errors[].extensions.problem. The catalogue
                                    is open: unknown codes are allowed; known
                                    codes are bound to their HTTP status.
                                  title: Problem details
                                  type: object
                                  required:
                                    - type
                                    - title
                                    - code
                                  properties:
                                    type:
                                      type: string
                                      format: uri
                                      description: >-
                                        https://freedome.nativemind.us/problems/<code>
                                        for catalogue codes.
                                    title:
                                      type: string
                                      minLength: 1
                                    status:
                                      type: integer
                                      minimum: 100
                                      maximum: 599
                                    detail:
                                      type: string
                                    instance:
                                      type: string
                                      format: uri-reference
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    traceId:
                                      type: string
                                      pattern: ^[0-9a-f]{16,32}$
                                    errors:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  allOf:
                                    - if:
                                        properties:
                                          code:
                                            const: validation-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: not-found
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 404
                                    - if:
                                        properties:
                                          code:
                                            const: conflict
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 412
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-required
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 428
                                    - if:
                                        properties:
                                          code:
                                            const: unauthenticated
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: forbidden
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: rate-limited
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 429
                                    - if:
                                        properties:
                                          code:
                                            const: payload-too-large
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 413
                                    - if:
                                        properties:
                                          code:
                                            const: unsupported-format
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 415
                                    - if:
                                        properties:
                                          code:
                                            const: engine-unavailable
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: engine-incompatible
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: degraded
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: upload-checksum-mismatch
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: legacy-unsupported
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 501
                                    - if:
                                        properties:
                                          code:
                                            const: internal
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 500
                                    - if:
                                        properties:
                                          code:
                                            const: clock-unlocked
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: not-configured
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: authorization-pending
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: slow-down
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: access-denied
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: expired-token
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: token-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-key-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-in-progress
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                  additionalProperties: true
                                  examples:
                                    - type: >-
                                        https://freedome.nativemind.us/problems/engine-unavailable
                                      title: Visual engine unavailable
                                      status: 503
                                      detail: >-
                                        freedome-engined not reachable at
                                        unix:/run/freedome/engine.sock
                                      instance: /api/v1/venues/default/players/main/play
                                      code: engine-unavailable
                                      traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                  $defs:
                                    knownCode:
                                      enum:
                                        - validation-failed
                                        - not-found
                                        - conflict
                                        - precondition-failed
                                        - precondition-required
                                        - unauthenticated
                                        - forbidden
                                        - rate-limited
                                        - payload-too-large
                                        - unsupported-format
                                        - engine-unavailable
                                        - engine-incompatible
                                        - degraded
                                        - job-failed
                                        - upload-checksum-mismatch
                                        - legacy-unsupported
                                        - internal
                                        - clock-unlocked
                                        - not-configured
                                        - authorization-pending
                                        - slow-down
                                        - access-denied
                                        - expired-token
                                        - token-reused
                                        - idempotency-key-reused
                                        - idempotency-in-progress
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    fieldError:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                              additionalProperties: false
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: cue.failed
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        type: object
                        required:
                          - cueId
                          - showId
                          - firedAt
                        properties:
                          cueId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          showId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          firedAt:
                            description: >-
                              RFC 3339 UTC with milliseconds, e.g.
                              2026-10-19T12:00:00.000Z.
                            type: string
                            format: date-time
                            pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          actions:
                            type: array
                            items:
                              type: object
                              required:
                                - do
                                - status
                              properties:
                                do:
                                  type: string
                                status:
                                  enum:
                                    - ok
                                    - failed
                                    - skipped
                                problem:
                                  $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). RFC 9457 problem details with the
                                    Freedome `code` catalogue, 02e §3.3. Also
                                    the `data` of WS `error`, the socket.io ack
                                    error and GraphQL
                                    errors[].extensions.problem. The catalogue
                                    is open: unknown codes are allowed; known
                                    codes are bound to their HTTP status.
                                  title: Problem details
                                  type: object
                                  required:
                                    - type
                                    - title
                                    - code
                                  properties:
                                    type:
                                      type: string
                                      format: uri
                                      description: >-
                                        https://freedome.nativemind.us/problems/<code>
                                        for catalogue codes.
                                    title:
                                      type: string
                                      minLength: 1
                                    status:
                                      type: integer
                                      minimum: 100
                                      maximum: 599
                                    detail:
                                      type: string
                                    instance:
                                      type: string
                                      format: uri-reference
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    traceId:
                                      type: string
                                      pattern: ^[0-9a-f]{16,32}$
                                    errors:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  allOf:
                                    - if:
                                        properties:
                                          code:
                                            const: validation-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: not-found
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 404
                                    - if:
                                        properties:
                                          code:
                                            const: conflict
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 412
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-required
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 428
                                    - if:
                                        properties:
                                          code:
                                            const: unauthenticated
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: forbidden
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: rate-limited
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 429
                                    - if:
                                        properties:
                                          code:
                                            const: payload-too-large
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 413
                                    - if:
                                        properties:
                                          code:
                                            const: unsupported-format
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 415
                                    - if:
                                        properties:
                                          code:
                                            const: engine-unavailable
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: engine-incompatible
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: degraded
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: upload-checksum-mismatch
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: legacy-unsupported
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 501
                                    - if:
                                        properties:
                                          code:
                                            const: internal
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 500
                                    - if:
                                        properties:
                                          code:
                                            const: clock-unlocked
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: not-configured
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: authorization-pending
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: slow-down
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: access-denied
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: expired-token
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: token-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-key-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-in-progress
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                  additionalProperties: true
                                  examples:
                                    - type: >-
                                        https://freedome.nativemind.us/problems/engine-unavailable
                                      title: Visual engine unavailable
                                      status: 503
                                      detail: >-
                                        freedome-engined not reachable at
                                        unix:/run/freedome/engine.sock
                                      instance: /api/v1/venues/default/players/main/play
                                      code: engine-unavailable
                                      traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                  $defs:
                                    knownCode:
                                      enum:
                                        - validation-failed
                                        - not-found
                                        - conflict
                                        - precondition-failed
                                        - precondition-required
                                        - unauthenticated
                                        - forbidden
                                        - rate-limited
                                        - payload-too-large
                                        - unsupported-format
                                        - engine-unavailable
                                        - engine-incompatible
                                        - degraded
                                        - job-failed
                                        - upload-checksum-mismatch
                                        - legacy-unsupported
                                        - internal
                                        - clock-unlocked
                                        - not-configured
                                        - authorization-pending
                                        - slow-down
                                        - access-denied
                                        - expired-token
                                        - token-reused
                                        - idempotency-key-reused
                                        - idempotency-in-progress
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    fieldError:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                              additionalProperties: false
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: parameter.changed
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: >-
                          A node / layer parameter (02d ParameterService
                          UC-N1–N3; Screenberry-compatible surface).
                        type: object
                        required:
                          - path
                          - type
                          - value
                        properties:
                          path:
                            type: string
                            pattern: ^[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+){0,15}$
                          type:
                            enum:
                              - float
                              - int
                              - bool
                              - string
                              - enum
                              - colour
                          value:
                            anyOf:
                              - type: number
                              - type: boolean
                              - type: string
                          min:
                            type: number
                          max:
                            type: number
                          unit:
                            type: string
                          values:
                            type: array
                            items:
                              type: string
                            description: allowed values of an enum parameter
                          readOnly:
                            type: boolean
                          description:
                            type: string
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: audio.state
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/api/1.0/audio.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE).
                          Audio through the media server (02e §5.5, 02c A8):
                          venue audio state + patch, zones, devices (+ test),
                          presets (02c ananta/1.0 programme / pattern / session,
                          RC2), sessions, generator, source position. Root = GET
                          /venues/{venueId}/audio.
                        title: Audio state
                        type: object
                        required:
                          - venueId
                          - mode
                          - masterGainDb
                          - mute
                          - revision
                        properties:
                          venueId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          mode:
                            description: >-
                              A8: digital = anAntaDigital only; hybrid =
                              anAntaSound (mechanical devices); combined = both.
                            anyOf:
                              - enum:
                                  - digital
                                  - hybrid
                                  - combined
                              - type: string
                                pattern: ^[a-z][a-z0-9_-]{0,31}$
                          masterGainDb:
                            description: >-
                              Gain in dB (C5: optional companion of linear
                              `volume`).
                            type: number
                            minimum: -144
                            maximum: 24
                          mute:
                            type: boolean
                          engines:
                            type: object
                            properties:
                              anantasound:
                                type: object
                                required:
                                  - status
                                properties:
                                  status:
                                    anyOf:
                                      - enum:
                                          - up
                                          - degraded
                                          - down
                                          - incompatible
                                          - disabled
                                      - type: string
                                  version:
                                    type: string
                                additionalProperties: false
                              anantadigital:
                                type: object
                                required:
                                  - status
                                properties:
                                  status:
                                    anyOf:
                                      - enum:
                                          - up
                                          - degraded
                                          - down
                                          - incompatible
                                          - disabled
                                      - type: string
                                  version:
                                    type: string
                                additionalProperties: false
                            additionalProperties:
                              type: object
                              required:
                                - status
                              properties:
                                status:
                                  anyOf:
                                    - enum:
                                        - up
                                        - degraded
                                        - down
                                        - incompatible
                                        - disabled
                                    - type: string
                                version:
                                  type: string
                              additionalProperties: false
                          layoutRevision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                        patternProperties:
                          ^x-: true
                        additionalProperties: false
                        $defs:
                          mode:
                            description: >-
                              A8: digital = anAntaDigital only; hybrid =
                              anAntaSound (mechanical devices); combined = both.
                            anyOf:
                              - enum:
                                  - digital
                                  - hybrid
                                  - combined
                              - type: string
                                pattern: ^[a-z][a-z0-9_-]{0,31}$
                          engineRef:
                            type: object
                            required:
                              - status
                            properties:
                              status:
                                anyOf:
                                  - enum:
                                      - up
                                      - degraded
                                      - down
                                      - incompatible
                                      - disabled
                                  - type: string
                              version:
                                type: string
                            additionalProperties: false
                          patch:
                            type: object
                            minProperties: 1
                            properties:
                              mode:
                                description: >-
                                  A8: digital = anAntaDigital only; hybrid =
                                  anAntaSound (mechanical devices); combined =
                                  both.
                                anyOf:
                                  - enum:
                                      - digital
                                      - hybrid
                                      - combined
                                  - type: string
                                    pattern: ^[a-z][a-z0-9_-]{0,31}$
                              masterGainDb:
                                description: >-
                                  Gain in dB (C5: optional companion of linear
                                  `volume`).
                                type: number
                                minimum: -144
                                maximum: 24
                              mute:
                                type: boolean
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          eqBand:
                            type: object
                            required:
                              - type
                              - frequencyHz
                            properties:
                              type:
                                anyOf:
                                  - enum:
                                      - peak
                                      - lowShelf
                                      - highShelf
                                      - lowPass
                                      - highPass
                                      - notch
                                      - allPass
                                  - type: string
                              frequencyHz:
                                type: number
                                exclusiveMinimum: 0
                              gainDb:
                                type: number
                                minimum: -48
                                maximum: 24
                              q:
                                type: number
                                exclusiveMinimum: 0
                                maximum: 100
                              enabled:
                                type: boolean
                                default: true
                            additionalProperties: false
                          zoneBody:
                            type: object
                            properties:
                              name:
                                type: string
                                maxLength: 128
                              speakers:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                uniqueItems: true
                              gainDb:
                                description: >-
                                  Gain in dB (C5: optional companion of linear
                                  `volume`).
                                type: number
                                minimum: -144
                                maximum: 24
                              delayMs:
                                type: number
                                minimum: 0
                                maximum: 2000
                              eq:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - type
                                    - frequencyHz
                                  properties:
                                    type:
                                      anyOf:
                                        - enum:
                                            - peak
                                            - lowShelf
                                            - highShelf
                                            - lowPass
                                            - highPass
                                            - notch
                                            - allPass
                                        - type: string
                                    frequencyHz:
                                      type: number
                                      exclusiveMinimum: 0
                                    gainDb:
                                      type: number
                                      minimum: -48
                                      maximum: 24
                                    q:
                                      type: number
                                      exclusiveMinimum: 0
                                      maximum: 100
                                    enabled:
                                      type: boolean
                                      default: true
                                  additionalProperties: false
                                maxItems: 32
                              mute:
                                type: boolean
                            patternProperties:
                              ^x-: true
                          zone:
                            description: >-
                              anAntaDigital zone: a subset of speakers with
                              gain, delay, EQ.
                            type: object
                            allOf:
                              - type: object
                                properties:
                                  name:
                                    type: string
                                    maxLength: 128
                                  speakers:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    uniqueItems: true
                                  gainDb:
                                    description: >-
                                      Gain in dB (C5: optional companion of
                                      linear `volume`).
                                    type: number
                                    minimum: -144
                                    maximum: 24
                                  delayMs:
                                    type: number
                                    minimum: 0
                                    maximum: 2000
                                  eq:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - type
                                        - frequencyHz
                                      properties:
                                        type:
                                          anyOf:
                                            - enum:
                                                - peak
                                                - lowShelf
                                                - highShelf
                                                - lowPass
                                                - highPass
                                                - notch
                                                - allPass
                                            - type: string
                                        frequencyHz:
                                          type: number
                                          exclusiveMinimum: 0
                                        gainDb:
                                          type: number
                                          minimum: -48
                                          maximum: 24
                                        q:
                                          type: number
                                          exclusiveMinimum: 0
                                          maximum: 100
                                        enabled:
                                          type: boolean
                                          default: true
                                      additionalProperties: false
                                    maxItems: 32
                                  mute:
                                    type: boolean
                                patternProperties:
                                  ^x-: true
                            required:
                              - id
                              - speakers
                              - gainDb
                              - mute
                              - revision
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              revision:
                                description: >-
                                  Monotonic resource revision; the strong ETag
                                  is derived from it.
                                type: integer
                                minimum: 0
                            unevaluatedProperties: false
                          zoneInput:
                            type: object
                            allOf:
                              - type: object
                                properties:
                                  name:
                                    type: string
                                    maxLength: 128
                                  speakers:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    uniqueItems: true
                                  gainDb:
                                    description: >-
                                      Gain in dB (C5: optional companion of
                                      linear `volume`).
                                    type: number
                                    minimum: -144
                                    maximum: 24
                                  delayMs:
                                    type: number
                                    minimum: 0
                                    maximum: 2000
                                  eq:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - type
                                        - frequencyHz
                                      properties:
                                        type:
                                          anyOf:
                                            - enum:
                                                - peak
                                                - lowShelf
                                                - highShelf
                                                - lowPass
                                                - highPass
                                                - notch
                                                - allPass
                                            - type: string
                                        frequencyHz:
                                          type: number
                                          exclusiveMinimum: 0
                                        gainDb:
                                          type: number
                                          minimum: -48
                                          maximum: 24
                                        q:
                                          type: number
                                          exclusiveMinimum: 0
                                          maximum: 100
                                        enabled:
                                          type: boolean
                                          default: true
                                      additionalProperties: false
                                    maxItems: 32
                                  mute:
                                    type: boolean
                                patternProperties:
                                  ^x-: true
                            required:
                              - speakers
                            unevaluatedProperties: false
                          zonePatch:
                            type: object
                            allOf:
                              - type: object
                                properties:
                                  name:
                                    type: string
                                    maxLength: 128
                                  speakers:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    uniqueItems: true
                                  gainDb:
                                    description: >-
                                      Gain in dB (C5: optional companion of
                                      linear `volume`).
                                    type: number
                                    minimum: -144
                                    maximum: 24
                                  delayMs:
                                    type: number
                                    minimum: 0
                                    maximum: 2000
                                  eq:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - type
                                        - frequencyHz
                                      properties:
                                        type:
                                          anyOf:
                                            - enum:
                                                - peak
                                                - lowShelf
                                                - highShelf
                                                - lowPass
                                                - highPass
                                                - notch
                                                - allPass
                                            - type: string
                                        frequencyHz:
                                          type: number
                                          exclusiveMinimum: 0
                                        gainDb:
                                          type: number
                                          minimum: -48
                                          maximum: 24
                                        q:
                                          type: number
                                          exclusiveMinimum: 0
                                          maximum: 100
                                        enabled:
                                          type: boolean
                                          default: true
                                      additionalProperties: false
                                    maxItems: 32
                                  mute:
                                    type: boolean
                                patternProperties:
                                  ^x-: true
                            minProperties: 1
                            unevaluatedProperties: false
                          zonePage:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  description: >-
                                    anAntaDigital zone: a subset of speakers
                                    with gain, delay, EQ.
                                  type: object
                                  allOf:
                                    - type: object
                                      properties:
                                        name:
                                          type: string
                                          maxLength: 128
                                        speakers:
                                          type: array
                                          items:
                                            description: >-
                                              Document-scoped id (.dome displays[].id,
                                              assets[].id, playlist / cue ids); unique
                                              within its parent.
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          uniqueItems: true
                                        gainDb:
                                          description: >-
                                            Gain in dB (C5: optional companion of
                                            linear `volume`).
                                          type: number
                                          minimum: -144
                                          maximum: 24
                                        delayMs:
                                          type: number
                                          minimum: 0
                                          maximum: 2000
                                        eq:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - type
                                              - frequencyHz
                                            properties:
                                              type:
                                                anyOf:
                                                  - enum:
                                                      - peak
                                                      - lowShelf
                                                      - highShelf
                                                      - lowPass
                                                      - highPass
                                                      - notch
                                                      - allPass
                                                  - type: string
                                              frequencyHz:
                                                type: number
                                                exclusiveMinimum: 0
                                              gainDb:
                                                type: number
                                                minimum: -48
                                                maximum: 24
                                              q:
                                                type: number
                                                exclusiveMinimum: 0
                                                maximum: 100
                                              enabled:
                                                type: boolean
                                                default: true
                                            additionalProperties: false
                                          maxItems: 32
                                        mute:
                                          type: boolean
                                      patternProperties:
                                        ^x-: true
                                  required:
                                    - id
                                    - speakers
                                    - gainDb
                                    - mute
                                    - revision
                                  properties:
                                    id:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    revision:
                                      description: >-
                                        Monotonic resource revision; the strong
                                        ETag is derived from it.
                                      type: integer
                                      minimum: 0
                                  unevaluatedProperties: false
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                            additionalProperties: false
                          deviceKind:
                            anyOf:
                              - enum:
                                  - speaker
                                  - speaker_amp
                                  - microphone
                                  - qrd
                                  - patefon
                                  - karmic_cluster
                                  - resonator
                              - type: string
                                pattern: ^[a-z][a-z0-9_-]{0,31}$
                          device:
                            description: >-
                              Audio device = .dome audio.devices[] / speakers[]
                              entry + live state (02c §6).
                            type: object
                            required:
                              - id
                              - kind
                              - state
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              kind:
                                anyOf:
                                  - enum:
                                      - speaker
                                      - speaker_amp
                                      - microphone
                                      - qrd
                                      - patefon
                                      - karmic_cluster
                                      - resonator
                                  - type: string
                                    pattern: ^[a-z][a-z0-9_-]{0,31}$
                              name:
                                type: string
                              config:
                                type: object
                                description: the .dome audio device / speaker entry
                                additionalProperties: true
                              state:
                                type: object
                                required:
                                  - online
                                properties:
                                  online:
                                    type: boolean
                                  engine:
                                    anyOf:
                                      - enum:
                                          - anantasound
                                          - anantadigital
                                      - type: string
                                  gainDb:
                                    description: >-
                                      Gain in dB (C5: optional companion of
                                      linear `volume`).
                                    type: number
                                    minimum: -144
                                    maximum: 24
                                  mute:
                                    type: boolean
                                  levelDb:
                                    type: number
                                    maximum: 24
                                    description: last meter value (dBFS)
                                  temperatureC:
                                    type: number
                                  firmware:
                                    type: string
                                  faults:
                                    type: array
                                    items:
                                      type: string
                                  lastSeen:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                additionalProperties: true
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          devicePatch:
                            type: object
                            minProperties: 1
                            properties:
                              name:
                                type: string
                              gainDb:
                                description: >-
                                  Gain in dB (C5: optional companion of linear
                                  `volume`).
                                type: number
                                minimum: -144
                                maximum: 24
                              mute:
                                type: boolean
                              config:
                                type: object
                                additionalProperties: true
                            additionalProperties: false
                          devicePage:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  description: >-
                                    Audio device = .dome audio.devices[] /
                                    speakers[] entry + live state (02c §6).
                                  type: object
                                  required:
                                    - id
                                    - kind
                                    - state
                                  properties:
                                    id:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    kind:
                                      anyOf:
                                        - enum:
                                            - speaker
                                            - speaker_amp
                                            - microphone
                                            - qrd
                                            - patefon
                                            - karmic_cluster
                                            - resonator
                                        - type: string
                                          pattern: ^[a-z][a-z0-9_-]{0,31}$
                                    name:
                                      type: string
                                    config:
                                      type: object
                                      description: the .dome audio device / speaker entry
                                      additionalProperties: true
                                    state:
                                      type: object
                                      required:
                                        - online
                                      properties:
                                        online:
                                          type: boolean
                                        engine:
                                          anyOf:
                                            - enum:
                                                - anantasound
                                                - anantadigital
                                            - type: string
                                        gainDb:
                                          description: >-
                                            Gain in dB (C5: optional companion of
                                            linear `volume`).
                                          type: number
                                          minimum: -144
                                          maximum: 24
                                        mute:
                                          type: boolean
                                        levelDb:
                                          type: number
                                          maximum: 24
                                          description: last meter value (dBFS)
                                        temperatureC:
                                          type: number
                                        firmware:
                                          type: string
                                        faults:
                                          type: array
                                          items:
                                            type: string
                                        lastSeen:
                                          description: >-
                                            RFC 3339 UTC with milliseconds, e.g.
                                            2026-10-19T12:00:00.000Z.
                                          type: string
                                          format: date-time
                                          pattern: >-
                                            ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                      additionalProperties: true
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                            additionalProperties: false
                          deviceTest:
                            type: object
                            properties:
                              kind:
                                anyOf:
                                  - enum:
                                      - ping
                                      - tone
                                      - selftest
                                      - strike
                                  - type: string
                                default: ping
                              frequencyHz:
                                type: number
                                exclusiveMinimum: 0
                              gainDb:
                                type: number
                                minimum: -96
                                maximum: 0
                              durationS:
                                type: number
                                exclusiveMinimum: 0
                                maximum: 30
                            additionalProperties: false
                          deviceTestResult:
                            type: object
                            required:
                              - deviceId
                              - ok
                            properties:
                              deviceId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              ok:
                                type: boolean
                              latencyMs:
                                type: number
                                minimum: 0
                              detail:
                                type: string
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                            additionalProperties: false
                          presetKind:
                            enum:
                              - programme
                              - pattern
                              - session
                          preset:
                            description: >-
                              Installed L6 preset: an ananta/1.0 programme,
                              pattern or session document (02c, RC2).
                            type: object
                            required:
                              - id
                              - kind
                              - revision
                              - document
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              kind:
                                enum:
                                  - programme
                                  - pattern
                                  - session
                              title:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). Localised text map {"en":…,"ru":…},
                                  02e §3.1 (as .dome meta.title).
                                title: Localised text
                                type: object
                                minProperties: 1
                                propertyNames:
                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                additionalProperties:
                                  type: string
                                examples:
                                  - en: Intro
                                    ru: Вступление
                                $defs:
                                  textOrI18n:
                                    description: >-
                                      Plain string (treated as `en`) or a
                                      localised map. (map branch = the root
                                      schema, inlined for tools that mis-handle
                                      self references)
                                    anyOf:
                                      - type: string
                                      - type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                              revision:
                                description: >-
                                  Monotonic resource revision; the strong ETag
                                  is derived from it.
                                type: integer
                                minimum: 0
                              document:
                                type: object
                              sha256:
                                description: Lowercase hex SHA-256 digest.
                                type: string
                                pattern: ^[0-9a-f]{64}$
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            additionalProperties: false
                            allOf:
                              - if:
                                  properties:
                                    kind:
                                      const: programme
                                  required:
                                    - kind
                                then:
                                  properties:
                                    document:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/ananta/1.0/programme.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Content owned by 02c (AU,
                                        ananta_core 2.AU.2); mirrored here per
                                        PR5 / RC2 (CR-AU-2), contract copy is
                                        the published one.
                                      title: Ananta programme
                                      description: >-
                                        L6 programme preset (*.ananta.json), 02c
                                        §10. Played by generic L1 players;
                                        claims only in x-meta.
                                      type: object
                                      required:
                                        - format
                                        - formatVersion
                                        - id
                                        - title
                                        - tracks
                                      properties:
                                        $schema:
                                          type: string
                                        format:
                                          const: ananta-programme
                                        formatVersion:
                                          type: string
                                          pattern: ^1\.\d+\.\d+$
                                        id:
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                        title:
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                        description:
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                        tags:
                                          type: array
                                          items:
                                            type: string
                                        license:
                                          type: string
                                          default: NativeMindNONC
                                        durationS:
                                          type: number
                                          minimum: 0
                                        modes:
                                          type: array
                                          items:
                                            enum:
                                              - digital
                                              - hybrid
                                              - combined
                                          uniqueItems: true
                                        roles:
                                          type: object
                                          description: >-
                                            role name → required device class /
                                            capabilities
                                          propertyNames:
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                          additionalProperties:
                                            type: object
                                            required:
                                              - class
                                            properties:
                                              class:
                                                enum:
                                                  - striker_array
                                                  - resonator
                                                  - phonograph
                                                  - initiator
                                                  - signal_generator
                                                  - tactile
                                                  - speakers
                                              min:
                                                type: integer
                                                minimum: 1
                                                default: 1
                                              optional:
                                                type: boolean
                                                default: false
                                              description:
                                                type: string
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        tracks:
                                          type: array
                                          minItems: 1
                                          items:
                                            oneOf:
                                              - type: object
                                                required:
                                                  - kind
                                                  - role
                                                  - segments
                                                properties:
                                                  kind:
                                                    const: tone
                                                  id:
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                  role:
                                                    type: string
                                                  direction:
                                                    type: object
                                                    description: >-
                                                      .dome convention: azimuth 0 = front,
                                                      clockwise; elevation 0 = spring line
                                                    properties:
                                                      azimuthDeg:
                                                        type: number
                                                        minimum: -360
                                                        maximum: 360
                                                      elevationDeg:
                                                        type: number
                                                        minimum: -90
                                                        maximum: 90
                                                      distanceM:
                                                        type: number
                                                        minimum: 0
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                  transition:
                                                    enum:
                                                      - linear
                                                      - exponential
                                                      - stepped
                                                      - smooth
                                                  gainDb:
                                                    type: number
                                                    maximum: 12
                                                  segments:
                                                    type: array
                                                    minItems: 1
                                                    items:
                                                      type: object
                                                      required:
                                                        - startS
                                                        - durationS
                                                      properties:
                                                        id:
                                                          type: string
                                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                        startS:
                                                          type: number
                                                          minimum: 0
                                                        durationS:
                                                          type: number
                                                          exclusiveMinimum: 0
                                                        carrierHz:
                                                          type: number
                                                          minimum: 20
                                                          maximum: 20000
                                                        harmonicsHz:
                                                          type: array
                                                          items:
                                                            type: number
                                                            minimum: 20
                                                            maximum: 20000
                                                        amplitude:
                                                          type: number
                                                          minimum: 0
                                                          maximum: 1
                                                        attackS:
                                                          type: number
                                                          minimum: 0
                                                        releaseS:
                                                          type: number
                                                          minimum: 0
                                                        modulation:
                                                          type: object
                                                          required:
                                                            - kind
                                                            - rateHz
                                                          properties:
                                                            kind:
                                                              enum:
                                                                - am
                                                                - fm
                                                                - pm
                                                                - binaural_beat
                                                            rateHz:
                                                              type: number
                                                              minimum: 0.01
                                                              maximum: 100
                                                            depth:
                                                              type: number
                                                              minimum: 0
                                                              maximum: 1
                                                          patternProperties:
                                                            ^x-: true
                                                          additionalProperties: false
                                                        multi:
                                                          type: object
                                                          description: >-
                                                            MULTI generator parameters
                                                            (NmSoundParams names, 02c §5.6)
                                                          properties:
                                                            program:
                                                              type: string
                                                              description: >-
                                                                MULTI programme JSON text
                                                                {"target":"f1,f2,…","autonext":s}
                                                                (NmSoundParams.program); empty = single
                                                                target
                                                            target:
                                                              type: number
                                                              minimum: 0
                                                              maximum: 20000
                                                            enviroment:
                                                              type: number
                                                              minimum: 0
                                                            modulation:
                                                              type: number
                                                            multi:
                                                              type: number
                                                            channel:
                                                              type: number
                                                              description: >-
                                                                stereo phase angle code: 0, 1, 2, 60,
                                                                90, 120, 137, 180
                                                            audio:
                                                              type: number
                                                            compatJava:
                                                              type: boolean
                                                              default: false
                                                          patternProperties:
                                                            ^x-: true
                                                          additionalProperties: false
                                                      patternProperties:
                                                        ^x-: true
                                                      additionalProperties: false
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                              - type: object
                                                required:
                                                  - kind
                                                  - role
                                                  - pattern
                                                properties:
                                                  kind:
                                                    const: strike
                                                  id:
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                  role:
                                                    type: string
                                                  startS:
                                                    type: number
                                                    minimum: 0
                                                  pattern:
                                                    type: object
                                                    required:
                                                      - tempoBpm
                                                      - strikes
                                                    properties:
                                                      tempoBpm:
                                                        type: number
                                                        exclusiveMinimum: 0
                                                        maximum: 600
                                                      beatsPerLoop:
                                                        type: number
                                                        exclusiveMinimum: 0
                                                      loops:
                                                        type:
                                                          - integer
                                                          - 'null'
                                                        minimum: 1
                                                        description: null = until stopped
                                                      velocityCurve:
                                                        enum:
                                                          - linear
                                                          - exponential
                                                          - logarithmic
                                                          - sigmoid
                                                      strikes:
                                                        type: array
                                                        minItems: 1
                                                        items:
                                                          type: object
                                                          required:
                                                            - striker
                                                            - target
                                                            - beat
                                                            - velocity
                                                          properties:
                                                            striker:
                                                              type: string
                                                              minLength: 1
                                                            target:
                                                              type: string
                                                              minLength: 1
                                                            beat:
                                                              type: number
                                                              minimum: 0
                                                            velocity:
                                                              type: number
                                                              minimum: 0
                                                              maximum: 1
                                                            durationMs:
                                                              type: integer
                                                              minimum: 1
                                                              maximum: 200
                                                            accent:
                                                              enum:
                                                                - none
                                                                - soft
                                                                - medium
                                                                - strong
                                                                - crescendo
                                                                - decrescendo
                                                          patternProperties:
                                                            ^x-: true
                                                          additionalProperties: false
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                              - type: object
                                                required:
                                                  - kind
                                                  - src
                                                properties:
                                                  kind:
                                                    const: media
                                                  id:
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                  role:
                                                    type: string
                                                    default: speakers
                                                  src:
                                                    type: string
                                                    minLength: 1
                                                  startS:
                                                    type: number
                                                    minimum: 0
                                                  gainDb:
                                                    type: number
                                                    maximum: 12
                                                  loop:
                                                    type: boolean
                                                  sha256:
                                                    type: string
                                                    pattern: ^[0-9a-f]{64}$
                                                  direction:
                                                    type: object
                                                    description: >-
                                                      .dome convention: azimuth 0 = front,
                                                      clockwise; elevation 0 = spring line
                                                    properties:
                                                      azimuthDeg:
                                                        type: number
                                                        minimum: -360
                                                        maximum: 360
                                                      elevationDeg:
                                                        type: number
                                                        minimum: -90
                                                        maximum: 90
                                                      distanceM:
                                                        type: number
                                                        minimum: 0
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                              - type: object
                                                required:
                                                  - kind
                                                  - role
                                                  - events
                                                properties:
                                                  kind:
                                                    const: motor
                                                  id:
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                  role:
                                                    type: string
                                                  events:
                                                    type: array
                                                    minItems: 1
                                                    items:
                                                      type: object
                                                      required:
                                                        - atS
                                                        - 'on'
                                                      properties:
                                                        atS:
                                                          type: number
                                                          minimum: 0
                                                        'on':
                                                          type: boolean
                                                        rpm:
                                                          enum:
                                                            - 33.333
                                                            - 45
                                                      patternProperties:
                                                        ^x-: true
                                                      additionalProperties: false
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                        x-meta:
                                          type: object
                                          description: >-
                                            app-specific (e.g. intended effect
                                            labels); ignored by engines
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                      $defs:
                                        i18n:
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                        id:
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                        formatVersion:
                                          type: string
                                          pattern: ^1\.\d+\.\d+$
                                        direction:
                                          type: object
                                          description: >-
                                            .dome convention: azimuth 0 = front,
                                            clockwise; elevation 0 = spring line
                                          properties:
                                            azimuthDeg:
                                              type: number
                                              minimum: -360
                                              maximum: 360
                                            elevationDeg:
                                              type: number
                                              minimum: -90
                                              maximum: 90
                                            distanceM:
                                              type: number
                                              minimum: 0
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        multi:
                                          type: object
                                          description: >-
                                            MULTI generator parameters
                                            (NmSoundParams names, 02c §5.6)
                                          properties:
                                            program:
                                              type: string
                                              description: >-
                                                MULTI programme JSON text
                                                {"target":"f1,f2,…","autonext":s}
                                                (NmSoundParams.program); empty = single
                                                target
                                            target:
                                              type: number
                                              minimum: 0
                                              maximum: 20000
                                            enviroment:
                                              type: number
                                              minimum: 0
                                            modulation:
                                              type: number
                                            multi:
                                              type: number
                                            channel:
                                              type: number
                                              description: >-
                                                stereo phase angle code: 0, 1, 2, 60,
                                                90, 120, 137, 180
                                            audio:
                                              type: number
                                            compatJava:
                                              type: boolean
                                              default: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        modulation:
                                          type: object
                                          required:
                                            - kind
                                            - rateHz
                                          properties:
                                            kind:
                                              enum:
                                                - am
                                                - fm
                                                - pm
                                                - binaural_beat
                                            rateHz:
                                              type: number
                                              minimum: 0.01
                                              maximum: 100
                                            depth:
                                              type: number
                                              minimum: 0
                                              maximum: 1
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        segment:
                                          type: object
                                          required:
                                            - startS
                                            - durationS
                                          properties:
                                            id:
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                            startS:
                                              type: number
                                              minimum: 0
                                            durationS:
                                              type: number
                                              exclusiveMinimum: 0
                                            carrierHz:
                                              type: number
                                              minimum: 20
                                              maximum: 20000
                                            harmonicsHz:
                                              type: array
                                              items:
                                                type: number
                                                minimum: 20
                                                maximum: 20000
                                            amplitude:
                                              type: number
                                              minimum: 0
                                              maximum: 1
                                            attackS:
                                              type: number
                                              minimum: 0
                                            releaseS:
                                              type: number
                                              minimum: 0
                                            modulation:
                                              type: object
                                              required:
                                                - kind
                                                - rateHz
                                              properties:
                                                kind:
                                                  enum:
                                                    - am
                                                    - fm
                                                    - pm
                                                    - binaural_beat
                                                rateHz:
                                                  type: number
                                                  minimum: 0.01
                                                  maximum: 100
                                                depth:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 1
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            multi:
                                              type: object
                                              description: >-
                                                MULTI generator parameters
                                                (NmSoundParams names, 02c §5.6)
                                              properties:
                                                program:
                                                  type: string
                                                  description: >-
                                                    MULTI programme JSON text
                                                    {"target":"f1,f2,…","autonext":s}
                                                    (NmSoundParams.program); empty = single
                                                    target
                                                target:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 20000
                                                enviroment:
                                                  type: number
                                                  minimum: 0
                                                modulation:
                                                  type: number
                                                multi:
                                                  type: number
                                                channel:
                                                  type: number
                                                  description: >-
                                                    stereo phase angle code: 0, 1, 2, 60,
                                                    90, 120, 137, 180
                                                audio:
                                                  type: number
                                                compatJava:
                                                  type: boolean
                                                  default: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        role:
                                          type: object
                                          required:
                                            - class
                                          properties:
                                            class:
                                              enum:
                                                - striker_array
                                                - resonator
                                                - phonograph
                                                - initiator
                                                - signal_generator
                                                - tactile
                                                - speakers
                                            min:
                                              type: integer
                                              minimum: 1
                                              default: 1
                                            optional:
                                              type: boolean
                                              default: false
                                            description:
                                              type: string
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        toneTrack:
                                          type: object
                                          required:
                                            - kind
                                            - role
                                            - segments
                                          properties:
                                            kind:
                                              const: tone
                                            id:
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                            role:
                                              type: string
                                            direction:
                                              type: object
                                              description: >-
                                                .dome convention: azimuth 0 = front,
                                                clockwise; elevation 0 = spring line
                                              properties:
                                                azimuthDeg:
                                                  type: number
                                                  minimum: -360
                                                  maximum: 360
                                                elevationDeg:
                                                  type: number
                                                  minimum: -90
                                                  maximum: 90
                                                distanceM:
                                                  type: number
                                                  minimum: 0
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            transition:
                                              enum:
                                                - linear
                                                - exponential
                                                - stepped
                                                - smooth
                                            gainDb:
                                              type: number
                                              maximum: 12
                                            segments:
                                              type: array
                                              minItems: 1
                                              items:
                                                type: object
                                                required:
                                                  - startS
                                                  - durationS
                                                properties:
                                                  id:
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                  startS:
                                                    type: number
                                                    minimum: 0
                                                  durationS:
                                                    type: number
                                                    exclusiveMinimum: 0
                                                  carrierHz:
                                                    type: number
                                                    minimum: 20
                                                    maximum: 20000
                                                  harmonicsHz:
                                                    type: array
                                                    items:
                                                      type: number
                                                      minimum: 20
                                                      maximum: 20000
                                                  amplitude:
                                                    type: number
                                                    minimum: 0
                                                    maximum: 1
                                                  attackS:
                                                    type: number
                                                    minimum: 0
                                                  releaseS:
                                                    type: number
                                                    minimum: 0
                                                  modulation:
                                                    type: object
                                                    required:
                                                      - kind
                                                      - rateHz
                                                    properties:
                                                      kind:
                                                        enum:
                                                          - am
                                                          - fm
                                                          - pm
                                                          - binaural_beat
                                                      rateHz:
                                                        type: number
                                                        minimum: 0.01
                                                        maximum: 100
                                                      depth:
                                                        type: number
                                                        minimum: 0
                                                        maximum: 1
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                  multi:
                                                    type: object
                                                    description: >-
                                                      MULTI generator parameters
                                                      (NmSoundParams names, 02c §5.6)
                                                    properties:
                                                      program:
                                                        type: string
                                                        description: >-
                                                          MULTI programme JSON text
                                                          {"target":"f1,f2,…","autonext":s}
                                                          (NmSoundParams.program); empty = single
                                                          target
                                                      target:
                                                        type: number
                                                        minimum: 0
                                                        maximum: 20000
                                                      enviroment:
                                                        type: number
                                                        minimum: 0
                                                      modulation:
                                                        type: number
                                                      multi:
                                                        type: number
                                                      channel:
                                                        type: number
                                                        description: >-
                                                          stereo phase angle code: 0, 1, 2, 60,
                                                          90, 120, 137, 180
                                                      audio:
                                                        type: number
                                                      compatJava:
                                                        type: boolean
                                                        default: false
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        strikeTrack:
                                          type: object
                                          required:
                                            - kind
                                            - role
                                            - pattern
                                          properties:
                                            kind:
                                              const: strike
                                            id:
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                            role:
                                              type: string
                                            startS:
                                              type: number
                                              minimum: 0
                                            pattern:
                                              type: object
                                              required:
                                                - tempoBpm
                                                - strikes
                                              properties:
                                                tempoBpm:
                                                  type: number
                                                  exclusiveMinimum: 0
                                                  maximum: 600
                                                beatsPerLoop:
                                                  type: number
                                                  exclusiveMinimum: 0
                                                loops:
                                                  type:
                                                    - integer
                                                    - 'null'
                                                  minimum: 1
                                                  description: null = until stopped
                                                velocityCurve:
                                                  enum:
                                                    - linear
                                                    - exponential
                                                    - logarithmic
                                                    - sigmoid
                                                strikes:
                                                  type: array
                                                  minItems: 1
                                                  items:
                                                    type: object
                                                    required:
                                                      - striker
                                                      - target
                                                      - beat
                                                      - velocity
                                                    properties:
                                                      striker:
                                                        type: string
                                                        minLength: 1
                                                      target:
                                                        type: string
                                                        minLength: 1
                                                      beat:
                                                        type: number
                                                        minimum: 0
                                                      velocity:
                                                        type: number
                                                        minimum: 0
                                                        maximum: 1
                                                      durationMs:
                                                        type: integer
                                                        minimum: 1
                                                        maximum: 200
                                                      accent:
                                                        enum:
                                                          - none
                                                          - soft
                                                          - medium
                                                          - strong
                                                          - crescendo
                                                          - decrescendo
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        mediaTrack:
                                          type: object
                                          required:
                                            - kind
                                            - src
                                          properties:
                                            kind:
                                              const: media
                                            id:
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                            role:
                                              type: string
                                              default: speakers
                                            src:
                                              type: string
                                              minLength: 1
                                            startS:
                                              type: number
                                              minimum: 0
                                            gainDb:
                                              type: number
                                              maximum: 12
                                            loop:
                                              type: boolean
                                            sha256:
                                              type: string
                                              pattern: ^[0-9a-f]{64}$
                                            direction:
                                              type: object
                                              description: >-
                                                .dome convention: azimuth 0 = front,
                                                clockwise; elevation 0 = spring line
                                              properties:
                                                azimuthDeg:
                                                  type: number
                                                  minimum: -360
                                                  maximum: 360
                                                elevationDeg:
                                                  type: number
                                                  minimum: -90
                                                  maximum: 90
                                                distanceM:
                                                  type: number
                                                  minimum: 0
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        motorTrack:
                                          type: object
                                          required:
                                            - kind
                                            - role
                                            - events
                                          properties:
                                            kind:
                                              const: motor
                                            id:
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                            role:
                                              type: string
                                            events:
                                              type: array
                                              minItems: 1
                                              items:
                                                type: object
                                                required:
                                                  - atS
                                                  - 'on'
                                                properties:
                                                  atS:
                                                    type: number
                                                    minimum: 0
                                                  'on':
                                                    type: boolean
                                                  rpm:
                                                    enum:
                                                      - 33.333
                                                      - 45
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                              - if:
                                  properties:
                                    kind:
                                      const: pattern
                                  required:
                                    - kind
                                then:
                                  properties:
                                    document:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/ananta/1.0/pattern.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Content owned by 02c (AU,
                                        ananta_core 2.AU.2); mirrored here per
                                        PR5 / RC2 (CR-AU-2), contract copy is
                                        the published one.
                                      title: Ananta strike pattern
                                      description: >-
                                        Reusable strike pattern for striker
                                        arrays (ananta-pattern), 02c §10.
                                      type: object
                                      required:
                                        - format
                                        - formatVersion
                                        - id
                                        - title
                                        - pattern
                                      properties:
                                        $schema:
                                          type: string
                                        format:
                                          const: ananta-pattern
                                        formatVersion:
                                          type: string
                                          pattern: ^1\.\d+\.\d+$
                                        id:
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                        title:
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                        description:
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                        tags:
                                          type: array
                                          items:
                                            type: string
                                        license:
                                          type: string
                                          default: NativeMindNONC
                                        pattern:
                                          type: object
                                          required:
                                            - tempoBpm
                                            - strikes
                                          properties:
                                            tempoBpm:
                                              type: number
                                              exclusiveMinimum: 0
                                              maximum: 600
                                            beatsPerLoop:
                                              type: number
                                              exclusiveMinimum: 0
                                            loops:
                                              type:
                                                - integer
                                                - 'null'
                                              minimum: 1
                                              description: null = until stopped
                                            velocityCurve:
                                              enum:
                                                - linear
                                                - exponential
                                                - logarithmic
                                                - sigmoid
                                            strikes:
                                              type: array
                                              minItems: 1
                                              items:
                                                type: object
                                                required:
                                                  - striker
                                                  - target
                                                  - beat
                                                  - velocity
                                                properties:
                                                  striker:
                                                    type: string
                                                    minLength: 1
                                                  target:
                                                    type: string
                                                    minLength: 1
                                                  beat:
                                                    type: number
                                                    minimum: 0
                                                  velocity:
                                                    type: number
                                                    minimum: 0
                                                    maximum: 1
                                                  durationMs:
                                                    type: integer
                                                    minimum: 1
                                                    maximum: 200
                                                  accent:
                                                    enum:
                                                      - none
                                                      - soft
                                                      - medium
                                                      - strong
                                                      - crescendo
                                                      - decrescendo
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        x-meta:
                                          type: object
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                      $defs:
                                        i18n:
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                        id:
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                        formatVersion:
                                          type: string
                                          pattern: ^1\.\d+\.\d+$
                                        strike:
                                          type: object
                                          required:
                                            - striker
                                            - target
                                            - beat
                                            - velocity
                                          properties:
                                            striker:
                                              type: string
                                              minLength: 1
                                            target:
                                              type: string
                                              minLength: 1
                                            beat:
                                              type: number
                                              minimum: 0
                                            velocity:
                                              type: number
                                              minimum: 0
                                              maximum: 1
                                            durationMs:
                                              type: integer
                                              minimum: 1
                                              maximum: 200
                                            accent:
                                              enum:
                                                - none
                                                - soft
                                                - medium
                                                - strong
                                                - crescendo
                                                - decrescendo
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        pattern:
                                          type: object
                                          required:
                                            - tempoBpm
                                            - strikes
                                          properties:
                                            tempoBpm:
                                              type: number
                                              exclusiveMinimum: 0
                                              maximum: 600
                                            beatsPerLoop:
                                              type: number
                                              exclusiveMinimum: 0
                                            loops:
                                              type:
                                                - integer
                                                - 'null'
                                              minimum: 1
                                              description: null = until stopped
                                            velocityCurve:
                                              enum:
                                                - linear
                                                - exponential
                                                - logarithmic
                                                - sigmoid
                                            strikes:
                                              type: array
                                              minItems: 1
                                              items:
                                                type: object
                                                required:
                                                  - striker
                                                  - target
                                                  - beat
                                                  - velocity
                                                properties:
                                                  striker:
                                                    type: string
                                                    minLength: 1
                                                  target:
                                                    type: string
                                                    minLength: 1
                                                  beat:
                                                    type: number
                                                    minimum: 0
                                                  velocity:
                                                    type: number
                                                    minimum: 0
                                                    maximum: 1
                                                  durationMs:
                                                    type: integer
                                                    minimum: 1
                                                    maximum: 200
                                                  accent:
                                                    enum:
                                                      - none
                                                      - soft
                                                      - medium
                                                      - strong
                                                      - crescendo
                                                      - decrescendo
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                              - if:
                                  properties:
                                    kind:
                                      const: session
                                  required:
                                    - kind
                                then:
                                  properties:
                                    document:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/ananta/1.0/session.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Content owned by 02c (AU,
                                        ananta_core 2.AU.2); mirrored here per
                                        PR5 / RC2 (CR-AU-2), contract copy is
                                        the published one.
                                      title: Ananta session
                                      description: >-
                                        Ordered list of programme references +
                                        gaps + loop, global gain, default mode
                                        (ananta-session), 02c §10.
                                      type: object
                                      required:
                                        - format
                                        - formatVersion
                                        - id
                                        - title
                                        - items
                                      properties:
                                        $schema:
                                          type: string
                                        format:
                                          const: ananta-session
                                        formatVersion:
                                          type: string
                                          pattern: ^1\.\d+\.\d+$
                                        id:
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                        title:
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                        description:
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                        tags:
                                          type: array
                                          items:
                                            type: string
                                        license:
                                          type: string
                                          default: NativeMindNONC
                                        mode:
                                          enum:
                                            - digital
                                            - hybrid
                                            - combined
                                        gainDb:
                                          type: number
                                          maximum: 12
                                        loop:
                                          type: boolean
                                          default: false
                                        items:
                                          type: array
                                          minItems: 1
                                          items:
                                            type: object
                                            required:
                                              - programme
                                            properties:
                                              programme:
                                                type: object
                                                description: >-
                                                  reference by content URI or by programme
                                                  id
                                                properties:
                                                  uri:
                                                    type: string
                                                    minLength: 1
                                                  id:
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                  sha256:
                                                    type: string
                                                    pattern: ^[0-9a-f]{64}$
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                                anyOf:
                                                  - required:
                                                      - uri
                                                  - required:
                                                      - id
                                              gapS:
                                                type: number
                                                minimum: 0
                                                default: 0
                                              repeat:
                                                type: integer
                                                minimum: 1
                                                default: 1
                                              gainDb:
                                                type: number
                                                maximum: 12
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        x-meta:
                                          type: object
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                      $defs:
                                        i18n:
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                        id:
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                        formatVersion:
                                          type: string
                                          pattern: ^1\.\d+\.\d+$
                                        item:
                                          type: object
                                          required:
                                            - programme
                                          properties:
                                            programme:
                                              type: object
                                              description: >-
                                                reference by content URI or by programme
                                                id
                                              properties:
                                                uri:
                                                  type: string
                                                  minLength: 1
                                                id:
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                sha256:
                                                  type: string
                                                  pattern: ^[0-9a-f]{64}$
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                              anyOf:
                                                - required:
                                                    - uri
                                                - required:
                                                    - id
                                            gapS:
                                              type: number
                                              minimum: 0
                                              default: 0
                                            repeat:
                                              type: integer
                                              minimum: 1
                                              default: 1
                                            gainDb:
                                              type: number
                                              maximum: 12
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                          presetInput:
                            description: >-
                              PUT /venues/{venueId}/audio/presets/{presetId}
                              body.
                            type: object
                            required:
                              - kind
                              - document
                            properties:
                              kind:
                                enum:
                                  - programme
                                  - pattern
                                  - session
                              document:
                                type: object
                            additionalProperties: false
                            allOf:
                              - if:
                                  properties:
                                    kind:
                                      const: programme
                                  required:
                                    - kind
                                then:
                                  properties:
                                    document:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/ananta/1.0/programme.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Content owned by 02c (AU,
                                        ananta_core 2.AU.2); mirrored here per
                                        PR5 / RC2 (CR-AU-2), contract copy is
                                        the published one.
                                      title: Ananta programme
                                      description: >-
                                        L6 programme preset (*.ananta.json), 02c
                                        §10. Played by generic L1 players;
                                        claims only in x-meta.
                                      type: object
                                      required:
                                        - format
                                        - formatVersion
                                        - id
                                        - title
                                        - tracks
                                      properties:
                                        $schema:
                                          type: string
                                        format:
                                          const: ananta-programme
                                        formatVersion:
                                          type: string
                                          pattern: ^1\.\d+\.\d+$
                                        id:
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                        title:
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                        description:
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                        tags:
                                          type: array
                                          items:
                                            type: string
                                        license:
                                          type: string
                                          default: NativeMindNONC
                                        durationS:
                                          type: number
                                          minimum: 0
                                        modes:
                                          type: array
                                          items:
                                            enum:
                                              - digital
                                              - hybrid
                                              - combined
                                          uniqueItems: true
                                        roles:
                                          type: object
                                          description: >-
                                            role name → required device class /
                                            capabilities
                                          propertyNames:
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                          additionalProperties:
                                            type: object
                                            required:
                                              - class
                                            properties:
                                              class:
                                                enum:
                                                  - striker_array
                                                  - resonator
                                                  - phonograph
                                                  - initiator
                                                  - signal_generator
                                                  - tactile
                                                  - speakers
                                              min:
                                                type: integer
                                                minimum: 1
                                                default: 1
                                              optional:
                                                type: boolean
                                                default: false
                                              description:
                                                type: string
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        tracks:
                                          type: array
                                          minItems: 1
                                          items:
                                            oneOf:
                                              - type: object
                                                required:
                                                  - kind
                                                  - role
                                                  - segments
                                                properties:
                                                  kind:
                                                    const: tone
                                                  id:
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                  role:
                                                    type: string
                                                  direction:
                                                    type: object
                                                    description: >-
                                                      .dome convention: azimuth 0 = front,
                                                      clockwise; elevation 0 = spring line
                                                    properties:
                                                      azimuthDeg:
                                                        type: number
                                                        minimum: -360
                                                        maximum: 360
                                                      elevationDeg:
                                                        type: number
                                                        minimum: -90
                                                        maximum: 90
                                                      distanceM:
                                                        type: number
                                                        minimum: 0
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                  transition:
                                                    enum:
                                                      - linear
                                                      - exponential
                                                      - stepped
                                                      - smooth
                                                  gainDb:
                                                    type: number
                                                    maximum: 12
                                                  segments:
                                                    type: array
                                                    minItems: 1
                                                    items:
                                                      type: object
                                                      required:
                                                        - startS
                                                        - durationS
                                                      properties:
                                                        id:
                                                          type: string
                                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                        startS:
                                                          type: number
                                                          minimum: 0
                                                        durationS:
                                                          type: number
                                                          exclusiveMinimum: 0
                                                        carrierHz:
                                                          type: number
                                                          minimum: 20
                                                          maximum: 20000
                                                        harmonicsHz:
                                                          type: array
                                                          items:
                                                            type: number
                                                            minimum: 20
                                                            maximum: 20000
                                                        amplitude:
                                                          type: number
                                                          minimum: 0
                                                          maximum: 1
                                                        attackS:
                                                          type: number
                                                          minimum: 0
                                                        releaseS:
                                                          type: number
                                                          minimum: 0
                                                        modulation:
                                                          type: object
                                                          required:
                                                            - kind
                                                            - rateHz
                                                          properties:
                                                            kind:
                                                              enum:
                                                                - am
                                                                - fm
                                                                - pm
                                                                - binaural_beat
                                                            rateHz:
                                                              type: number
                                                              minimum: 0.01
                                                              maximum: 100
                                                            depth:
                                                              type: number
                                                              minimum: 0
                                                              maximum: 1
                                                          patternProperties:
                                                            ^x-: true
                                                          additionalProperties: false
                                                        multi:
                                                          type: object
                                                          description: >-
                                                            MULTI generator parameters
                                                            (NmSoundParams names, 02c §5.6)
                                                          properties:
                                                            program:
                                                              type: string
                                                              description: >-
                                                                MULTI programme JSON text
                                                                {"target":"f1,f2,…","autonext":s}
                                                                (NmSoundParams.program); empty = single
                                                                target
                                                            target:
                                                              type: number
                                                              minimum: 0
                                                              maximum: 20000
                                                            enviroment:
                                                              type: number
                                                              minimum: 0
                                                            modulation:
                                                              type: number
                                                            multi:
                                                              type: number
                                                            channel:
                                                              type: number
                                                              description: >-
                                                                stereo phase angle code: 0, 1, 2, 60,
                                                                90, 120, 137, 180
                                                            audio:
                                                              type: number
                                                            compatJava:
                                                              type: boolean
                                                              default: false
                                                          patternProperties:
                                                            ^x-: true
                                                          additionalProperties: false
                                                      patternProperties:
                                                        ^x-: true
                                                      additionalProperties: false
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                              - type: object
                                                required:
                                                  - kind
                                                  - role
                                                  - pattern
                                                properties:
                                                  kind:
                                                    const: strike
                                                  id:
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                  role:
                                                    type: string
                                                  startS:
                                                    type: number
                                                    minimum: 0
                                                  pattern:
                                                    type: object
                                                    required:
                                                      - tempoBpm
                                                      - strikes
                                                    properties:
                                                      tempoBpm:
                                                        type: number
                                                        exclusiveMinimum: 0
                                                        maximum: 600
                                                      beatsPerLoop:
                                                        type: number
                                                        exclusiveMinimum: 0
                                                      loops:
                                                        type:
                                                          - integer
                                                          - 'null'
                                                        minimum: 1
                                                        description: null = until stopped
                                                      velocityCurve:
                                                        enum:
                                                          - linear
                                                          - exponential
                                                          - logarithmic
                                                          - sigmoid
                                                      strikes:
                                                        type: array
                                                        minItems: 1
                                                        items:
                                                          type: object
                                                          required:
                                                            - striker
                                                            - target
                                                            - beat
                                                            - velocity
                                                          properties:
                                                            striker:
                                                              type: string
                                                              minLength: 1
                                                            target:
                                                              type: string
                                                              minLength: 1
                                                            beat:
                                                              type: number
                                                              minimum: 0
                                                            velocity:
                                                              type: number
                                                              minimum: 0
                                                              maximum: 1
                                                            durationMs:
                                                              type: integer
                                                              minimum: 1
                                                              maximum: 200
                                                            accent:
                                                              enum:
                                                                - none
                                                                - soft
                                                                - medium
                                                                - strong
                                                                - crescendo
                                                                - decrescendo
                                                          patternProperties:
                                                            ^x-: true
                                                          additionalProperties: false
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                              - type: object
                                                required:
                                                  - kind
                                                  - src
                                                properties:
                                                  kind:
                                                    const: media
                                                  id:
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                  role:
                                                    type: string
                                                    default: speakers
                                                  src:
                                                    type: string
                                                    minLength: 1
                                                  startS:
                                                    type: number
                                                    minimum: 0
                                                  gainDb:
                                                    type: number
                                                    maximum: 12
                                                  loop:
                                                    type: boolean
                                                  sha256:
                                                    type: string
                                                    pattern: ^[0-9a-f]{64}$
                                                  direction:
                                                    type: object
                                                    description: >-
                                                      .dome convention: azimuth 0 = front,
                                                      clockwise; elevation 0 = spring line
                                                    properties:
                                                      azimuthDeg:
                                                        type: number
                                                        minimum: -360
                                                        maximum: 360
                                                      elevationDeg:
                                                        type: number
                                                        minimum: -90
                                                        maximum: 90
                                                      distanceM:
                                                        type: number
                                                        minimum: 0
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                              - type: object
                                                required:
                                                  - kind
                                                  - role
                                                  - events
                                                properties:
                                                  kind:
                                                    const: motor
                                                  id:
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                  role:
                                                    type: string
                                                  events:
                                                    type: array
                                                    minItems: 1
                                                    items:
                                                      type: object
                                                      required:
                                                        - atS
                                                        - 'on'
                                                      properties:
                                                        atS:
                                                          type: number
                                                          minimum: 0
                                                        'on':
                                                          type: boolean
                                                        rpm:
                                                          enum:
                                                            - 33.333
                                                            - 45
                                                      patternProperties:
                                                        ^x-: true
                                                      additionalProperties: false
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                        x-meta:
                                          type: object
                                          description: >-
                                            app-specific (e.g. intended effect
                                            labels); ignored by engines
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                      $defs:
                                        i18n:
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                        id:
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                        formatVersion:
                                          type: string
                                          pattern: ^1\.\d+\.\d+$
                                        direction:
                                          type: object
                                          description: >-
                                            .dome convention: azimuth 0 = front,
                                            clockwise; elevation 0 = spring line
                                          properties:
                                            azimuthDeg:
                                              type: number
                                              minimum: -360
                                              maximum: 360
                                            elevationDeg:
                                              type: number
                                              minimum: -90
                                              maximum: 90
                                            distanceM:
                                              type: number
                                              minimum: 0
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        multi:
                                          type: object
                                          description: >-
                                            MULTI generator parameters
                                            (NmSoundParams names, 02c §5.6)
                                          properties:
                                            program:
                                              type: string
                                              description: >-
                                                MULTI programme JSON text
                                                {"target":"f1,f2,…","autonext":s}
                                                (NmSoundParams.program); empty = single
                                                target
                                            target:
                                              type: number
                                              minimum: 0
                                              maximum: 20000
                                            enviroment:
                                              type: number
                                              minimum: 0
                                            modulation:
                                              type: number
                                            multi:
                                              type: number
                                            channel:
                                              type: number
                                              description: >-
                                                stereo phase angle code: 0, 1, 2, 60,
                                                90, 120, 137, 180
                                            audio:
                                              type: number
                                            compatJava:
                                              type: boolean
                                              default: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        modulation:
                                          type: object
                                          required:
                                            - kind
                                            - rateHz
                                          properties:
                                            kind:
                                              enum:
                                                - am
                                                - fm
                                                - pm
                                                - binaural_beat
                                            rateHz:
                                              type: number
                                              minimum: 0.01
                                              maximum: 100
                                            depth:
                                              type: number
                                              minimum: 0
                                              maximum: 1
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        segment:
                                          type: object
                                          required:
                                            - startS
                                            - durationS
                                          properties:
                                            id:
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                            startS:
                                              type: number
                                              minimum: 0
                                            durationS:
                                              type: number
                                              exclusiveMinimum: 0
                                            carrierHz:
                                              type: number
                                              minimum: 20
                                              maximum: 20000
                                            harmonicsHz:
                                              type: array
                                              items:
                                                type: number
                                                minimum: 20
                                                maximum: 20000
                                            amplitude:
                                              type: number
                                              minimum: 0
                                              maximum: 1
                                            attackS:
                                              type: number
                                              minimum: 0
                                            releaseS:
                                              type: number
                                              minimum: 0
                                            modulation:
                                              type: object
                                              required:
                                                - kind
                                                - rateHz
                                              properties:
                                                kind:
                                                  enum:
                                                    - am
                                                    - fm
                                                    - pm
                                                    - binaural_beat
                                                rateHz:
                                                  type: number
                                                  minimum: 0.01
                                                  maximum: 100
                                                depth:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 1
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            multi:
                                              type: object
                                              description: >-
                                                MULTI generator parameters
                                                (NmSoundParams names, 02c §5.6)
                                              properties:
                                                program:
                                                  type: string
                                                  description: >-
                                                    MULTI programme JSON text
                                                    {"target":"f1,f2,…","autonext":s}
                                                    (NmSoundParams.program); empty = single
                                                    target
                                                target:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 20000
                                                enviroment:
                                                  type: number
                                                  minimum: 0
                                                modulation:
                                                  type: number
                                                multi:
                                                  type: number
                                                channel:
                                                  type: number
                                                  description: >-
                                                    stereo phase angle code: 0, 1, 2, 60,
                                                    90, 120, 137, 180
                                                audio:
                                                  type: number
                                                compatJava:
                                                  type: boolean
                                                  default: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        role:
                                          type: object
                                          required:
                                            - class
                                          properties:
                                            class:
                                              enum:
                                                - striker_array
                                                - resonator
                                                - phonograph
                                                - initiator
                                                - signal_generator
                                                - tactile
                                                - speakers
                                            min:
                                              type: integer
                                              minimum: 1
                                              default: 1
                                            optional:
                                              type: boolean
                                              default: false
                                            description:
                                              type: string
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        toneTrack:
                                          type: object
                                          required:
                                            - kind
                                            - role
                                            - segments
                                          properties:
                                            kind:
                                              const: tone
                                            id:
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                            role:
                                              type: string
                                            direction:
                                              type: object
                                              description: >-
                                                .dome convention: azimuth 0 = front,
                                                clockwise; elevation 0 = spring line
                                              properties:
                                                azimuthDeg:
                                                  type: number
                                                  minimum: -360
                                                  maximum: 360
                                                elevationDeg:
                                                  type: number
                                                  minimum: -90
                                                  maximum: 90
                                                distanceM:
                                                  type: number
                                                  minimum: 0
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            transition:
                                              enum:
                                                - linear
                                                - exponential
                                                - stepped
                                                - smooth
                                            gainDb:
                                              type: number
                                              maximum: 12
                                            segments:
                                              type: array
                                              minItems: 1
                                              items:
                                                type: object
                                                required:
                                                  - startS
                                                  - durationS
                                                properties:
                                                  id:
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                  startS:
                                                    type: number
                                                    minimum: 0
                                                  durationS:
                                                    type: number
                                                    exclusiveMinimum: 0
                                                  carrierHz:
                                                    type: number
                                                    minimum: 20
                                                    maximum: 20000
                                                  harmonicsHz:
                                                    type: array
                                                    items:
                                                      type: number
                                                      minimum: 20
                                                      maximum: 20000
                                                  amplitude:
                                                    type: number
                                                    minimum: 0
                                                    maximum: 1
                                                  attackS:
                                                    type: number
                                                    minimum: 0
                                                  releaseS:
                                                    type: number
                                                    minimum: 0
                                                  modulation:
                                                    type: object
                                                    required:
                                                      - kind
                                                      - rateHz
                                                    properties:
                                                      kind:
                                                        enum:
                                                          - am
                                                          - fm
                                                          - pm
                                                          - binaural_beat
                                                      rateHz:
                                                        type: number
                                                        minimum: 0.01
                                                        maximum: 100
                                                      depth:
                                                        type: number
                                                        minimum: 0
                                                        maximum: 1
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                  multi:
                                                    type: object
                                                    description: >-
                                                      MULTI generator parameters
                                                      (NmSoundParams names, 02c §5.6)
                                                    properties:
                                                      program:
                                                        type: string
                                                        description: >-
                                                          MULTI programme JSON text
                                                          {"target":"f1,f2,…","autonext":s}
                                                          (NmSoundParams.program); empty = single
                                                          target
                                                      target:
                                                        type: number
                                                        minimum: 0
                                                        maximum: 20000
                                                      enviroment:
                                                        type: number
                                                        minimum: 0
                                                      modulation:
                                                        type: number
                                                      multi:
                                                        type: number
                                                      channel:
                                                        type: number
                                                        description: >-
                                                          stereo phase angle code: 0, 1, 2, 60,
                                                          90, 120, 137, 180
                                                      audio:
                                                        type: number
                                                      compatJava:
                                                        type: boolean
                                                        default: false
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        strikeTrack:
                                          type: object
                                          required:
                                            - kind
                                            - role
                                            - pattern
                                          properties:
                                            kind:
                                              const: strike
                                            id:
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                            role:
                                              type: string
                                            startS:
                                              type: number
                                              minimum: 0
                                            pattern:
                                              type: object
                                              required:
                                                - tempoBpm
                                                - strikes
                                              properties:
                                                tempoBpm:
                                                  type: number
                                                  exclusiveMinimum: 0
                                                  maximum: 600
                                                beatsPerLoop:
                                                  type: number
                                                  exclusiveMinimum: 0
                                                loops:
                                                  type:
                                                    - integer
                                                    - 'null'
                                                  minimum: 1
                                                  description: null = until stopped
                                                velocityCurve:
                                                  enum:
                                                    - linear
                                                    - exponential
                                                    - logarithmic
                                                    - sigmoid
                                                strikes:
                                                  type: array
                                                  minItems: 1
                                                  items:
                                                    type: object
                                                    required:
                                                      - striker
                                                      - target
                                                      - beat
                                                      - velocity
                                                    properties:
                                                      striker:
                                                        type: string
                                                        minLength: 1
                                                      target:
                                                        type: string
                                                        minLength: 1
                                                      beat:
                                                        type: number
                                                        minimum: 0
                                                      velocity:
                                                        type: number
                                                        minimum: 0
                                                        maximum: 1
                                                      durationMs:
                                                        type: integer
                                                        minimum: 1
                                                        maximum: 200
                                                      accent:
                                                        enum:
                                                          - none
                                                          - soft
                                                          - medium
                                                          - strong
                                                          - crescendo
                                                          - decrescendo
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        mediaTrack:
                                          type: object
                                          required:
                                            - kind
                                            - src
                                          properties:
                                            kind:
                                              const: media
                                            id:
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                            role:
                                              type: string
                                              default: speakers
                                            src:
                                              type: string
                                              minLength: 1
                                            startS:
                                              type: number
                                              minimum: 0
                                            gainDb:
                                              type: number
                                              maximum: 12
                                            loop:
                                              type: boolean
                                            sha256:
                                              type: string
                                              pattern: ^[0-9a-f]{64}$
                                            direction:
                                              type: object
                                              description: >-
                                                .dome convention: azimuth 0 = front,
                                                clockwise; elevation 0 = spring line
                                              properties:
                                                azimuthDeg:
                                                  type: number
                                                  minimum: -360
                                                  maximum: 360
                                                elevationDeg:
                                                  type: number
                                                  minimum: -90
                                                  maximum: 90
                                                distanceM:
                                                  type: number
                                                  minimum: 0
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        motorTrack:
                                          type: object
                                          required:
                                            - kind
                                            - role
                                            - events
                                          properties:
                                            kind:
                                              const: motor
                                            id:
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                            role:
                                              type: string
                                            events:
                                              type: array
                                              minItems: 1
                                              items:
                                                type: object
                                                required:
                                                  - atS
                                                  - 'on'
                                                properties:
                                                  atS:
                                                    type: number
                                                    minimum: 0
                                                  'on':
                                                    type: boolean
                                                  rpm:
                                                    enum:
                                                      - 33.333
                                                      - 45
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                              - if:
                                  properties:
                                    kind:
                                      const: pattern
                                  required:
                                    - kind
                                then:
                                  properties:
                                    document:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/ananta/1.0/pattern.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Content owned by 02c (AU,
                                        ananta_core 2.AU.2); mirrored here per
                                        PR5 / RC2 (CR-AU-2), contract copy is
                                        the published one.
                                      title: Ananta strike pattern
                                      description: >-
                                        Reusable strike pattern for striker
                                        arrays (ananta-pattern), 02c §10.
                                      type: object
                                      required:
                                        - format
                                        - formatVersion
                                        - id
                                        - title
                                        - pattern
                                      properties:
                                        $schema:
                                          type: string
                                        format:
                                          const: ananta-pattern
                                        formatVersion:
                                          type: string
                                          pattern: ^1\.\d+\.\d+$
                                        id:
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                        title:
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                        description:
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                        tags:
                                          type: array
                                          items:
                                            type: string
                                        license:
                                          type: string
                                          default: NativeMindNONC
                                        pattern:
                                          type: object
                                          required:
                                            - tempoBpm
                                            - strikes
                                          properties:
                                            tempoBpm:
                                              type: number
                                              exclusiveMinimum: 0
                                              maximum: 600
                                            beatsPerLoop:
                                              type: number
                                              exclusiveMinimum: 0
                                            loops:
                                              type:
                                                - integer
                                                - 'null'
                                              minimum: 1
                                              description: null = until stopped
                                            velocityCurve:
                                              enum:
                                                - linear
                                                - exponential
                                                - logarithmic
                                                - sigmoid
                                            strikes:
                                              type: array
                                              minItems: 1
                                              items:
                                                type: object
                                                required:
                                                  - striker
                                                  - target
                                                  - beat
                                                  - velocity
                                                properties:
                                                  striker:
                                                    type: string
                                                    minLength: 1
                                                  target:
                                                    type: string
                                                    minLength: 1
                                                  beat:
                                                    type: number
                                                    minimum: 0
                                                  velocity:
                                                    type: number
                                                    minimum: 0
                                                    maximum: 1
                                                  durationMs:
                                                    type: integer
                                                    minimum: 1
                                                    maximum: 200
                                                  accent:
                                                    enum:
                                                      - none
                                                      - soft
                                                      - medium
                                                      - strong
                                                      - crescendo
                                                      - decrescendo
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        x-meta:
                                          type: object
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                      $defs:
                                        i18n:
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                        id:
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                        formatVersion:
                                          type: string
                                          pattern: ^1\.\d+\.\d+$
                                        strike:
                                          type: object
                                          required:
                                            - striker
                                            - target
                                            - beat
                                            - velocity
                                          properties:
                                            striker:
                                              type: string
                                              minLength: 1
                                            target:
                                              type: string
                                              minLength: 1
                                            beat:
                                              type: number
                                              minimum: 0
                                            velocity:
                                              type: number
                                              minimum: 0
                                              maximum: 1
                                            durationMs:
                                              type: integer
                                              minimum: 1
                                              maximum: 200
                                            accent:
                                              enum:
                                                - none
                                                - soft
                                                - medium
                                                - strong
                                                - crescendo
                                                - decrescendo
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        pattern:
                                          type: object
                                          required:
                                            - tempoBpm
                                            - strikes
                                          properties:
                                            tempoBpm:
                                              type: number
                                              exclusiveMinimum: 0
                                              maximum: 600
                                            beatsPerLoop:
                                              type: number
                                              exclusiveMinimum: 0
                                            loops:
                                              type:
                                                - integer
                                                - 'null'
                                              minimum: 1
                                              description: null = until stopped
                                            velocityCurve:
                                              enum:
                                                - linear
                                                - exponential
                                                - logarithmic
                                                - sigmoid
                                            strikes:
                                              type: array
                                              minItems: 1
                                              items:
                                                type: object
                                                required:
                                                  - striker
                                                  - target
                                                  - beat
                                                  - velocity
                                                properties:
                                                  striker:
                                                    type: string
                                                    minLength: 1
                                                  target:
                                                    type: string
                                                    minLength: 1
                                                  beat:
                                                    type: number
                                                    minimum: 0
                                                  velocity:
                                                    type: number
                                                    minimum: 0
                                                    maximum: 1
                                                  durationMs:
                                                    type: integer
                                                    minimum: 1
                                                    maximum: 200
                                                  accent:
                                                    enum:
                                                      - none
                                                      - soft
                                                      - medium
                                                      - strong
                                                      - crescendo
                                                      - decrescendo
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                              - if:
                                  properties:
                                    kind:
                                      const: session
                                  required:
                                    - kind
                                then:
                                  properties:
                                    document:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/ananta/1.0/session.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Content owned by 02c (AU,
                                        ananta_core 2.AU.2); mirrored here per
                                        PR5 / RC2 (CR-AU-2), contract copy is
                                        the published one.
                                      title: Ananta session
                                      description: >-
                                        Ordered list of programme references +
                                        gaps + loop, global gain, default mode
                                        (ananta-session), 02c §10.
                                      type: object
                                      required:
                                        - format
                                        - formatVersion
                                        - id
                                        - title
                                        - items
                                      properties:
                                        $schema:
                                          type: string
                                        format:
                                          const: ananta-session
                                        formatVersion:
                                          type: string
                                          pattern: ^1\.\d+\.\d+$
                                        id:
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                        title:
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                        description:
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                        tags:
                                          type: array
                                          items:
                                            type: string
                                        license:
                                          type: string
                                          default: NativeMindNONC
                                        mode:
                                          enum:
                                            - digital
                                            - hybrid
                                            - combined
                                        gainDb:
                                          type: number
                                          maximum: 12
                                        loop:
                                          type: boolean
                                          default: false
                                        items:
                                          type: array
                                          minItems: 1
                                          items:
                                            type: object
                                            required:
                                              - programme
                                            properties:
                                              programme:
                                                type: object
                                                description: >-
                                                  reference by content URI or by programme
                                                  id
                                                properties:
                                                  uri:
                                                    type: string
                                                    minLength: 1
                                                  id:
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                  sha256:
                                                    type: string
                                                    pattern: ^[0-9a-f]{64}$
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                                anyOf:
                                                  - required:
                                                      - uri
                                                  - required:
                                                      - id
                                              gapS:
                                                type: number
                                                minimum: 0
                                                default: 0
                                              repeat:
                                                type: integer
                                                minimum: 1
                                                default: 1
                                              gainDb:
                                                type: number
                                                maximum: 12
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        x-meta:
                                          type: object
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                      $defs:
                                        i18n:
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                        id:
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                        formatVersion:
                                          type: string
                                          pattern: ^1\.\d+\.\d+$
                                        item:
                                          type: object
                                          required:
                                            - programme
                                          properties:
                                            programme:
                                              type: object
                                              description: >-
                                                reference by content URI or by programme
                                                id
                                              properties:
                                                uri:
                                                  type: string
                                                  minLength: 1
                                                id:
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                sha256:
                                                  type: string
                                                  pattern: ^[0-9a-f]{64}$
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                              anyOf:
                                                - required:
                                                    - uri
                                                - required:
                                                    - id
                                            gapS:
                                              type: number
                                              minimum: 0
                                              default: 0
                                            repeat:
                                              type: integer
                                              minimum: 1
                                              default: 1
                                            gainDb:
                                              type: number
                                              maximum: 12
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                          presetPage:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - id
                                    - kind
                                    - revision
                                  properties:
                                    id:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    kind:
                                      enum:
                                        - programme
                                        - pattern
                                        - session
                                    title:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Localised text map
                                        {"en":…,"ru":…}, 02e §3.1 (as .dome
                                        meta.title).
                                      title: Localised text
                                      type: object
                                      minProperties: 1
                                      propertyNames:
                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                      additionalProperties:
                                        type: string
                                      examples:
                                        - en: Intro
                                          ru: Вступление
                                      $defs:
                                        textOrI18n:
                                          description: >-
                                            Plain string (treated as `en`) or a
                                            localised map. (map branch = the root
                                            schema, inlined for tools that
                                            mis-handle self references)
                                          anyOf:
                                            - type: string
                                            - type: object
                                              minProperties: 1
                                              propertyNames:
                                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                              additionalProperties:
                                                type: string
                                              examples:
                                                - en: Intro
                                                  ru: Вступление
                                    revision:
                                      description: >-
                                        Monotonic resource revision; the strong
                                        ETag is derived from it.
                                      type: integer
                                      minimum: 0
                                  additionalProperties: false
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                            additionalProperties: false
                          targets:
                            type: object
                            properties:
                              devices:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                uniqueItems: true
                              zones:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                uniqueItems: true
                              speakers:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                uniqueItems: true
                            additionalProperties: false
                          sessionStart:
                            description: >-
                              POST /venues/{venueId}/audio/sessions: run an
                              installed preset (programme or session).
                            type: object
                            required:
                              - presetId
                            properties:
                              presetId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              gainDb:
                                type: number
                                minimum: -96
                                maximum: 12
                              targets:
                                type: object
                                properties:
                                  devices:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    uniqueItems: true
                                  zones:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    uniqueItems: true
                                  speakers:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    uniqueItems: true
                                additionalProperties: false
                              at:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              loop:
                                type: boolean
                            additionalProperties: false
                          session:
                            type: object
                            required:
                              - id
                              - venueId
                              - presetId
                              - status
                              - startedAt
                            properties:
                              id:
                                description: >-
                                  Server-owned resource id: UUIDv7, lowercase,
                                  sortable by creation time.
                                type: string
                                pattern: >-
                                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                examples:
                                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                              venueId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              presetId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              status:
                                anyOf:
                                  - enum:
                                      - starting
                                      - running
                                      - paused
                                      - finished
                                      - stopped
                                      - failed
                                  - type: string
                              engines:
                                type: array
                                items:
                                  type: string
                              position:
                                description: Media position in seconds from the start.
                                type: number
                                minimum: 0
                              duration:
                                description: Duration in seconds.
                                type: number
                                minimum: 0
                              itemIndex:
                                type: integer
                                minimum: 0
                              targets:
                                type: object
                                properties:
                                  devices:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    uniqueItems: true
                                  zones:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    uniqueItems: true
                                  speakers:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    uniqueItems: true
                                additionalProperties: false
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              startedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              endedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            additionalProperties: false
                          sessionPage:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - id
                                    - venueId
                                    - presetId
                                    - status
                                    - startedAt
                                  properties:
                                    id:
                                      description: >-
                                        Server-owned resource id: UUIDv7,
                                        lowercase, sortable by creation time.
                                      type: string
                                      pattern: >-
                                        ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                      examples:
                                        - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                                    venueId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    presetId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    status:
                                      anyOf:
                                        - enum:
                                            - starting
                                            - running
                                            - paused
                                            - finished
                                            - stopped
                                            - failed
                                        - type: string
                                    engines:
                                      type: array
                                      items:
                                        type: string
                                    position:
                                      description: >-
                                        Media position in seconds from the
                                        start.
                                      type: number
                                      minimum: 0
                                    duration:
                                      description: Duration in seconds.
                                      type: number
                                      minimum: 0
                                    itemIndex:
                                      type: integer
                                      minimum: 0
                                    targets:
                                      type: object
                                      properties:
                                        devices:
                                          type: array
                                          items:
                                            description: >-
                                              Document-scoped id (.dome displays[].id,
                                              assets[].id, playlist / cue ids); unique
                                              within its parent.
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          uniqueItems: true
                                        zones:
                                          type: array
                                          items:
                                            description: >-
                                              Document-scoped id (.dome displays[].id,
                                              assets[].id, playlist / cue ids); unique
                                              within its parent.
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          uniqueItems: true
                                        speakers:
                                          type: array
                                          items:
                                            description: >-
                                              Document-scoped id (.dome displays[].id,
                                              assets[].id, playlist / cue ids); unique
                                              within its parent.
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          uniqueItems: true
                                      additionalProperties: false
                                    problem:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). RFC 9457 problem details with
                                        the Freedome `code` catalogue, 02e §3.3.
                                        Also the `data` of WS `error`, the
                                        socket.io ack error and GraphQL
                                        errors[].extensions.problem. The
                                        catalogue is open: unknown codes are
                                        allowed; known codes are bound to their
                                        HTTP status.
                                      title: Problem details
                                      type: object
                                      required:
                                        - type
                                        - title
                                        - code
                                      properties:
                                        type:
                                          type: string
                                          format: uri
                                          description: >-
                                            https://freedome.nativemind.us/problems/<code>
                                            for catalogue codes.
                                        title:
                                          type: string
                                          minLength: 1
                                        status:
                                          type: integer
                                          minimum: 100
                                          maximum: 599
                                        detail:
                                          type: string
                                        instance:
                                          type: string
                                          format: uri-reference
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        traceId:
                                          type: string
                                          pattern: ^[0-9a-f]{16,32}$
                                        errors:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                      allOf:
                                        - if:
                                            properties:
                                              code:
                                                const: validation-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: not-found
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 404
                                        - if:
                                            properties:
                                              code:
                                                const: conflict
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 412
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-required
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 428
                                        - if:
                                            properties:
                                              code:
                                                const: unauthenticated
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: forbidden
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: rate-limited
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 429
                                        - if:
                                            properties:
                                              code:
                                                const: payload-too-large
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 413
                                        - if:
                                            properties:
                                              code:
                                                const: unsupported-format
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 415
                                        - if:
                                            properties:
                                              code:
                                                const: engine-unavailable
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: engine-incompatible
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: degraded
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: upload-checksum-mismatch
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: legacy-unsupported
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 501
                                        - if:
                                            properties:
                                              code:
                                                const: internal
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 500
                                        - if:
                                            properties:
                                              code:
                                                const: clock-unlocked
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: not-configured
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: authorization-pending
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: slow-down
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: access-denied
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: expired-token
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: token-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-key-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-in-progress
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                      additionalProperties: true
                                      examples:
                                        - type: >-
                                            https://freedome.nativemind.us/problems/engine-unavailable
                                          title: Visual engine unavailable
                                          status: 503
                                          detail: >-
                                            freedome-engined not reachable at
                                            unix:/run/freedome/engine.sock
                                          instance: /api/v1/venues/default/players/main/play
                                          code: engine-unavailable
                                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                      $defs:
                                        knownCode:
                                          enum:
                                            - validation-failed
                                            - not-found
                                            - conflict
                                            - precondition-failed
                                            - precondition-required
                                            - unauthenticated
                                            - forbidden
                                            - rate-limited
                                            - payload-too-large
                                            - unsupported-format
                                            - engine-unavailable
                                            - engine-incompatible
                                            - degraded
                                            - job-failed
                                            - upload-checksum-mismatch
                                            - legacy-unsupported
                                            - internal
                                            - clock-unlocked
                                            - not-configured
                                            - authorization-pending
                                            - slow-down
                                            - access-denied
                                            - expired-token
                                            - token-reused
                                            - idempotency-key-reused
                                            - idempotency-in-progress
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        fieldError:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    startedAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    endedAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  additionalProperties: false
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                            additionalProperties: false
                          generator:
                            description: >-
                              Test / MULTI generator (iScillator semantics;
                              replaces generate_test_signal).
                            type: object
                            required:
                              - signal
                            properties:
                              signal:
                                anyOf:
                                  - enum:
                                      - sine
                                      - pink
                                      - white
                                      - sweep
                                      - multi
                                  - type: string
                              frequencies:
                                type: array
                                items:
                                  type: number
                                  exclusiveMinimum: 0
                                maxItems: 64
                                description: >-
                                  sine: [f]; sweep: [from, to]; multi: up to 64
                                  partials
                              gainDb:
                                type: number
                                minimum: -96
                                maximum: 0
                              durationS:
                                type: number
                                exclusiveMinimum: 0
                              targets:
                                type: object
                                properties:
                                  devices:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    uniqueItems: true
                                  zones:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    uniqueItems: true
                                  speakers:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    uniqueItems: true
                                additionalProperties: false
                            additionalProperties: false
                          generatorState:
                            type: object
                            required:
                              - running
                            properties:
                              running:
                                type: boolean
                              settings:
                                description: >-
                                  Test / MULTI generator (iScillator semantics;
                                  replaces generate_test_signal).
                                type: object
                                required:
                                  - signal
                                properties:
                                  signal:
                                    anyOf:
                                      - enum:
                                          - sine
                                          - pink
                                          - white
                                          - sweep
                                          - multi
                                      - type: string
                                  frequencies:
                                    type: array
                                    items:
                                      type: number
                                      exclusiveMinimum: 0
                                    maxItems: 64
                                    description: >-
                                      sine: [f]; sweep: [from, to]; multi: up to
                                      64 partials
                                  gainDb:
                                    type: number
                                    minimum: -96
                                    maximum: 0
                                  durationS:
                                    type: number
                                    exclusiveMinimum: 0
                                  targets:
                                    type: object
                                    properties:
                                      devices:
                                        type: array
                                        items:
                                          description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        uniqueItems: true
                                      zones:
                                        type: array
                                        items:
                                          description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        uniqueItems: true
                                      speakers:
                                        type: array
                                        items:
                                          description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        uniqueItems: true
                                    additionalProperties: false
                                additionalProperties: false
                              startedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            additionalProperties: false
                          sourcePosition:
                            description: >-
                              Interactive / realtime source position (spherical,
                              listener at the dome centre).
                            type: object
                            required:
                              - azimuth
                              - elevation
                            properties:
                              azimuth:
                                type: number
                                minimum: -360
                                maximum: 360
                                description: >-
                                  degrees, 0 = front, positive = left (ambisonic
                                  convention)
                              elevation:
                                type: number
                                minimum: -90
                                maximum: 90
                              distance:
                                type: number
                                exclusiveMinimum: 0
                                description: metres
                              rampMs:
                                type: number
                                minimum: 0
                                maximum: 10000
                            additionalProperties: false
                      patch:
                        type: object
                        minProperties: 1
                        properties:
                          mode:
                            description: >-
                              A8: digital = anAntaDigital only; hybrid =
                              anAntaSound (mechanical devices); combined = both.
                            anyOf:
                              - enum:
                                  - digital
                                  - hybrid
                                  - combined
                              - type: string
                                pattern: ^[a-z][a-z0-9_-]{0,31}$
                          masterGainDb:
                            description: >-
                              Gain in dB (C5: optional companion of linear
                              `volume`).
                            type: number
                            minimum: -144
                            maximum: 24
                          mute:
                            type: boolean
                        patternProperties:
                          ^x-: true
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: audio.layout
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: AnantaSound layout (01b §4.4).
                        type: object
                        properties:
                          ambisonics:
                            type: object
                            properties:
                              order:
                                type: integer
                                minimum: 0
                                maximum: 7
                              normalisation:
                                anyOf:
                                  - enum:
                                      - SN3D
                                      - N3D
                                      - FuMa
                                  - description: >-
                                      Value of an open enum: one of the listed
                                      values or any other token (clients
                                      tolerate unknown values).
                                    type: string
                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                              channelOrder:
                                anyOf:
                                  - enum:
                                      - ACN
                                      - FuMa
                                  - description: >-
                                      Value of an open enum: one of the listed
                                      values or any other token (clients
                                      tolerate unknown values).
                                    type: string
                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          decoder:
                            type: object
                            properties:
                              kind:
                                anyOf:
                                  - enum:
                                      - allrad
                                      - sad
                                      - mmd
                                      - epad
                                  - description: >-
                                      Value of an open enum: one of the listed
                                      values or any other token (clients
                                      tolerate unknown values).
                                    type: string
                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                              dualBand:
                                type: boolean
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          speakers:
                            type: array
                            items:
                              type: object
                              required:
                                - id
                                - azimuth
                                - elevation
                              properties:
                                id:
                                  description: Document-scoped id (02e §3.2).
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                azimuth:
                                  type: number
                                  minimum: -360
                                  maximum: 360
                                  description: ° (0 = front, clockwise from above)
                                elevation:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                  description: ° (0 = spring line)
                                distance:
                                  type: number
                                  exclusiveMinimum: 0
                                  description: m
                                channel:
                                  type: integer
                                  minimum: 1
                                delayMs:
                                  type: number
                                  minimum: 0
                                gainDb:
                                  type: number
                                  minimum: -144
                                  maximum: 24
                                kind:
                                  anyOf:
                                    - enum:
                                        - fullrange
                                        - subwoofer
                                        - satellite
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                lfe:
                                  type: boolean
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                          roomCorrection:
                            type: object
                            required:
                              - file
                            properties:
                              file:
                                description: >-
                                  Entry path inside the container: relative,
                                  `/`-separated, no `..` segment, no backslash,
                                  no NUL.
                                type: string
                                minLength: 1
                                maxLength: 1024
                                pattern: >-
                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                              kind:
                                anyOf:
                                  - enum:
                                      - fir
                                      - iir
                                      - peq
                                  - description: >-
                                      Value of an open enum: one of the listed
                                      values or any other token (clients
                                      tolerate unknown values).
                                    type: string
                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          devices:
                            type: array
                            items:
                              type: object
                              required:
                                - id
                                - kind
                              properties:
                                id:
                                  description: Document-scoped id (02e §3.2).
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                name:
                                  type: string
                                kind:
                                  anyOf:
                                    - enum:
                                        - qrd
                                        - patefon
                                        - karmic_cluster
                                        - speaker_amp
                                        - microphone
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                address:
                                  type: string
                                  minLength: 1
                                  description: e.g. osc://10.0.0.20:9000
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                        patternProperties:
                          ^x-: true
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: audio.levels
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: >-
                          audio.levels meters (≤ 10 Hz): id (speaker / zone /
                          device / master) → dBFS.
                        type: object
                        required:
                          - levels
                        properties:
                          levels:
                            type: object
                            additionalProperties:
                              type: number
                              maximum: 24
                          peak:
                            type: object
                            additionalProperties:
                              type: number
                              maximum: 24
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: zone.state
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: >-
                          anAntaDigital zone: a subset of speakers with gain,
                          delay, EQ.
                        type: object
                        allOf:
                          - type: object
                            properties:
                              name:
                                type: string
                                maxLength: 128
                              speakers:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                uniqueItems: true
                              gainDb:
                                description: >-
                                  Gain in dB (C5: optional companion of linear
                                  `volume`).
                                type: number
                                minimum: -144
                                maximum: 24
                              delayMs:
                                type: number
                                minimum: 0
                                maximum: 2000
                              eq:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - type
                                    - frequencyHz
                                  properties:
                                    type:
                                      anyOf:
                                        - enum:
                                            - peak
                                            - lowShelf
                                            - highShelf
                                            - lowPass
                                            - highPass
                                            - notch
                                            - allPass
                                        - type: string
                                    frequencyHz:
                                      type: number
                                      exclusiveMinimum: 0
                                    gainDb:
                                      type: number
                                      minimum: -48
                                      maximum: 24
                                    q:
                                      type: number
                                      exclusiveMinimum: 0
                                      maximum: 100
                                    enabled:
                                      type: boolean
                                      default: true
                                  additionalProperties: false
                                maxItems: 32
                              mute:
                                type: boolean
                            patternProperties:
                              ^x-: true
                        required:
                          - id
                          - speakers
                          - gainDb
                          - mute
                          - revision
                        properties:
                          id:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                        unevaluatedProperties: false
                      patch:
                        description: Merge patch of the resource (high-rate kinds).
                        type: object
                        minProperties: 1
                - if:
                    properties:
                      kind:
                        const: zone.deleted
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        type: object
                        required:
                          - id
                        properties:
                          id:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: audioDevice.state
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: >-
                          Audio device = .dome audio.devices[] / speakers[]
                          entry + live state (02c §6).
                        type: object
                        required:
                          - id
                          - kind
                          - state
                        properties:
                          id:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          kind:
                            anyOf:
                              - enum:
                                  - speaker
                                  - speaker_amp
                                  - microphone
                                  - qrd
                                  - patefon
                                  - karmic_cluster
                                  - resonator
                              - type: string
                                pattern: ^[a-z][a-z0-9_-]{0,31}$
                          name:
                            type: string
                          config:
                            type: object
                            description: the .dome audio device / speaker entry
                            additionalProperties: true
                          state:
                            type: object
                            required:
                              - online
                            properties:
                              online:
                                type: boolean
                              engine:
                                anyOf:
                                  - enum:
                                      - anantasound
                                      - anantadigital
                                  - type: string
                              gainDb:
                                description: >-
                                  Gain in dB (C5: optional companion of linear
                                  `volume`).
                                type: number
                                minimum: -144
                                maximum: 24
                              mute:
                                type: boolean
                              levelDb:
                                type: number
                                maximum: 24
                                description: last meter value (dBFS)
                              temperatureC:
                                type: number
                              firmware:
                                type: string
                              faults:
                                type: array
                                items:
                                  type: string
                              lastSeen:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            additionalProperties: true
                        patternProperties:
                          ^x-: true
                        additionalProperties: false
                      patch:
                        description: Merge patch of the resource (high-rate kinds).
                        type: object
                        minProperties: 1
                - if:
                    properties:
                      kind:
                        const: audioSession.state
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        type: object
                        required:
                          - id
                          - venueId
                          - presetId
                          - status
                          - startedAt
                        properties:
                          id:
                            description: >-
                              Server-owned resource id: UUIDv7, lowercase,
                              sortable by creation time.
                            type: string
                            pattern: >-
                              ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                            examples:
                              - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                          venueId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          presetId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          status:
                            anyOf:
                              - enum:
                                  - starting
                                  - running
                                  - paused
                                  - finished
                                  - stopped
                                  - failed
                              - type: string
                          engines:
                            type: array
                            items:
                              type: string
                          position:
                            description: Media position in seconds from the start.
                            type: number
                            minimum: 0
                          duration:
                            description: Duration in seconds.
                            type: number
                            minimum: 0
                          itemIndex:
                            type: integer
                            minimum: 0
                          targets:
                            type: object
                            properties:
                              devices:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                uniqueItems: true
                              zones:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                uniqueItems: true
                              speakers:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                uniqueItems: true
                            additionalProperties: false
                          problem:
                            $schema: https://json-schema.org/draft/2020-12/schema
                            $id: >-
                              https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                            $comment: >-
                              NativeMindNONC — freedome_contract (see LICENSE).
                              RFC 9457 problem details with the Freedome `code`
                              catalogue, 02e §3.3. Also the `data` of WS
                              `error`, the socket.io ack error and GraphQL
                              errors[].extensions.problem. The catalogue is
                              open: unknown codes are allowed; known codes are
                              bound to their HTTP status.
                            title: Problem details
                            type: object
                            required:
                              - type
                              - title
                              - code
                            properties:
                              type:
                                type: string
                                format: uri
                                description: >-
                                  https://freedome.nativemind.us/problems/<code>
                                  for catalogue codes.
                              title:
                                type: string
                                minLength: 1
                              status:
                                type: integer
                                minimum: 100
                                maximum: 599
                              detail:
                                type: string
                              instance:
                                type: string
                                format: uri-reference
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              traceId:
                                type: string
                                pattern: ^[0-9a-f]{16,32}$
                              errors:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                            allOf:
                              - if:
                                  properties:
                                    code:
                                      const: validation-failed
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 422
                              - if:
                                  properties:
                                    code:
                                      const: not-found
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 404
                              - if:
                                  properties:
                                    code:
                                      const: conflict
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 409
                              - if:
                                  properties:
                                    code:
                                      const: precondition-failed
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 412
                              - if:
                                  properties:
                                    code:
                                      const: precondition-required
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 428
                              - if:
                                  properties:
                                    code:
                                      const: unauthenticated
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 401
                              - if:
                                  properties:
                                    code:
                                      const: forbidden
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 403
                              - if:
                                  properties:
                                    code:
                                      const: rate-limited
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 429
                              - if:
                                  properties:
                                    code:
                                      const: payload-too-large
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 413
                              - if:
                                  properties:
                                    code:
                                      const: unsupported-format
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 415
                              - if:
                                  properties:
                                    code:
                                      const: engine-unavailable
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 503
                              - if:
                                  properties:
                                    code:
                                      const: engine-incompatible
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 503
                              - if:
                                  properties:
                                    code:
                                      const: degraded
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 503
                              - if:
                                  properties:
                                    code:
                                      const: upload-checksum-mismatch
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 422
                              - if:
                                  properties:
                                    code:
                                      const: legacy-unsupported
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 501
                              - if:
                                  properties:
                                    code:
                                      const: internal
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 500
                              - if:
                                  properties:
                                    code:
                                      const: clock-unlocked
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 409
                              - if:
                                  properties:
                                    code:
                                      const: not-configured
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 503
                              - if:
                                  properties:
                                    code:
                                      const: authorization-pending
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 400
                              - if:
                                  properties:
                                    code:
                                      const: slow-down
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 400
                              - if:
                                  properties:
                                    code:
                                      const: access-denied
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 403
                              - if:
                                  properties:
                                    code:
                                      const: expired-token
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 400
                              - if:
                                  properties:
                                    code:
                                      const: token-reused
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 401
                              - if:
                                  properties:
                                    code:
                                      const: idempotency-key-reused
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 409
                              - if:
                                  properties:
                                    code:
                                      const: idempotency-in-progress
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 409
                            additionalProperties: true
                            examples:
                              - type: >-
                                  https://freedome.nativemind.us/problems/engine-unavailable
                                title: Visual engine unavailable
                                status: 503
                                detail: >-
                                  freedome-engined not reachable at
                                  unix:/run/freedome/engine.sock
                                instance: /api/v1/venues/default/players/main/play
                                code: engine-unavailable
                                traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                            $defs:
                              knownCode:
                                enum:
                                  - validation-failed
                                  - not-found
                                  - conflict
                                  - precondition-failed
                                  - precondition-required
                                  - unauthenticated
                                  - forbidden
                                  - rate-limited
                                  - payload-too-large
                                  - unsupported-format
                                  - engine-unavailable
                                  - engine-incompatible
                                  - degraded
                                  - job-failed
                                  - upload-checksum-mismatch
                                  - legacy-unsupported
                                  - internal
                                  - clock-unlocked
                                  - not-configured
                                  - authorization-pending
                                  - slow-down
                                  - access-denied
                                  - expired-token
                                  - token-reused
                                  - idempotency-key-reused
                                  - idempotency-in-progress
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              fieldError:
                                type: object
                                required:
                                  - pointer
                                  - detail
                                properties:
                                  pointer:
                                    type: string
                                    format: json-pointer
                                  detail:
                                    type: string
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                additionalProperties: true
                          startedAt:
                            description: >-
                              RFC 3339 UTC with milliseconds, e.g.
                              2026-10-19T12:00:00.000Z.
                            type: string
                            format: date-time
                            pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          endedAt:
                            description: >-
                              RFC 3339 UTC with milliseconds, e.g.
                              2026-10-19T12:00:00.000Z.
                            type: string
                            format: date-time
                            pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                        additionalProperties: false
                      patch:
                        description: Merge patch of the resource (high-rate kinds).
                        type: object
                        minProperties: 1
                - if:
                    properties:
                      kind:
                        const: generator.state
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        type: object
                        required:
                          - running
                        properties:
                          running:
                            type: boolean
                          settings:
                            description: >-
                              Test / MULTI generator (iScillator semantics;
                              replaces generate_test_signal).
                            type: object
                            required:
                              - signal
                            properties:
                              signal:
                                anyOf:
                                  - enum:
                                      - sine
                                      - pink
                                      - white
                                      - sweep
                                      - multi
                                  - type: string
                              frequencies:
                                type: array
                                items:
                                  type: number
                                  exclusiveMinimum: 0
                                maxItems: 64
                                description: >-
                                  sine: [f]; sweep: [from, to]; multi: up to 64
                                  partials
                              gainDb:
                                type: number
                                minimum: -96
                                maximum: 0
                              durationS:
                                type: number
                                exclusiveMinimum: 0
                              targets:
                                type: object
                                properties:
                                  devices:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    uniqueItems: true
                                  zones:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    uniqueItems: true
                                  speakers:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    uniqueItems: true
                                additionalProperties: false
                            additionalProperties: false
                          startedAt:
                            description: >-
                              RFC 3339 UTC with milliseconds, e.g.
                              2026-10-19T12:00:00.000Z.
                            type: string
                            format: date-time
                            pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: show.updated
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/api/1.0/show.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE). Show
                          resource (02e §4, §5.3) = .dome 1.1 show manifest
                          without format / kind ($defs reused from dome/1.1,
                          never duplicated) + server fields. Root = GET
                          representation.
                        title: Show
                        allOf:
                          - type: object
                            allOf:
                              - description: >-
                                  Show content shared by GET / PUT / POST: the
                                  .dome show sections.
                                type: object
                                properties:
                                  meta:
                                    type: object
                                    required:
                                      - id
                                      - title
                                    properties:
                                      id:
                                        description: >-
                                          Stable document id (UUID, lowercase);
                                          the venue / show id on import (02e
                                          §3.2).
                                        type: string
                                        pattern: >-
                                          ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                      title:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). Localised text map
                                          {"en":…,"ru":…}, 02e §3.1 (as .dome
                                          meta.title).
                                        title: Localised text
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                                        $defs:
                                          textOrI18n:
                                            description: >-
                                              Plain string (treated as `en`) or a
                                              localised map. (map branch = the root
                                              schema, inlined for tools that
                                              mis-handle self references)
                                            anyOf:
                                              - type: string
                                              - type: object
                                                minProperties: 1
                                                propertyNames:
                                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                additionalProperties:
                                                  type: string
                                                examples:
                                                  - en: Intro
                                                    ru: Вступление
                                      description:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). Localised text map
                                          {"en":…,"ru":…}, 02e §3.1 (as .dome
                                          meta.title).
                                        title: Localised text
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                                        $defs:
                                          textOrI18n:
                                            description: >-
                                              Plain string (treated as `en`) or a
                                              localised map. (map branch = the root
                                              schema, inlined for tools that
                                              mis-handle self references)
                                            anyOf:
                                              - type: string
                                              - type: object
                                                minProperties: 1
                                                propertyNames:
                                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                additionalProperties:
                                                  type: string
                                                examples:
                                                  - en: Intro
                                                    ru: Вступление
                                      authors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - name
                                          properties:
                                            name:
                                              type: string
                                              minLength: 1
                                            email:
                                              type: string
                                              format: email
                                            url:
                                              type: string
                                              format: uri
                                            role:
                                              type: string
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      created:
                                        type: string
                                        format: date-time
                                      modified:
                                        type: string
                                        format: date-time
                                      generator:
                                        type: object
                                        required:
                                          - name
                                        properties:
                                          name:
                                            type: string
                                            minLength: 1
                                          version:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      license:
                                        type: string
                                        minLength: 1
                                        default: NativeMindNONC
                                      tags:
                                        type: array
                                        items:
                                          type: string
                                          minLength: 1
                                          maxLength: 64
                                        uniqueItems: true
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  assets:
                                    type: array
                                    items:
                                      description: >-
                                        Media / scene (01b §4.5). External
                                        assets (absolute URI) carry sha256 +
                                        size.
                                      type: object
                                      required:
                                        - id
                                        - src
                                        - type
                                      properties:
                                        id:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        name:
                                          type: string
                                        src:
                                          description: >-
                                            An entry path (see path) or an absolute
                                            URI (`https:`, `http:`, `file:`, `ndi:`,
                                            `srt:` …).
                                          anyOf:
                                            - description: >-
                                                Entry path inside the container:
                                                relative, `/`-separated, no `..`
                                                segment, no backslash, no NUL.
                                              type: string
                                              minLength: 1
                                              maxLength: 1024
                                              pattern: >-
                                                ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                            - type: string
                                              format: uri
                                              pattern: '^[A-Za-z][A-Za-z0-9+.-]*:'
                                        sha256:
                                          description: Lowercase hex SHA-256 digest.
                                          type: string
                                          pattern: ^[0-9a-f]{64}$
                                        size:
                                          type: integer
                                          minimum: 0
                                        type:
                                          anyOf:
                                            - enum:
                                                - video
                                                - image
                                                - audio
                                                - zelim
                                                - boranko
                                                - comics
                                                - realtime
                                                - stream
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        mapping:
                                          description: >-
                                            Content mapping onto the dome (01b §4.5,
                                            02b §4.4).
                                          type: object
                                          required:
                                            - projection
                                          properties:
                                            projection:
                                              anyOf:
                                                - enum:
                                                    - domemaster
                                                    - equirect
                                                    - cubemap
                                                    - flat
                                                    - pyramid_views
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            fov:
                                              type: number
                                              exclusiveMinimum: 0
                                              maximum: 360
                                              description: ° (domemaster 180–230)
                                            tilt:
                                              type: number
                                              minimum: -90
                                              maximum: 90
                                            azimuth:
                                              type: number
                                              minimum: -360
                                              maximum: 360
                                              description: 'flat: ° centre azimuth'
                                            elevation:
                                              type: number
                                              minimum: -90
                                              maximum: 90
                                              description: 'flat: ° centre elevation'
                                            width:
                                              type: number
                                              exclusiveMinimum: 0
                                              maximum: 360
                                              description: 'flat: ° angular width'
                                            faces:
                                              enum:
                                                - 3
                                                - 4
                                                - 6
                                              description: '1.1 pyramid_views: number of views'
                                            layout:
                                              description: >-
                                                1.1: cubemap 3x2 | 6x1 | cross;
                                                pyramid_views cross | row | grid
                                              anyOf:
                                                - enum:
                                                    - 3x2
                                                    - 6x1
                                                    - cross
                                                    - row
                                                    - grid
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                          if:
                                            properties:
                                              projection:
                                                const: pyramid_views
                                            required:
                                              - projection
                                          then:
                                            required:
                                              - faces
                                        video:
                                          type: object
                                          properties:
                                            resolution:
                                              type: array
                                              items:
                                                type: integer
                                                minimum: 1
                                              minItems: 2
                                              maxItems: 2
                                              description: '[width, height] or [cols, rows].'
                                            fps:
                                              type: number
                                              exclusiveMinimum: 0
                                            codec:
                                              anyOf:
                                                - enum:
                                                    - hap
                                                    - hap-q
                                                    - hap-alpha
                                                    - h264
                                                    - h265
                                                    - av1
                                                    - vp9
                                                    - prores
                                                    - png-sequence
                                                    - exr-sequence
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            stereo:
                                              oneOf:
                                                - type: 'null'
                                                - enum:
                                                    - top-bottom
                                                    - side-by-side
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        audio:
                                          type: object
                                          required:
                                            - kind
                                          properties:
                                            kind:
                                              anyOf:
                                                - enum:
                                                    - ambisonic
                                                    - channels
                                                    - stereo
                                                    - mono
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            order:
                                              type: integer
                                              minimum: 0
                                              maximum: 7
                                            layout:
                                              type: string
                                              minLength: 1
                                              description: 'channels: e.g. 5.1, 7.1, 7.1.4'
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        duration:
                                          type: number
                                          minimum: 0
                                        thumbnail:
                                          description: >-
                                            Entry path inside the container:
                                            relative, `/`-separated, no `..`
                                            segment, no backslash, no NUL.
                                          type: string
                                          minLength: 1
                                          maxLength: 1024
                                          pattern: >-
                                            ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                        zelim:
                                          description: >-
                                            1.1: hint for type zelim (project = JSON
                                            variant J, binary = variant B); content
                                            sniffing wins. A J project may carry
                                            quantum.scene (02e §9.3).
                                          type: object
                                          properties:
                                            variant:
                                              anyOf:
                                                - enum:
                                                    - project
                                                    - binary
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                      if:
                                        properties:
                                          src:
                                            type: string
                                            pattern: '^(?!asset:)[A-Za-z][A-Za-z0-9+.-]*:'
                                            description: >-
                                              absolute URI other than `asset:<id>` (an
                                              asset stored on the server: sha256 /
                                              size known there)
                                        required:
                                          - src
                                      then:
                                        if:
                                          properties:
                                            type:
                                              const: stream
                                          required:
                                            - type
                                        else:
                                          required:
                                            - sha256
                                            - size
                                  show:
                                    description: >-
                                      Playlists, timelines, matrix, cues,
                                      triggers, startup (01b §4.6).
                                    type: object
                                    properties:
                                      playlists:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - id
                                            - items
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            name:
                                              type: string
                                            loop:
                                              type: boolean
                                            items:
                                              type: array
                                              items:
                                                type: object
                                                required:
                                                  - asset
                                                properties:
                                                  asset:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  in:
                                                    type: number
                                                    minimum: 0
                                                  out:
                                                    type: number
                                                    minimum: 0
                                                  loop:
                                                    type: boolean
                                                  transition:
                                                    type: object
                                                    required:
                                                      - kind
                                                    properties:
                                                      kind:
                                                        anyOf:
                                                          - enum:
                                                              - cut
                                                              - fade
                                                              - dissolve
                                                              - wipe
                                                          - description: >-
                                                              Value of an open enum: one of the listed
                                                              values or any other token (clients
                                                              tolerate unknown values).
                                                            type: string
                                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                      duration:
                                                        type: number
                                                        minimum: 0
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                                description: >-
                                                  x-screenberry: Screenberry item fields
                                                  without a .dome equivalent, round-trip
                                                  only (02d MD8).
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      timelines:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - id
                                            - tracks
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            name:
                                              type: string
                                            duration:
                                              type: number
                                              minimum: 0
                                            tracks:
                                              type: array
                                              items:
                                                type: object
                                                required:
                                                  - kind
                                                  - clips
                                                properties:
                                                  id:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  kind:
                                                    anyOf:
                                                      - enum:
                                                          - video
                                                          - audio
                                                          - control
                                                      - description: >-
                                                          Value of an open enum: one of the listed
                                                          values or any other token (clients
                                                          tolerate unknown values).
                                                        type: string
                                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                  clips:
                                                    type: array
                                                    items:
                                                      type: object
                                                      required:
                                                        - asset
                                                        - start
                                                      properties:
                                                        asset:
                                                          description: Document-scoped id (02e §3.2).
                                                          type: string
                                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                                          examples:
                                                            - p1
                                                            - intro.mp4
                                                            - cue-01
                                                        start:
                                                          type: number
                                                          minimum: 0
                                                        in:
                                                          type: number
                                                          minimum: 0
                                                        out:
                                                          type: number
                                                          minimum: 0
                                                        gainDb:
                                                          type: number
                                                          minimum: -144
                                                          maximum: 24
                                                        opacity:
                                                          type: number
                                                          minimum: 0
                                                          maximum: 1
                                                      patternProperties:
                                                        ^x-: true
                                                      additionalProperties: false
                                                      description: >-
                                                        x-screenberry: Screenberry item fields
                                                        without a .dome equivalent, round-trip
                                                        only (02d MD8).
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                            markers:
                                              type: array
                                              items:
                                                type: object
                                                required:
                                                  - time
                                                properties:
                                                  time:
                                                    type: number
                                                    minimum: 0
                                                  name:
                                                    type: string
                                                  id:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  kind:
                                                    anyOf:
                                                      - enum:
                                                          - marker
                                                          - pause
                                                          - jump
                                                          - timecode
                                                      - description: >-
                                                          Value of an open enum: one of the listed
                                                          values or any other token (clients
                                                          tolerate unknown values).
                                                        type: string
                                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                            fps:
                                              type: number
                                              exclusiveMinimum: 0
                                              description: 1.1 (02d)
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      matrix:
                                        description: >-
                                          Screenberry-style matrix
                                          (compatibility); cells reference row /
                                          column ids.
                                        type: object
                                        required:
                                          - rows
                                          - columns
                                          - cells
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          rows:
                                            type: array
                                            items:
                                              anyOf:
                                                - description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                - type: object
                                                  required:
                                                    - id
                                                  properties:
                                                    id:
                                                      description: Document-scoped id (02e §3.2).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                                      examples:
                                                        - p1
                                                        - intro.mp4
                                                        - cue-01
                                                    name:
                                                      type: string
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                          columns:
                                            type: array
                                            items:
                                              anyOf:
                                                - description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                - type: object
                                                  required:
                                                    - id
                                                  properties:
                                                    id:
                                                      description: Document-scoped id (02e §3.2).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                                      examples:
                                                        - p1
                                                        - intro.mp4
                                                        - cue-01
                                                    name:
                                                      type: string
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                          cells:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - row
                                                - column
                                                - asset
                                              properties:
                                                row:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                column:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                asset:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      cues:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - id
                                            - actions
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            name:
                                              type: string
                                            at:
                                              oneOf:
                                                - type: object
                                                  required:
                                                    - timeline
                                                    - time
                                                  properties:
                                                    timeline:
                                                      description: Document-scoped id (02e §3.2).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                                      examples:
                                                        - p1
                                                        - intro.mp4
                                                        - cue-01
                                                    time:
                                                      type: number
                                                      minimum: 0
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                                - type: object
                                                  required:
                                                    - trigger
                                                  properties:
                                                    trigger:
                                                      description: Document-scoped id (02e §3.2).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                                      examples:
                                                        - p1
                                                        - intro.mp4
                                                        - cue-01
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                            actions:
                                              type: array
                                              minItems: 1
                                              items:
                                                type: object
                                                required:
                                                  - do
                                                properties:
                                                  do:
                                                    anyOf:
                                                      - enum:
                                                          - play
                                                          - pause
                                                          - stop
                                                          - seek
                                                          - setVolume
                                                          - setBrightness
                                                          - setParameter
                                                          - osc
                                                          - http
                                                          - scenario
                                                      - description: >-
                                                          Value of an open enum: one of the listed
                                                          values or any other token (clients
                                                          tolerate unknown values).
                                                        type: string
                                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                  target:
                                                    type: string
                                                    minLength: 1
                                                    description: >-
                                                      e.g. player id, playlist:<id>, param
                                                      path, osc://host:port/address, URL
                                                  args:
                                                    description: >-
                                                      Action arguments (object or positional
                                                      array).
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                                if:
                                                  properties:
                                                    do:
                                                      const: scenario
                                                  required:
                                                    - do
                                                then:
                                                  required:
                                                    - target
                                                  properties:
                                                    target:
                                                      description: scenario id (02d §4a)
                                                    args:
                                                      type: object
                                                      description: scenario parameters
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      triggers:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - id
                                            - source
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            source:
                                              anyOf:
                                                - enum:
                                                    - osc
                                                    - midi
                                                    - time
                                                    - api
                                                    - dmx
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            match:
                                              description: >-
                                                Source-specific match (OSC address
                                                pattern, MIDI note, cron / time, DMX
                                                channel …).
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      mediaPlayers:
                                        type: array
                                        items:
                                          description: >-
                                            1.1 (02d MD8): named media player.
                                            Player `main` always exists (implicit:
                                            all displays, source = startup).
                                          type: object
                                          required:
                                            - id
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            name:
                                              type: string
                                            target:
                                              description: absent = all displays
                                              type: object
                                              properties:
                                                displays:
                                                  type: array
                                                  items:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  uniqueItems: true
                                                  minItems: 1
                                                layer:
                                                  type: integer
                                                  minimum: 0
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            source:
                                              description: >-
                                                Exactly one of playlist / timeline /
                                                matrix / asset id.
                                              type: object
                                              properties:
                                                playlist:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                timeline:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                matrix:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                asset:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                              minProperties: 1
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                              oneOf:
                                                - required:
                                                    - playlist
                                                - required:
                                                    - timeline
                                                - required:
                                                    - matrix
                                                - required:
                                                    - asset
                                            volume:
                                              type: number
                                              minimum: 0
                                              maximum: 1
                                            brightness:
                                              type: number
                                              minimum: 0
                                              maximum: 1
                                            rotation:
                                              type: number
                                              minimum: -360
                                              maximum: 360
                                              description: ° content rotation about the dome axis
                                            speed:
                                              type: number
                                              exclusiveMinimum: 0
                                              maximum: 16
                                              description: playback rate, 1 = normal
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      startup:
                                        description: >-
                                          Exactly one of playlist / timeline /
                                          matrix / asset id.
                                        type: object
                                        properties:
                                          playlist:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          timeline:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          matrix:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          asset:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                        minProperties: 1
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                        oneOf:
                                          - required:
                                              - playlist
                                          - required:
                                              - timeline
                                          - required:
                                              - matrix
                                          - required:
                                              - asset
                                      audioMode:
                                        description: >-
                                          1.1 (02c AQ4, replaces x-ananta.mode):
                                          audio engines used by the show; absent =
                                          digital.
                                        anyOf:
                                          - enum:
                                              - digital
                                              - hybrid
                                              - combined
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  compat:
                                    description: >-
                                      Declarative mappings for the A6 gateways
                                      (01b §4.7); never required for playback.
                                    type: object
                                    propertyNames:
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
                                    additionalProperties:
                                      type: object
                                patternProperties:
                                  ^x-: true
                            required:
                              - id
                              - revision
                              - meta
                              - assets
                              - show
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              revision:
                                description: >-
                                  Monotonic resource revision; the strong ETag
                                  is derived from it.
                                type: integer
                                minimum: 0
                              status:
                                anyOf:
                                  - enum:
                                      - ready
                                      - incomplete
                                      - invalid
                                  - type: string
                                    pattern: ^[a-z][a-z_-]{0,31}$
                                description: incomplete = referenced assets not ready yet
                              warnings:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - code
                                    - detail
                                  properties:
                                    code:
                                      type: string
                                      pattern: ^[a-z][a-z0-9-]{0,63}$
                                    detail:
                                      type: string
                                    pointer:
                                      type: string
                                  additionalProperties: false
                                description: >-
                                  UC-S6 validation against the active venue
                                  (remapping, missing assets)
                              createdAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            unevaluatedProperties: false
                        $defs:
                          show:
                            type: object
                            allOf:
                              - description: >-
                                  Show content shared by GET / PUT / POST: the
                                  .dome show sections.
                                type: object
                                properties:
                                  meta:
                                    type: object
                                    required:
                                      - id
                                      - title
                                    properties:
                                      id:
                                        description: >-
                                          Stable document id (UUID, lowercase);
                                          the venue / show id on import (02e
                                          §3.2).
                                        type: string
                                        pattern: >-
                                          ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                      title:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). Localised text map
                                          {"en":…,"ru":…}, 02e §3.1 (as .dome
                                          meta.title).
                                        title: Localised text
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                                        $defs:
                                          textOrI18n:
                                            description: >-
                                              Plain string (treated as `en`) or a
                                              localised map. (map branch = the root
                                              schema, inlined for tools that
                                              mis-handle self references)
                                            anyOf:
                                              - type: string
                                              - type: object
                                                minProperties: 1
                                                propertyNames:
                                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                additionalProperties:
                                                  type: string
                                                examples:
                                                  - en: Intro
                                                    ru: Вступление
                                      description:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). Localised text map
                                          {"en":…,"ru":…}, 02e §3.1 (as .dome
                                          meta.title).
                                        title: Localised text
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                                        $defs:
                                          textOrI18n:
                                            description: >-
                                              Plain string (treated as `en`) or a
                                              localised map. (map branch = the root
                                              schema, inlined for tools that
                                              mis-handle self references)
                                            anyOf:
                                              - type: string
                                              - type: object
                                                minProperties: 1
                                                propertyNames:
                                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                additionalProperties:
                                                  type: string
                                                examples:
                                                  - en: Intro
                                                    ru: Вступление
                                      authors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - name
                                          properties:
                                            name:
                                              type: string
                                              minLength: 1
                                            email:
                                              type: string
                                              format: email
                                            url:
                                              type: string
                                              format: uri
                                            role:
                                              type: string
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      created:
                                        type: string
                                        format: date-time
                                      modified:
                                        type: string
                                        format: date-time
                                      generator:
                                        type: object
                                        required:
                                          - name
                                        properties:
                                          name:
                                            type: string
                                            minLength: 1
                                          version:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      license:
                                        type: string
                                        minLength: 1
                                        default: NativeMindNONC
                                      tags:
                                        type: array
                                        items:
                                          type: string
                                          minLength: 1
                                          maxLength: 64
                                        uniqueItems: true
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  assets:
                                    type: array
                                    items:
                                      description: >-
                                        Media / scene (01b §4.5). External
                                        assets (absolute URI) carry sha256 +
                                        size.
                                      type: object
                                      required:
                                        - id
                                        - src
                                        - type
                                      properties:
                                        id:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        name:
                                          type: string
                                        src:
                                          description: >-
                                            An entry path (see path) or an absolute
                                            URI (`https:`, `http:`, `file:`, `ndi:`,
                                            `srt:` …).
                                          anyOf:
                                            - description: >-
                                                Entry path inside the container:
                                                relative, `/`-separated, no `..`
                                                segment, no backslash, no NUL.
                                              type: string
                                              minLength: 1
                                              maxLength: 1024
                                              pattern: >-
                                                ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                            - type: string
                                              format: uri
                                              pattern: '^[A-Za-z][A-Za-z0-9+.-]*:'
                                        sha256:
                                          description: Lowercase hex SHA-256 digest.
                                          type: string
                                          pattern: ^[0-9a-f]{64}$
                                        size:
                                          type: integer
                                          minimum: 0
                                        type:
                                          anyOf:
                                            - enum:
                                                - video
                                                - image
                                                - audio
                                                - zelim
                                                - boranko
                                                - comics
                                                - realtime
                                                - stream
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        mapping:
                                          description: >-
                                            Content mapping onto the dome (01b §4.5,
                                            02b §4.4).
                                          type: object
                                          required:
                                            - projection
                                          properties:
                                            projection:
                                              anyOf:
                                                - enum:
                                                    - domemaster
                                                    - equirect
                                                    - cubemap
                                                    - flat
                                                    - pyramid_views
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            fov:
                                              type: number
                                              exclusiveMinimum: 0
                                              maximum: 360
                                              description: ° (domemaster 180–230)
                                            tilt:
                                              type: number
                                              minimum: -90
                                              maximum: 90
                                            azimuth:
                                              type: number
                                              minimum: -360
                                              maximum: 360
                                              description: 'flat: ° centre azimuth'
                                            elevation:
                                              type: number
                                              minimum: -90
                                              maximum: 90
                                              description: 'flat: ° centre elevation'
                                            width:
                                              type: number
                                              exclusiveMinimum: 0
                                              maximum: 360
                                              description: 'flat: ° angular width'
                                            faces:
                                              enum:
                                                - 3
                                                - 4
                                                - 6
                                              description: '1.1 pyramid_views: number of views'
                                            layout:
                                              description: >-
                                                1.1: cubemap 3x2 | 6x1 | cross;
                                                pyramid_views cross | row | grid
                                              anyOf:
                                                - enum:
                                                    - 3x2
                                                    - 6x1
                                                    - cross
                                                    - row
                                                    - grid
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                          if:
                                            properties:
                                              projection:
                                                const: pyramid_views
                                            required:
                                              - projection
                                          then:
                                            required:
                                              - faces
                                        video:
                                          type: object
                                          properties:
                                            resolution:
                                              type: array
                                              items:
                                                type: integer
                                                minimum: 1
                                              minItems: 2
                                              maxItems: 2
                                              description: '[width, height] or [cols, rows].'
                                            fps:
                                              type: number
                                              exclusiveMinimum: 0
                                            codec:
                                              anyOf:
                                                - enum:
                                                    - hap
                                                    - hap-q
                                                    - hap-alpha
                                                    - h264
                                                    - h265
                                                    - av1
                                                    - vp9
                                                    - prores
                                                    - png-sequence
                                                    - exr-sequence
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            stereo:
                                              oneOf:
                                                - type: 'null'
                                                - enum:
                                                    - top-bottom
                                                    - side-by-side
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        audio:
                                          type: object
                                          required:
                                            - kind
                                          properties:
                                            kind:
                                              anyOf:
                                                - enum:
                                                    - ambisonic
                                                    - channels
                                                    - stereo
                                                    - mono
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            order:
                                              type: integer
                                              minimum: 0
                                              maximum: 7
                                            layout:
                                              type: string
                                              minLength: 1
                                              description: 'channels: e.g. 5.1, 7.1, 7.1.4'
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        duration:
                                          type: number
                                          minimum: 0
                                        thumbnail:
                                          description: >-
                                            Entry path inside the container:
                                            relative, `/`-separated, no `..`
                                            segment, no backslash, no NUL.
                                          type: string
                                          minLength: 1
                                          maxLength: 1024
                                          pattern: >-
                                            ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                        zelim:
                                          description: >-
                                            1.1: hint for type zelim (project = JSON
                                            variant J, binary = variant B); content
                                            sniffing wins. A J project may carry
                                            quantum.scene (02e §9.3).
                                          type: object
                                          properties:
                                            variant:
                                              anyOf:
                                                - enum:
                                                    - project
                                                    - binary
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                      if:
                                        properties:
                                          src:
                                            type: string
                                            pattern: '^(?!asset:)[A-Za-z][A-Za-z0-9+.-]*:'
                                            description: >-
                                              absolute URI other than `asset:<id>` (an
                                              asset stored on the server: sha256 /
                                              size known there)
                                        required:
                                          - src
                                      then:
                                        if:
                                          properties:
                                            type:
                                              const: stream
                                          required:
                                            - type
                                        else:
                                          required:
                                            - sha256
                                            - size
                                  show:
                                    description: >-
                                      Playlists, timelines, matrix, cues,
                                      triggers, startup (01b §4.6).
                                    type: object
                                    properties:
                                      playlists:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - id
                                            - items
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            name:
                                              type: string
                                            loop:
                                              type: boolean
                                            items:
                                              type: array
                                              items:
                                                type: object
                                                required:
                                                  - asset
                                                properties:
                                                  asset:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  in:
                                                    type: number
                                                    minimum: 0
                                                  out:
                                                    type: number
                                                    minimum: 0
                                                  loop:
                                                    type: boolean
                                                  transition:
                                                    type: object
                                                    required:
                                                      - kind
                                                    properties:
                                                      kind:
                                                        anyOf:
                                                          - enum:
                                                              - cut
                                                              - fade
                                                              - dissolve
                                                              - wipe
                                                          - description: >-
                                                              Value of an open enum: one of the listed
                                                              values or any other token (clients
                                                              tolerate unknown values).
                                                            type: string
                                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                      duration:
                                                        type: number
                                                        minimum: 0
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                                description: >-
                                                  x-screenberry: Screenberry item fields
                                                  without a .dome equivalent, round-trip
                                                  only (02d MD8).
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      timelines:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - id
                                            - tracks
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            name:
                                              type: string
                                            duration:
                                              type: number
                                              minimum: 0
                                            tracks:
                                              type: array
                                              items:
                                                type: object
                                                required:
                                                  - kind
                                                  - clips
                                                properties:
                                                  id:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  kind:
                                                    anyOf:
                                                      - enum:
                                                          - video
                                                          - audio
                                                          - control
                                                      - description: >-
                                                          Value of an open enum: one of the listed
                                                          values or any other token (clients
                                                          tolerate unknown values).
                                                        type: string
                                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                  clips:
                                                    type: array
                                                    items:
                                                      type: object
                                                      required:
                                                        - asset
                                                        - start
                                                      properties:
                                                        asset:
                                                          description: Document-scoped id (02e §3.2).
                                                          type: string
                                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                                          examples:
                                                            - p1
                                                            - intro.mp4
                                                            - cue-01
                                                        start:
                                                          type: number
                                                          minimum: 0
                                                        in:
                                                          type: number
                                                          minimum: 0
                                                        out:
                                                          type: number
                                                          minimum: 0
                                                        gainDb:
                                                          type: number
                                                          minimum: -144
                                                          maximum: 24
                                                        opacity:
                                                          type: number
                                                          minimum: 0
                                                          maximum: 1
                                                      patternProperties:
                                                        ^x-: true
                                                      additionalProperties: false
                                                      description: >-
                                                        x-screenberry: Screenberry item fields
                                                        without a .dome equivalent, round-trip
                                                        only (02d MD8).
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                            markers:
                                              type: array
                                              items:
                                                type: object
                                                required:
                                                  - time
                                                properties:
                                                  time:
                                                    type: number
                                                    minimum: 0
                                                  name:
                                                    type: string
                                                  id:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  kind:
                                                    anyOf:
                                                      - enum:
                                                          - marker
                                                          - pause
                                                          - jump
                                                          - timecode
                                                      - description: >-
                                                          Value of an open enum: one of the listed
                                                          values or any other token (clients
                                                          tolerate unknown values).
                                                        type: string
                                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                            fps:
                                              type: number
                                              exclusiveMinimum: 0
                                              description: 1.1 (02d)
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      matrix:
                                        description: >-
                                          Screenberry-style matrix
                                          (compatibility); cells reference row /
                                          column ids.
                                        type: object
                                        required:
                                          - rows
                                          - columns
                                          - cells
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          rows:
                                            type: array
                                            items:
                                              anyOf:
                                                - description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                - type: object
                                                  required:
                                                    - id
                                                  properties:
                                                    id:
                                                      description: Document-scoped id (02e §3.2).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                                      examples:
                                                        - p1
                                                        - intro.mp4
                                                        - cue-01
                                                    name:
                                                      type: string
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                          columns:
                                            type: array
                                            items:
                                              anyOf:
                                                - description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                - type: object
                                                  required:
                                                    - id
                                                  properties:
                                                    id:
                                                      description: Document-scoped id (02e §3.2).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                                      examples:
                                                        - p1
                                                        - intro.mp4
                                                        - cue-01
                                                    name:
                                                      type: string
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                          cells:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - row
                                                - column
                                                - asset
                                              properties:
                                                row:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                column:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                asset:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      cues:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - id
                                            - actions
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            name:
                                              type: string
                                            at:
                                              oneOf:
                                                - type: object
                                                  required:
                                                    - timeline
                                                    - time
                                                  properties:
                                                    timeline:
                                                      description: Document-scoped id (02e §3.2).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                                      examples:
                                                        - p1
                                                        - intro.mp4
                                                        - cue-01
                                                    time:
                                                      type: number
                                                      minimum: 0
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                                - type: object
                                                  required:
                                                    - trigger
                                                  properties:
                                                    trigger:
                                                      description: Document-scoped id (02e §3.2).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                                      examples:
                                                        - p1
                                                        - intro.mp4
                                                        - cue-01
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                            actions:
                                              type: array
                                              minItems: 1
                                              items:
                                                type: object
                                                required:
                                                  - do
                                                properties:
                                                  do:
                                                    anyOf:
                                                      - enum:
                                                          - play
                                                          - pause
                                                          - stop
                                                          - seek
                                                          - setVolume
                                                          - setBrightness
                                                          - setParameter
                                                          - osc
                                                          - http
                                                          - scenario
                                                      - description: >-
                                                          Value of an open enum: one of the listed
                                                          values or any other token (clients
                                                          tolerate unknown values).
                                                        type: string
                                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                  target:
                                                    type: string
                                                    minLength: 1
                                                    description: >-
                                                      e.g. player id, playlist:<id>, param
                                                      path, osc://host:port/address, URL
                                                  args:
                                                    description: >-
                                                      Action arguments (object or positional
                                                      array).
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                                if:
                                                  properties:
                                                    do:
                                                      const: scenario
                                                  required:
                                                    - do
                                                then:
                                                  required:
                                                    - target
                                                  properties:
                                                    target:
                                                      description: scenario id (02d §4a)
                                                    args:
                                                      type: object
                                                      description: scenario parameters
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      triggers:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - id
                                            - source
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            source:
                                              anyOf:
                                                - enum:
                                                    - osc
                                                    - midi
                                                    - time
                                                    - api
                                                    - dmx
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            match:
                                              description: >-
                                                Source-specific match (OSC address
                                                pattern, MIDI note, cron / time, DMX
                                                channel …).
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      mediaPlayers:
                                        type: array
                                        items:
                                          description: >-
                                            1.1 (02d MD8): named media player.
                                            Player `main` always exists (implicit:
                                            all displays, source = startup).
                                          type: object
                                          required:
                                            - id
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            name:
                                              type: string
                                            target:
                                              description: absent = all displays
                                              type: object
                                              properties:
                                                displays:
                                                  type: array
                                                  items:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  uniqueItems: true
                                                  minItems: 1
                                                layer:
                                                  type: integer
                                                  minimum: 0
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            source:
                                              description: >-
                                                Exactly one of playlist / timeline /
                                                matrix / asset id.
                                              type: object
                                              properties:
                                                playlist:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                timeline:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                matrix:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                asset:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                              minProperties: 1
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                              oneOf:
                                                - required:
                                                    - playlist
                                                - required:
                                                    - timeline
                                                - required:
                                                    - matrix
                                                - required:
                                                    - asset
                                            volume:
                                              type: number
                                              minimum: 0
                                              maximum: 1
                                            brightness:
                                              type: number
                                              minimum: 0
                                              maximum: 1
                                            rotation:
                                              type: number
                                              minimum: -360
                                              maximum: 360
                                              description: ° content rotation about the dome axis
                                            speed:
                                              type: number
                                              exclusiveMinimum: 0
                                              maximum: 16
                                              description: playback rate, 1 = normal
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      startup:
                                        description: >-
                                          Exactly one of playlist / timeline /
                                          matrix / asset id.
                                        type: object
                                        properties:
                                          playlist:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          timeline:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          matrix:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          asset:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                        minProperties: 1
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                        oneOf:
                                          - required:
                                              - playlist
                                          - required:
                                              - timeline
                                          - required:
                                              - matrix
                                          - required:
                                              - asset
                                      audioMode:
                                        description: >-
                                          1.1 (02c AQ4, replaces x-ananta.mode):
                                          audio engines used by the show; absent =
                                          digital.
                                        anyOf:
                                          - enum:
                                              - digital
                                              - hybrid
                                              - combined
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  compat:
                                    description: >-
                                      Declarative mappings for the A6 gateways
                                      (01b §4.7); never required for playback.
                                    type: object
                                    propertyNames:
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
                                    additionalProperties:
                                      type: object
                                patternProperties:
                                  ^x-: true
                            required:
                              - id
                              - revision
                              - meta
                              - assets
                              - show
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              revision:
                                description: >-
                                  Monotonic resource revision; the strong ETag
                                  is derived from it.
                                type: integer
                                minimum: 0
                              status:
                                anyOf:
                                  - enum:
                                      - ready
                                      - incomplete
                                      - invalid
                                  - type: string
                                    pattern: ^[a-z][a-z_-]{0,31}$
                                description: incomplete = referenced assets not ready yet
                              warnings:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - code
                                    - detail
                                  properties:
                                    code:
                                      type: string
                                      pattern: ^[a-z][a-z0-9-]{0,63}$
                                    detail:
                                      type: string
                                    pointer:
                                      type: string
                                  additionalProperties: false
                                description: >-
                                  UC-S6 validation against the active venue
                                  (remapping, missing assets)
                              createdAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            unevaluatedProperties: false
                          body:
                            description: >-
                              Show content shared by GET / PUT / POST: the .dome
                              show sections.
                            type: object
                            properties:
                              meta:
                                type: object
                                required:
                                  - id
                                  - title
                                properties:
                                  id:
                                    description: >-
                                      Stable document id (UUID, lowercase); the
                                      venue / show id on import (02e §3.2).
                                    type: string
                                    pattern: >-
                                      ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                  title:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). Localised text map
                                      {"en":…,"ru":…}, 02e §3.1 (as .dome
                                      meta.title).
                                    title: Localised text
                                    type: object
                                    minProperties: 1
                                    propertyNames:
                                      pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                    additionalProperties:
                                      type: string
                                    examples:
                                      - en: Intro
                                        ru: Вступление
                                    $defs:
                                      textOrI18n:
                                        description: >-
                                          Plain string (treated as `en`) or a
                                          localised map. (map branch = the root
                                          schema, inlined for tools that
                                          mis-handle self references)
                                        anyOf:
                                          - type: string
                                          - type: object
                                            minProperties: 1
                                            propertyNames:
                                              pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                            additionalProperties:
                                              type: string
                                            examples:
                                              - en: Intro
                                                ru: Вступление
                                  description:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). Localised text map
                                      {"en":…,"ru":…}, 02e §3.1 (as .dome
                                      meta.title).
                                    title: Localised text
                                    type: object
                                    minProperties: 1
                                    propertyNames:
                                      pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                    additionalProperties:
                                      type: string
                                    examples:
                                      - en: Intro
                                        ru: Вступление
                                    $defs:
                                      textOrI18n:
                                        description: >-
                                          Plain string (treated as `en`) or a
                                          localised map. (map branch = the root
                                          schema, inlined for tools that
                                          mis-handle self references)
                                        anyOf:
                                          - type: string
                                          - type: object
                                            minProperties: 1
                                            propertyNames:
                                              pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                            additionalProperties:
                                              type: string
                                            examples:
                                              - en: Intro
                                                ru: Вступление
                                  authors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - name
                                      properties:
                                        name:
                                          type: string
                                          minLength: 1
                                        email:
                                          type: string
                                          format: email
                                        url:
                                          type: string
                                          format: uri
                                        role:
                                          type: string
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                  created:
                                    type: string
                                    format: date-time
                                  modified:
                                    type: string
                                    format: date-time
                                  generator:
                                    type: object
                                    required:
                                      - name
                                    properties:
                                      name:
                                        type: string
                                        minLength: 1
                                      version:
                                        type: string
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  license:
                                    type: string
                                    minLength: 1
                                    default: NativeMindNONC
                                  tags:
                                    type: array
                                    items:
                                      type: string
                                      minLength: 1
                                      maxLength: 64
                                    uniqueItems: true
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                              assets:
                                type: array
                                items:
                                  description: >-
                                    Media / scene (01b §4.5). External assets
                                    (absolute URI) carry sha256 + size.
                                  type: object
                                  required:
                                    - id
                                    - src
                                    - type
                                  properties:
                                    id:
                                      description: Document-scoped id (02e §3.2).
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    name:
                                      type: string
                                    src:
                                      description: >-
                                        An entry path (see path) or an absolute
                                        URI (`https:`, `http:`, `file:`, `ndi:`,
                                        `srt:` …).
                                      anyOf:
                                        - description: >-
                                            Entry path inside the container:
                                            relative, `/`-separated, no `..`
                                            segment, no backslash, no NUL.
                                          type: string
                                          minLength: 1
                                          maxLength: 1024
                                          pattern: >-
                                            ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                        - type: string
                                          format: uri
                                          pattern: '^[A-Za-z][A-Za-z0-9+.-]*:'
                                    sha256:
                                      description: Lowercase hex SHA-256 digest.
                                      type: string
                                      pattern: ^[0-9a-f]{64}$
                                    size:
                                      type: integer
                                      minimum: 0
                                    type:
                                      anyOf:
                                        - enum:
                                            - video
                                            - image
                                            - audio
                                            - zelim
                                            - boranko
                                            - comics
                                            - realtime
                                            - stream
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    mapping:
                                      description: >-
                                        Content mapping onto the dome (01b §4.5,
                                        02b §4.4).
                                      type: object
                                      required:
                                        - projection
                                      properties:
                                        projection:
                                          anyOf:
                                            - enum:
                                                - domemaster
                                                - equirect
                                                - cubemap
                                                - flat
                                                - pyramid_views
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        fov:
                                          type: number
                                          exclusiveMinimum: 0
                                          maximum: 360
                                          description: ° (domemaster 180–230)
                                        tilt:
                                          type: number
                                          minimum: -90
                                          maximum: 90
                                        azimuth:
                                          type: number
                                          minimum: -360
                                          maximum: 360
                                          description: 'flat: ° centre azimuth'
                                        elevation:
                                          type: number
                                          minimum: -90
                                          maximum: 90
                                          description: 'flat: ° centre elevation'
                                        width:
                                          type: number
                                          exclusiveMinimum: 0
                                          maximum: 360
                                          description: 'flat: ° angular width'
                                        faces:
                                          enum:
                                            - 3
                                            - 4
                                            - 6
                                          description: '1.1 pyramid_views: number of views'
                                        layout:
                                          description: >-
                                            1.1: cubemap 3x2 | 6x1 | cross;
                                            pyramid_views cross | row | grid
                                          anyOf:
                                            - enum:
                                                - 3x2
                                                - 6x1
                                                - cross
                                                - row
                                                - grid
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                      if:
                                        properties:
                                          projection:
                                            const: pyramid_views
                                        required:
                                          - projection
                                      then:
                                        required:
                                          - faces
                                    video:
                                      type: object
                                      properties:
                                        resolution:
                                          type: array
                                          items:
                                            type: integer
                                            minimum: 1
                                          minItems: 2
                                          maxItems: 2
                                          description: '[width, height] or [cols, rows].'
                                        fps:
                                          type: number
                                          exclusiveMinimum: 0
                                        codec:
                                          anyOf:
                                            - enum:
                                                - hap
                                                - hap-q
                                                - hap-alpha
                                                - h264
                                                - h265
                                                - av1
                                                - vp9
                                                - prores
                                                - png-sequence
                                                - exr-sequence
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        stereo:
                                          oneOf:
                                            - type: 'null'
                                            - enum:
                                                - top-bottom
                                                - side-by-side
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    audio:
                                      type: object
                                      required:
                                        - kind
                                      properties:
                                        kind:
                                          anyOf:
                                            - enum:
                                                - ambisonic
                                                - channels
                                                - stereo
                                                - mono
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        order:
                                          type: integer
                                          minimum: 0
                                          maximum: 7
                                        layout:
                                          type: string
                                          minLength: 1
                                          description: 'channels: e.g. 5.1, 7.1, 7.1.4'
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    duration:
                                      type: number
                                      minimum: 0
                                    thumbnail:
                                      description: >-
                                        Entry path inside the container:
                                        relative, `/`-separated, no `..`
                                        segment, no backslash, no NUL.
                                      type: string
                                      minLength: 1
                                      maxLength: 1024
                                      pattern: >-
                                        ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                    zelim:
                                      description: >-
                                        1.1: hint for type zelim (project = JSON
                                        variant J, binary = variant B); content
                                        sniffing wins. A J project may carry
                                        quantum.scene (02e §9.3).
                                      type: object
                                      properties:
                                        variant:
                                          anyOf:
                                            - enum:
                                                - project
                                                - binary
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                  if:
                                    properties:
                                      src:
                                        type: string
                                        pattern: '^(?!asset:)[A-Za-z][A-Za-z0-9+.-]*:'
                                        description: >-
                                          absolute URI other than `asset:<id>` (an
                                          asset stored on the server: sha256 /
                                          size known there)
                                    required:
                                      - src
                                  then:
                                    if:
                                      properties:
                                        type:
                                          const: stream
                                      required:
                                        - type
                                    else:
                                      required:
                                        - sha256
                                        - size
                              show:
                                description: >-
                                  Playlists, timelines, matrix, cues, triggers,
                                  startup (01b §4.6).
                                type: object
                                properties:
                                  playlists:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - id
                                        - items
                                      properties:
                                        id:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        name:
                                          type: string
                                        loop:
                                          type: boolean
                                        items:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - asset
                                            properties:
                                              asset:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              in:
                                                type: number
                                                minimum: 0
                                              out:
                                                type: number
                                                minimum: 0
                                              loop:
                                                type: boolean
                                              transition:
                                                type: object
                                                required:
                                                  - kind
                                                properties:
                                                  kind:
                                                    anyOf:
                                                      - enum:
                                                          - cut
                                                          - fade
                                                          - dissolve
                                                          - wipe
                                                      - description: >-
                                                          Value of an open enum: one of the listed
                                                          values or any other token (clients
                                                          tolerate unknown values).
                                                        type: string
                                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                  duration:
                                                    type: number
                                                    minimum: 0
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                            description: >-
                                              x-screenberry: Screenberry item fields
                                              without a .dome equivalent, round-trip
                                              only (02d MD8).
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                  timelines:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - id
                                        - tracks
                                      properties:
                                        id:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        name:
                                          type: string
                                        duration:
                                          type: number
                                          minimum: 0
                                        tracks:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - kind
                                              - clips
                                            properties:
                                              id:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              kind:
                                                anyOf:
                                                  - enum:
                                                      - video
                                                      - audio
                                                      - control
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              clips:
                                                type: array
                                                items:
                                                  type: object
                                                  required:
                                                    - asset
                                                    - start
                                                  properties:
                                                    asset:
                                                      description: Document-scoped id (02e §3.2).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                                      examples:
                                                        - p1
                                                        - intro.mp4
                                                        - cue-01
                                                    start:
                                                      type: number
                                                      minimum: 0
                                                    in:
                                                      type: number
                                                      minimum: 0
                                                    out:
                                                      type: number
                                                      minimum: 0
                                                    gainDb:
                                                      type: number
                                                      minimum: -144
                                                      maximum: 24
                                                    opacity:
                                                      type: number
                                                      minimum: 0
                                                      maximum: 1
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                                  description: >-
                                                    x-screenberry: Screenberry item fields
                                                    without a .dome equivalent, round-trip
                                                    only (02d MD8).
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        markers:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - time
                                            properties:
                                              time:
                                                type: number
                                                minimum: 0
                                              name:
                                                type: string
                                              id:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              kind:
                                                anyOf:
                                                  - enum:
                                                      - marker
                                                      - pause
                                                      - jump
                                                      - timecode
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        fps:
                                          type: number
                                          exclusiveMinimum: 0
                                          description: 1.1 (02d)
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                  matrix:
                                    description: >-
                                      Screenberry-style matrix (compatibility);
                                      cells reference row / column ids.
                                    type: object
                                    required:
                                      - rows
                                      - columns
                                      - cells
                                    properties:
                                      id:
                                        description: Document-scoped id (02e §3.2).
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      rows:
                                        type: array
                                        items:
                                          anyOf:
                                            - description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            - type: object
                                              required:
                                                - id
                                              properties:
                                                id:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                name:
                                                  type: string
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                      columns:
                                        type: array
                                        items:
                                          anyOf:
                                            - description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            - type: object
                                              required:
                                                - id
                                              properties:
                                                id:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                name:
                                                  type: string
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                      cells:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - row
                                            - column
                                            - asset
                                          properties:
                                            row:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            column:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            asset:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  cues:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - id
                                        - actions
                                      properties:
                                        id:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        name:
                                          type: string
                                        at:
                                          oneOf:
                                            - type: object
                                              required:
                                                - timeline
                                                - time
                                              properties:
                                                timeline:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                time:
                                                  type: number
                                                  minimum: 0
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            - type: object
                                              required:
                                                - trigger
                                              properties:
                                                trigger:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                        actions:
                                          type: array
                                          minItems: 1
                                          items:
                                            type: object
                                            required:
                                              - do
                                            properties:
                                              do:
                                                anyOf:
                                                  - enum:
                                                      - play
                                                      - pause
                                                      - stop
                                                      - seek
                                                      - setVolume
                                                      - setBrightness
                                                      - setParameter
                                                      - osc
                                                      - http
                                                      - scenario
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              target:
                                                type: string
                                                minLength: 1
                                                description: >-
                                                  e.g. player id, playlist:<id>, param
                                                  path, osc://host:port/address, URL
                                              args:
                                                description: >-
                                                  Action arguments (object or positional
                                                  array).
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                            if:
                                              properties:
                                                do:
                                                  const: scenario
                                              required:
                                                - do
                                            then:
                                              required:
                                                - target
                                              properties:
                                                target:
                                                  description: scenario id (02d §4a)
                                                args:
                                                  type: object
                                                  description: scenario parameters
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                  triggers:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - id
                                        - source
                                      properties:
                                        id:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        source:
                                          anyOf:
                                            - enum:
                                                - osc
                                                - midi
                                                - time
                                                - api
                                                - dmx
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        match:
                                          description: >-
                                            Source-specific match (OSC address
                                            pattern, MIDI note, cron / time, DMX
                                            channel …).
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                  mediaPlayers:
                                    type: array
                                    items:
                                      description: >-
                                        1.1 (02d MD8): named media player.
                                        Player `main` always exists (implicit:
                                        all displays, source = startup).
                                      type: object
                                      required:
                                        - id
                                      properties:
                                        id:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        name:
                                          type: string
                                        target:
                                          description: absent = all displays
                                          type: object
                                          properties:
                                            displays:
                                              type: array
                                              items:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              uniqueItems: true
                                              minItems: 1
                                            layer:
                                              type: integer
                                              minimum: 0
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        source:
                                          description: >-
                                            Exactly one of playlist / timeline /
                                            matrix / asset id.
                                          type: object
                                          properties:
                                            playlist:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            timeline:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            matrix:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            asset:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                          minProperties: 1
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                          oneOf:
                                            - required:
                                                - playlist
                                            - required:
                                                - timeline
                                            - required:
                                                - matrix
                                            - required:
                                                - asset
                                        volume:
                                          type: number
                                          minimum: 0
                                          maximum: 1
                                        brightness:
                                          type: number
                                          minimum: 0
                                          maximum: 1
                                        rotation:
                                          type: number
                                          minimum: -360
                                          maximum: 360
                                          description: ° content rotation about the dome axis
                                        speed:
                                          type: number
                                          exclusiveMinimum: 0
                                          maximum: 16
                                          description: playback rate, 1 = normal
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                  startup:
                                    description: >-
                                      Exactly one of playlist / timeline /
                                      matrix / asset id.
                                    type: object
                                    properties:
                                      playlist:
                                        description: Document-scoped id (02e §3.2).
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      timeline:
                                        description: Document-scoped id (02e §3.2).
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      matrix:
                                        description: Document-scoped id (02e §3.2).
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      asset:
                                        description: Document-scoped id (02e §3.2).
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                    minProperties: 1
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                    oneOf:
                                      - required:
                                          - playlist
                                      - required:
                                          - timeline
                                      - required:
                                          - matrix
                                      - required:
                                          - asset
                                  audioMode:
                                    description: >-
                                      1.1 (02c AQ4, replaces x-ananta.mode):
                                      audio engines used by the show; absent =
                                      digital.
                                    anyOf:
                                      - enum:
                                          - digital
                                          - hybrid
                                          - combined
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                              compat:
                                description: >-
                                  Declarative mappings for the A6 gateways (01b
                                  §4.7); never required for playback.
                                type: object
                                propertyNames:
                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
                                additionalProperties:
                                  type: object
                            patternProperties:
                              ^x-: true
                          input:
                            description: >-
                              POST /shows and PUT /shows/{showId} body. Assets
                              are referenced by .dome asset entries; an entry
                              whose `src` is `asset:<assetId>` points to an
                              asset already stored on the server.
                            type: object
                            allOf:
                              - description: >-
                                  Show content shared by GET / PUT / POST: the
                                  .dome show sections.
                                type: object
                                properties:
                                  meta:
                                    type: object
                                    required:
                                      - id
                                      - title
                                    properties:
                                      id:
                                        description: >-
                                          Stable document id (UUID, lowercase);
                                          the venue / show id on import (02e
                                          §3.2).
                                        type: string
                                        pattern: >-
                                          ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                      title:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). Localised text map
                                          {"en":…,"ru":…}, 02e §3.1 (as .dome
                                          meta.title).
                                        title: Localised text
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                                        $defs:
                                          textOrI18n:
                                            description: >-
                                              Plain string (treated as `en`) or a
                                              localised map. (map branch = the root
                                              schema, inlined for tools that
                                              mis-handle self references)
                                            anyOf:
                                              - type: string
                                              - type: object
                                                minProperties: 1
                                                propertyNames:
                                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                additionalProperties:
                                                  type: string
                                                examples:
                                                  - en: Intro
                                                    ru: Вступление
                                      description:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). Localised text map
                                          {"en":…,"ru":…}, 02e §3.1 (as .dome
                                          meta.title).
                                        title: Localised text
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                                        $defs:
                                          textOrI18n:
                                            description: >-
                                              Plain string (treated as `en`) or a
                                              localised map. (map branch = the root
                                              schema, inlined for tools that
                                              mis-handle self references)
                                            anyOf:
                                              - type: string
                                              - type: object
                                                minProperties: 1
                                                propertyNames:
                                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                additionalProperties:
                                                  type: string
                                                examples:
                                                  - en: Intro
                                                    ru: Вступление
                                      authors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - name
                                          properties:
                                            name:
                                              type: string
                                              minLength: 1
                                            email:
                                              type: string
                                              format: email
                                            url:
                                              type: string
                                              format: uri
                                            role:
                                              type: string
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      created:
                                        type: string
                                        format: date-time
                                      modified:
                                        type: string
                                        format: date-time
                                      generator:
                                        type: object
                                        required:
                                          - name
                                        properties:
                                          name:
                                            type: string
                                            minLength: 1
                                          version:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      license:
                                        type: string
                                        minLength: 1
                                        default: NativeMindNONC
                                      tags:
                                        type: array
                                        items:
                                          type: string
                                          minLength: 1
                                          maxLength: 64
                                        uniqueItems: true
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  assets:
                                    type: array
                                    items:
                                      description: >-
                                        Media / scene (01b §4.5). External
                                        assets (absolute URI) carry sha256 +
                                        size.
                                      type: object
                                      required:
                                        - id
                                        - src
                                        - type
                                      properties:
                                        id:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        name:
                                          type: string
                                        src:
                                          description: >-
                                            An entry path (see path) or an absolute
                                            URI (`https:`, `http:`, `file:`, `ndi:`,
                                            `srt:` …).
                                          anyOf:
                                            - description: >-
                                                Entry path inside the container:
                                                relative, `/`-separated, no `..`
                                                segment, no backslash, no NUL.
                                              type: string
                                              minLength: 1
                                              maxLength: 1024
                                              pattern: >-
                                                ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                            - type: string
                                              format: uri
                                              pattern: '^[A-Za-z][A-Za-z0-9+.-]*:'
                                        sha256:
                                          description: Lowercase hex SHA-256 digest.
                                          type: string
                                          pattern: ^[0-9a-f]{64}$
                                        size:
                                          type: integer
                                          minimum: 0
                                        type:
                                          anyOf:
                                            - enum:
                                                - video
                                                - image
                                                - audio
                                                - zelim
                                                - boranko
                                                - comics
                                                - realtime
                                                - stream
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        mapping:
                                          description: >-
                                            Content mapping onto the dome (01b §4.5,
                                            02b §4.4).
                                          type: object
                                          required:
                                            - projection
                                          properties:
                                            projection:
                                              anyOf:
                                                - enum:
                                                    - domemaster
                                                    - equirect
                                                    - cubemap
                                                    - flat
                                                    - pyramid_views
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            fov:
                                              type: number
                                              exclusiveMinimum: 0
                                              maximum: 360
                                              description: ° (domemaster 180–230)
                                            tilt:
                                              type: number
                                              minimum: -90
                                              maximum: 90
                                            azimuth:
                                              type: number
                                              minimum: -360
                                              maximum: 360
                                              description: 'flat: ° centre azimuth'
                                            elevation:
                                              type: number
                                              minimum: -90
                                              maximum: 90
                                              description: 'flat: ° centre elevation'
                                            width:
                                              type: number
                                              exclusiveMinimum: 0
                                              maximum: 360
                                              description: 'flat: ° angular width'
                                            faces:
                                              enum:
                                                - 3
                                                - 4
                                                - 6
                                              description: '1.1 pyramid_views: number of views'
                                            layout:
                                              description: >-
                                                1.1: cubemap 3x2 | 6x1 | cross;
                                                pyramid_views cross | row | grid
                                              anyOf:
                                                - enum:
                                                    - 3x2
                                                    - 6x1
                                                    - cross
                                                    - row
                                                    - grid
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                          if:
                                            properties:
                                              projection:
                                                const: pyramid_views
                                            required:
                                              - projection
                                          then:
                                            required:
                                              - faces
                                        video:
                                          type: object
                                          properties:
                                            resolution:
                                              type: array
                                              items:
                                                type: integer
                                                minimum: 1
                                              minItems: 2
                                              maxItems: 2
                                              description: '[width, height] or [cols, rows].'
                                            fps:
                                              type: number
                                              exclusiveMinimum: 0
                                            codec:
                                              anyOf:
                                                - enum:
                                                    - hap
                                                    - hap-q
                                                    - hap-alpha
                                                    - h264
                                                    - h265
                                                    - av1
                                                    - vp9
                                                    - prores
                                                    - png-sequence
                                                    - exr-sequence
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            stereo:
                                              oneOf:
                                                - type: 'null'
                                                - enum:
                                                    - top-bottom
                                                    - side-by-side
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        audio:
                                          type: object
                                          required:
                                            - kind
                                          properties:
                                            kind:
                                              anyOf:
                                                - enum:
                                                    - ambisonic
                                                    - channels
                                                    - stereo
                                                    - mono
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            order:
                                              type: integer
                                              minimum: 0
                                              maximum: 7
                                            layout:
                                              type: string
                                              minLength: 1
                                              description: 'channels: e.g. 5.1, 7.1, 7.1.4'
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        duration:
                                          type: number
                                          minimum: 0
                                        thumbnail:
                                          description: >-
                                            Entry path inside the container:
                                            relative, `/`-separated, no `..`
                                            segment, no backslash, no NUL.
                                          type: string
                                          minLength: 1
                                          maxLength: 1024
                                          pattern: >-
                                            ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                        zelim:
                                          description: >-
                                            1.1: hint for type zelim (project = JSON
                                            variant J, binary = variant B); content
                                            sniffing wins. A J project may carry
                                            quantum.scene (02e §9.3).
                                          type: object
                                          properties:
                                            variant:
                                              anyOf:
                                                - enum:
                                                    - project
                                                    - binary
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                      if:
                                        properties:
                                          src:
                                            type: string
                                            pattern: '^(?!asset:)[A-Za-z][A-Za-z0-9+.-]*:'
                                            description: >-
                                              absolute URI other than `asset:<id>` (an
                                              asset stored on the server: sha256 /
                                              size known there)
                                        required:
                                          - src
                                      then:
                                        if:
                                          properties:
                                            type:
                                              const: stream
                                          required:
                                            - type
                                        else:
                                          required:
                                            - sha256
                                            - size
                                  show:
                                    description: >-
                                      Playlists, timelines, matrix, cues,
                                      triggers, startup (01b §4.6).
                                    type: object
                                    properties:
                                      playlists:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - id
                                            - items
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            name:
                                              type: string
                                            loop:
                                              type: boolean
                                            items:
                                              type: array
                                              items:
                                                type: object
                                                required:
                                                  - asset
                                                properties:
                                                  asset:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  in:
                                                    type: number
                                                    minimum: 0
                                                  out:
                                                    type: number
                                                    minimum: 0
                                                  loop:
                                                    type: boolean
                                                  transition:
                                                    type: object
                                                    required:
                                                      - kind
                                                    properties:
                                                      kind:
                                                        anyOf:
                                                          - enum:
                                                              - cut
                                                              - fade
                                                              - dissolve
                                                              - wipe
                                                          - description: >-
                                                              Value of an open enum: one of the listed
                                                              values or any other token (clients
                                                              tolerate unknown values).
                                                            type: string
                                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                      duration:
                                                        type: number
                                                        minimum: 0
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                                description: >-
                                                  x-screenberry: Screenberry item fields
                                                  without a .dome equivalent, round-trip
                                                  only (02d MD8).
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      timelines:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - id
                                            - tracks
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            name:
                                              type: string
                                            duration:
                                              type: number
                                              minimum: 0
                                            tracks:
                                              type: array
                                              items:
                                                type: object
                                                required:
                                                  - kind
                                                  - clips
                                                properties:
                                                  id:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  kind:
                                                    anyOf:
                                                      - enum:
                                                          - video
                                                          - audio
                                                          - control
                                                      - description: >-
                                                          Value of an open enum: one of the listed
                                                          values or any other token (clients
                                                          tolerate unknown values).
                                                        type: string
                                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                  clips:
                                                    type: array
                                                    items:
                                                      type: object
                                                      required:
                                                        - asset
                                                        - start
                                                      properties:
                                                        asset:
                                                          description: Document-scoped id (02e §3.2).
                                                          type: string
                                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                                          examples:
                                                            - p1
                                                            - intro.mp4
                                                            - cue-01
                                                        start:
                                                          type: number
                                                          minimum: 0
                                                        in:
                                                          type: number
                                                          minimum: 0
                                                        out:
                                                          type: number
                                                          minimum: 0
                                                        gainDb:
                                                          type: number
                                                          minimum: -144
                                                          maximum: 24
                                                        opacity:
                                                          type: number
                                                          minimum: 0
                                                          maximum: 1
                                                      patternProperties:
                                                        ^x-: true
                                                      additionalProperties: false
                                                      description: >-
                                                        x-screenberry: Screenberry item fields
                                                        without a .dome equivalent, round-trip
                                                        only (02d MD8).
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                            markers:
                                              type: array
                                              items:
                                                type: object
                                                required:
                                                  - time
                                                properties:
                                                  time:
                                                    type: number
                                                    minimum: 0
                                                  name:
                                                    type: string
                                                  id:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  kind:
                                                    anyOf:
                                                      - enum:
                                                          - marker
                                                          - pause
                                                          - jump
                                                          - timecode
                                                      - description: >-
                                                          Value of an open enum: one of the listed
                                                          values or any other token (clients
                                                          tolerate unknown values).
                                                        type: string
                                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                            fps:
                                              type: number
                                              exclusiveMinimum: 0
                                              description: 1.1 (02d)
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      matrix:
                                        description: >-
                                          Screenberry-style matrix
                                          (compatibility); cells reference row /
                                          column ids.
                                        type: object
                                        required:
                                          - rows
                                          - columns
                                          - cells
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          rows:
                                            type: array
                                            items:
                                              anyOf:
                                                - description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                - type: object
                                                  required:
                                                    - id
                                                  properties:
                                                    id:
                                                      description: Document-scoped id (02e §3.2).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                                      examples:
                                                        - p1
                                                        - intro.mp4
                                                        - cue-01
                                                    name:
                                                      type: string
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                          columns:
                                            type: array
                                            items:
                                              anyOf:
                                                - description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                - type: object
                                                  required:
                                                    - id
                                                  properties:
                                                    id:
                                                      description: Document-scoped id (02e §3.2).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                                      examples:
                                                        - p1
                                                        - intro.mp4
                                                        - cue-01
                                                    name:
                                                      type: string
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                          cells:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - row
                                                - column
                                                - asset
                                              properties:
                                                row:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                column:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                asset:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      cues:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - id
                                            - actions
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            name:
                                              type: string
                                            at:
                                              oneOf:
                                                - type: object
                                                  required:
                                                    - timeline
                                                    - time
                                                  properties:
                                                    timeline:
                                                      description: Document-scoped id (02e §3.2).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                                      examples:
                                                        - p1
                                                        - intro.mp4
                                                        - cue-01
                                                    time:
                                                      type: number
                                                      minimum: 0
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                                - type: object
                                                  required:
                                                    - trigger
                                                  properties:
                                                    trigger:
                                                      description: Document-scoped id (02e §3.2).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                                      examples:
                                                        - p1
                                                        - intro.mp4
                                                        - cue-01
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                            actions:
                                              type: array
                                              minItems: 1
                                              items:
                                                type: object
                                                required:
                                                  - do
                                                properties:
                                                  do:
                                                    anyOf:
                                                      - enum:
                                                          - play
                                                          - pause
                                                          - stop
                                                          - seek
                                                          - setVolume
                                                          - setBrightness
                                                          - setParameter
                                                          - osc
                                                          - http
                                                          - scenario
                                                      - description: >-
                                                          Value of an open enum: one of the listed
                                                          values or any other token (clients
                                                          tolerate unknown values).
                                                        type: string
                                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                  target:
                                                    type: string
                                                    minLength: 1
                                                    description: >-
                                                      e.g. player id, playlist:<id>, param
                                                      path, osc://host:port/address, URL
                                                  args:
                                                    description: >-
                                                      Action arguments (object or positional
                                                      array).
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                                if:
                                                  properties:
                                                    do:
                                                      const: scenario
                                                  required:
                                                    - do
                                                then:
                                                  required:
                                                    - target
                                                  properties:
                                                    target:
                                                      description: scenario id (02d §4a)
                                                    args:
                                                      type: object
                                                      description: scenario parameters
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      triggers:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - id
                                            - source
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            source:
                                              anyOf:
                                                - enum:
                                                    - osc
                                                    - midi
                                                    - time
                                                    - api
                                                    - dmx
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            match:
                                              description: >-
                                                Source-specific match (OSC address
                                                pattern, MIDI note, cron / time, DMX
                                                channel …).
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      mediaPlayers:
                                        type: array
                                        items:
                                          description: >-
                                            1.1 (02d MD8): named media player.
                                            Player `main` always exists (implicit:
                                            all displays, source = startup).
                                          type: object
                                          required:
                                            - id
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            name:
                                              type: string
                                            target:
                                              description: absent = all displays
                                              type: object
                                              properties:
                                                displays:
                                                  type: array
                                                  items:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  uniqueItems: true
                                                  minItems: 1
                                                layer:
                                                  type: integer
                                                  minimum: 0
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            source:
                                              description: >-
                                                Exactly one of playlist / timeline /
                                                matrix / asset id.
                                              type: object
                                              properties:
                                                playlist:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                timeline:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                matrix:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                asset:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                              minProperties: 1
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                              oneOf:
                                                - required:
                                                    - playlist
                                                - required:
                                                    - timeline
                                                - required:
                                                    - matrix
                                                - required:
                                                    - asset
                                            volume:
                                              type: number
                                              minimum: 0
                                              maximum: 1
                                            brightness:
                                              type: number
                                              minimum: 0
                                              maximum: 1
                                            rotation:
                                              type: number
                                              minimum: -360
                                              maximum: 360
                                              description: ° content rotation about the dome axis
                                            speed:
                                              type: number
                                              exclusiveMinimum: 0
                                              maximum: 16
                                              description: playback rate, 1 = normal
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      startup:
                                        description: >-
                                          Exactly one of playlist / timeline /
                                          matrix / asset id.
                                        type: object
                                        properties:
                                          playlist:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          timeline:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          matrix:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          asset:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                        minProperties: 1
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                        oneOf:
                                          - required:
                                              - playlist
                                          - required:
                                              - timeline
                                          - required:
                                              - matrix
                                          - required:
                                              - asset
                                      audioMode:
                                        description: >-
                                          1.1 (02c AQ4, replaces x-ananta.mode):
                                          audio engines used by the show; absent =
                                          digital.
                                        anyOf:
                                          - enum:
                                              - digital
                                              - hybrid
                                              - combined
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  compat:
                                    description: >-
                                      Declarative mappings for the A6 gateways
                                      (01b §4.7); never required for playback.
                                    type: object
                                    propertyNames:
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
                                    additionalProperties:
                                      type: object
                                patternProperties:
                                  ^x-: true
                            required:
                              - meta
                              - assets
                              - show
                            unevaluatedProperties: false
                          patch:
                            description: >-
                              PATCH /shows/{showId}
                              (application/merge-patch+json): any subset of the
                              sections; arrays are replaced whole (RFC 7396).
                            type: object
                            minProperties: 1
                            properties:
                              meta:
                                type: object
                              assets:
                                type: array
                                items:
                                  description: >-
                                    Media / scene (01b §4.5). External assets
                                    (absolute URI) carry sha256 + size.
                                  type: object
                                  required:
                                    - id
                                    - src
                                    - type
                                  properties:
                                    id:
                                      description: Document-scoped id (02e §3.2).
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    name:
                                      type: string
                                    src:
                                      description: >-
                                        An entry path (see path) or an absolute
                                        URI (`https:`, `http:`, `file:`, `ndi:`,
                                        `srt:` …).
                                      anyOf:
                                        - description: >-
                                            Entry path inside the container:
                                            relative, `/`-separated, no `..`
                                            segment, no backslash, no NUL.
                                          type: string
                                          minLength: 1
                                          maxLength: 1024
                                          pattern: >-
                                            ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                        - type: string
                                          format: uri
                                          pattern: '^[A-Za-z][A-Za-z0-9+.-]*:'
                                    sha256:
                                      description: Lowercase hex SHA-256 digest.
                                      type: string
                                      pattern: ^[0-9a-f]{64}$
                                    size:
                                      type: integer
                                      minimum: 0
                                    type:
                                      anyOf:
                                        - enum:
                                            - video
                                            - image
                                            - audio
                                            - zelim
                                            - boranko
                                            - comics
                                            - realtime
                                            - stream
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    mapping:
                                      description: >-
                                        Content mapping onto the dome (01b §4.5,
                                        02b §4.4).
                                      type: object
                                      required:
                                        - projection
                                      properties:
                                        projection:
                                          anyOf:
                                            - enum:
                                                - domemaster
                                                - equirect
                                                - cubemap
                                                - flat
                                                - pyramid_views
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        fov:
                                          type: number
                                          exclusiveMinimum: 0
                                          maximum: 360
                                          description: ° (domemaster 180–230)
                                        tilt:
                                          type: number
                                          minimum: -90
                                          maximum: 90
                                        azimuth:
                                          type: number
                                          minimum: -360
                                          maximum: 360
                                          description: 'flat: ° centre azimuth'
                                        elevation:
                                          type: number
                                          minimum: -90
                                          maximum: 90
                                          description: 'flat: ° centre elevation'
                                        width:
                                          type: number
                                          exclusiveMinimum: 0
                                          maximum: 360
                                          description: 'flat: ° angular width'
                                        faces:
                                          enum:
                                            - 3
                                            - 4
                                            - 6
                                          description: '1.1 pyramid_views: number of views'
                                        layout:
                                          description: >-
                                            1.1: cubemap 3x2 | 6x1 | cross;
                                            pyramid_views cross | row | grid
                                          anyOf:
                                            - enum:
                                                - 3x2
                                                - 6x1
                                                - cross
                                                - row
                                                - grid
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                      if:
                                        properties:
                                          projection:
                                            const: pyramid_views
                                        required:
                                          - projection
                                      then:
                                        required:
                                          - faces
                                    video:
                                      type: object
                                      properties:
                                        resolution:
                                          type: array
                                          items:
                                            type: integer
                                            minimum: 1
                                          minItems: 2
                                          maxItems: 2
                                          description: '[width, height] or [cols, rows].'
                                        fps:
                                          type: number
                                          exclusiveMinimum: 0
                                        codec:
                                          anyOf:
                                            - enum:
                                                - hap
                                                - hap-q
                                                - hap-alpha
                                                - h264
                                                - h265
                                                - av1
                                                - vp9
                                                - prores
                                                - png-sequence
                                                - exr-sequence
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        stereo:
                                          oneOf:
                                            - type: 'null'
                                            - enum:
                                                - top-bottom
                                                - side-by-side
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    audio:
                                      type: object
                                      required:
                                        - kind
                                      properties:
                                        kind:
                                          anyOf:
                                            - enum:
                                                - ambisonic
                                                - channels
                                                - stereo
                                                - mono
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        order:
                                          type: integer
                                          minimum: 0
                                          maximum: 7
                                        layout:
                                          type: string
                                          minLength: 1
                                          description: 'channels: e.g. 5.1, 7.1, 7.1.4'
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    duration:
                                      type: number
                                      minimum: 0
                                    thumbnail:
                                      description: >-
                                        Entry path inside the container:
                                        relative, `/`-separated, no `..`
                                        segment, no backslash, no NUL.
                                      type: string
                                      minLength: 1
                                      maxLength: 1024
                                      pattern: >-
                                        ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                    zelim:
                                      description: >-
                                        1.1: hint for type zelim (project = JSON
                                        variant J, binary = variant B); content
                                        sniffing wins. A J project may carry
                                        quantum.scene (02e §9.3).
                                      type: object
                                      properties:
                                        variant:
                                          anyOf:
                                            - enum:
                                                - project
                                                - binary
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                  if:
                                    properties:
                                      src:
                                        type: string
                                        pattern: '^(?!asset:)[A-Za-z][A-Za-z0-9+.-]*:'
                                        description: >-
                                          absolute URI other than `asset:<id>` (an
                                          asset stored on the server: sha256 /
                                          size known there)
                                    required:
                                      - src
                                  then:
                                    if:
                                      properties:
                                        type:
                                          const: stream
                                      required:
                                        - type
                                    else:
                                      required:
                                        - sha256
                                        - size
                              show:
                                type: object
                              compat:
                                anyOf:
                                  - type: object
                                  - type: 'null'
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          warning:
                            type: object
                            required:
                              - code
                              - detail
                            properties:
                              code:
                                type: string
                                pattern: ^[a-z][a-z0-9-]{0,63}$
                              detail:
                                type: string
                              pointer:
                                type: string
                            additionalProperties: false
                          page:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  description: 'Collection item: no assets / show body.'
                                  type: object
                                  required:
                                    - id
                                    - revision
                                    - meta
                                  properties:
                                    id:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    revision:
                                      description: >-
                                        Monotonic resource revision; the strong
                                        ETag is derived from it.
                                      type: integer
                                      minimum: 0
                                    meta:
                                      type: object
                                      required:
                                        - id
                                        - title
                                      properties:
                                        id:
                                          description: >-
                                            Stable document id (UUID, lowercase);
                                            the venue / show id on import (02e
                                            §3.2).
                                          type: string
                                          pattern: >-
                                            ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                        title:
                                          $schema: >-
                                            https://json-schema.org/draft/2020-12/schema
                                          $id: >-
                                            https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                          $comment: >-
                                            NativeMindNONC — freedome_contract (see
                                            LICENSE). Localised text map
                                            {"en":…,"ru":…}, 02e §3.1 (as .dome
                                            meta.title).
                                          title: Localised text
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                          examples:
                                            - en: Intro
                                              ru: Вступление
                                          $defs:
                                            textOrI18n:
                                              description: >-
                                                Plain string (treated as `en`) or a
                                                localised map. (map branch = the root
                                                schema, inlined for tools that
                                                mis-handle self references)
                                              anyOf:
                                                - type: string
                                                - type: object
                                                  minProperties: 1
                                                  propertyNames:
                                                    pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                  additionalProperties:
                                                    type: string
                                                  examples:
                                                    - en: Intro
                                                      ru: Вступление
                                        description:
                                          $schema: >-
                                            https://json-schema.org/draft/2020-12/schema
                                          $id: >-
                                            https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                          $comment: >-
                                            NativeMindNONC — freedome_contract (see
                                            LICENSE). Localised text map
                                            {"en":…,"ru":…}, 02e §3.1 (as .dome
                                            meta.title).
                                          title: Localised text
                                          type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                          examples:
                                            - en: Intro
                                              ru: Вступление
                                          $defs:
                                            textOrI18n:
                                              description: >-
                                                Plain string (treated as `en`) or a
                                                localised map. (map branch = the root
                                                schema, inlined for tools that
                                                mis-handle self references)
                                              anyOf:
                                                - type: string
                                                - type: object
                                                  minProperties: 1
                                                  propertyNames:
                                                    pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                  additionalProperties:
                                                    type: string
                                                  examples:
                                                    - en: Intro
                                                      ru: Вступление
                                        authors:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - name
                                            properties:
                                              name:
                                                type: string
                                                minLength: 1
                                              email:
                                                type: string
                                                format: email
                                              url:
                                                type: string
                                                format: uri
                                              role:
                                                type: string
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        created:
                                          type: string
                                          format: date-time
                                        modified:
                                          type: string
                                          format: date-time
                                        generator:
                                          type: object
                                          required:
                                            - name
                                          properties:
                                            name:
                                              type: string
                                              minLength: 1
                                            version:
                                              type: string
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                        license:
                                          type: string
                                          minLength: 1
                                          default: NativeMindNONC
                                        tags:
                                          type: array
                                          items:
                                            type: string
                                            minLength: 1
                                            maxLength: 64
                                          uniqueItems: true
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    status:
                                      type: string
                                    assetCount:
                                      type: integer
                                      minimum: 0
                                    duration:
                                      description: Duration in seconds.
                                      type: number
                                      minimum: 0
                                    updatedAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                              count:
                                type: integer
                                minimum: 0
                            additionalProperties: false
                          summary:
                            description: 'Collection item: no assets / show body.'
                            type: object
                            required:
                              - id
                              - revision
                              - meta
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              revision:
                                description: >-
                                  Monotonic resource revision; the strong ETag
                                  is derived from it.
                                type: integer
                                minimum: 0
                              meta:
                                type: object
                                required:
                                  - id
                                  - title
                                properties:
                                  id:
                                    description: >-
                                      Stable document id (UUID, lowercase); the
                                      venue / show id on import (02e §3.2).
                                    type: string
                                    pattern: >-
                                      ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                  title:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). Localised text map
                                      {"en":…,"ru":…}, 02e §3.1 (as .dome
                                      meta.title).
                                    title: Localised text
                                    type: object
                                    minProperties: 1
                                    propertyNames:
                                      pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                    additionalProperties:
                                      type: string
                                    examples:
                                      - en: Intro
                                        ru: Вступление
                                    $defs:
                                      textOrI18n:
                                        description: >-
                                          Plain string (treated as `en`) or a
                                          localised map. (map branch = the root
                                          schema, inlined for tools that
                                          mis-handle self references)
                                        anyOf:
                                          - type: string
                                          - type: object
                                            minProperties: 1
                                            propertyNames:
                                              pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                            additionalProperties:
                                              type: string
                                            examples:
                                              - en: Intro
                                                ru: Вступление
                                  description:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). Localised text map
                                      {"en":…,"ru":…}, 02e §3.1 (as .dome
                                      meta.title).
                                    title: Localised text
                                    type: object
                                    minProperties: 1
                                    propertyNames:
                                      pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                    additionalProperties:
                                      type: string
                                    examples:
                                      - en: Intro
                                        ru: Вступление
                                    $defs:
                                      textOrI18n:
                                        description: >-
                                          Plain string (treated as `en`) or a
                                          localised map. (map branch = the root
                                          schema, inlined for tools that
                                          mis-handle self references)
                                        anyOf:
                                          - type: string
                                          - type: object
                                            minProperties: 1
                                            propertyNames:
                                              pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                            additionalProperties:
                                              type: string
                                            examples:
                                              - en: Intro
                                                ru: Вступление
                                  authors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - name
                                      properties:
                                        name:
                                          type: string
                                          minLength: 1
                                        email:
                                          type: string
                                          format: email
                                        url:
                                          type: string
                                          format: uri
                                        role:
                                          type: string
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                  created:
                                    type: string
                                    format: date-time
                                  modified:
                                    type: string
                                    format: date-time
                                  generator:
                                    type: object
                                    required:
                                      - name
                                    properties:
                                      name:
                                        type: string
                                        minLength: 1
                                      version:
                                        type: string
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  license:
                                    type: string
                                    minLength: 1
                                    default: NativeMindNONC
                                  tags:
                                    type: array
                                    items:
                                      type: string
                                      minLength: 1
                                      maxLength: 64
                                    uniqueItems: true
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                              status:
                                type: string
                              assetCount:
                                type: integer
                                minimum: 0
                              duration:
                                description: Duration in seconds.
                                type: number
                                minimum: 0
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                      patch:
                        description: >-
                          PATCH /shows/{showId} (application/merge-patch+json):
                          any subset of the sections; arrays are replaced whole
                          (RFC 7396).
                        type: object
                        minProperties: 1
                        properties:
                          meta:
                            type: object
                          assets:
                            type: array
                            items:
                              description: >-
                                Media / scene (01b §4.5). External assets
                                (absolute URI) carry sha256 + size.
                              type: object
                              required:
                                - id
                                - src
                                - type
                              properties:
                                id:
                                  description: Document-scoped id (02e §3.2).
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                name:
                                  type: string
                                src:
                                  description: >-
                                    An entry path (see path) or an absolute URI
                                    (`https:`, `http:`, `file:`, `ndi:`, `srt:`
                                    …).
                                  anyOf:
                                    - description: >-
                                        Entry path inside the container:
                                        relative, `/`-separated, no `..`
                                        segment, no backslash, no NUL.
                                      type: string
                                      minLength: 1
                                      maxLength: 1024
                                      pattern: >-
                                        ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                    - type: string
                                      format: uri
                                      pattern: '^[A-Za-z][A-Za-z0-9+.-]*:'
                                sha256:
                                  description: Lowercase hex SHA-256 digest.
                                  type: string
                                  pattern: ^[0-9a-f]{64}$
                                size:
                                  type: integer
                                  minimum: 0
                                type:
                                  anyOf:
                                    - enum:
                                        - video
                                        - image
                                        - audio
                                        - zelim
                                        - boranko
                                        - comics
                                        - realtime
                                        - stream
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                mapping:
                                  description: >-
                                    Content mapping onto the dome (01b §4.5, 02b
                                    §4.4).
                                  type: object
                                  required:
                                    - projection
                                  properties:
                                    projection:
                                      anyOf:
                                        - enum:
                                            - domemaster
                                            - equirect
                                            - cubemap
                                            - flat
                                            - pyramid_views
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    fov:
                                      type: number
                                      exclusiveMinimum: 0
                                      maximum: 360
                                      description: ° (domemaster 180–230)
                                    tilt:
                                      type: number
                                      minimum: -90
                                      maximum: 90
                                    azimuth:
                                      type: number
                                      minimum: -360
                                      maximum: 360
                                      description: 'flat: ° centre azimuth'
                                    elevation:
                                      type: number
                                      minimum: -90
                                      maximum: 90
                                      description: 'flat: ° centre elevation'
                                    width:
                                      type: number
                                      exclusiveMinimum: 0
                                      maximum: 360
                                      description: 'flat: ° angular width'
                                    faces:
                                      enum:
                                        - 3
                                        - 4
                                        - 6
                                      description: '1.1 pyramid_views: number of views'
                                    layout:
                                      description: >-
                                        1.1: cubemap 3x2 | 6x1 | cross;
                                        pyramid_views cross | row | grid
                                      anyOf:
                                        - enum:
                                            - 3x2
                                            - 6x1
                                            - cross
                                            - row
                                            - grid
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                  if:
                                    properties:
                                      projection:
                                        const: pyramid_views
                                    required:
                                      - projection
                                  then:
                                    required:
                                      - faces
                                video:
                                  type: object
                                  properties:
                                    resolution:
                                      type: array
                                      items:
                                        type: integer
                                        minimum: 1
                                      minItems: 2
                                      maxItems: 2
                                      description: '[width, height] or [cols, rows].'
                                    fps:
                                      type: number
                                      exclusiveMinimum: 0
                                    codec:
                                      anyOf:
                                        - enum:
                                            - hap
                                            - hap-q
                                            - hap-alpha
                                            - h264
                                            - h265
                                            - av1
                                            - vp9
                                            - prores
                                            - png-sequence
                                            - exr-sequence
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    stereo:
                                      oneOf:
                                        - type: 'null'
                                        - enum:
                                            - top-bottom
                                            - side-by-side
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                audio:
                                  type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      anyOf:
                                        - enum:
                                            - ambisonic
                                            - channels
                                            - stereo
                                            - mono
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    order:
                                      type: integer
                                      minimum: 0
                                      maximum: 7
                                    layout:
                                      type: string
                                      minLength: 1
                                      description: 'channels: e.g. 5.1, 7.1, 7.1.4'
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                duration:
                                  type: number
                                  minimum: 0
                                thumbnail:
                                  description: >-
                                    Entry path inside the container: relative,
                                    `/`-separated, no `..` segment, no
                                    backslash, no NUL.
                                  type: string
                                  minLength: 1
                                  maxLength: 1024
                                  pattern: >-
                                    ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                zelim:
                                  description: >-
                                    1.1: hint for type zelim (project = JSON
                                    variant J, binary = variant B); content
                                    sniffing wins. A J project may carry
                                    quantum.scene (02e §9.3).
                                  type: object
                                  properties:
                                    variant:
                                      anyOf:
                                        - enum:
                                            - project
                                            - binary
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                              if:
                                properties:
                                  src:
                                    type: string
                                    pattern: '^(?!asset:)[A-Za-z][A-Za-z0-9+.-]*:'
                                    description: >-
                                      absolute URI other than `asset:<id>` (an
                                      asset stored on the server: sha256 / size
                                      known there)
                                required:
                                  - src
                              then:
                                if:
                                  properties:
                                    type:
                                      const: stream
                                  required:
                                    - type
                                else:
                                  required:
                                    - sha256
                                    - size
                          show:
                            type: object
                          compat:
                            anyOf:
                              - type: object
                              - type: 'null'
                        patternProperties:
                          ^x-: true
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: show.deleted
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        type: object
                        required:
                          - id
                        properties:
                          id:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: playlist.updated
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: Fine-grained show edit (sub-kind of show.updated).
                        type: object
                        required:
                          - showId
                          - itemId
                          - revision
                        properties:
                          showId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          itemId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                          item:
                            type: object
                            description: the stored .dome entry (absent on delete)
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: playlist.deleted
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: Fine-grained show edit (sub-kind of show.updated).
                        type: object
                        required:
                          - showId
                          - itemId
                          - revision
                        properties:
                          showId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          itemId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                          item:
                            type: object
                            description: the stored .dome entry (absent on delete)
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: timeline.updated
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: Fine-grained show edit (sub-kind of show.updated).
                        type: object
                        required:
                          - showId
                          - itemId
                          - revision
                        properties:
                          showId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          itemId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                          item:
                            type: object
                            description: the stored .dome entry (absent on delete)
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: timeline.deleted
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: Fine-grained show edit (sub-kind of show.updated).
                        type: object
                        required:
                          - showId
                          - itemId
                          - revision
                        properties:
                          showId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          itemId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                          item:
                            type: object
                            description: the stored .dome entry (absent on delete)
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: cue.updated
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: Fine-grained show edit (sub-kind of show.updated).
                        type: object
                        required:
                          - showId
                          - itemId
                          - revision
                        properties:
                          showId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          itemId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                          item:
                            type: object
                            description: the stored .dome entry (absent on delete)
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: cue.deleted
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: Fine-grained show edit (sub-kind of show.updated).
                        type: object
                        required:
                          - showId
                          - itemId
                          - revision
                        properties:
                          showId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          itemId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                          item:
                            type: object
                            description: the stored .dome entry (absent on delete)
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: trigger.updated
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: Fine-grained show edit (sub-kind of show.updated).
                        type: object
                        required:
                          - showId
                          - itemId
                          - revision
                        properties:
                          showId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          itemId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                          item:
                            type: object
                            description: the stored .dome entry (absent on delete)
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: trigger.deleted
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: Fine-grained show edit (sub-kind of show.updated).
                        type: object
                        required:
                          - showId
                          - itemId
                          - revision
                        properties:
                          showId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          itemId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                          item:
                            type: object
                            description: the stored .dome entry (absent on delete)
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: matrix.updated
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: Fine-grained show edit (sub-kind of show.updated).
                        type: object
                        required:
                          - showId
                          - itemId
                          - revision
                        properties:
                          showId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          itemId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                          item:
                            type: object
                            description: the stored .dome entry (absent on delete)
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: asset.created
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/api/1.0/asset.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE).
                          Stored asset (02e §4, §5.4) = .dome asset fields +
                          storage (sha256, size, status, probe data,
                          thumbnails). Root = GET /assets/{assetId}.
                        title: Asset
                        allOf:
                          - type: object
                            required:
                              - id
                              - name
                              - type
                              - status
                              - revision
                              - createdAt
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              name:
                                type: string
                                minLength: 1
                                maxLength: 512
                                description: original file name (with extension) or a title
                              type:
                                anyOf:
                                  - enum:
                                      - video
                                      - image
                                      - audio
                                      - zelim
                                      - boranko
                                      - comics
                                      - realtime
                                      - stream
                                      - dome
                                      - other
                                  - type: string
                                    pattern: ^[a-z][a-z0-9._-]{0,63}$
                              src:
                                type: string
                                description: >-
                                  external URI for registered (not stored)
                                  assets; absent for stored blobs. Type stream:
                                  also spout://<sender>,
                                  syphon://<app>/<server>,
                                  dmabuf://<pipewire-node>,
                                  v4l2:///dev/<device>, ndi://<source>
                                  (percent-encoded, docs/audio-reactive.md)
                              texture:
                                description: >-
                                  Stream asset fed by another application on the
                                  engine's machine (derived by the server from
                                  `src`, read-only).
                                type: object
                                required:
                                  - transport
                                  - sender
                                properties:
                                  transport:
                                    description: >-
                                      Shared GPU texture or spare network
                                      transport of a live source. Open list.
                                    anyOf:
                                      - enum:
                                          - spout
                                          - syphon
                                          - dmabuf
                                          - capture
                                          - ndi
                                      - type: string
                                        pattern: ^[a-z][a-z0-9_-]{0,31}$
                                  sender:
                                    type: string
                                    minLength: 1
                                    maxLength: 256
                                    description: >-
                                      Spout sender, Syphon server, PipeWire
                                      node, capture device or NDI source name
                                  application:
                                    type: string
                                    maxLength: 256
                                    description: Syphon application name
                                  fallbackUrl:
                                    type: string
                                    format: uri
                                additionalProperties: false
                              mediaType:
                                description: IANA media type.
                                type: string
                                pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                              sha256:
                                description: Lowercase hex SHA-256 digest.
                                type: string
                                pattern: ^[0-9a-f]{64}$
                              size:
                                type: integer
                                minimum: 0
                              status:
                                anyOf:
                                  - enum:
                                      - uploading
                                      - processing
                                      - ready
                                      - failed
                                  - type: string
                                    pattern: ^[a-z_]{1,32}$
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                                description: >-
                                  why the asset failed (e.g.
                                  upload-checksum-mismatch)
                              progress:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              mapping:
                                description: >-
                                  Content mapping onto the dome (01b §4.5, 02b
                                  §4.4).
                                type: object
                                required:
                                  - projection
                                properties:
                                  projection:
                                    anyOf:
                                      - enum:
                                          - domemaster
                                          - equirect
                                          - cubemap
                                          - flat
                                          - pyramid_views
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  fov:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: ° (domemaster 180–230)
                                  tilt:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                  azimuth:
                                    type: number
                                    minimum: -360
                                    maximum: 360
                                    description: 'flat: ° centre azimuth'
                                  elevation:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                    description: 'flat: ° centre elevation'
                                  width:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: 'flat: ° angular width'
                                  faces:
                                    enum:
                                      - 3
                                      - 4
                                      - 6
                                    description: '1.1 pyramid_views: number of views'
                                  layout:
                                    description: >-
                                      1.1: cubemap 3x2 | 6x1 | cross;
                                      pyramid_views cross | row | grid
                                    anyOf:
                                      - enum:
                                          - 3x2
                                          - 6x1
                                          - cross
                                          - row
                                          - grid
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                if:
                                  properties:
                                    projection:
                                      const: pyramid_views
                                  required:
                                    - projection
                                then:
                                  required:
                                    - faces
                              media:
                                description: >-
                                  Probe result (ffprobe): container, streams,
                                  duration. `probeUnavailable` when the server
                                  has no prober (asset still ready).
                                type: object
                                properties:
                                  container:
                                    type: string
                                  duration:
                                    description: Duration in seconds.
                                    type: number
                                    minimum: 0
                                  video:
                                    type: object
                                    properties:
                                      codec:
                                        type: string
                                      resolution:
                                        type: array
                                        items:
                                          type: integer
                                          minimum: 1
                                        minItems: 2
                                        maxItems: 2
                                      fps:
                                        type: number
                                        exclusiveMinimum: 0
                                      bitDepth:
                                        type: integer
                                        minimum: 1
                                      pixelFormat:
                                        type: string
                                    additionalProperties: true
                                  audio:
                                    type: object
                                    properties:
                                      codec:
                                        type: string
                                      channels:
                                        type: integer
                                        minimum: 1
                                      layout:
                                        type: string
                                      sampleRate:
                                        type: integer
                                        minimum: 1
                                      ambisonicOrder:
                                        type: integer
                                        minimum: 0
                                        maximum: 7
                                    additionalProperties: true
                                  probeUnavailable:
                                    type: boolean
                                additionalProperties: true
                              thumbnails:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - size
                                    - url
                                  properties:
                                    size:
                                      type: integer
                                      minimum: 16
                                    url:
                                      type: string
                                      format: uri-reference
                                  additionalProperties: false
                              tags:
                                type: array
                                items:
                                  type: string
                                  minLength: 1
                                  maxLength: 64
                                uniqueItems: true
                              usedBy:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                description: ids of shows referencing the asset
                              revision:
                                description: >-
                                  Monotonic resource revision; the strong ETag
                                  is derived from it.
                                type: integer
                                minimum: 0
                              createdAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                            allOf:
                              - if:
                                  properties:
                                    status:
                                      const: failed
                                  required:
                                    - status
                                then:
                                  required:
                                    - problem
                        $defs:
                          asset:
                            type: object
                            required:
                              - id
                              - name
                              - type
                              - status
                              - revision
                              - createdAt
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              name:
                                type: string
                                minLength: 1
                                maxLength: 512
                                description: original file name (with extension) or a title
                              type:
                                anyOf:
                                  - enum:
                                      - video
                                      - image
                                      - audio
                                      - zelim
                                      - boranko
                                      - comics
                                      - realtime
                                      - stream
                                      - dome
                                      - other
                                  - type: string
                                    pattern: ^[a-z][a-z0-9._-]{0,63}$
                              src:
                                type: string
                                description: >-
                                  external URI for registered (not stored)
                                  assets; absent for stored blobs. Type stream:
                                  also spout://<sender>,
                                  syphon://<app>/<server>,
                                  dmabuf://<pipewire-node>,
                                  v4l2:///dev/<device>, ndi://<source>
                                  (percent-encoded, docs/audio-reactive.md)
                              texture:
                                description: >-
                                  Stream asset fed by another application on the
                                  engine's machine (derived by the server from
                                  `src`, read-only).
                                type: object
                                required:
                                  - transport
                                  - sender
                                properties:
                                  transport:
                                    description: >-
                                      Shared GPU texture or spare network
                                      transport of a live source. Open list.
                                    anyOf:
                                      - enum:
                                          - spout
                                          - syphon
                                          - dmabuf
                                          - capture
                                          - ndi
                                      - type: string
                                        pattern: ^[a-z][a-z0-9_-]{0,31}$
                                  sender:
                                    type: string
                                    minLength: 1
                                    maxLength: 256
                                    description: >-
                                      Spout sender, Syphon server, PipeWire
                                      node, capture device or NDI source name
                                  application:
                                    type: string
                                    maxLength: 256
                                    description: Syphon application name
                                  fallbackUrl:
                                    type: string
                                    format: uri
                                additionalProperties: false
                              mediaType:
                                description: IANA media type.
                                type: string
                                pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                              sha256:
                                description: Lowercase hex SHA-256 digest.
                                type: string
                                pattern: ^[0-9a-f]{64}$
                              size:
                                type: integer
                                minimum: 0
                              status:
                                anyOf:
                                  - enum:
                                      - uploading
                                      - processing
                                      - ready
                                      - failed
                                  - type: string
                                    pattern: ^[a-z_]{1,32}$
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                                description: >-
                                  why the asset failed (e.g.
                                  upload-checksum-mismatch)
                              progress:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              mapping:
                                description: >-
                                  Content mapping onto the dome (01b §4.5, 02b
                                  §4.4).
                                type: object
                                required:
                                  - projection
                                properties:
                                  projection:
                                    anyOf:
                                      - enum:
                                          - domemaster
                                          - equirect
                                          - cubemap
                                          - flat
                                          - pyramid_views
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  fov:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: ° (domemaster 180–230)
                                  tilt:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                  azimuth:
                                    type: number
                                    minimum: -360
                                    maximum: 360
                                    description: 'flat: ° centre azimuth'
                                  elevation:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                    description: 'flat: ° centre elevation'
                                  width:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: 'flat: ° angular width'
                                  faces:
                                    enum:
                                      - 3
                                      - 4
                                      - 6
                                    description: '1.1 pyramid_views: number of views'
                                  layout:
                                    description: >-
                                      1.1: cubemap 3x2 | 6x1 | cross;
                                      pyramid_views cross | row | grid
                                    anyOf:
                                      - enum:
                                          - 3x2
                                          - 6x1
                                          - cross
                                          - row
                                          - grid
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                if:
                                  properties:
                                    projection:
                                      const: pyramid_views
                                  required:
                                    - projection
                                then:
                                  required:
                                    - faces
                              media:
                                description: >-
                                  Probe result (ffprobe): container, streams,
                                  duration. `probeUnavailable` when the server
                                  has no prober (asset still ready).
                                type: object
                                properties:
                                  container:
                                    type: string
                                  duration:
                                    description: Duration in seconds.
                                    type: number
                                    minimum: 0
                                  video:
                                    type: object
                                    properties:
                                      codec:
                                        type: string
                                      resolution:
                                        type: array
                                        items:
                                          type: integer
                                          minimum: 1
                                        minItems: 2
                                        maxItems: 2
                                      fps:
                                        type: number
                                        exclusiveMinimum: 0
                                      bitDepth:
                                        type: integer
                                        minimum: 1
                                      pixelFormat:
                                        type: string
                                    additionalProperties: true
                                  audio:
                                    type: object
                                    properties:
                                      codec:
                                        type: string
                                      channels:
                                        type: integer
                                        minimum: 1
                                      layout:
                                        type: string
                                      sampleRate:
                                        type: integer
                                        minimum: 1
                                      ambisonicOrder:
                                        type: integer
                                        minimum: 0
                                        maximum: 7
                                    additionalProperties: true
                                  probeUnavailable:
                                    type: boolean
                                additionalProperties: true
                              thumbnails:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - size
                                    - url
                                  properties:
                                    size:
                                      type: integer
                                      minimum: 16
                                    url:
                                      type: string
                                      format: uri-reference
                                  additionalProperties: false
                              tags:
                                type: array
                                items:
                                  type: string
                                  minLength: 1
                                  maxLength: 64
                                uniqueItems: true
                              usedBy:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                description: ids of shows referencing the asset
                              revision:
                                description: >-
                                  Monotonic resource revision; the strong ETag
                                  is derived from it.
                                type: integer
                                minimum: 0
                              createdAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                            allOf:
                              - if:
                                  properties:
                                    status:
                                      const: failed
                                  required:
                                    - status
                                then:
                                  required:
                                    - problem
                          textureTransport:
                            description: >-
                              Shared GPU texture or spare network transport of a
                              live source. Open list.
                            anyOf:
                              - enum:
                                  - spout
                                  - syphon
                                  - dmabuf
                                  - capture
                                  - ndi
                              - type: string
                                pattern: ^[a-z][a-z0-9_-]{0,31}$
                          texture:
                            description: >-
                              Stream asset fed by another application on the
                              engine's machine (derived by the server from
                              `src`, read-only).
                            type: object
                            required:
                              - transport
                              - sender
                            properties:
                              transport:
                                description: >-
                                  Shared GPU texture or spare network transport
                                  of a live source. Open list.
                                anyOf:
                                  - enum:
                                      - spout
                                      - syphon
                                      - dmabuf
                                      - capture
                                      - ndi
                                  - type: string
                                    pattern: ^[a-z][a-z0-9_-]{0,31}$
                              sender:
                                type: string
                                minLength: 1
                                maxLength: 256
                                description: >-
                                  Spout sender, Syphon server, PipeWire node,
                                  capture device or NDI source name
                              application:
                                type: string
                                maxLength: 256
                                description: Syphon application name
                              fallbackUrl:
                                type: string
                                format: uri
                            additionalProperties: false
                          textureSource:
                            description: >-
                              A live source seen by the engine (GET
                              /venues/{venueId}/texture-sources, event
                              textureSource.state).
                            type: object
                            required:
                              - id
                              - transport
                              - sender
                              - status
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              transport:
                                description: >-
                                  Shared GPU texture or spare network transport
                                  of a live source. Open list.
                                anyOf:
                                  - enum:
                                      - spout
                                      - syphon
                                      - dmabuf
                                      - capture
                                      - ndi
                                  - type: string
                                    pattern: ^[a-z][a-z0-9_-]{0,31}$
                              sender:
                                type: string
                                minLength: 1
                                maxLength: 256
                              application:
                                type: string
                                maxLength: 256
                              status:
                                anyOf:
                                  - enum:
                                      - online
                                      - offline
                                  - type: string
                                    pattern: ^[a-z][a-z_-]{0,31}$
                              width:
                                type: integer
                                minimum: 1
                              height:
                                type: integer
                                minimum: 1
                              fps:
                                type: number
                                minimum: 0
                                description: frames per second measured by the engine
                              pixelFormat:
                                type: string
                                maxLength: 32
                              assetId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              node:
                                type: string
                                maxLength: 64
                                description: node whose engine sees the source
                              lastSeen:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          textureSourcePage:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  description: >-
                                    A live source seen by the engine (GET
                                    /venues/{venueId}/texture-sources, event
                                    textureSource.state).
                                  type: object
                                  required:
                                    - id
                                    - transport
                                    - sender
                                    - status
                                  properties:
                                    id:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    transport:
                                      description: >-
                                        Shared GPU texture or spare network
                                        transport of a live source. Open list.
                                      anyOf:
                                        - enum:
                                            - spout
                                            - syphon
                                            - dmabuf
                                            - capture
                                            - ndi
                                        - type: string
                                          pattern: ^[a-z][a-z0-9_-]{0,31}$
                                    sender:
                                      type: string
                                      minLength: 1
                                      maxLength: 256
                                    application:
                                      type: string
                                      maxLength: 256
                                    status:
                                      anyOf:
                                        - enum:
                                            - online
                                            - offline
                                        - type: string
                                          pattern: ^[a-z][a-z_-]{0,31}$
                                    width:
                                      type: integer
                                      minimum: 1
                                    height:
                                      type: integer
                                      minimum: 1
                                    fps:
                                      type: number
                                      minimum: 0
                                      description: frames per second measured by the engine
                                    pixelFormat:
                                      type: string
                                      maxLength: 32
                                    assetId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    node:
                                      type: string
                                      maxLength: 64
                                      description: node whose engine sees the source
                                    lastSeen:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                            additionalProperties: false
                          type:
                            anyOf:
                              - enum:
                                  - video
                                  - image
                                  - audio
                                  - zelim
                                  - boranko
                                  - comics
                                  - realtime
                                  - stream
                                  - dome
                                  - other
                              - type: string
                                pattern: ^[a-z][a-z0-9._-]{0,63}$
                          status:
                            anyOf:
                              - enum:
                                  - uploading
                                  - processing
                                  - ready
                                  - failed
                              - type: string
                                pattern: ^[a-z_]{1,32}$
                          media:
                            description: >-
                              Probe result (ffprobe): container, streams,
                              duration. `probeUnavailable` when the server has
                              no prober (asset still ready).
                            type: object
                            properties:
                              container:
                                type: string
                              duration:
                                description: Duration in seconds.
                                type: number
                                minimum: 0
                              video:
                                type: object
                                properties:
                                  codec:
                                    type: string
                                  resolution:
                                    type: array
                                    items:
                                      type: integer
                                      minimum: 1
                                    minItems: 2
                                    maxItems: 2
                                  fps:
                                    type: number
                                    exclusiveMinimum: 0
                                  bitDepth:
                                    type: integer
                                    minimum: 1
                                  pixelFormat:
                                    type: string
                                additionalProperties: true
                              audio:
                                type: object
                                properties:
                                  codec:
                                    type: string
                                  channels:
                                    type: integer
                                    minimum: 1
                                  layout:
                                    type: string
                                  sampleRate:
                                    type: integer
                                    minimum: 1
                                  ambisonicOrder:
                                    type: integer
                                    minimum: 0
                                    maximum: 7
                                additionalProperties: true
                              probeUnavailable:
                                type: boolean
                            additionalProperties: true
                          input:
                            description: >-
                              POST /assets JSON body: register a finished tus
                              upload or an external URL (streams, CDN).
                            type: object
                            properties:
                              uploadId:
                                description: >-
                                  Server-owned resource id: UUIDv7, lowercase,
                                  sortable by creation time.
                                type: string
                                pattern: >-
                                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                examples:
                                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                              url:
                                type: string
                                format: uri
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              name:
                                type: string
                                minLength: 1
                                maxLength: 512
                              type:
                                anyOf:
                                  - enum:
                                      - video
                                      - image
                                      - audio
                                      - zelim
                                      - boranko
                                      - comics
                                      - realtime
                                      - stream
                                      - dome
                                      - other
                                  - type: string
                                    pattern: ^[a-z][a-z0-9._-]{0,63}$
                              mapping:
                                description: >-
                                  Content mapping onto the dome (01b §4.5, 02b
                                  §4.4).
                                type: object
                                required:
                                  - projection
                                properties:
                                  projection:
                                    anyOf:
                                      - enum:
                                          - domemaster
                                          - equirect
                                          - cubemap
                                          - flat
                                          - pyramid_views
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  fov:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: ° (domemaster 180–230)
                                  tilt:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                  azimuth:
                                    type: number
                                    minimum: -360
                                    maximum: 360
                                    description: 'flat: ° centre azimuth'
                                  elevation:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                    description: 'flat: ° centre elevation'
                                  width:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: 'flat: ° angular width'
                                  faces:
                                    enum:
                                      - 3
                                      - 4
                                      - 6
                                    description: '1.1 pyramid_views: number of views'
                                  layout:
                                    description: >-
                                      1.1: cubemap 3x2 | 6x1 | cross;
                                      pyramid_views cross | row | grid
                                    anyOf:
                                      - enum:
                                          - 3x2
                                          - 6x1
                                          - cross
                                          - row
                                          - grid
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                if:
                                  properties:
                                    projection:
                                      const: pyramid_views
                                  required:
                                    - projection
                                then:
                                  required:
                                    - faces
                              tags:
                                type: array
                                items:
                                  type: string
                                  minLength: 1
                                  maxLength: 64
                                uniqueItems: true
                              sha256:
                                description: Lowercase hex SHA-256 digest.
                                type: string
                                pattern: ^[0-9a-f]{64}$
                              fallbackUrl:
                                type: string
                                format: uri
                                description: >-
                                  stream assets: source to use while `url` is
                                  unavailable, e.g. ndi://…
                            additionalProperties: false
                            oneOf:
                              - required:
                                  - uploadId
                              - required:
                                  - url
                          multipart:
                            description: >-
                              POST /assets multipart/form-data body (simple
                              upload ≤ 100 MB): part `file` + optional JSON
                              fields.
                            type: object
                            required:
                              - file
                            properties:
                              file:
                                type: string
                                contentMediaType: application/octet-stream
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              type:
                                anyOf:
                                  - enum:
                                      - video
                                      - image
                                      - audio
                                      - zelim
                                      - boranko
                                      - comics
                                      - realtime
                                      - stream
                                      - dome
                                      - other
                                  - type: string
                                    pattern: ^[a-z][a-z0-9._-]{0,63}$
                              tags:
                                type: string
                                description: comma-separated
                          patch:
                            type: object
                            minProperties: 1
                            properties:
                              name:
                                type: string
                                minLength: 1
                                maxLength: 512
                              type:
                                anyOf:
                                  - enum:
                                      - video
                                      - image
                                      - audio
                                      - zelim
                                      - boranko
                                      - comics
                                      - realtime
                                      - stream
                                      - dome
                                      - other
                                  - type: string
                                    pattern: ^[a-z][a-z0-9._-]{0,63}$
                              mapping:
                                description: >-
                                  Content mapping onto the dome (01b §4.5, 02b
                                  §4.4).
                                type: object
                                required:
                                  - projection
                                properties:
                                  projection:
                                    anyOf:
                                      - enum:
                                          - domemaster
                                          - equirect
                                          - cubemap
                                          - flat
                                          - pyramid_views
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  fov:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: ° (domemaster 180–230)
                                  tilt:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                  azimuth:
                                    type: number
                                    minimum: -360
                                    maximum: 360
                                    description: 'flat: ° centre azimuth'
                                  elevation:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                    description: 'flat: ° centre elevation'
                                  width:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: 'flat: ° angular width'
                                  faces:
                                    enum:
                                      - 3
                                      - 4
                                      - 6
                                    description: '1.1 pyramid_views: number of views'
                                  layout:
                                    description: >-
                                      1.1: cubemap 3x2 | 6x1 | cross;
                                      pyramid_views cross | row | grid
                                    anyOf:
                                      - enum:
                                          - 3x2
                                          - 6x1
                                          - cross
                                          - row
                                          - grid
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                if:
                                  properties:
                                    projection:
                                      const: pyramid_views
                                  required:
                                    - projection
                                then:
                                  required:
                                    - faces
                              tags:
                                type: array
                                items:
                                  type: string
                                  minLength: 1
                                  maxLength: 64
                                uniqueItems: true
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          page:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - id
                                    - name
                                    - type
                                    - status
                                    - revision
                                    - createdAt
                                  properties:
                                    id:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    name:
                                      type: string
                                      minLength: 1
                                      maxLength: 512
                                      description: >-
                                        original file name (with extension) or a
                                        title
                                    type:
                                      anyOf:
                                        - enum:
                                            - video
                                            - image
                                            - audio
                                            - zelim
                                            - boranko
                                            - comics
                                            - realtime
                                            - stream
                                            - dome
                                            - other
                                        - type: string
                                          pattern: ^[a-z][a-z0-9._-]{0,63}$
                                    src:
                                      type: string
                                      description: >-
                                        external URI for registered (not stored)
                                        assets; absent for stored blobs. Type
                                        stream: also spout://<sender>,
                                        syphon://<app>/<server>,
                                        dmabuf://<pipewire-node>,
                                        v4l2:///dev/<device>, ndi://<source>
                                        (percent-encoded,
                                        docs/audio-reactive.md)
                                    texture:
                                      description: >-
                                        Stream asset fed by another application
                                        on the engine's machine (derived by the
                                        server from `src`, read-only).
                                      type: object
                                      required:
                                        - transport
                                        - sender
                                      properties:
                                        transport:
                                          description: >-
                                            Shared GPU texture or spare network
                                            transport of a live source. Open list.
                                          anyOf:
                                            - enum:
                                                - spout
                                                - syphon
                                                - dmabuf
                                                - capture
                                                - ndi
                                            - type: string
                                              pattern: ^[a-z][a-z0-9_-]{0,31}$
                                        sender:
                                          type: string
                                          minLength: 1
                                          maxLength: 256
                                          description: >-
                                            Spout sender, Syphon server, PipeWire
                                            node, capture device or NDI source name
                                        application:
                                          type: string
                                          maxLength: 256
                                          description: Syphon application name
                                        fallbackUrl:
                                          type: string
                                          format: uri
                                      additionalProperties: false
                                    mediaType:
                                      description: IANA media type.
                                      type: string
                                      pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                                    sha256:
                                      description: Lowercase hex SHA-256 digest.
                                      type: string
                                      pattern: ^[0-9a-f]{64}$
                                    size:
                                      type: integer
                                      minimum: 0
                                    status:
                                      anyOf:
                                        - enum:
                                            - uploading
                                            - processing
                                            - ready
                                            - failed
                                        - type: string
                                          pattern: ^[a-z_]{1,32}$
                                    problem:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). RFC 9457 problem details with
                                        the Freedome `code` catalogue, 02e §3.3.
                                        Also the `data` of WS `error`, the
                                        socket.io ack error and GraphQL
                                        errors[].extensions.problem. The
                                        catalogue is open: unknown codes are
                                        allowed; known codes are bound to their
                                        HTTP status.
                                      title: Problem details
                                      type: object
                                      required:
                                        - type
                                        - title
                                        - code
                                      properties:
                                        type:
                                          type: string
                                          format: uri
                                          description: >-
                                            https://freedome.nativemind.us/problems/<code>
                                            for catalogue codes.
                                        title:
                                          type: string
                                          minLength: 1
                                        status:
                                          type: integer
                                          minimum: 100
                                          maximum: 599
                                        detail:
                                          type: string
                                        instance:
                                          type: string
                                          format: uri-reference
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        traceId:
                                          type: string
                                          pattern: ^[0-9a-f]{16,32}$
                                        errors:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                      allOf:
                                        - if:
                                            properties:
                                              code:
                                                const: validation-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: not-found
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 404
                                        - if:
                                            properties:
                                              code:
                                                const: conflict
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 412
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-required
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 428
                                        - if:
                                            properties:
                                              code:
                                                const: unauthenticated
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: forbidden
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: rate-limited
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 429
                                        - if:
                                            properties:
                                              code:
                                                const: payload-too-large
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 413
                                        - if:
                                            properties:
                                              code:
                                                const: unsupported-format
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 415
                                        - if:
                                            properties:
                                              code:
                                                const: engine-unavailable
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: engine-incompatible
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: degraded
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: upload-checksum-mismatch
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: legacy-unsupported
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 501
                                        - if:
                                            properties:
                                              code:
                                                const: internal
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 500
                                        - if:
                                            properties:
                                              code:
                                                const: clock-unlocked
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: not-configured
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: authorization-pending
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: slow-down
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: access-denied
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: expired-token
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: token-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-key-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-in-progress
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                      additionalProperties: true
                                      examples:
                                        - type: >-
                                            https://freedome.nativemind.us/problems/engine-unavailable
                                          title: Visual engine unavailable
                                          status: 503
                                          detail: >-
                                            freedome-engined not reachable at
                                            unix:/run/freedome/engine.sock
                                          instance: /api/v1/venues/default/players/main/play
                                          code: engine-unavailable
                                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                      $defs:
                                        knownCode:
                                          enum:
                                            - validation-failed
                                            - not-found
                                            - conflict
                                            - precondition-failed
                                            - precondition-required
                                            - unauthenticated
                                            - forbidden
                                            - rate-limited
                                            - payload-too-large
                                            - unsupported-format
                                            - engine-unavailable
                                            - engine-incompatible
                                            - degraded
                                            - job-failed
                                            - upload-checksum-mismatch
                                            - legacy-unsupported
                                            - internal
                                            - clock-unlocked
                                            - not-configured
                                            - authorization-pending
                                            - slow-down
                                            - access-denied
                                            - expired-token
                                            - token-reused
                                            - idempotency-key-reused
                                            - idempotency-in-progress
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        fieldError:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                      description: >-
                                        why the asset failed (e.g.
                                        upload-checksum-mismatch)
                                    progress:
                                      description: >-
                                        0..1 (brightness, linear volume gain,
                                        progress).
                                      type: number
                                      minimum: 0
                                      maximum: 1
                                    mapping:
                                      description: >-
                                        Content mapping onto the dome (01b §4.5,
                                        02b §4.4).
                                      type: object
                                      required:
                                        - projection
                                      properties:
                                        projection:
                                          anyOf:
                                            - enum:
                                                - domemaster
                                                - equirect
                                                - cubemap
                                                - flat
                                                - pyramid_views
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        fov:
                                          type: number
                                          exclusiveMinimum: 0
                                          maximum: 360
                                          description: ° (domemaster 180–230)
                                        tilt:
                                          type: number
                                          minimum: -90
                                          maximum: 90
                                        azimuth:
                                          type: number
                                          minimum: -360
                                          maximum: 360
                                          description: 'flat: ° centre azimuth'
                                        elevation:
                                          type: number
                                          minimum: -90
                                          maximum: 90
                                          description: 'flat: ° centre elevation'
                                        width:
                                          type: number
                                          exclusiveMinimum: 0
                                          maximum: 360
                                          description: 'flat: ° angular width'
                                        faces:
                                          enum:
                                            - 3
                                            - 4
                                            - 6
                                          description: '1.1 pyramid_views: number of views'
                                        layout:
                                          description: >-
                                            1.1: cubemap 3x2 | 6x1 | cross;
                                            pyramid_views cross | row | grid
                                          anyOf:
                                            - enum:
                                                - 3x2
                                                - 6x1
                                                - cross
                                                - row
                                                - grid
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                      if:
                                        properties:
                                          projection:
                                            const: pyramid_views
                                        required:
                                          - projection
                                      then:
                                        required:
                                          - faces
                                    media:
                                      description: >-
                                        Probe result (ffprobe): container,
                                        streams, duration. `probeUnavailable`
                                        when the server has no prober (asset
                                        still ready).
                                      type: object
                                      properties:
                                        container:
                                          type: string
                                        duration:
                                          description: Duration in seconds.
                                          type: number
                                          minimum: 0
                                        video:
                                          type: object
                                          properties:
                                            codec:
                                              type: string
                                            resolution:
                                              type: array
                                              items:
                                                type: integer
                                                minimum: 1
                                              minItems: 2
                                              maxItems: 2
                                            fps:
                                              type: number
                                              exclusiveMinimum: 0
                                            bitDepth:
                                              type: integer
                                              minimum: 1
                                            pixelFormat:
                                              type: string
                                          additionalProperties: true
                                        audio:
                                          type: object
                                          properties:
                                            codec:
                                              type: string
                                            channels:
                                              type: integer
                                              minimum: 1
                                            layout:
                                              type: string
                                            sampleRate:
                                              type: integer
                                              minimum: 1
                                            ambisonicOrder:
                                              type: integer
                                              minimum: 0
                                              maximum: 7
                                          additionalProperties: true
                                        probeUnavailable:
                                          type: boolean
                                      additionalProperties: true
                                    thumbnails:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - size
                                          - url
                                        properties:
                                          size:
                                            type: integer
                                            minimum: 16
                                          url:
                                            type: string
                                            format: uri-reference
                                        additionalProperties: false
                                    tags:
                                      type: array
                                      items:
                                        type: string
                                        minLength: 1
                                        maxLength: 64
                                      uniqueItems: true
                                    usedBy:
                                      type: array
                                      items:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      description: ids of shows referencing the asset
                                    revision:
                                      description: >-
                                        Monotonic resource revision; the strong
                                        ETag is derived from it.
                                      type: integer
                                      minimum: 0
                                    createdAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    updatedAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                  allOf:
                                    - if:
                                        properties:
                                          status:
                                            const: failed
                                        required:
                                          - status
                                      then:
                                        required:
                                          - problem
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                              count:
                                type: integer
                                minimum: 0
                            additionalProperties: false
                          storage:
                            description: GET /storage (replaces /api/v1/content/stats).
                            type: object
                            required:
                              - totalBytes
                              - usedBytes
                              - freeBytes
                            properties:
                              totalBytes:
                                type: integer
                                minimum: 0
                              usedBytes:
                                type: integer
                                minimum: 0
                              freeBytes:
                                type: integer
                                minimum: 0
                              quotaBytes:
                                anyOf:
                                  - type: integer
                                    minimum: 0
                                  - type: 'null'
                              assets:
                                type: object
                                required:
                                  - count
                                  - bytes
                                properties:
                                  count:
                                    type: integer
                                    minimum: 0
                                  bytes:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                              uploads:
                                type: object
                                required:
                                  - count
                                  - bytes
                                properties:
                                  count:
                                    type: integer
                                    minimum: 0
                                  bytes:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                              byType:
                                type: object
                                additionalProperties:
                                  type: object
                                  required:
                                    - count
                                    - bytes
                                  properties:
                                    count:
                                      type: integer
                                      minimum: 0
                                    bytes:
                                      type: integer
                                      minimum: 0
                                  additionalProperties: false
                            additionalProperties: false
                          countBytes:
                            type: object
                            required:
                              - count
                              - bytes
                            properties:
                              count:
                                type: integer
                                minimum: 0
                              bytes:
                                type: integer
                                minimum: 0
                            additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: asset.progress
                    required:
                      - kind
                  then:
                    properties:
                      patch:
                        type: object
                        minProperties: 1
                        properties:
                          progress:
                            type: number
                            minimum: 0
                            maximum: 1
                          currentStep:
                            anyOf:
                              - description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              - type: 'null'
                          message:
                            type: string
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: asset.ready
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/api/1.0/asset.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE).
                          Stored asset (02e §4, §5.4) = .dome asset fields +
                          storage (sha256, size, status, probe data,
                          thumbnails). Root = GET /assets/{assetId}.
                        title: Asset
                        allOf:
                          - type: object
                            required:
                              - id
                              - name
                              - type
                              - status
                              - revision
                              - createdAt
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              name:
                                type: string
                                minLength: 1
                                maxLength: 512
                                description: original file name (with extension) or a title
                              type:
                                anyOf:
                                  - enum:
                                      - video
                                      - image
                                      - audio
                                      - zelim
                                      - boranko
                                      - comics
                                      - realtime
                                      - stream
                                      - dome
                                      - other
                                  - type: string
                                    pattern: ^[a-z][a-z0-9._-]{0,63}$
                              src:
                                type: string
                                description: >-
                                  external URI for registered (not stored)
                                  assets; absent for stored blobs. Type stream:
                                  also spout://<sender>,
                                  syphon://<app>/<server>,
                                  dmabuf://<pipewire-node>,
                                  v4l2:///dev/<device>, ndi://<source>
                                  (percent-encoded, docs/audio-reactive.md)
                              texture:
                                description: >-
                                  Stream asset fed by another application on the
                                  engine's machine (derived by the server from
                                  `src`, read-only).
                                type: object
                                required:
                                  - transport
                                  - sender
                                properties:
                                  transport:
                                    description: >-
                                      Shared GPU texture or spare network
                                      transport of a live source. Open list.
                                    anyOf:
                                      - enum:
                                          - spout
                                          - syphon
                                          - dmabuf
                                          - capture
                                          - ndi
                                      - type: string
                                        pattern: ^[a-z][a-z0-9_-]{0,31}$
                                  sender:
                                    type: string
                                    minLength: 1
                                    maxLength: 256
                                    description: >-
                                      Spout sender, Syphon server, PipeWire
                                      node, capture device or NDI source name
                                  application:
                                    type: string
                                    maxLength: 256
                                    description: Syphon application name
                                  fallbackUrl:
                                    type: string
                                    format: uri
                                additionalProperties: false
                              mediaType:
                                description: IANA media type.
                                type: string
                                pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                              sha256:
                                description: Lowercase hex SHA-256 digest.
                                type: string
                                pattern: ^[0-9a-f]{64}$
                              size:
                                type: integer
                                minimum: 0
                              status:
                                anyOf:
                                  - enum:
                                      - uploading
                                      - processing
                                      - ready
                                      - failed
                                  - type: string
                                    pattern: ^[a-z_]{1,32}$
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                                description: >-
                                  why the asset failed (e.g.
                                  upload-checksum-mismatch)
                              progress:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              mapping:
                                description: >-
                                  Content mapping onto the dome (01b §4.5, 02b
                                  §4.4).
                                type: object
                                required:
                                  - projection
                                properties:
                                  projection:
                                    anyOf:
                                      - enum:
                                          - domemaster
                                          - equirect
                                          - cubemap
                                          - flat
                                          - pyramid_views
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  fov:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: ° (domemaster 180–230)
                                  tilt:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                  azimuth:
                                    type: number
                                    minimum: -360
                                    maximum: 360
                                    description: 'flat: ° centre azimuth'
                                  elevation:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                    description: 'flat: ° centre elevation'
                                  width:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: 'flat: ° angular width'
                                  faces:
                                    enum:
                                      - 3
                                      - 4
                                      - 6
                                    description: '1.1 pyramid_views: number of views'
                                  layout:
                                    description: >-
                                      1.1: cubemap 3x2 | 6x1 | cross;
                                      pyramid_views cross | row | grid
                                    anyOf:
                                      - enum:
                                          - 3x2
                                          - 6x1
                                          - cross
                                          - row
                                          - grid
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                if:
                                  properties:
                                    projection:
                                      const: pyramid_views
                                  required:
                                    - projection
                                then:
                                  required:
                                    - faces
                              media:
                                description: >-
                                  Probe result (ffprobe): container, streams,
                                  duration. `probeUnavailable` when the server
                                  has no prober (asset still ready).
                                type: object
                                properties:
                                  container:
                                    type: string
                                  duration:
                                    description: Duration in seconds.
                                    type: number
                                    minimum: 0
                                  video:
                                    type: object
                                    properties:
                                      codec:
                                        type: string
                                      resolution:
                                        type: array
                                        items:
                                          type: integer
                                          minimum: 1
                                        minItems: 2
                                        maxItems: 2
                                      fps:
                                        type: number
                                        exclusiveMinimum: 0
                                      bitDepth:
                                        type: integer
                                        minimum: 1
                                      pixelFormat:
                                        type: string
                                    additionalProperties: true
                                  audio:
                                    type: object
                                    properties:
                                      codec:
                                        type: string
                                      channels:
                                        type: integer
                                        minimum: 1
                                      layout:
                                        type: string
                                      sampleRate:
                                        type: integer
                                        minimum: 1
                                      ambisonicOrder:
                                        type: integer
                                        minimum: 0
                                        maximum: 7
                                    additionalProperties: true
                                  probeUnavailable:
                                    type: boolean
                                additionalProperties: true
                              thumbnails:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - size
                                    - url
                                  properties:
                                    size:
                                      type: integer
                                      minimum: 16
                                    url:
                                      type: string
                                      format: uri-reference
                                  additionalProperties: false
                              tags:
                                type: array
                                items:
                                  type: string
                                  minLength: 1
                                  maxLength: 64
                                uniqueItems: true
                              usedBy:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                description: ids of shows referencing the asset
                              revision:
                                description: >-
                                  Monotonic resource revision; the strong ETag
                                  is derived from it.
                                type: integer
                                minimum: 0
                              createdAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                            allOf:
                              - if:
                                  properties:
                                    status:
                                      const: failed
                                  required:
                                    - status
                                then:
                                  required:
                                    - problem
                        $defs:
                          asset:
                            type: object
                            required:
                              - id
                              - name
                              - type
                              - status
                              - revision
                              - createdAt
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              name:
                                type: string
                                minLength: 1
                                maxLength: 512
                                description: original file name (with extension) or a title
                              type:
                                anyOf:
                                  - enum:
                                      - video
                                      - image
                                      - audio
                                      - zelim
                                      - boranko
                                      - comics
                                      - realtime
                                      - stream
                                      - dome
                                      - other
                                  - type: string
                                    pattern: ^[a-z][a-z0-9._-]{0,63}$
                              src:
                                type: string
                                description: >-
                                  external URI for registered (not stored)
                                  assets; absent for stored blobs. Type stream:
                                  also spout://<sender>,
                                  syphon://<app>/<server>,
                                  dmabuf://<pipewire-node>,
                                  v4l2:///dev/<device>, ndi://<source>
                                  (percent-encoded, docs/audio-reactive.md)
                              texture:
                                description: >-
                                  Stream asset fed by another application on the
                                  engine's machine (derived by the server from
                                  `src`, read-only).
                                type: object
                                required:
                                  - transport
                                  - sender
                                properties:
                                  transport:
                                    description: >-
                                      Shared GPU texture or spare network
                                      transport of a live source. Open list.
                                    anyOf:
                                      - enum:
                                          - spout
                                          - syphon
                                          - dmabuf
                                          - capture
                                          - ndi
                                      - type: string
                                        pattern: ^[a-z][a-z0-9_-]{0,31}$
                                  sender:
                                    type: string
                                    minLength: 1
                                    maxLength: 256
                                    description: >-
                                      Spout sender, Syphon server, PipeWire
                                      node, capture device or NDI source name
                                  application:
                                    type: string
                                    maxLength: 256
                                    description: Syphon application name
                                  fallbackUrl:
                                    type: string
                                    format: uri
                                additionalProperties: false
                              mediaType:
                                description: IANA media type.
                                type: string
                                pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                              sha256:
                                description: Lowercase hex SHA-256 digest.
                                type: string
                                pattern: ^[0-9a-f]{64}$
                              size:
                                type: integer
                                minimum: 0
                              status:
                                anyOf:
                                  - enum:
                                      - uploading
                                      - processing
                                      - ready
                                      - failed
                                  - type: string
                                    pattern: ^[a-z_]{1,32}$
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                                description: >-
                                  why the asset failed (e.g.
                                  upload-checksum-mismatch)
                              progress:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              mapping:
                                description: >-
                                  Content mapping onto the dome (01b §4.5, 02b
                                  §4.4).
                                type: object
                                required:
                                  - projection
                                properties:
                                  projection:
                                    anyOf:
                                      - enum:
                                          - domemaster
                                          - equirect
                                          - cubemap
                                          - flat
                                          - pyramid_views
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  fov:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: ° (domemaster 180–230)
                                  tilt:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                  azimuth:
                                    type: number
                                    minimum: -360
                                    maximum: 360
                                    description: 'flat: ° centre azimuth'
                                  elevation:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                    description: 'flat: ° centre elevation'
                                  width:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: 'flat: ° angular width'
                                  faces:
                                    enum:
                                      - 3
                                      - 4
                                      - 6
                                    description: '1.1 pyramid_views: number of views'
                                  layout:
                                    description: >-
                                      1.1: cubemap 3x2 | 6x1 | cross;
                                      pyramid_views cross | row | grid
                                    anyOf:
                                      - enum:
                                          - 3x2
                                          - 6x1
                                          - cross
                                          - row
                                          - grid
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                if:
                                  properties:
                                    projection:
                                      const: pyramid_views
                                  required:
                                    - projection
                                then:
                                  required:
                                    - faces
                              media:
                                description: >-
                                  Probe result (ffprobe): container, streams,
                                  duration. `probeUnavailable` when the server
                                  has no prober (asset still ready).
                                type: object
                                properties:
                                  container:
                                    type: string
                                  duration:
                                    description: Duration in seconds.
                                    type: number
                                    minimum: 0
                                  video:
                                    type: object
                                    properties:
                                      codec:
                                        type: string
                                      resolution:
                                        type: array
                                        items:
                                          type: integer
                                          minimum: 1
                                        minItems: 2
                                        maxItems: 2
                                      fps:
                                        type: number
                                        exclusiveMinimum: 0
                                      bitDepth:
                                        type: integer
                                        minimum: 1
                                      pixelFormat:
                                        type: string
                                    additionalProperties: true
                                  audio:
                                    type: object
                                    properties:
                                      codec:
                                        type: string
                                      channels:
                                        type: integer
                                        minimum: 1
                                      layout:
                                        type: string
                                      sampleRate:
                                        type: integer
                                        minimum: 1
                                      ambisonicOrder:
                                        type: integer
                                        minimum: 0
                                        maximum: 7
                                    additionalProperties: true
                                  probeUnavailable:
                                    type: boolean
                                additionalProperties: true
                              thumbnails:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - size
                                    - url
                                  properties:
                                    size:
                                      type: integer
                                      minimum: 16
                                    url:
                                      type: string
                                      format: uri-reference
                                  additionalProperties: false
                              tags:
                                type: array
                                items:
                                  type: string
                                  minLength: 1
                                  maxLength: 64
                                uniqueItems: true
                              usedBy:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                description: ids of shows referencing the asset
                              revision:
                                description: >-
                                  Monotonic resource revision; the strong ETag
                                  is derived from it.
                                type: integer
                                minimum: 0
                              createdAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                            allOf:
                              - if:
                                  properties:
                                    status:
                                      const: failed
                                  required:
                                    - status
                                then:
                                  required:
                                    - problem
                          textureTransport:
                            description: >-
                              Shared GPU texture or spare network transport of a
                              live source. Open list.
                            anyOf:
                              - enum:
                                  - spout
                                  - syphon
                                  - dmabuf
                                  - capture
                                  - ndi
                              - type: string
                                pattern: ^[a-z][a-z0-9_-]{0,31}$
                          texture:
                            description: >-
                              Stream asset fed by another application on the
                              engine's machine (derived by the server from
                              `src`, read-only).
                            type: object
                            required:
                              - transport
                              - sender
                            properties:
                              transport:
                                description: >-
                                  Shared GPU texture or spare network transport
                                  of a live source. Open list.
                                anyOf:
                                  - enum:
                                      - spout
                                      - syphon
                                      - dmabuf
                                      - capture
                                      - ndi
                                  - type: string
                                    pattern: ^[a-z][a-z0-9_-]{0,31}$
                              sender:
                                type: string
                                minLength: 1
                                maxLength: 256
                                description: >-
                                  Spout sender, Syphon server, PipeWire node,
                                  capture device or NDI source name
                              application:
                                type: string
                                maxLength: 256
                                description: Syphon application name
                              fallbackUrl:
                                type: string
                                format: uri
                            additionalProperties: false
                          textureSource:
                            description: >-
                              A live source seen by the engine (GET
                              /venues/{venueId}/texture-sources, event
                              textureSource.state).
                            type: object
                            required:
                              - id
                              - transport
                              - sender
                              - status
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              transport:
                                description: >-
                                  Shared GPU texture or spare network transport
                                  of a live source. Open list.
                                anyOf:
                                  - enum:
                                      - spout
                                      - syphon
                                      - dmabuf
                                      - capture
                                      - ndi
                                  - type: string
                                    pattern: ^[a-z][a-z0-9_-]{0,31}$
                              sender:
                                type: string
                                minLength: 1
                                maxLength: 256
                              application:
                                type: string
                                maxLength: 256
                              status:
                                anyOf:
                                  - enum:
                                      - online
                                      - offline
                                  - type: string
                                    pattern: ^[a-z][a-z_-]{0,31}$
                              width:
                                type: integer
                                minimum: 1
                              height:
                                type: integer
                                minimum: 1
                              fps:
                                type: number
                                minimum: 0
                                description: frames per second measured by the engine
                              pixelFormat:
                                type: string
                                maxLength: 32
                              assetId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              node:
                                type: string
                                maxLength: 64
                                description: node whose engine sees the source
                              lastSeen:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          textureSourcePage:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  description: >-
                                    A live source seen by the engine (GET
                                    /venues/{venueId}/texture-sources, event
                                    textureSource.state).
                                  type: object
                                  required:
                                    - id
                                    - transport
                                    - sender
                                    - status
                                  properties:
                                    id:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    transport:
                                      description: >-
                                        Shared GPU texture or spare network
                                        transport of a live source. Open list.
                                      anyOf:
                                        - enum:
                                            - spout
                                            - syphon
                                            - dmabuf
                                            - capture
                                            - ndi
                                        - type: string
                                          pattern: ^[a-z][a-z0-9_-]{0,31}$
                                    sender:
                                      type: string
                                      minLength: 1
                                      maxLength: 256
                                    application:
                                      type: string
                                      maxLength: 256
                                    status:
                                      anyOf:
                                        - enum:
                                            - online
                                            - offline
                                        - type: string
                                          pattern: ^[a-z][a-z_-]{0,31}$
                                    width:
                                      type: integer
                                      minimum: 1
                                    height:
                                      type: integer
                                      minimum: 1
                                    fps:
                                      type: number
                                      minimum: 0
                                      description: frames per second measured by the engine
                                    pixelFormat:
                                      type: string
                                      maxLength: 32
                                    assetId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    node:
                                      type: string
                                      maxLength: 64
                                      description: node whose engine sees the source
                                    lastSeen:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                            additionalProperties: false
                          type:
                            anyOf:
                              - enum:
                                  - video
                                  - image
                                  - audio
                                  - zelim
                                  - boranko
                                  - comics
                                  - realtime
                                  - stream
                                  - dome
                                  - other
                              - type: string
                                pattern: ^[a-z][a-z0-9._-]{0,63}$
                          status:
                            anyOf:
                              - enum:
                                  - uploading
                                  - processing
                                  - ready
                                  - failed
                              - type: string
                                pattern: ^[a-z_]{1,32}$
                          media:
                            description: >-
                              Probe result (ffprobe): container, streams,
                              duration. `probeUnavailable` when the server has
                              no prober (asset still ready).
                            type: object
                            properties:
                              container:
                                type: string
                              duration:
                                description: Duration in seconds.
                                type: number
                                minimum: 0
                              video:
                                type: object
                                properties:
                                  codec:
                                    type: string
                                  resolution:
                                    type: array
                                    items:
                                      type: integer
                                      minimum: 1
                                    minItems: 2
                                    maxItems: 2
                                  fps:
                                    type: number
                                    exclusiveMinimum: 0
                                  bitDepth:
                                    type: integer
                                    minimum: 1
                                  pixelFormat:
                                    type: string
                                additionalProperties: true
                              audio:
                                type: object
                                properties:
                                  codec:
                                    type: string
                                  channels:
                                    type: integer
                                    minimum: 1
                                  layout:
                                    type: string
                                  sampleRate:
                                    type: integer
                                    minimum: 1
                                  ambisonicOrder:
                                    type: integer
                                    minimum: 0
                                    maximum: 7
                                additionalProperties: true
                              probeUnavailable:
                                type: boolean
                            additionalProperties: true
                          input:
                            description: >-
                              POST /assets JSON body: register a finished tus
                              upload or an external URL (streams, CDN).
                            type: object
                            properties:
                              uploadId:
                                description: >-
                                  Server-owned resource id: UUIDv7, lowercase,
                                  sortable by creation time.
                                type: string
                                pattern: >-
                                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                examples:
                                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                              url:
                                type: string
                                format: uri
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              name:
                                type: string
                                minLength: 1
                                maxLength: 512
                              type:
                                anyOf:
                                  - enum:
                                      - video
                                      - image
                                      - audio
                                      - zelim
                                      - boranko
                                      - comics
                                      - realtime
                                      - stream
                                      - dome
                                      - other
                                  - type: string
                                    pattern: ^[a-z][a-z0-9._-]{0,63}$
                              mapping:
                                description: >-
                                  Content mapping onto the dome (01b §4.5, 02b
                                  §4.4).
                                type: object
                                required:
                                  - projection
                                properties:
                                  projection:
                                    anyOf:
                                      - enum:
                                          - domemaster
                                          - equirect
                                          - cubemap
                                          - flat
                                          - pyramid_views
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  fov:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: ° (domemaster 180–230)
                                  tilt:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                  azimuth:
                                    type: number
                                    minimum: -360
                                    maximum: 360
                                    description: 'flat: ° centre azimuth'
                                  elevation:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                    description: 'flat: ° centre elevation'
                                  width:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: 'flat: ° angular width'
                                  faces:
                                    enum:
                                      - 3
                                      - 4
                                      - 6
                                    description: '1.1 pyramid_views: number of views'
                                  layout:
                                    description: >-
                                      1.1: cubemap 3x2 | 6x1 | cross;
                                      pyramid_views cross | row | grid
                                    anyOf:
                                      - enum:
                                          - 3x2
                                          - 6x1
                                          - cross
                                          - row
                                          - grid
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                if:
                                  properties:
                                    projection:
                                      const: pyramid_views
                                  required:
                                    - projection
                                then:
                                  required:
                                    - faces
                              tags:
                                type: array
                                items:
                                  type: string
                                  minLength: 1
                                  maxLength: 64
                                uniqueItems: true
                              sha256:
                                description: Lowercase hex SHA-256 digest.
                                type: string
                                pattern: ^[0-9a-f]{64}$
                              fallbackUrl:
                                type: string
                                format: uri
                                description: >-
                                  stream assets: source to use while `url` is
                                  unavailable, e.g. ndi://…
                            additionalProperties: false
                            oneOf:
                              - required:
                                  - uploadId
                              - required:
                                  - url
                          multipart:
                            description: >-
                              POST /assets multipart/form-data body (simple
                              upload ≤ 100 MB): part `file` + optional JSON
                              fields.
                            type: object
                            required:
                              - file
                            properties:
                              file:
                                type: string
                                contentMediaType: application/octet-stream
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              type:
                                anyOf:
                                  - enum:
                                      - video
                                      - image
                                      - audio
                                      - zelim
                                      - boranko
                                      - comics
                                      - realtime
                                      - stream
                                      - dome
                                      - other
                                  - type: string
                                    pattern: ^[a-z][a-z0-9._-]{0,63}$
                              tags:
                                type: string
                                description: comma-separated
                          patch:
                            type: object
                            minProperties: 1
                            properties:
                              name:
                                type: string
                                minLength: 1
                                maxLength: 512
                              type:
                                anyOf:
                                  - enum:
                                      - video
                                      - image
                                      - audio
                                      - zelim
                                      - boranko
                                      - comics
                                      - realtime
                                      - stream
                                      - dome
                                      - other
                                  - type: string
                                    pattern: ^[a-z][a-z0-9._-]{0,63}$
                              mapping:
                                description: >-
                                  Content mapping onto the dome (01b §4.5, 02b
                                  §4.4).
                                type: object
                                required:
                                  - projection
                                properties:
                                  projection:
                                    anyOf:
                                      - enum:
                                          - domemaster
                                          - equirect
                                          - cubemap
                                          - flat
                                          - pyramid_views
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  fov:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: ° (domemaster 180–230)
                                  tilt:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                  azimuth:
                                    type: number
                                    minimum: -360
                                    maximum: 360
                                    description: 'flat: ° centre azimuth'
                                  elevation:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                    description: 'flat: ° centre elevation'
                                  width:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: 'flat: ° angular width'
                                  faces:
                                    enum:
                                      - 3
                                      - 4
                                      - 6
                                    description: '1.1 pyramid_views: number of views'
                                  layout:
                                    description: >-
                                      1.1: cubemap 3x2 | 6x1 | cross;
                                      pyramid_views cross | row | grid
                                    anyOf:
                                      - enum:
                                          - 3x2
                                          - 6x1
                                          - cross
                                          - row
                                          - grid
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                if:
                                  properties:
                                    projection:
                                      const: pyramid_views
                                  required:
                                    - projection
                                then:
                                  required:
                                    - faces
                              tags:
                                type: array
                                items:
                                  type: string
                                  minLength: 1
                                  maxLength: 64
                                uniqueItems: true
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          page:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - id
                                    - name
                                    - type
                                    - status
                                    - revision
                                    - createdAt
                                  properties:
                                    id:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    name:
                                      type: string
                                      minLength: 1
                                      maxLength: 512
                                      description: >-
                                        original file name (with extension) or a
                                        title
                                    type:
                                      anyOf:
                                        - enum:
                                            - video
                                            - image
                                            - audio
                                            - zelim
                                            - boranko
                                            - comics
                                            - realtime
                                            - stream
                                            - dome
                                            - other
                                        - type: string
                                          pattern: ^[a-z][a-z0-9._-]{0,63}$
                                    src:
                                      type: string
                                      description: >-
                                        external URI for registered (not stored)
                                        assets; absent for stored blobs. Type
                                        stream: also spout://<sender>,
                                        syphon://<app>/<server>,
                                        dmabuf://<pipewire-node>,
                                        v4l2:///dev/<device>, ndi://<source>
                                        (percent-encoded,
                                        docs/audio-reactive.md)
                                    texture:
                                      description: >-
                                        Stream asset fed by another application
                                        on the engine's machine (derived by the
                                        server from `src`, read-only).
                                      type: object
                                      required:
                                        - transport
                                        - sender
                                      properties:
                                        transport:
                                          description: >-
                                            Shared GPU texture or spare network
                                            transport of a live source. Open list.
                                          anyOf:
                                            - enum:
                                                - spout
                                                - syphon
                                                - dmabuf
                                                - capture
                                                - ndi
                                            - type: string
                                              pattern: ^[a-z][a-z0-9_-]{0,31}$
                                        sender:
                                          type: string
                                          minLength: 1
                                          maxLength: 256
                                          description: >-
                                            Spout sender, Syphon server, PipeWire
                                            node, capture device or NDI source name
                                        application:
                                          type: string
                                          maxLength: 256
                                          description: Syphon application name
                                        fallbackUrl:
                                          type: string
                                          format: uri
                                      additionalProperties: false
                                    mediaType:
                                      description: IANA media type.
                                      type: string
                                      pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                                    sha256:
                                      description: Lowercase hex SHA-256 digest.
                                      type: string
                                      pattern: ^[0-9a-f]{64}$
                                    size:
                                      type: integer
                                      minimum: 0
                                    status:
                                      anyOf:
                                        - enum:
                                            - uploading
                                            - processing
                                            - ready
                                            - failed
                                        - type: string
                                          pattern: ^[a-z_]{1,32}$
                                    problem:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). RFC 9457 problem details with
                                        the Freedome `code` catalogue, 02e §3.3.
                                        Also the `data` of WS `error`, the
                                        socket.io ack error and GraphQL
                                        errors[].extensions.problem. The
                                        catalogue is open: unknown codes are
                                        allowed; known codes are bound to their
                                        HTTP status.
                                      title: Problem details
                                      type: object
                                      required:
                                        - type
                                        - title
                                        - code
                                      properties:
                                        type:
                                          type: string
                                          format: uri
                                          description: >-
                                            https://freedome.nativemind.us/problems/<code>
                                            for catalogue codes.
                                        title:
                                          type: string
                                          minLength: 1
                                        status:
                                          type: integer
                                          minimum: 100
                                          maximum: 599
                                        detail:
                                          type: string
                                        instance:
                                          type: string
                                          format: uri-reference
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        traceId:
                                          type: string
                                          pattern: ^[0-9a-f]{16,32}$
                                        errors:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                      allOf:
                                        - if:
                                            properties:
                                              code:
                                                const: validation-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: not-found
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 404
                                        - if:
                                            properties:
                                              code:
                                                const: conflict
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 412
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-required
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 428
                                        - if:
                                            properties:
                                              code:
                                                const: unauthenticated
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: forbidden
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: rate-limited
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 429
                                        - if:
                                            properties:
                                              code:
                                                const: payload-too-large
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 413
                                        - if:
                                            properties:
                                              code:
                                                const: unsupported-format
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 415
                                        - if:
                                            properties:
                                              code:
                                                const: engine-unavailable
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: engine-incompatible
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: degraded
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: upload-checksum-mismatch
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: legacy-unsupported
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 501
                                        - if:
                                            properties:
                                              code:
                                                const: internal
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 500
                                        - if:
                                            properties:
                                              code:
                                                const: clock-unlocked
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: not-configured
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: authorization-pending
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: slow-down
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: access-denied
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: expired-token
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: token-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-key-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-in-progress
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                      additionalProperties: true
                                      examples:
                                        - type: >-
                                            https://freedome.nativemind.us/problems/engine-unavailable
                                          title: Visual engine unavailable
                                          status: 503
                                          detail: >-
                                            freedome-engined not reachable at
                                            unix:/run/freedome/engine.sock
                                          instance: /api/v1/venues/default/players/main/play
                                          code: engine-unavailable
                                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                      $defs:
                                        knownCode:
                                          enum:
                                            - validation-failed
                                            - not-found
                                            - conflict
                                            - precondition-failed
                                            - precondition-required
                                            - unauthenticated
                                            - forbidden
                                            - rate-limited
                                            - payload-too-large
                                            - unsupported-format
                                            - engine-unavailable
                                            - engine-incompatible
                                            - degraded
                                            - job-failed
                                            - upload-checksum-mismatch
                                            - legacy-unsupported
                                            - internal
                                            - clock-unlocked
                                            - not-configured
                                            - authorization-pending
                                            - slow-down
                                            - access-denied
                                            - expired-token
                                            - token-reused
                                            - idempotency-key-reused
                                            - idempotency-in-progress
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        fieldError:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                      description: >-
                                        why the asset failed (e.g.
                                        upload-checksum-mismatch)
                                    progress:
                                      description: >-
                                        0..1 (brightness, linear volume gain,
                                        progress).
                                      type: number
                                      minimum: 0
                                      maximum: 1
                                    mapping:
                                      description: >-
                                        Content mapping onto the dome (01b §4.5,
                                        02b §4.4).
                                      type: object
                                      required:
                                        - projection
                                      properties:
                                        projection:
                                          anyOf:
                                            - enum:
                                                - domemaster
                                                - equirect
                                                - cubemap
                                                - flat
                                                - pyramid_views
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        fov:
                                          type: number
                                          exclusiveMinimum: 0
                                          maximum: 360
                                          description: ° (domemaster 180–230)
                                        tilt:
                                          type: number
                                          minimum: -90
                                          maximum: 90
                                        azimuth:
                                          type: number
                                          minimum: -360
                                          maximum: 360
                                          description: 'flat: ° centre azimuth'
                                        elevation:
                                          type: number
                                          minimum: -90
                                          maximum: 90
                                          description: 'flat: ° centre elevation'
                                        width:
                                          type: number
                                          exclusiveMinimum: 0
                                          maximum: 360
                                          description: 'flat: ° angular width'
                                        faces:
                                          enum:
                                            - 3
                                            - 4
                                            - 6
                                          description: '1.1 pyramid_views: number of views'
                                        layout:
                                          description: >-
                                            1.1: cubemap 3x2 | 6x1 | cross;
                                            pyramid_views cross | row | grid
                                          anyOf:
                                            - enum:
                                                - 3x2
                                                - 6x1
                                                - cross
                                                - row
                                                - grid
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                      if:
                                        properties:
                                          projection:
                                            const: pyramid_views
                                        required:
                                          - projection
                                      then:
                                        required:
                                          - faces
                                    media:
                                      description: >-
                                        Probe result (ffprobe): container,
                                        streams, duration. `probeUnavailable`
                                        when the server has no prober (asset
                                        still ready).
                                      type: object
                                      properties:
                                        container:
                                          type: string
                                        duration:
                                          description: Duration in seconds.
                                          type: number
                                          minimum: 0
                                        video:
                                          type: object
                                          properties:
                                            codec:
                                              type: string
                                            resolution:
                                              type: array
                                              items:
                                                type: integer
                                                minimum: 1
                                              minItems: 2
                                              maxItems: 2
                                            fps:
                                              type: number
                                              exclusiveMinimum: 0
                                            bitDepth:
                                              type: integer
                                              minimum: 1
                                            pixelFormat:
                                              type: string
                                          additionalProperties: true
                                        audio:
                                          type: object
                                          properties:
                                            codec:
                                              type: string
                                            channels:
                                              type: integer
                                              minimum: 1
                                            layout:
                                              type: string
                                            sampleRate:
                                              type: integer
                                              minimum: 1
                                            ambisonicOrder:
                                              type: integer
                                              minimum: 0
                                              maximum: 7
                                          additionalProperties: true
                                        probeUnavailable:
                                          type: boolean
                                      additionalProperties: true
                                    thumbnails:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - size
                                          - url
                                        properties:
                                          size:
                                            type: integer
                                            minimum: 16
                                          url:
                                            type: string
                                            format: uri-reference
                                        additionalProperties: false
                                    tags:
                                      type: array
                                      items:
                                        type: string
                                        minLength: 1
                                        maxLength: 64
                                      uniqueItems: true
                                    usedBy:
                                      type: array
                                      items:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      description: ids of shows referencing the asset
                                    revision:
                                      description: >-
                                        Monotonic resource revision; the strong
                                        ETag is derived from it.
                                      type: integer
                                      minimum: 0
                                    createdAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    updatedAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                  allOf:
                                    - if:
                                        properties:
                                          status:
                                            const: failed
                                        required:
                                          - status
                                      then:
                                        required:
                                          - problem
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                              count:
                                type: integer
                                minimum: 0
                            additionalProperties: false
                          storage:
                            description: GET /storage (replaces /api/v1/content/stats).
                            type: object
                            required:
                              - totalBytes
                              - usedBytes
                              - freeBytes
                            properties:
                              totalBytes:
                                type: integer
                                minimum: 0
                              usedBytes:
                                type: integer
                                minimum: 0
                              freeBytes:
                                type: integer
                                minimum: 0
                              quotaBytes:
                                anyOf:
                                  - type: integer
                                    minimum: 0
                                  - type: 'null'
                              assets:
                                type: object
                                required:
                                  - count
                                  - bytes
                                properties:
                                  count:
                                    type: integer
                                    minimum: 0
                                  bytes:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                              uploads:
                                type: object
                                required:
                                  - count
                                  - bytes
                                properties:
                                  count:
                                    type: integer
                                    minimum: 0
                                  bytes:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                              byType:
                                type: object
                                additionalProperties:
                                  type: object
                                  required:
                                    - count
                                    - bytes
                                  properties:
                                    count:
                                      type: integer
                                      minimum: 0
                                    bytes:
                                      type: integer
                                      minimum: 0
                                  additionalProperties: false
                            additionalProperties: false
                          countBytes:
                            type: object
                            required:
                              - count
                              - bytes
                            properties:
                              count:
                                type: integer
                                minimum: 0
                              bytes:
                                type: integer
                                minimum: 0
                            additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: asset.failed
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/api/1.0/asset.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE).
                          Stored asset (02e §4, §5.4) = .dome asset fields +
                          storage (sha256, size, status, probe data,
                          thumbnails). Root = GET /assets/{assetId}.
                        title: Asset
                        allOf:
                          - type: object
                            required:
                              - id
                              - name
                              - type
                              - status
                              - revision
                              - createdAt
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              name:
                                type: string
                                minLength: 1
                                maxLength: 512
                                description: original file name (with extension) or a title
                              type:
                                anyOf:
                                  - enum:
                                      - video
                                      - image
                                      - audio
                                      - zelim
                                      - boranko
                                      - comics
                                      - realtime
                                      - stream
                                      - dome
                                      - other
                                  - type: string
                                    pattern: ^[a-z][a-z0-9._-]{0,63}$
                              src:
                                type: string
                                description: >-
                                  external URI for registered (not stored)
                                  assets; absent for stored blobs. Type stream:
                                  also spout://<sender>,
                                  syphon://<app>/<server>,
                                  dmabuf://<pipewire-node>,
                                  v4l2:///dev/<device>, ndi://<source>
                                  (percent-encoded, docs/audio-reactive.md)
                              texture:
                                description: >-
                                  Stream asset fed by another application on the
                                  engine's machine (derived by the server from
                                  `src`, read-only).
                                type: object
                                required:
                                  - transport
                                  - sender
                                properties:
                                  transport:
                                    description: >-
                                      Shared GPU texture or spare network
                                      transport of a live source. Open list.
                                    anyOf:
                                      - enum:
                                          - spout
                                          - syphon
                                          - dmabuf
                                          - capture
                                          - ndi
                                      - type: string
                                        pattern: ^[a-z][a-z0-9_-]{0,31}$
                                  sender:
                                    type: string
                                    minLength: 1
                                    maxLength: 256
                                    description: >-
                                      Spout sender, Syphon server, PipeWire
                                      node, capture device or NDI source name
                                  application:
                                    type: string
                                    maxLength: 256
                                    description: Syphon application name
                                  fallbackUrl:
                                    type: string
                                    format: uri
                                additionalProperties: false
                              mediaType:
                                description: IANA media type.
                                type: string
                                pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                              sha256:
                                description: Lowercase hex SHA-256 digest.
                                type: string
                                pattern: ^[0-9a-f]{64}$
                              size:
                                type: integer
                                minimum: 0
                              status:
                                anyOf:
                                  - enum:
                                      - uploading
                                      - processing
                                      - ready
                                      - failed
                                  - type: string
                                    pattern: ^[a-z_]{1,32}$
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                                description: >-
                                  why the asset failed (e.g.
                                  upload-checksum-mismatch)
                              progress:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              mapping:
                                description: >-
                                  Content mapping onto the dome (01b §4.5, 02b
                                  §4.4).
                                type: object
                                required:
                                  - projection
                                properties:
                                  projection:
                                    anyOf:
                                      - enum:
                                          - domemaster
                                          - equirect
                                          - cubemap
                                          - flat
                                          - pyramid_views
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  fov:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: ° (domemaster 180–230)
                                  tilt:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                  azimuth:
                                    type: number
                                    minimum: -360
                                    maximum: 360
                                    description: 'flat: ° centre azimuth'
                                  elevation:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                    description: 'flat: ° centre elevation'
                                  width:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: 'flat: ° angular width'
                                  faces:
                                    enum:
                                      - 3
                                      - 4
                                      - 6
                                    description: '1.1 pyramid_views: number of views'
                                  layout:
                                    description: >-
                                      1.1: cubemap 3x2 | 6x1 | cross;
                                      pyramid_views cross | row | grid
                                    anyOf:
                                      - enum:
                                          - 3x2
                                          - 6x1
                                          - cross
                                          - row
                                          - grid
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                if:
                                  properties:
                                    projection:
                                      const: pyramid_views
                                  required:
                                    - projection
                                then:
                                  required:
                                    - faces
                              media:
                                description: >-
                                  Probe result (ffprobe): container, streams,
                                  duration. `probeUnavailable` when the server
                                  has no prober (asset still ready).
                                type: object
                                properties:
                                  container:
                                    type: string
                                  duration:
                                    description: Duration in seconds.
                                    type: number
                                    minimum: 0
                                  video:
                                    type: object
                                    properties:
                                      codec:
                                        type: string
                                      resolution:
                                        type: array
                                        items:
                                          type: integer
                                          minimum: 1
                                        minItems: 2
                                        maxItems: 2
                                      fps:
                                        type: number
                                        exclusiveMinimum: 0
                                      bitDepth:
                                        type: integer
                                        minimum: 1
                                      pixelFormat:
                                        type: string
                                    additionalProperties: true
                                  audio:
                                    type: object
                                    properties:
                                      codec:
                                        type: string
                                      channels:
                                        type: integer
                                        minimum: 1
                                      layout:
                                        type: string
                                      sampleRate:
                                        type: integer
                                        minimum: 1
                                      ambisonicOrder:
                                        type: integer
                                        minimum: 0
                                        maximum: 7
                                    additionalProperties: true
                                  probeUnavailable:
                                    type: boolean
                                additionalProperties: true
                              thumbnails:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - size
                                    - url
                                  properties:
                                    size:
                                      type: integer
                                      minimum: 16
                                    url:
                                      type: string
                                      format: uri-reference
                                  additionalProperties: false
                              tags:
                                type: array
                                items:
                                  type: string
                                  minLength: 1
                                  maxLength: 64
                                uniqueItems: true
                              usedBy:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                description: ids of shows referencing the asset
                              revision:
                                description: >-
                                  Monotonic resource revision; the strong ETag
                                  is derived from it.
                                type: integer
                                minimum: 0
                              createdAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                            allOf:
                              - if:
                                  properties:
                                    status:
                                      const: failed
                                  required:
                                    - status
                                then:
                                  required:
                                    - problem
                        $defs:
                          asset:
                            type: object
                            required:
                              - id
                              - name
                              - type
                              - status
                              - revision
                              - createdAt
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              name:
                                type: string
                                minLength: 1
                                maxLength: 512
                                description: original file name (with extension) or a title
                              type:
                                anyOf:
                                  - enum:
                                      - video
                                      - image
                                      - audio
                                      - zelim
                                      - boranko
                                      - comics
                                      - realtime
                                      - stream
                                      - dome
                                      - other
                                  - type: string
                                    pattern: ^[a-z][a-z0-9._-]{0,63}$
                              src:
                                type: string
                                description: >-
                                  external URI for registered (not stored)
                                  assets; absent for stored blobs. Type stream:
                                  also spout://<sender>,
                                  syphon://<app>/<server>,
                                  dmabuf://<pipewire-node>,
                                  v4l2:///dev/<device>, ndi://<source>
                                  (percent-encoded, docs/audio-reactive.md)
                              texture:
                                description: >-
                                  Stream asset fed by another application on the
                                  engine's machine (derived by the server from
                                  `src`, read-only).
                                type: object
                                required:
                                  - transport
                                  - sender
                                properties:
                                  transport:
                                    description: >-
                                      Shared GPU texture or spare network
                                      transport of a live source. Open list.
                                    anyOf:
                                      - enum:
                                          - spout
                                          - syphon
                                          - dmabuf
                                          - capture
                                          - ndi
                                      - type: string
                                        pattern: ^[a-z][a-z0-9_-]{0,31}$
                                  sender:
                                    type: string
                                    minLength: 1
                                    maxLength: 256
                                    description: >-
                                      Spout sender, Syphon server, PipeWire
                                      node, capture device or NDI source name
                                  application:
                                    type: string
                                    maxLength: 256
                                    description: Syphon application name
                                  fallbackUrl:
                                    type: string
                                    format: uri
                                additionalProperties: false
                              mediaType:
                                description: IANA media type.
                                type: string
                                pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                              sha256:
                                description: Lowercase hex SHA-256 digest.
                                type: string
                                pattern: ^[0-9a-f]{64}$
                              size:
                                type: integer
                                minimum: 0
                              status:
                                anyOf:
                                  - enum:
                                      - uploading
                                      - processing
                                      - ready
                                      - failed
                                  - type: string
                                    pattern: ^[a-z_]{1,32}$
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                                description: >-
                                  why the asset failed (e.g.
                                  upload-checksum-mismatch)
                              progress:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              mapping:
                                description: >-
                                  Content mapping onto the dome (01b §4.5, 02b
                                  §4.4).
                                type: object
                                required:
                                  - projection
                                properties:
                                  projection:
                                    anyOf:
                                      - enum:
                                          - domemaster
                                          - equirect
                                          - cubemap
                                          - flat
                                          - pyramid_views
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  fov:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: ° (domemaster 180–230)
                                  tilt:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                  azimuth:
                                    type: number
                                    minimum: -360
                                    maximum: 360
                                    description: 'flat: ° centre azimuth'
                                  elevation:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                    description: 'flat: ° centre elevation'
                                  width:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: 'flat: ° angular width'
                                  faces:
                                    enum:
                                      - 3
                                      - 4
                                      - 6
                                    description: '1.1 pyramid_views: number of views'
                                  layout:
                                    description: >-
                                      1.1: cubemap 3x2 | 6x1 | cross;
                                      pyramid_views cross | row | grid
                                    anyOf:
                                      - enum:
                                          - 3x2
                                          - 6x1
                                          - cross
                                          - row
                                          - grid
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                if:
                                  properties:
                                    projection:
                                      const: pyramid_views
                                  required:
                                    - projection
                                then:
                                  required:
                                    - faces
                              media:
                                description: >-
                                  Probe result (ffprobe): container, streams,
                                  duration. `probeUnavailable` when the server
                                  has no prober (asset still ready).
                                type: object
                                properties:
                                  container:
                                    type: string
                                  duration:
                                    description: Duration in seconds.
                                    type: number
                                    minimum: 0
                                  video:
                                    type: object
                                    properties:
                                      codec:
                                        type: string
                                      resolution:
                                        type: array
                                        items:
                                          type: integer
                                          minimum: 1
                                        minItems: 2
                                        maxItems: 2
                                      fps:
                                        type: number
                                        exclusiveMinimum: 0
                                      bitDepth:
                                        type: integer
                                        minimum: 1
                                      pixelFormat:
                                        type: string
                                    additionalProperties: true
                                  audio:
                                    type: object
                                    properties:
                                      codec:
                                        type: string
                                      channels:
                                        type: integer
                                        minimum: 1
                                      layout:
                                        type: string
                                      sampleRate:
                                        type: integer
                                        minimum: 1
                                      ambisonicOrder:
                                        type: integer
                                        minimum: 0
                                        maximum: 7
                                    additionalProperties: true
                                  probeUnavailable:
                                    type: boolean
                                additionalProperties: true
                              thumbnails:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - size
                                    - url
                                  properties:
                                    size:
                                      type: integer
                                      minimum: 16
                                    url:
                                      type: string
                                      format: uri-reference
                                  additionalProperties: false
                              tags:
                                type: array
                                items:
                                  type: string
                                  minLength: 1
                                  maxLength: 64
                                uniqueItems: true
                              usedBy:
                                type: array
                                items:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                description: ids of shows referencing the asset
                              revision:
                                description: >-
                                  Monotonic resource revision; the strong ETag
                                  is derived from it.
                                type: integer
                                minimum: 0
                              createdAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              updatedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                            allOf:
                              - if:
                                  properties:
                                    status:
                                      const: failed
                                  required:
                                    - status
                                then:
                                  required:
                                    - problem
                          textureTransport:
                            description: >-
                              Shared GPU texture or spare network transport of a
                              live source. Open list.
                            anyOf:
                              - enum:
                                  - spout
                                  - syphon
                                  - dmabuf
                                  - capture
                                  - ndi
                              - type: string
                                pattern: ^[a-z][a-z0-9_-]{0,31}$
                          texture:
                            description: >-
                              Stream asset fed by another application on the
                              engine's machine (derived by the server from
                              `src`, read-only).
                            type: object
                            required:
                              - transport
                              - sender
                            properties:
                              transport:
                                description: >-
                                  Shared GPU texture or spare network transport
                                  of a live source. Open list.
                                anyOf:
                                  - enum:
                                      - spout
                                      - syphon
                                      - dmabuf
                                      - capture
                                      - ndi
                                  - type: string
                                    pattern: ^[a-z][a-z0-9_-]{0,31}$
                              sender:
                                type: string
                                minLength: 1
                                maxLength: 256
                                description: >-
                                  Spout sender, Syphon server, PipeWire node,
                                  capture device or NDI source name
                              application:
                                type: string
                                maxLength: 256
                                description: Syphon application name
                              fallbackUrl:
                                type: string
                                format: uri
                            additionalProperties: false
                          textureSource:
                            description: >-
                              A live source seen by the engine (GET
                              /venues/{venueId}/texture-sources, event
                              textureSource.state).
                            type: object
                            required:
                              - id
                              - transport
                              - sender
                              - status
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              transport:
                                description: >-
                                  Shared GPU texture or spare network transport
                                  of a live source. Open list.
                                anyOf:
                                  - enum:
                                      - spout
                                      - syphon
                                      - dmabuf
                                      - capture
                                      - ndi
                                  - type: string
                                    pattern: ^[a-z][a-z0-9_-]{0,31}$
                              sender:
                                type: string
                                minLength: 1
                                maxLength: 256
                              application:
                                type: string
                                maxLength: 256
                              status:
                                anyOf:
                                  - enum:
                                      - online
                                      - offline
                                  - type: string
                                    pattern: ^[a-z][a-z_-]{0,31}$
                              width:
                                type: integer
                                minimum: 1
                              height:
                                type: integer
                                minimum: 1
                              fps:
                                type: number
                                minimum: 0
                                description: frames per second measured by the engine
                              pixelFormat:
                                type: string
                                maxLength: 32
                              assetId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              node:
                                type: string
                                maxLength: 64
                                description: node whose engine sees the source
                              lastSeen:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          textureSourcePage:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  description: >-
                                    A live source seen by the engine (GET
                                    /venues/{venueId}/texture-sources, event
                                    textureSource.state).
                                  type: object
                                  required:
                                    - id
                                    - transport
                                    - sender
                                    - status
                                  properties:
                                    id:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    transport:
                                      description: >-
                                        Shared GPU texture or spare network
                                        transport of a live source. Open list.
                                      anyOf:
                                        - enum:
                                            - spout
                                            - syphon
                                            - dmabuf
                                            - capture
                                            - ndi
                                        - type: string
                                          pattern: ^[a-z][a-z0-9_-]{0,31}$
                                    sender:
                                      type: string
                                      minLength: 1
                                      maxLength: 256
                                    application:
                                      type: string
                                      maxLength: 256
                                    status:
                                      anyOf:
                                        - enum:
                                            - online
                                            - offline
                                        - type: string
                                          pattern: ^[a-z][a-z_-]{0,31}$
                                    width:
                                      type: integer
                                      minimum: 1
                                    height:
                                      type: integer
                                      minimum: 1
                                    fps:
                                      type: number
                                      minimum: 0
                                      description: frames per second measured by the engine
                                    pixelFormat:
                                      type: string
                                      maxLength: 32
                                    assetId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    node:
                                      type: string
                                      maxLength: 64
                                      description: node whose engine sees the source
                                    lastSeen:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                            additionalProperties: false
                          type:
                            anyOf:
                              - enum:
                                  - video
                                  - image
                                  - audio
                                  - zelim
                                  - boranko
                                  - comics
                                  - realtime
                                  - stream
                                  - dome
                                  - other
                              - type: string
                                pattern: ^[a-z][a-z0-9._-]{0,63}$
                          status:
                            anyOf:
                              - enum:
                                  - uploading
                                  - processing
                                  - ready
                                  - failed
                              - type: string
                                pattern: ^[a-z_]{1,32}$
                          media:
                            description: >-
                              Probe result (ffprobe): container, streams,
                              duration. `probeUnavailable` when the server has
                              no prober (asset still ready).
                            type: object
                            properties:
                              container:
                                type: string
                              duration:
                                description: Duration in seconds.
                                type: number
                                minimum: 0
                              video:
                                type: object
                                properties:
                                  codec:
                                    type: string
                                  resolution:
                                    type: array
                                    items:
                                      type: integer
                                      minimum: 1
                                    minItems: 2
                                    maxItems: 2
                                  fps:
                                    type: number
                                    exclusiveMinimum: 0
                                  bitDepth:
                                    type: integer
                                    minimum: 1
                                  pixelFormat:
                                    type: string
                                additionalProperties: true
                              audio:
                                type: object
                                properties:
                                  codec:
                                    type: string
                                  channels:
                                    type: integer
                                    minimum: 1
                                  layout:
                                    type: string
                                  sampleRate:
                                    type: integer
                                    minimum: 1
                                  ambisonicOrder:
                                    type: integer
                                    minimum: 0
                                    maximum: 7
                                additionalProperties: true
                              probeUnavailable:
                                type: boolean
                            additionalProperties: true
                          input:
                            description: >-
                              POST /assets JSON body: register a finished tus
                              upload or an external URL (streams, CDN).
                            type: object
                            properties:
                              uploadId:
                                description: >-
                                  Server-owned resource id: UUIDv7, lowercase,
                                  sortable by creation time.
                                type: string
                                pattern: >-
                                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                examples:
                                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                              url:
                                type: string
                                format: uri
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              name:
                                type: string
                                minLength: 1
                                maxLength: 512
                              type:
                                anyOf:
                                  - enum:
                                      - video
                                      - image
                                      - audio
                                      - zelim
                                      - boranko
                                      - comics
                                      - realtime
                                      - stream
                                      - dome
                                      - other
                                  - type: string
                                    pattern: ^[a-z][a-z0-9._-]{0,63}$
                              mapping:
                                description: >-
                                  Content mapping onto the dome (01b §4.5, 02b
                                  §4.4).
                                type: object
                                required:
                                  - projection
                                properties:
                                  projection:
                                    anyOf:
                                      - enum:
                                          - domemaster
                                          - equirect
                                          - cubemap
                                          - flat
                                          - pyramid_views
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  fov:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: ° (domemaster 180–230)
                                  tilt:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                  azimuth:
                                    type: number
                                    minimum: -360
                                    maximum: 360
                                    description: 'flat: ° centre azimuth'
                                  elevation:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                    description: 'flat: ° centre elevation'
                                  width:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: 'flat: ° angular width'
                                  faces:
                                    enum:
                                      - 3
                                      - 4
                                      - 6
                                    description: '1.1 pyramid_views: number of views'
                                  layout:
                                    description: >-
                                      1.1: cubemap 3x2 | 6x1 | cross;
                                      pyramid_views cross | row | grid
                                    anyOf:
                                      - enum:
                                          - 3x2
                                          - 6x1
                                          - cross
                                          - row
                                          - grid
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                if:
                                  properties:
                                    projection:
                                      const: pyramid_views
                                  required:
                                    - projection
                                then:
                                  required:
                                    - faces
                              tags:
                                type: array
                                items:
                                  type: string
                                  minLength: 1
                                  maxLength: 64
                                uniqueItems: true
                              sha256:
                                description: Lowercase hex SHA-256 digest.
                                type: string
                                pattern: ^[0-9a-f]{64}$
                              fallbackUrl:
                                type: string
                                format: uri
                                description: >-
                                  stream assets: source to use while `url` is
                                  unavailable, e.g. ndi://…
                            additionalProperties: false
                            oneOf:
                              - required:
                                  - uploadId
                              - required:
                                  - url
                          multipart:
                            description: >-
                              POST /assets multipart/form-data body (simple
                              upload ≤ 100 MB): part `file` + optional JSON
                              fields.
                            type: object
                            required:
                              - file
                            properties:
                              file:
                                type: string
                                contentMediaType: application/octet-stream
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              type:
                                anyOf:
                                  - enum:
                                      - video
                                      - image
                                      - audio
                                      - zelim
                                      - boranko
                                      - comics
                                      - realtime
                                      - stream
                                      - dome
                                      - other
                                  - type: string
                                    pattern: ^[a-z][a-z0-9._-]{0,63}$
                              tags:
                                type: string
                                description: comma-separated
                          patch:
                            type: object
                            minProperties: 1
                            properties:
                              name:
                                type: string
                                minLength: 1
                                maxLength: 512
                              type:
                                anyOf:
                                  - enum:
                                      - video
                                      - image
                                      - audio
                                      - zelim
                                      - boranko
                                      - comics
                                      - realtime
                                      - stream
                                      - dome
                                      - other
                                  - type: string
                                    pattern: ^[a-z][a-z0-9._-]{0,63}$
                              mapping:
                                description: >-
                                  Content mapping onto the dome (01b §4.5, 02b
                                  §4.4).
                                type: object
                                required:
                                  - projection
                                properties:
                                  projection:
                                    anyOf:
                                      - enum:
                                          - domemaster
                                          - equirect
                                          - cubemap
                                          - flat
                                          - pyramid_views
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  fov:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: ° (domemaster 180–230)
                                  tilt:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                  azimuth:
                                    type: number
                                    minimum: -360
                                    maximum: 360
                                    description: 'flat: ° centre azimuth'
                                  elevation:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                    description: 'flat: ° centre elevation'
                                  width:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: 'flat: ° angular width'
                                  faces:
                                    enum:
                                      - 3
                                      - 4
                                      - 6
                                    description: '1.1 pyramid_views: number of views'
                                  layout:
                                    description: >-
                                      1.1: cubemap 3x2 | 6x1 | cross;
                                      pyramid_views cross | row | grid
                                    anyOf:
                                      - enum:
                                          - 3x2
                                          - 6x1
                                          - cross
                                          - row
                                          - grid
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                if:
                                  properties:
                                    projection:
                                      const: pyramid_views
                                  required:
                                    - projection
                                then:
                                  required:
                                    - faces
                              tags:
                                type: array
                                items:
                                  type: string
                                  minLength: 1
                                  maxLength: 64
                                uniqueItems: true
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          page:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - id
                                    - name
                                    - type
                                    - status
                                    - revision
                                    - createdAt
                                  properties:
                                    id:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    name:
                                      type: string
                                      minLength: 1
                                      maxLength: 512
                                      description: >-
                                        original file name (with extension) or a
                                        title
                                    type:
                                      anyOf:
                                        - enum:
                                            - video
                                            - image
                                            - audio
                                            - zelim
                                            - boranko
                                            - comics
                                            - realtime
                                            - stream
                                            - dome
                                            - other
                                        - type: string
                                          pattern: ^[a-z][a-z0-9._-]{0,63}$
                                    src:
                                      type: string
                                      description: >-
                                        external URI for registered (not stored)
                                        assets; absent for stored blobs. Type
                                        stream: also spout://<sender>,
                                        syphon://<app>/<server>,
                                        dmabuf://<pipewire-node>,
                                        v4l2:///dev/<device>, ndi://<source>
                                        (percent-encoded,
                                        docs/audio-reactive.md)
                                    texture:
                                      description: >-
                                        Stream asset fed by another application
                                        on the engine's machine (derived by the
                                        server from `src`, read-only).
                                      type: object
                                      required:
                                        - transport
                                        - sender
                                      properties:
                                        transport:
                                          description: >-
                                            Shared GPU texture or spare network
                                            transport of a live source. Open list.
                                          anyOf:
                                            - enum:
                                                - spout
                                                - syphon
                                                - dmabuf
                                                - capture
                                                - ndi
                                            - type: string
                                              pattern: ^[a-z][a-z0-9_-]{0,31}$
                                        sender:
                                          type: string
                                          minLength: 1
                                          maxLength: 256
                                          description: >-
                                            Spout sender, Syphon server, PipeWire
                                            node, capture device or NDI source name
                                        application:
                                          type: string
                                          maxLength: 256
                                          description: Syphon application name
                                        fallbackUrl:
                                          type: string
                                          format: uri
                                      additionalProperties: false
                                    mediaType:
                                      description: IANA media type.
                                      type: string
                                      pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                                    sha256:
                                      description: Lowercase hex SHA-256 digest.
                                      type: string
                                      pattern: ^[0-9a-f]{64}$
                                    size:
                                      type: integer
                                      minimum: 0
                                    status:
                                      anyOf:
                                        - enum:
                                            - uploading
                                            - processing
                                            - ready
                                            - failed
                                        - type: string
                                          pattern: ^[a-z_]{1,32}$
                                    problem:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). RFC 9457 problem details with
                                        the Freedome `code` catalogue, 02e §3.3.
                                        Also the `data` of WS `error`, the
                                        socket.io ack error and GraphQL
                                        errors[].extensions.problem. The
                                        catalogue is open: unknown codes are
                                        allowed; known codes are bound to their
                                        HTTP status.
                                      title: Problem details
                                      type: object
                                      required:
                                        - type
                                        - title
                                        - code
                                      properties:
                                        type:
                                          type: string
                                          format: uri
                                          description: >-
                                            https://freedome.nativemind.us/problems/<code>
                                            for catalogue codes.
                                        title:
                                          type: string
                                          minLength: 1
                                        status:
                                          type: integer
                                          minimum: 100
                                          maximum: 599
                                        detail:
                                          type: string
                                        instance:
                                          type: string
                                          format: uri-reference
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        traceId:
                                          type: string
                                          pattern: ^[0-9a-f]{16,32}$
                                        errors:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                      allOf:
                                        - if:
                                            properties:
                                              code:
                                                const: validation-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: not-found
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 404
                                        - if:
                                            properties:
                                              code:
                                                const: conflict
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 412
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-required
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 428
                                        - if:
                                            properties:
                                              code:
                                                const: unauthenticated
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: forbidden
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: rate-limited
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 429
                                        - if:
                                            properties:
                                              code:
                                                const: payload-too-large
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 413
                                        - if:
                                            properties:
                                              code:
                                                const: unsupported-format
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 415
                                        - if:
                                            properties:
                                              code:
                                                const: engine-unavailable
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: engine-incompatible
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: degraded
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: upload-checksum-mismatch
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: legacy-unsupported
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 501
                                        - if:
                                            properties:
                                              code:
                                                const: internal
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 500
                                        - if:
                                            properties:
                                              code:
                                                const: clock-unlocked
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: not-configured
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: authorization-pending
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: slow-down
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: access-denied
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: expired-token
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: token-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-key-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-in-progress
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                      additionalProperties: true
                                      examples:
                                        - type: >-
                                            https://freedome.nativemind.us/problems/engine-unavailable
                                          title: Visual engine unavailable
                                          status: 503
                                          detail: >-
                                            freedome-engined not reachable at
                                            unix:/run/freedome/engine.sock
                                          instance: /api/v1/venues/default/players/main/play
                                          code: engine-unavailable
                                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                      $defs:
                                        knownCode:
                                          enum:
                                            - validation-failed
                                            - not-found
                                            - conflict
                                            - precondition-failed
                                            - precondition-required
                                            - unauthenticated
                                            - forbidden
                                            - rate-limited
                                            - payload-too-large
                                            - unsupported-format
                                            - engine-unavailable
                                            - engine-incompatible
                                            - degraded
                                            - job-failed
                                            - upload-checksum-mismatch
                                            - legacy-unsupported
                                            - internal
                                            - clock-unlocked
                                            - not-configured
                                            - authorization-pending
                                            - slow-down
                                            - access-denied
                                            - expired-token
                                            - token-reused
                                            - idempotency-key-reused
                                            - idempotency-in-progress
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        fieldError:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                      description: >-
                                        why the asset failed (e.g.
                                        upload-checksum-mismatch)
                                    progress:
                                      description: >-
                                        0..1 (brightness, linear volume gain,
                                        progress).
                                      type: number
                                      minimum: 0
                                      maximum: 1
                                    mapping:
                                      description: >-
                                        Content mapping onto the dome (01b §4.5,
                                        02b §4.4).
                                      type: object
                                      required:
                                        - projection
                                      properties:
                                        projection:
                                          anyOf:
                                            - enum:
                                                - domemaster
                                                - equirect
                                                - cubemap
                                                - flat
                                                - pyramid_views
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        fov:
                                          type: number
                                          exclusiveMinimum: 0
                                          maximum: 360
                                          description: ° (domemaster 180–230)
                                        tilt:
                                          type: number
                                          minimum: -90
                                          maximum: 90
                                        azimuth:
                                          type: number
                                          minimum: -360
                                          maximum: 360
                                          description: 'flat: ° centre azimuth'
                                        elevation:
                                          type: number
                                          minimum: -90
                                          maximum: 90
                                          description: 'flat: ° centre elevation'
                                        width:
                                          type: number
                                          exclusiveMinimum: 0
                                          maximum: 360
                                          description: 'flat: ° angular width'
                                        faces:
                                          enum:
                                            - 3
                                            - 4
                                            - 6
                                          description: '1.1 pyramid_views: number of views'
                                        layout:
                                          description: >-
                                            1.1: cubemap 3x2 | 6x1 | cross;
                                            pyramid_views cross | row | grid
                                          anyOf:
                                            - enum:
                                                - 3x2
                                                - 6x1
                                                - cross
                                                - row
                                                - grid
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                      if:
                                        properties:
                                          projection:
                                            const: pyramid_views
                                        required:
                                          - projection
                                      then:
                                        required:
                                          - faces
                                    media:
                                      description: >-
                                        Probe result (ffprobe): container,
                                        streams, duration. `probeUnavailable`
                                        when the server has no prober (asset
                                        still ready).
                                      type: object
                                      properties:
                                        container:
                                          type: string
                                        duration:
                                          description: Duration in seconds.
                                          type: number
                                          minimum: 0
                                        video:
                                          type: object
                                          properties:
                                            codec:
                                              type: string
                                            resolution:
                                              type: array
                                              items:
                                                type: integer
                                                minimum: 1
                                              minItems: 2
                                              maxItems: 2
                                            fps:
                                              type: number
                                              exclusiveMinimum: 0
                                            bitDepth:
                                              type: integer
                                              minimum: 1
                                            pixelFormat:
                                              type: string
                                          additionalProperties: true
                                        audio:
                                          type: object
                                          properties:
                                            codec:
                                              type: string
                                            channels:
                                              type: integer
                                              minimum: 1
                                            layout:
                                              type: string
                                            sampleRate:
                                              type: integer
                                              minimum: 1
                                            ambisonicOrder:
                                              type: integer
                                              minimum: 0
                                              maximum: 7
                                          additionalProperties: true
                                        probeUnavailable:
                                          type: boolean
                                      additionalProperties: true
                                    thumbnails:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - size
                                          - url
                                        properties:
                                          size:
                                            type: integer
                                            minimum: 16
                                          url:
                                            type: string
                                            format: uri-reference
                                        additionalProperties: false
                                    tags:
                                      type: array
                                      items:
                                        type: string
                                        minLength: 1
                                        maxLength: 64
                                      uniqueItems: true
                                    usedBy:
                                      type: array
                                      items:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      description: ids of shows referencing the asset
                                    revision:
                                      description: >-
                                        Monotonic resource revision; the strong
                                        ETag is derived from it.
                                      type: integer
                                      minimum: 0
                                    createdAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    updatedAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                  allOf:
                                    - if:
                                        properties:
                                          status:
                                            const: failed
                                        required:
                                          - status
                                      then:
                                        required:
                                          - problem
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                              count:
                                type: integer
                                minimum: 0
                            additionalProperties: false
                          storage:
                            description: GET /storage (replaces /api/v1/content/stats).
                            type: object
                            required:
                              - totalBytes
                              - usedBytes
                              - freeBytes
                            properties:
                              totalBytes:
                                type: integer
                                minimum: 0
                              usedBytes:
                                type: integer
                                minimum: 0
                              freeBytes:
                                type: integer
                                minimum: 0
                              quotaBytes:
                                anyOf:
                                  - type: integer
                                    minimum: 0
                                  - type: 'null'
                              assets:
                                type: object
                                required:
                                  - count
                                  - bytes
                                properties:
                                  count:
                                    type: integer
                                    minimum: 0
                                  bytes:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                              uploads:
                                type: object
                                required:
                                  - count
                                  - bytes
                                properties:
                                  count:
                                    type: integer
                                    minimum: 0
                                  bytes:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                              byType:
                                type: object
                                additionalProperties:
                                  type: object
                                  required:
                                    - count
                                    - bytes
                                  properties:
                                    count:
                                      type: integer
                                      minimum: 0
                                    bytes:
                                      type: integer
                                      minimum: 0
                                  additionalProperties: false
                            additionalProperties: false
                          countBytes:
                            type: object
                            required:
                              - count
                              - bytes
                            properties:
                              count:
                                type: integer
                                minimum: 0
                              bytes:
                                type: integer
                                minimum: 0
                            additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: asset.deleted
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        type: object
                        required:
                          - id
                        properties:
                          id:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: upload.progress
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/api/1.0/upload.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE). tus
                          1.0.0 upload (02e §5.4, C12): JSON status of GET
                          /uploads/{uploadId} for non-tus clients; the decoded
                          Upload-Metadata. Root = upload status.
                        title: Upload
                        type: object
                        required:
                          - id
                          - length
                          - offset
                          - status
                          - metadata
                          - createdAt
                        properties:
                          id:
                            description: >-
                              Server-owned resource id: UUIDv7, lowercase,
                              sortable by creation time.
                            type: string
                            pattern: >-
                              ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                            examples:
                              - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                          length:
                            type: integer
                            minimum: 0
                            description: Upload-Length
                          offset:
                            type: integer
                            minimum: 0
                            description: Upload-Offset (bytes received and persisted)
                          status:
                            anyOf:
                              - enum:
                                  - uploading
                                  - complete
                                  - failed
                                  - expired
                              - type: string
                                pattern: ^[a-z_]{1,32}$
                          metadata:
                            description: >-
                              Upload-Metadata (tus: comma-separated `key
                              base64(value)` pairs), decoded.
                            type: object
                            required:
                              - filename
                              - purpose
                            properties:
                              filename:
                                type: string
                                minLength: 1
                                maxLength: 512
                              contentType:
                                description: IANA media type.
                                type: string
                                pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                              sha256:
                                description: Lowercase hex SHA-256 digest.
                                type: string
                                pattern: ^[0-9a-f]{64}$
                              purpose:
                                anyOf:
                                  - enum:
                                      - asset
                                      - import
                                      - restore
                                      - capture
                                      - update
                                  - type: string
                                    pattern: ^[a-z][a-z0-9_-]{0,31}$
                              assetId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                            additionalProperties: true
                          assetId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          problem:
                            $schema: https://json-schema.org/draft/2020-12/schema
                            $id: >-
                              https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                            $comment: >-
                              NativeMindNONC — freedome_contract (see LICENSE).
                              RFC 9457 problem details with the Freedome `code`
                              catalogue, 02e §3.3. Also the `data` of WS
                              `error`, the socket.io ack error and GraphQL
                              errors[].extensions.problem. The catalogue is
                              open: unknown codes are allowed; known codes are
                              bound to their HTTP status.
                            title: Problem details
                            type: object
                            required:
                              - type
                              - title
                              - code
                            properties:
                              type:
                                type: string
                                format: uri
                                description: >-
                                  https://freedome.nativemind.us/problems/<code>
                                  for catalogue codes.
                              title:
                                type: string
                                minLength: 1
                              status:
                                type: integer
                                minimum: 100
                                maximum: 599
                              detail:
                                type: string
                              instance:
                                type: string
                                format: uri-reference
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              traceId:
                                type: string
                                pattern: ^[0-9a-f]{16,32}$
                              errors:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                            allOf:
                              - if:
                                  properties:
                                    code:
                                      const: validation-failed
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 422
                              - if:
                                  properties:
                                    code:
                                      const: not-found
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 404
                              - if:
                                  properties:
                                    code:
                                      const: conflict
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 409
                              - if:
                                  properties:
                                    code:
                                      const: precondition-failed
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 412
                              - if:
                                  properties:
                                    code:
                                      const: precondition-required
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 428
                              - if:
                                  properties:
                                    code:
                                      const: unauthenticated
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 401
                              - if:
                                  properties:
                                    code:
                                      const: forbidden
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 403
                              - if:
                                  properties:
                                    code:
                                      const: rate-limited
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 429
                              - if:
                                  properties:
                                    code:
                                      const: payload-too-large
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 413
                              - if:
                                  properties:
                                    code:
                                      const: unsupported-format
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 415
                              - if:
                                  properties:
                                    code:
                                      const: engine-unavailable
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 503
                              - if:
                                  properties:
                                    code:
                                      const: engine-incompatible
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 503
                              - if:
                                  properties:
                                    code:
                                      const: degraded
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 503
                              - if:
                                  properties:
                                    code:
                                      const: upload-checksum-mismatch
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 422
                              - if:
                                  properties:
                                    code:
                                      const: legacy-unsupported
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 501
                              - if:
                                  properties:
                                    code:
                                      const: internal
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 500
                              - if:
                                  properties:
                                    code:
                                      const: clock-unlocked
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 409
                              - if:
                                  properties:
                                    code:
                                      const: not-configured
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 503
                              - if:
                                  properties:
                                    code:
                                      const: authorization-pending
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 400
                              - if:
                                  properties:
                                    code:
                                      const: slow-down
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 400
                              - if:
                                  properties:
                                    code:
                                      const: access-denied
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 403
                              - if:
                                  properties:
                                    code:
                                      const: expired-token
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 400
                              - if:
                                  properties:
                                    code:
                                      const: token-reused
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 401
                              - if:
                                  properties:
                                    code:
                                      const: idempotency-key-reused
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 409
                              - if:
                                  properties:
                                    code:
                                      const: idempotency-in-progress
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 409
                            additionalProperties: true
                            examples:
                              - type: >-
                                  https://freedome.nativemind.us/problems/engine-unavailable
                                title: Visual engine unavailable
                                status: 503
                                detail: >-
                                  freedome-engined not reachable at
                                  unix:/run/freedome/engine.sock
                                instance: /api/v1/venues/default/players/main/play
                                code: engine-unavailable
                                traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                            $defs:
                              knownCode:
                                enum:
                                  - validation-failed
                                  - not-found
                                  - conflict
                                  - precondition-failed
                                  - precondition-required
                                  - unauthenticated
                                  - forbidden
                                  - rate-limited
                                  - payload-too-large
                                  - unsupported-format
                                  - engine-unavailable
                                  - engine-incompatible
                                  - degraded
                                  - job-failed
                                  - upload-checksum-mismatch
                                  - legacy-unsupported
                                  - internal
                                  - clock-unlocked
                                  - not-configured
                                  - authorization-pending
                                  - slow-down
                                  - access-denied
                                  - expired-token
                                  - token-reused
                                  - idempotency-key-reused
                                  - idempotency-in-progress
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              fieldError:
                                type: object
                                required:
                                  - pointer
                                  - detail
                                properties:
                                  pointer:
                                    type: string
                                    format: json-pointer
                                  detail:
                                    type: string
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                additionalProperties: true
                          expiresAt:
                            description: >-
                              RFC 3339 UTC with milliseconds, e.g.
                              2026-10-19T12:00:00.000Z.
                            type: string
                            format: date-time
                            pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          createdAt:
                            description: >-
                              RFC 3339 UTC with milliseconds, e.g.
                              2026-10-19T12:00:00.000Z.
                            type: string
                            format: date-time
                            pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          links:
                            type: object
                            properties:
                              self:
                                type: string
                                format: uri-reference
                              asset:
                                type: string
                                format: uri-reference
                            additionalProperties: false
                        additionalProperties: false
                        $defs:
                          metadata:
                            description: >-
                              Upload-Metadata (tus: comma-separated `key
                              base64(value)` pairs), decoded.
                            type: object
                            required:
                              - filename
                              - purpose
                            properties:
                              filename:
                                type: string
                                minLength: 1
                                maxLength: 512
                              contentType:
                                description: IANA media type.
                                type: string
                                pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                              sha256:
                                description: Lowercase hex SHA-256 digest.
                                type: string
                                pattern: ^[0-9a-f]{64}$
                              purpose:
                                anyOf:
                                  - enum:
                                      - asset
                                      - import
                                      - restore
                                      - capture
                                      - update
                                  - type: string
                                    pattern: ^[a-z][a-z0-9_-]{0,31}$
                              assetId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                            additionalProperties: true
                          capabilities:
                            description: >-
                              Informative mirror of the OPTIONS /uploads headers
                              (Tus-Version, Tus-Extension, Tus-Max-Size,
                              Tus-Checksum-Algorithm).
                            type: object
                            required:
                              - version
                              - extensions
                            properties:
                              version:
                                type: array
                                items:
                                  type: string
                              extensions:
                                type: array
                                items:
                                  anyOf:
                                    - enum:
                                        - creation
                                        - creation-with-upload
                                        - termination
                                        - checksum
                                        - expiration
                                    - type: string
                              maxSize:
                                type: integer
                                minimum: 0
                              checksumAlgorithms:
                                type: array
                                items:
                                  type: string
                              maxChunkBytes:
                                type: integer
                                minimum: 1
                                description: >-
                                  server-recommended PATCH size (≤ 95 MB behind
                                  Cloudflare)
                            additionalProperties: false
                      patch:
                        type: object
                        required:
                          - offset
                        properties:
                          offset:
                            type: integer
                            minimum: 0
                          length:
                            type: integer
                            minimum: 0
                          status:
                            type: string
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: gateway.state
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/api/1.0/gateway.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE).
                          Compatibility gateways (inbound emulators, outbound
                          drivers, 02d) and the OSC send integration (02e §5.6).
                          Root = GET /gateways/{gatewayId}.
                        title: Gateway
                        allOf:
                          - type: object
                            required:
                              - id
                              - direction
                              - protocol
                              - enabled
                              - status
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              name:
                                type: string
                              direction:
                                enum:
                                  - inbound
                                  - outbound
                                  - converter
                              protocol:
                                type: string
                                description: >-
                                  e.g. screenberry-json, dome360-http, watchout,
                                  resolume, osc, pjlink, artnet
                              vendor:
                                type: string
                              enabled:
                                type: boolean
                              status:
                                anyOf:
                                  - enum:
                                      - disabled
                                      - starting
                                      - up
                                      - degraded
                                      - down
                                  - type: string
                                    pattern: ^[a-z][a-z_-]{0,31}$
                              docsOnly:
                                type: boolean
                                description: >-
                                  implemented from public docs, no recorded
                                  fixtures from a real system yet
                              listeners:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - transport
                                    - port
                                  properties:
                                    transport:
                                      enum:
                                        - http
                                        - tcp
                                        - udp
                                        - osc
                                        - ws
                                        - socketio
                                        - serial
                                    port:
                                      type: integer
                                      minimum: 0
                                      maximum: 65535
                                    bind:
                                      type: string
                                  additionalProperties: false
                              peers:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    address:
                                      type: string
                                    lastSeen:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  additionalProperties: false
                              config:
                                type: object
                                additionalProperties: true
                                description: gateway-specific; secrets redacted as "***"
                              allowCidrs:
                                type: array
                                items:
                                  type: string
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              stats:
                                type: object
                                additionalProperties:
                                  type: number
                              resolume:
                                description: >-
                                  live driver status; only on protocol resolume,
                                  read-only
                                type: object
                                required:
                                  - osc
                                  - rest
                                  - ws
                                properties:
                                  osc:
                                    type: object
                                    required:
                                      - state
                                    properties:
                                      state:
                                        anyOf:
                                          - enum:
                                              - disabled
                                              - connecting
                                              - up
                                              - down
                                          - type: string
                                            pattern: ^[a-z][a-z_-]{0,31}$
                                        description: >-
                                          for OSC over UDP, up means sending:
                                          there is no acknowledgement
                                      lastOkAt:
                                        description: >-
                                          RFC 3339 UTC with milliseconds, e.g.
                                          2026-10-19T12:00:00.000Z.
                                        type: string
                                        format: date-time
                                        pattern: >-
                                          ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                      sent:
                                        type: integer
                                        minimum: 0
                                      dropped:
                                        type: integer
                                        minimum: 0
                                      problem:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). RFC 9457 problem details with
                                          the Freedome `code` catalogue, 02e §3.3.
                                          Also the `data` of WS `error`, the
                                          socket.io ack error and GraphQL
                                          errors[].extensions.problem. The
                                          catalogue is open: unknown codes are
                                          allowed; known codes are bound to their
                                          HTTP status.
                                        title: Problem details
                                        type: object
                                        required:
                                          - type
                                          - title
                                          - code
                                        properties:
                                          type:
                                            type: string
                                            format: uri
                                            description: >-
                                              https://freedome.nativemind.us/problems/<code>
                                              for catalogue codes.
                                          title:
                                            type: string
                                            minLength: 1
                                          status:
                                            type: integer
                                            minimum: 100
                                            maximum: 599
                                          detail:
                                            type: string
                                          instance:
                                            type: string
                                            format: uri-reference
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          traceId:
                                            type: string
                                            pattern: ^[0-9a-f]{16,32}$
                                          errors:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - pointer
                                                - detail
                                              properties:
                                                pointer:
                                                  type: string
                                                  format: json-pointer
                                                detail:
                                                  type: string
                                                code:
                                                  description: >-
                                                    Stable machine key; also the last path
                                                    segment of `type`. Open set: see
                                                    knownCode.
                                                  type: string
                                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                              additionalProperties: true
                                        allOf:
                                          - if:
                                              properties:
                                                code:
                                                  const: validation-failed
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 422
                                          - if:
                                              properties:
                                                code:
                                                  const: not-found
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 404
                                          - if:
                                              properties:
                                                code:
                                                  const: conflict
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: precondition-failed
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 412
                                          - if:
                                              properties:
                                                code:
                                                  const: precondition-required
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 428
                                          - if:
                                              properties:
                                                code:
                                                  const: unauthenticated
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 401
                                          - if:
                                              properties:
                                                code:
                                                  const: forbidden
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 403
                                          - if:
                                              properties:
                                                code:
                                                  const: rate-limited
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 429
                                          - if:
                                              properties:
                                                code:
                                                  const: payload-too-large
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 413
                                          - if:
                                              properties:
                                                code:
                                                  const: unsupported-format
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 415
                                          - if:
                                              properties:
                                                code:
                                                  const: engine-unavailable
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: engine-incompatible
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: degraded
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: upload-checksum-mismatch
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 422
                                          - if:
                                              properties:
                                                code:
                                                  const: legacy-unsupported
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 501
                                          - if:
                                              properties:
                                                code:
                                                  const: internal
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 500
                                          - if:
                                              properties:
                                                code:
                                                  const: clock-unlocked
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: not-configured
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: authorization-pending
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: slow-down
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: access-denied
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 403
                                          - if:
                                              properties:
                                                code:
                                                  const: expired-token
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: token-reused
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 401
                                          - if:
                                              properties:
                                                code:
                                                  const: idempotency-key-reused
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: idempotency-in-progress
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                        additionalProperties: true
                                        examples:
                                          - type: >-
                                              https://freedome.nativemind.us/problems/engine-unavailable
                                            title: Visual engine unavailable
                                            status: 503
                                            detail: >-
                                              freedome-engined not reachable at
                                              unix:/run/freedome/engine.sock
                                            instance: /api/v1/venues/default/players/main/play
                                            code: engine-unavailable
                                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                        $defs:
                                          knownCode:
                                            enum:
                                              - validation-failed
                                              - not-found
                                              - conflict
                                              - precondition-failed
                                              - precondition-required
                                              - unauthenticated
                                              - forbidden
                                              - rate-limited
                                              - payload-too-large
                                              - unsupported-format
                                              - engine-unavailable
                                              - engine-incompatible
                                              - degraded
                                              - job-failed
                                              - upload-checksum-mismatch
                                              - legacy-unsupported
                                              - internal
                                              - clock-unlocked
                                              - not-configured
                                              - authorization-pending
                                              - slow-down
                                              - access-denied
                                              - expired-token
                                              - token-reused
                                              - idempotency-key-reused
                                              - idempotency-in-progress
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          fieldError:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                    additionalProperties: false
                                  rest:
                                    type: object
                                    required:
                                      - state
                                    properties:
                                      state:
                                        anyOf:
                                          - enum:
                                              - disabled
                                              - connecting
                                              - up
                                              - down
                                          - type: string
                                            pattern: ^[a-z][a-z_-]{0,31}$
                                        description: >-
                                          for OSC over UDP, up means sending:
                                          there is no acknowledgement
                                      lastOkAt:
                                        description: >-
                                          RFC 3339 UTC with milliseconds, e.g.
                                          2026-10-19T12:00:00.000Z.
                                        type: string
                                        format: date-time
                                        pattern: >-
                                          ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                      sent:
                                        type: integer
                                        minimum: 0
                                      dropped:
                                        type: integer
                                        minimum: 0
                                      problem:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). RFC 9457 problem details with
                                          the Freedome `code` catalogue, 02e §3.3.
                                          Also the `data` of WS `error`, the
                                          socket.io ack error and GraphQL
                                          errors[].extensions.problem. The
                                          catalogue is open: unknown codes are
                                          allowed; known codes are bound to their
                                          HTTP status.
                                        title: Problem details
                                        type: object
                                        required:
                                          - type
                                          - title
                                          - code
                                        properties:
                                          type:
                                            type: string
                                            format: uri
                                            description: >-
                                              https://freedome.nativemind.us/problems/<code>
                                              for catalogue codes.
                                          title:
                                            type: string
                                            minLength: 1
                                          status:
                                            type: integer
                                            minimum: 100
                                            maximum: 599
                                          detail:
                                            type: string
                                          instance:
                                            type: string
                                            format: uri-reference
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          traceId:
                                            type: string
                                            pattern: ^[0-9a-f]{16,32}$
                                          errors:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - pointer
                                                - detail
                                              properties:
                                                pointer:
                                                  type: string
                                                  format: json-pointer
                                                detail:
                                                  type: string
                                                code:
                                                  description: >-
                                                    Stable machine key; also the last path
                                                    segment of `type`. Open set: see
                                                    knownCode.
                                                  type: string
                                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                              additionalProperties: true
                                        allOf:
                                          - if:
                                              properties:
                                                code:
                                                  const: validation-failed
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 422
                                          - if:
                                              properties:
                                                code:
                                                  const: not-found
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 404
                                          - if:
                                              properties:
                                                code:
                                                  const: conflict
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: precondition-failed
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 412
                                          - if:
                                              properties:
                                                code:
                                                  const: precondition-required
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 428
                                          - if:
                                              properties:
                                                code:
                                                  const: unauthenticated
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 401
                                          - if:
                                              properties:
                                                code:
                                                  const: forbidden
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 403
                                          - if:
                                              properties:
                                                code:
                                                  const: rate-limited
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 429
                                          - if:
                                              properties:
                                                code:
                                                  const: payload-too-large
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 413
                                          - if:
                                              properties:
                                                code:
                                                  const: unsupported-format
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 415
                                          - if:
                                              properties:
                                                code:
                                                  const: engine-unavailable
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: engine-incompatible
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: degraded
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: upload-checksum-mismatch
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 422
                                          - if:
                                              properties:
                                                code:
                                                  const: legacy-unsupported
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 501
                                          - if:
                                              properties:
                                                code:
                                                  const: internal
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 500
                                          - if:
                                              properties:
                                                code:
                                                  const: clock-unlocked
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: not-configured
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: authorization-pending
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: slow-down
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: access-denied
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 403
                                          - if:
                                              properties:
                                                code:
                                                  const: expired-token
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: token-reused
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 401
                                          - if:
                                              properties:
                                                code:
                                                  const: idempotency-key-reused
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: idempotency-in-progress
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                        additionalProperties: true
                                        examples:
                                          - type: >-
                                              https://freedome.nativemind.us/problems/engine-unavailable
                                            title: Visual engine unavailable
                                            status: 503
                                            detail: >-
                                              freedome-engined not reachable at
                                              unix:/run/freedome/engine.sock
                                            instance: /api/v1/venues/default/players/main/play
                                            code: engine-unavailable
                                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                        $defs:
                                          knownCode:
                                            enum:
                                              - validation-failed
                                              - not-found
                                              - conflict
                                              - precondition-failed
                                              - precondition-required
                                              - unauthenticated
                                              - forbidden
                                              - rate-limited
                                              - payload-too-large
                                              - unsupported-format
                                              - engine-unavailable
                                              - engine-incompatible
                                              - degraded
                                              - job-failed
                                              - upload-checksum-mismatch
                                              - legacy-unsupported
                                              - internal
                                              - clock-unlocked
                                              - not-configured
                                              - authorization-pending
                                              - slow-down
                                              - access-denied
                                              - expired-token
                                              - token-reused
                                              - idempotency-key-reused
                                              - idempotency-in-progress
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          fieldError:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                    additionalProperties: false
                                  ws:
                                    type: object
                                    required:
                                      - state
                                    properties:
                                      state:
                                        anyOf:
                                          - enum:
                                              - disabled
                                              - connecting
                                              - up
                                              - down
                                          - type: string
                                            pattern: ^[a-z][a-z_-]{0,31}$
                                        description: >-
                                          for OSC over UDP, up means sending:
                                          there is no acknowledgement
                                      lastOkAt:
                                        description: >-
                                          RFC 3339 UTC with milliseconds, e.g.
                                          2026-10-19T12:00:00.000Z.
                                        type: string
                                        format: date-time
                                        pattern: >-
                                          ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                      sent:
                                        type: integer
                                        minimum: 0
                                      dropped:
                                        type: integer
                                        minimum: 0
                                      problem:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). RFC 9457 problem details with
                                          the Freedome `code` catalogue, 02e §3.3.
                                          Also the `data` of WS `error`, the
                                          socket.io ack error and GraphQL
                                          errors[].extensions.problem. The
                                          catalogue is open: unknown codes are
                                          allowed; known codes are bound to their
                                          HTTP status.
                                        title: Problem details
                                        type: object
                                        required:
                                          - type
                                          - title
                                          - code
                                        properties:
                                          type:
                                            type: string
                                            format: uri
                                            description: >-
                                              https://freedome.nativemind.us/problems/<code>
                                              for catalogue codes.
                                          title:
                                            type: string
                                            minLength: 1
                                          status:
                                            type: integer
                                            minimum: 100
                                            maximum: 599
                                          detail:
                                            type: string
                                          instance:
                                            type: string
                                            format: uri-reference
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          traceId:
                                            type: string
                                            pattern: ^[0-9a-f]{16,32}$
                                          errors:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - pointer
                                                - detail
                                              properties:
                                                pointer:
                                                  type: string
                                                  format: json-pointer
                                                detail:
                                                  type: string
                                                code:
                                                  description: >-
                                                    Stable machine key; also the last path
                                                    segment of `type`. Open set: see
                                                    knownCode.
                                                  type: string
                                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                              additionalProperties: true
                                        allOf:
                                          - if:
                                              properties:
                                                code:
                                                  const: validation-failed
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 422
                                          - if:
                                              properties:
                                                code:
                                                  const: not-found
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 404
                                          - if:
                                              properties:
                                                code:
                                                  const: conflict
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: precondition-failed
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 412
                                          - if:
                                              properties:
                                                code:
                                                  const: precondition-required
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 428
                                          - if:
                                              properties:
                                                code:
                                                  const: unauthenticated
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 401
                                          - if:
                                              properties:
                                                code:
                                                  const: forbidden
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 403
                                          - if:
                                              properties:
                                                code:
                                                  const: rate-limited
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 429
                                          - if:
                                              properties:
                                                code:
                                                  const: payload-too-large
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 413
                                          - if:
                                              properties:
                                                code:
                                                  const: unsupported-format
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 415
                                          - if:
                                              properties:
                                                code:
                                                  const: engine-unavailable
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: engine-incompatible
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: degraded
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: upload-checksum-mismatch
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 422
                                          - if:
                                              properties:
                                                code:
                                                  const: legacy-unsupported
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 501
                                          - if:
                                              properties:
                                                code:
                                                  const: internal
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 500
                                          - if:
                                              properties:
                                                code:
                                                  const: clock-unlocked
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: not-configured
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: authorization-pending
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: slow-down
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: access-denied
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 403
                                          - if:
                                              properties:
                                                code:
                                                  const: expired-token
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: token-reused
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 401
                                          - if:
                                              properties:
                                                code:
                                                  const: idempotency-key-reused
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: idempotency-in-progress
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                        additionalProperties: true
                                        examples:
                                          - type: >-
                                              https://freedome.nativemind.us/problems/engine-unavailable
                                            title: Visual engine unavailable
                                            status: 503
                                            detail: >-
                                              freedome-engined not reachable at
                                              unix:/run/freedome/engine.sock
                                            instance: /api/v1/venues/default/players/main/play
                                            code: engine-unavailable
                                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                        $defs:
                                          knownCode:
                                            enum:
                                              - validation-failed
                                              - not-found
                                              - conflict
                                              - precondition-failed
                                              - precondition-required
                                              - unauthenticated
                                              - forbidden
                                              - rate-limited
                                              - payload-too-large
                                              - unsupported-format
                                              - engine-unavailable
                                              - engine-incompatible
                                              - degraded
                                              - job-failed
                                              - upload-checksum-mismatch
                                              - legacy-unsupported
                                              - internal
                                              - clock-unlocked
                                              - not-configured
                                              - authorization-pending
                                              - slow-down
                                              - access-denied
                                              - expired-token
                                              - token-reused
                                              - idempotency-key-reused
                                              - idempotency-in-progress
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          fieldError:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                    additionalProperties: false
                                  product:
                                    description: >-
                                      GET /api/v1/product of Resolume, when
                                      reachable.
                                    type: object
                                    properties:
                                      name:
                                        type: string
                                      major:
                                        type: integer
                                        minimum: 0
                                      minor:
                                        type: integer
                                        minimum: 0
                                      micro:
                                        type: integer
                                        minimum: 0
                                      revision:
                                        type: integer
                                        minimum: 0
                                    additionalProperties: false
                                  composition:
                                    description: Summary of the open composition.
                                    type: object
                                    properties:
                                      name:
                                        type: string
                                      layers:
                                        type: integer
                                        minimum: 0
                                      columns:
                                        type: integer
                                        minimum: 0
                                      decks:
                                        type: integer
                                        minimum: 0
                                    additionalProperties: false
                                  lastSyncAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                additionalProperties: false
                            if:
                              properties:
                                protocol:
                                  const: resolume
                              required:
                                - protocol
                            then:
                              properties:
                                config:
                                  description: >-
                                    `config` of the outbound Resolume Arena /
                                    Avenue driver (protocol resolume). Defaults
                                    are Resolume's own ports; they equal the
                                    media server's defaults, so on one machine
                                    move the media server
                                    (docs/audio-reactive.md).
                                  type: object
                                  required:
                                    - host
                                  properties:
                                    host:
                                      type: string
                                      minLength: 1
                                      maxLength: 253
                                      description: host name or IP of the Resolume machine
                                    oscPort:
                                      type: integer
                                      minimum: 1
                                      maximum: 65535
                                      default: 7000
                                    restPort:
                                      type: integer
                                      minimum: 1
                                      maximum: 65535
                                      default: 8080
                                    ws:
                                      type: boolean
                                      default: true
                                      description: >-
                                        keep the WebSocket API connection
                                        (ws://host:restPort/api/v1) for state
                                    oscMaxRateHz:
                                      type: number
                                      exclusiveMinimum: 0
                                      maximum: 1000
                                      description: >-
                                        highest send rate per OSC address; newer
                                        values replace unsent ones
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                        $defs:
                          gateway:
                            type: object
                            required:
                              - id
                              - direction
                              - protocol
                              - enabled
                              - status
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              name:
                                type: string
                              direction:
                                enum:
                                  - inbound
                                  - outbound
                                  - converter
                              protocol:
                                type: string
                                description: >-
                                  e.g. screenberry-json, dome360-http, watchout,
                                  resolume, osc, pjlink, artnet
                              vendor:
                                type: string
                              enabled:
                                type: boolean
                              status:
                                anyOf:
                                  - enum:
                                      - disabled
                                      - starting
                                      - up
                                      - degraded
                                      - down
                                  - type: string
                                    pattern: ^[a-z][a-z_-]{0,31}$
                              docsOnly:
                                type: boolean
                                description: >-
                                  implemented from public docs, no recorded
                                  fixtures from a real system yet
                              listeners:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - transport
                                    - port
                                  properties:
                                    transport:
                                      enum:
                                        - http
                                        - tcp
                                        - udp
                                        - osc
                                        - ws
                                        - socketio
                                        - serial
                                    port:
                                      type: integer
                                      minimum: 0
                                      maximum: 65535
                                    bind:
                                      type: string
                                  additionalProperties: false
                              peers:
                                type: array
                                items:
                                  type: object
                                  properties:
                                    address:
                                      type: string
                                    lastSeen:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  additionalProperties: false
                              config:
                                type: object
                                additionalProperties: true
                                description: gateway-specific; secrets redacted as "***"
                              allowCidrs:
                                type: array
                                items:
                                  type: string
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              stats:
                                type: object
                                additionalProperties:
                                  type: number
                              resolume:
                                description: >-
                                  live driver status; only on protocol resolume,
                                  read-only
                                type: object
                                required:
                                  - osc
                                  - rest
                                  - ws
                                properties:
                                  osc:
                                    type: object
                                    required:
                                      - state
                                    properties:
                                      state:
                                        anyOf:
                                          - enum:
                                              - disabled
                                              - connecting
                                              - up
                                              - down
                                          - type: string
                                            pattern: ^[a-z][a-z_-]{0,31}$
                                        description: >-
                                          for OSC over UDP, up means sending:
                                          there is no acknowledgement
                                      lastOkAt:
                                        description: >-
                                          RFC 3339 UTC with milliseconds, e.g.
                                          2026-10-19T12:00:00.000Z.
                                        type: string
                                        format: date-time
                                        pattern: >-
                                          ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                      sent:
                                        type: integer
                                        minimum: 0
                                      dropped:
                                        type: integer
                                        minimum: 0
                                      problem:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). RFC 9457 problem details with
                                          the Freedome `code` catalogue, 02e §3.3.
                                          Also the `data` of WS `error`, the
                                          socket.io ack error and GraphQL
                                          errors[].extensions.problem. The
                                          catalogue is open: unknown codes are
                                          allowed; known codes are bound to their
                                          HTTP status.
                                        title: Problem details
                                        type: object
                                        required:
                                          - type
                                          - title
                                          - code
                                        properties:
                                          type:
                                            type: string
                                            format: uri
                                            description: >-
                                              https://freedome.nativemind.us/problems/<code>
                                              for catalogue codes.
                                          title:
                                            type: string
                                            minLength: 1
                                          status:
                                            type: integer
                                            minimum: 100
                                            maximum: 599
                                          detail:
                                            type: string
                                          instance:
                                            type: string
                                            format: uri-reference
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          traceId:
                                            type: string
                                            pattern: ^[0-9a-f]{16,32}$
                                          errors:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - pointer
                                                - detail
                                              properties:
                                                pointer:
                                                  type: string
                                                  format: json-pointer
                                                detail:
                                                  type: string
                                                code:
                                                  description: >-
                                                    Stable machine key; also the last path
                                                    segment of `type`. Open set: see
                                                    knownCode.
                                                  type: string
                                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                              additionalProperties: true
                                        allOf:
                                          - if:
                                              properties:
                                                code:
                                                  const: validation-failed
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 422
                                          - if:
                                              properties:
                                                code:
                                                  const: not-found
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 404
                                          - if:
                                              properties:
                                                code:
                                                  const: conflict
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: precondition-failed
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 412
                                          - if:
                                              properties:
                                                code:
                                                  const: precondition-required
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 428
                                          - if:
                                              properties:
                                                code:
                                                  const: unauthenticated
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 401
                                          - if:
                                              properties:
                                                code:
                                                  const: forbidden
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 403
                                          - if:
                                              properties:
                                                code:
                                                  const: rate-limited
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 429
                                          - if:
                                              properties:
                                                code:
                                                  const: payload-too-large
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 413
                                          - if:
                                              properties:
                                                code:
                                                  const: unsupported-format
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 415
                                          - if:
                                              properties:
                                                code:
                                                  const: engine-unavailable
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: engine-incompatible
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: degraded
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: upload-checksum-mismatch
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 422
                                          - if:
                                              properties:
                                                code:
                                                  const: legacy-unsupported
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 501
                                          - if:
                                              properties:
                                                code:
                                                  const: internal
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 500
                                          - if:
                                              properties:
                                                code:
                                                  const: clock-unlocked
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: not-configured
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: authorization-pending
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: slow-down
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: access-denied
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 403
                                          - if:
                                              properties:
                                                code:
                                                  const: expired-token
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: token-reused
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 401
                                          - if:
                                              properties:
                                                code:
                                                  const: idempotency-key-reused
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: idempotency-in-progress
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                        additionalProperties: true
                                        examples:
                                          - type: >-
                                              https://freedome.nativemind.us/problems/engine-unavailable
                                            title: Visual engine unavailable
                                            status: 503
                                            detail: >-
                                              freedome-engined not reachable at
                                              unix:/run/freedome/engine.sock
                                            instance: /api/v1/venues/default/players/main/play
                                            code: engine-unavailable
                                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                        $defs:
                                          knownCode:
                                            enum:
                                              - validation-failed
                                              - not-found
                                              - conflict
                                              - precondition-failed
                                              - precondition-required
                                              - unauthenticated
                                              - forbidden
                                              - rate-limited
                                              - payload-too-large
                                              - unsupported-format
                                              - engine-unavailable
                                              - engine-incompatible
                                              - degraded
                                              - job-failed
                                              - upload-checksum-mismatch
                                              - legacy-unsupported
                                              - internal
                                              - clock-unlocked
                                              - not-configured
                                              - authorization-pending
                                              - slow-down
                                              - access-denied
                                              - expired-token
                                              - token-reused
                                              - idempotency-key-reused
                                              - idempotency-in-progress
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          fieldError:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                    additionalProperties: false
                                  rest:
                                    type: object
                                    required:
                                      - state
                                    properties:
                                      state:
                                        anyOf:
                                          - enum:
                                              - disabled
                                              - connecting
                                              - up
                                              - down
                                          - type: string
                                            pattern: ^[a-z][a-z_-]{0,31}$
                                        description: >-
                                          for OSC over UDP, up means sending:
                                          there is no acknowledgement
                                      lastOkAt:
                                        description: >-
                                          RFC 3339 UTC with milliseconds, e.g.
                                          2026-10-19T12:00:00.000Z.
                                        type: string
                                        format: date-time
                                        pattern: >-
                                          ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                      sent:
                                        type: integer
                                        minimum: 0
                                      dropped:
                                        type: integer
                                        minimum: 0
                                      problem:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). RFC 9457 problem details with
                                          the Freedome `code` catalogue, 02e §3.3.
                                          Also the `data` of WS `error`, the
                                          socket.io ack error and GraphQL
                                          errors[].extensions.problem. The
                                          catalogue is open: unknown codes are
                                          allowed; known codes are bound to their
                                          HTTP status.
                                        title: Problem details
                                        type: object
                                        required:
                                          - type
                                          - title
                                          - code
                                        properties:
                                          type:
                                            type: string
                                            format: uri
                                            description: >-
                                              https://freedome.nativemind.us/problems/<code>
                                              for catalogue codes.
                                          title:
                                            type: string
                                            minLength: 1
                                          status:
                                            type: integer
                                            minimum: 100
                                            maximum: 599
                                          detail:
                                            type: string
                                          instance:
                                            type: string
                                            format: uri-reference
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          traceId:
                                            type: string
                                            pattern: ^[0-9a-f]{16,32}$
                                          errors:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - pointer
                                                - detail
                                              properties:
                                                pointer:
                                                  type: string
                                                  format: json-pointer
                                                detail:
                                                  type: string
                                                code:
                                                  description: >-
                                                    Stable machine key; also the last path
                                                    segment of `type`. Open set: see
                                                    knownCode.
                                                  type: string
                                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                              additionalProperties: true
                                        allOf:
                                          - if:
                                              properties:
                                                code:
                                                  const: validation-failed
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 422
                                          - if:
                                              properties:
                                                code:
                                                  const: not-found
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 404
                                          - if:
                                              properties:
                                                code:
                                                  const: conflict
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: precondition-failed
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 412
                                          - if:
                                              properties:
                                                code:
                                                  const: precondition-required
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 428
                                          - if:
                                              properties:
                                                code:
                                                  const: unauthenticated
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 401
                                          - if:
                                              properties:
                                                code:
                                                  const: forbidden
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 403
                                          - if:
                                              properties:
                                                code:
                                                  const: rate-limited
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 429
                                          - if:
                                              properties:
                                                code:
                                                  const: payload-too-large
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 413
                                          - if:
                                              properties:
                                                code:
                                                  const: unsupported-format
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 415
                                          - if:
                                              properties:
                                                code:
                                                  const: engine-unavailable
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: engine-incompatible
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: degraded
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: upload-checksum-mismatch
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 422
                                          - if:
                                              properties:
                                                code:
                                                  const: legacy-unsupported
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 501
                                          - if:
                                              properties:
                                                code:
                                                  const: internal
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 500
                                          - if:
                                              properties:
                                                code:
                                                  const: clock-unlocked
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: not-configured
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: authorization-pending
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: slow-down
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: access-denied
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 403
                                          - if:
                                              properties:
                                                code:
                                                  const: expired-token
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: token-reused
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 401
                                          - if:
                                              properties:
                                                code:
                                                  const: idempotency-key-reused
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: idempotency-in-progress
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                        additionalProperties: true
                                        examples:
                                          - type: >-
                                              https://freedome.nativemind.us/problems/engine-unavailable
                                            title: Visual engine unavailable
                                            status: 503
                                            detail: >-
                                              freedome-engined not reachable at
                                              unix:/run/freedome/engine.sock
                                            instance: /api/v1/venues/default/players/main/play
                                            code: engine-unavailable
                                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                        $defs:
                                          knownCode:
                                            enum:
                                              - validation-failed
                                              - not-found
                                              - conflict
                                              - precondition-failed
                                              - precondition-required
                                              - unauthenticated
                                              - forbidden
                                              - rate-limited
                                              - payload-too-large
                                              - unsupported-format
                                              - engine-unavailable
                                              - engine-incompatible
                                              - degraded
                                              - job-failed
                                              - upload-checksum-mismatch
                                              - legacy-unsupported
                                              - internal
                                              - clock-unlocked
                                              - not-configured
                                              - authorization-pending
                                              - slow-down
                                              - access-denied
                                              - expired-token
                                              - token-reused
                                              - idempotency-key-reused
                                              - idempotency-in-progress
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          fieldError:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                    additionalProperties: false
                                  ws:
                                    type: object
                                    required:
                                      - state
                                    properties:
                                      state:
                                        anyOf:
                                          - enum:
                                              - disabled
                                              - connecting
                                              - up
                                              - down
                                          - type: string
                                            pattern: ^[a-z][a-z_-]{0,31}$
                                        description: >-
                                          for OSC over UDP, up means sending:
                                          there is no acknowledgement
                                      lastOkAt:
                                        description: >-
                                          RFC 3339 UTC with milliseconds, e.g.
                                          2026-10-19T12:00:00.000Z.
                                        type: string
                                        format: date-time
                                        pattern: >-
                                          ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                      sent:
                                        type: integer
                                        minimum: 0
                                      dropped:
                                        type: integer
                                        minimum: 0
                                      problem:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). RFC 9457 problem details with
                                          the Freedome `code` catalogue, 02e §3.3.
                                          Also the `data` of WS `error`, the
                                          socket.io ack error and GraphQL
                                          errors[].extensions.problem. The
                                          catalogue is open: unknown codes are
                                          allowed; known codes are bound to their
                                          HTTP status.
                                        title: Problem details
                                        type: object
                                        required:
                                          - type
                                          - title
                                          - code
                                        properties:
                                          type:
                                            type: string
                                            format: uri
                                            description: >-
                                              https://freedome.nativemind.us/problems/<code>
                                              for catalogue codes.
                                          title:
                                            type: string
                                            minLength: 1
                                          status:
                                            type: integer
                                            minimum: 100
                                            maximum: 599
                                          detail:
                                            type: string
                                          instance:
                                            type: string
                                            format: uri-reference
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          traceId:
                                            type: string
                                            pattern: ^[0-9a-f]{16,32}$
                                          errors:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - pointer
                                                - detail
                                              properties:
                                                pointer:
                                                  type: string
                                                  format: json-pointer
                                                detail:
                                                  type: string
                                                code:
                                                  description: >-
                                                    Stable machine key; also the last path
                                                    segment of `type`. Open set: see
                                                    knownCode.
                                                  type: string
                                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                              additionalProperties: true
                                        allOf:
                                          - if:
                                              properties:
                                                code:
                                                  const: validation-failed
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 422
                                          - if:
                                              properties:
                                                code:
                                                  const: not-found
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 404
                                          - if:
                                              properties:
                                                code:
                                                  const: conflict
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: precondition-failed
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 412
                                          - if:
                                              properties:
                                                code:
                                                  const: precondition-required
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 428
                                          - if:
                                              properties:
                                                code:
                                                  const: unauthenticated
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 401
                                          - if:
                                              properties:
                                                code:
                                                  const: forbidden
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 403
                                          - if:
                                              properties:
                                                code:
                                                  const: rate-limited
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 429
                                          - if:
                                              properties:
                                                code:
                                                  const: payload-too-large
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 413
                                          - if:
                                              properties:
                                                code:
                                                  const: unsupported-format
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 415
                                          - if:
                                              properties:
                                                code:
                                                  const: engine-unavailable
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: engine-incompatible
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: degraded
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: upload-checksum-mismatch
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 422
                                          - if:
                                              properties:
                                                code:
                                                  const: legacy-unsupported
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 501
                                          - if:
                                              properties:
                                                code:
                                                  const: internal
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 500
                                          - if:
                                              properties:
                                                code:
                                                  const: clock-unlocked
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: not-configured
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: authorization-pending
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: slow-down
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: access-denied
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 403
                                          - if:
                                              properties:
                                                code:
                                                  const: expired-token
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: token-reused
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 401
                                          - if:
                                              properties:
                                                code:
                                                  const: idempotency-key-reused
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: idempotency-in-progress
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                        additionalProperties: true
                                        examples:
                                          - type: >-
                                              https://freedome.nativemind.us/problems/engine-unavailable
                                            title: Visual engine unavailable
                                            status: 503
                                            detail: >-
                                              freedome-engined not reachable at
                                              unix:/run/freedome/engine.sock
                                            instance: /api/v1/venues/default/players/main/play
                                            code: engine-unavailable
                                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                        $defs:
                                          knownCode:
                                            enum:
                                              - validation-failed
                                              - not-found
                                              - conflict
                                              - precondition-failed
                                              - precondition-required
                                              - unauthenticated
                                              - forbidden
                                              - rate-limited
                                              - payload-too-large
                                              - unsupported-format
                                              - engine-unavailable
                                              - engine-incompatible
                                              - degraded
                                              - job-failed
                                              - upload-checksum-mismatch
                                              - legacy-unsupported
                                              - internal
                                              - clock-unlocked
                                              - not-configured
                                              - authorization-pending
                                              - slow-down
                                              - access-denied
                                              - expired-token
                                              - token-reused
                                              - idempotency-key-reused
                                              - idempotency-in-progress
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          fieldError:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                    additionalProperties: false
                                  product:
                                    description: >-
                                      GET /api/v1/product of Resolume, when
                                      reachable.
                                    type: object
                                    properties:
                                      name:
                                        type: string
                                      major:
                                        type: integer
                                        minimum: 0
                                      minor:
                                        type: integer
                                        minimum: 0
                                      micro:
                                        type: integer
                                        minimum: 0
                                      revision:
                                        type: integer
                                        minimum: 0
                                    additionalProperties: false
                                  composition:
                                    description: Summary of the open composition.
                                    type: object
                                    properties:
                                      name:
                                        type: string
                                      layers:
                                        type: integer
                                        minimum: 0
                                      columns:
                                        type: integer
                                        minimum: 0
                                      decks:
                                        type: integer
                                        minimum: 0
                                    additionalProperties: false
                                  lastSyncAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                additionalProperties: false
                            if:
                              properties:
                                protocol:
                                  const: resolume
                              required:
                                - protocol
                            then:
                              properties:
                                config:
                                  description: >-
                                    `config` of the outbound Resolume Arena /
                                    Avenue driver (protocol resolume). Defaults
                                    are Resolume's own ports; they equal the
                                    media server's defaults, so on one machine
                                    move the media server
                                    (docs/audio-reactive.md).
                                  type: object
                                  required:
                                    - host
                                  properties:
                                    host:
                                      type: string
                                      minLength: 1
                                      maxLength: 253
                                      description: host name or IP of the Resolume machine
                                    oscPort:
                                      type: integer
                                      minimum: 1
                                      maximum: 65535
                                      default: 7000
                                    restPort:
                                      type: integer
                                      minimum: 1
                                      maximum: 65535
                                      default: 8080
                                    ws:
                                      type: boolean
                                      default: true
                                      description: >-
                                        keep the WebSocket API connection
                                        (ws://host:restPort/api/v1) for state
                                    oscMaxRateHz:
                                      type: number
                                      exclusiveMinimum: 0
                                      maximum: 1000
                                      description: >-
                                        highest send rate per OSC address; newer
                                        values replace unsent ones
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          resolumeConfig:
                            description: >-
                              `config` of the outbound Resolume Arena / Avenue
                              driver (protocol resolume). Defaults are
                              Resolume's own ports; they equal the media
                              server's defaults, so on one machine move the
                              media server (docs/audio-reactive.md).
                            type: object
                            required:
                              - host
                            properties:
                              host:
                                type: string
                                minLength: 1
                                maxLength: 253
                                description: host name or IP of the Resolume machine
                              oscPort:
                                type: integer
                                minimum: 1
                                maximum: 65535
                                default: 7000
                              restPort:
                                type: integer
                                minimum: 1
                                maximum: 65535
                                default: 8080
                              ws:
                                type: boolean
                                default: true
                                description: >-
                                  keep the WebSocket API connection
                                  (ws://host:restPort/api/v1) for state
                              oscMaxRateHz:
                                type: number
                                exclusiveMinimum: 0
                                maximum: 1000
                                description: >-
                                  highest send rate per OSC address; newer
                                  values replace unsent ones
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          resolumeLink:
                            type: object
                            required:
                              - state
                            properties:
                              state:
                                anyOf:
                                  - enum:
                                      - disabled
                                      - connecting
                                      - up
                                      - down
                                  - type: string
                                    pattern: ^[a-z][a-z_-]{0,31}$
                                description: >-
                                  for OSC over UDP, up means sending: there is
                                  no acknowledgement
                              lastOkAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              sent:
                                type: integer
                                minimum: 0
                              dropped:
                                type: integer
                                minimum: 0
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                            additionalProperties: false
                          resolumeStatus:
                            type: object
                            required:
                              - osc
                              - rest
                              - ws
                            properties:
                              osc:
                                type: object
                                required:
                                  - state
                                properties:
                                  state:
                                    anyOf:
                                      - enum:
                                          - disabled
                                          - connecting
                                          - up
                                          - down
                                      - type: string
                                        pattern: ^[a-z][a-z_-]{0,31}$
                                    description: >-
                                      for OSC over UDP, up means sending: there
                                      is no acknowledgement
                                  lastOkAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  sent:
                                    type: integer
                                    minimum: 0
                                  dropped:
                                    type: integer
                                    minimum: 0
                                  problem:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                additionalProperties: false
                              rest:
                                type: object
                                required:
                                  - state
                                properties:
                                  state:
                                    anyOf:
                                      - enum:
                                          - disabled
                                          - connecting
                                          - up
                                          - down
                                      - type: string
                                        pattern: ^[a-z][a-z_-]{0,31}$
                                    description: >-
                                      for OSC over UDP, up means sending: there
                                      is no acknowledgement
                                  lastOkAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  sent:
                                    type: integer
                                    minimum: 0
                                  dropped:
                                    type: integer
                                    minimum: 0
                                  problem:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                additionalProperties: false
                              ws:
                                type: object
                                required:
                                  - state
                                properties:
                                  state:
                                    anyOf:
                                      - enum:
                                          - disabled
                                          - connecting
                                          - up
                                          - down
                                      - type: string
                                        pattern: ^[a-z][a-z_-]{0,31}$
                                    description: >-
                                      for OSC over UDP, up means sending: there
                                      is no acknowledgement
                                  lastOkAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  sent:
                                    type: integer
                                    minimum: 0
                                  dropped:
                                    type: integer
                                    minimum: 0
                                  problem:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                additionalProperties: false
                              product:
                                description: >-
                                  GET /api/v1/product of Resolume, when
                                  reachable.
                                type: object
                                properties:
                                  name:
                                    type: string
                                  major:
                                    type: integer
                                    minimum: 0
                                  minor:
                                    type: integer
                                    minimum: 0
                                  micro:
                                    type: integer
                                    minimum: 0
                                  revision:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                              composition:
                                description: Summary of the open composition.
                                type: object
                                properties:
                                  name:
                                    type: string
                                  layers:
                                    type: integer
                                    minimum: 0
                                  columns:
                                    type: integer
                                    minimum: 0
                                  decks:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                              lastSyncAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            additionalProperties: false
                          patch:
                            type: object
                            minProperties: 1
                            properties:
                              enabled:
                                type: boolean
                              config:
                                type: object
                                additionalProperties: true
                              allowCidrs:
                                type: array
                                items:
                                  type: string
                            additionalProperties: false
                          page:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - id
                                    - direction
                                    - protocol
                                    - enabled
                                    - status
                                  properties:
                                    id:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    name:
                                      type: string
                                    direction:
                                      enum:
                                        - inbound
                                        - outbound
                                        - converter
                                    protocol:
                                      type: string
                                      description: >-
                                        e.g. screenberry-json, dome360-http,
                                        watchout, resolume, osc, pjlink, artnet
                                    vendor:
                                      type: string
                                    enabled:
                                      type: boolean
                                    status:
                                      anyOf:
                                        - enum:
                                            - disabled
                                            - starting
                                            - up
                                            - degraded
                                            - down
                                        - type: string
                                          pattern: ^[a-z][a-z_-]{0,31}$
                                    docsOnly:
                                      type: boolean
                                      description: >-
                                        implemented from public docs, no
                                        recorded fixtures from a real system yet
                                    listeners:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - transport
                                          - port
                                        properties:
                                          transport:
                                            enum:
                                              - http
                                              - tcp
                                              - udp
                                              - osc
                                              - ws
                                              - socketio
                                              - serial
                                          port:
                                            type: integer
                                            minimum: 0
                                            maximum: 65535
                                          bind:
                                            type: string
                                        additionalProperties: false
                                    peers:
                                      type: array
                                      items:
                                        type: object
                                        properties:
                                          address:
                                            type: string
                                          lastSeen:
                                            description: >-
                                              RFC 3339 UTC with milliseconds, e.g.
                                              2026-10-19T12:00:00.000Z.
                                            type: string
                                            format: date-time
                                            pattern: >-
                                              ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                        additionalProperties: false
                                    config:
                                      type: object
                                      additionalProperties: true
                                      description: >-
                                        gateway-specific; secrets redacted as
                                        "***"
                                    allowCidrs:
                                      type: array
                                      items:
                                        type: string
                                    problem:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). RFC 9457 problem details with
                                        the Freedome `code` catalogue, 02e §3.3.
                                        Also the `data` of WS `error`, the
                                        socket.io ack error and GraphQL
                                        errors[].extensions.problem. The
                                        catalogue is open: unknown codes are
                                        allowed; known codes are bound to their
                                        HTTP status.
                                      title: Problem details
                                      type: object
                                      required:
                                        - type
                                        - title
                                        - code
                                      properties:
                                        type:
                                          type: string
                                          format: uri
                                          description: >-
                                            https://freedome.nativemind.us/problems/<code>
                                            for catalogue codes.
                                        title:
                                          type: string
                                          minLength: 1
                                        status:
                                          type: integer
                                          minimum: 100
                                          maximum: 599
                                        detail:
                                          type: string
                                        instance:
                                          type: string
                                          format: uri-reference
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        traceId:
                                          type: string
                                          pattern: ^[0-9a-f]{16,32}$
                                        errors:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                      allOf:
                                        - if:
                                            properties:
                                              code:
                                                const: validation-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: not-found
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 404
                                        - if:
                                            properties:
                                              code:
                                                const: conflict
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 412
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-required
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 428
                                        - if:
                                            properties:
                                              code:
                                                const: unauthenticated
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: forbidden
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: rate-limited
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 429
                                        - if:
                                            properties:
                                              code:
                                                const: payload-too-large
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 413
                                        - if:
                                            properties:
                                              code:
                                                const: unsupported-format
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 415
                                        - if:
                                            properties:
                                              code:
                                                const: engine-unavailable
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: engine-incompatible
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: degraded
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: upload-checksum-mismatch
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: legacy-unsupported
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 501
                                        - if:
                                            properties:
                                              code:
                                                const: internal
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 500
                                        - if:
                                            properties:
                                              code:
                                                const: clock-unlocked
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: not-configured
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: authorization-pending
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: slow-down
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: access-denied
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: expired-token
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: token-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-key-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-in-progress
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                      additionalProperties: true
                                      examples:
                                        - type: >-
                                            https://freedome.nativemind.us/problems/engine-unavailable
                                          title: Visual engine unavailable
                                          status: 503
                                          detail: >-
                                            freedome-engined not reachable at
                                            unix:/run/freedome/engine.sock
                                          instance: /api/v1/venues/default/players/main/play
                                          code: engine-unavailable
                                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                      $defs:
                                        knownCode:
                                          enum:
                                            - validation-failed
                                            - not-found
                                            - conflict
                                            - precondition-failed
                                            - precondition-required
                                            - unauthenticated
                                            - forbidden
                                            - rate-limited
                                            - payload-too-large
                                            - unsupported-format
                                            - engine-unavailable
                                            - engine-incompatible
                                            - degraded
                                            - job-failed
                                            - upload-checksum-mismatch
                                            - legacy-unsupported
                                            - internal
                                            - clock-unlocked
                                            - not-configured
                                            - authorization-pending
                                            - slow-down
                                            - access-denied
                                            - expired-token
                                            - token-reused
                                            - idempotency-key-reused
                                            - idempotency-in-progress
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        fieldError:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    stats:
                                      type: object
                                      additionalProperties:
                                        type: number
                                    resolume:
                                      description: >-
                                        live driver status; only on protocol
                                        resolume, read-only
                                      type: object
                                      required:
                                        - osc
                                        - rest
                                        - ws
                                      properties:
                                        osc:
                                          type: object
                                          required:
                                            - state
                                          properties:
                                            state:
                                              anyOf:
                                                - enum:
                                                    - disabled
                                                    - connecting
                                                    - up
                                                    - down
                                                - type: string
                                                  pattern: ^[a-z][a-z_-]{0,31}$
                                              description: >-
                                                for OSC over UDP, up means sending:
                                                there is no acknowledgement
                                            lastOkAt:
                                              description: >-
                                                RFC 3339 UTC with milliseconds, e.g.
                                                2026-10-19T12:00:00.000Z.
                                              type: string
                                              format: date-time
                                              pattern: >-
                                                ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                            sent:
                                              type: integer
                                              minimum: 0
                                            dropped:
                                              type: integer
                                              minimum: 0
                                            problem:
                                              $schema: >-
                                                https://json-schema.org/draft/2020-12/schema
                                              $id: >-
                                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                              $comment: >-
                                                NativeMindNONC — freedome_contract (see
                                                LICENSE). RFC 9457 problem details with
                                                the Freedome `code` catalogue, 02e §3.3.
                                                Also the `data` of WS `error`, the
                                                socket.io ack error and GraphQL
                                                errors[].extensions.problem. The
                                                catalogue is open: unknown codes are
                                                allowed; known codes are bound to their
                                                HTTP status.
                                              title: Problem details
                                              type: object
                                              required:
                                                - type
                                                - title
                                                - code
                                              properties:
                                                type:
                                                  type: string
                                                  format: uri
                                                  description: >-
                                                    https://freedome.nativemind.us/problems/<code>
                                                    for catalogue codes.
                                                title:
                                                  type: string
                                                  minLength: 1
                                                status:
                                                  type: integer
                                                  minimum: 100
                                                  maximum: 599
                                                detail:
                                                  type: string
                                                instance:
                                                  type: string
                                                  format: uri-reference
                                                code:
                                                  description: >-
                                                    Stable machine key; also the last path
                                                    segment of `type`. Open set: see
                                                    knownCode.
                                                  type: string
                                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                traceId:
                                                  type: string
                                                  pattern: ^[0-9a-f]{16,32}$
                                                errors:
                                                  type: array
                                                  items:
                                                    type: object
                                                    required:
                                                      - pointer
                                                      - detail
                                                    properties:
                                                      pointer:
                                                        type: string
                                                        format: json-pointer
                                                      detail:
                                                        type: string
                                                      code:
                                                        description: >-
                                                          Stable machine key; also the last path
                                                          segment of `type`. Open set: see
                                                          knownCode.
                                                        type: string
                                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                    additionalProperties: true
                                              allOf:
                                                - if:
                                                    properties:
                                                      code:
                                                        const: validation-failed
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 422
                                                - if:
                                                    properties:
                                                      code:
                                                        const: not-found
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 404
                                                - if:
                                                    properties:
                                                      code:
                                                        const: conflict
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 409
                                                - if:
                                                    properties:
                                                      code:
                                                        const: precondition-failed
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 412
                                                - if:
                                                    properties:
                                                      code:
                                                        const: precondition-required
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 428
                                                - if:
                                                    properties:
                                                      code:
                                                        const: unauthenticated
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 401
                                                - if:
                                                    properties:
                                                      code:
                                                        const: forbidden
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 403
                                                - if:
                                                    properties:
                                                      code:
                                                        const: rate-limited
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 429
                                                - if:
                                                    properties:
                                                      code:
                                                        const: payload-too-large
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 413
                                                - if:
                                                    properties:
                                                      code:
                                                        const: unsupported-format
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 415
                                                - if:
                                                    properties:
                                                      code:
                                                        const: engine-unavailable
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 503
                                                - if:
                                                    properties:
                                                      code:
                                                        const: engine-incompatible
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 503
                                                - if:
                                                    properties:
                                                      code:
                                                        const: degraded
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 503
                                                - if:
                                                    properties:
                                                      code:
                                                        const: upload-checksum-mismatch
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 422
                                                - if:
                                                    properties:
                                                      code:
                                                        const: legacy-unsupported
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 501
                                                - if:
                                                    properties:
                                                      code:
                                                        const: internal
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 500
                                                - if:
                                                    properties:
                                                      code:
                                                        const: clock-unlocked
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 409
                                                - if:
                                                    properties:
                                                      code:
                                                        const: not-configured
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 503
                                                - if:
                                                    properties:
                                                      code:
                                                        const: authorization-pending
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 400
                                                - if:
                                                    properties:
                                                      code:
                                                        const: slow-down
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 400
                                                - if:
                                                    properties:
                                                      code:
                                                        const: access-denied
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 403
                                                - if:
                                                    properties:
                                                      code:
                                                        const: expired-token
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 400
                                                - if:
                                                    properties:
                                                      code:
                                                        const: token-reused
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 401
                                                - if:
                                                    properties:
                                                      code:
                                                        const: idempotency-key-reused
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 409
                                                - if:
                                                    properties:
                                                      code:
                                                        const: idempotency-in-progress
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 409
                                              additionalProperties: true
                                              examples:
                                                - type: >-
                                                    https://freedome.nativemind.us/problems/engine-unavailable
                                                  title: Visual engine unavailable
                                                  status: 503
                                                  detail: >-
                                                    freedome-engined not reachable at
                                                    unix:/run/freedome/engine.sock
                                                  instance: /api/v1/venues/default/players/main/play
                                                  code: engine-unavailable
                                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                              $defs:
                                                knownCode:
                                                  enum:
                                                    - validation-failed
                                                    - not-found
                                                    - conflict
                                                    - precondition-failed
                                                    - precondition-required
                                                    - unauthenticated
                                                    - forbidden
                                                    - rate-limited
                                                    - payload-too-large
                                                    - unsupported-format
                                                    - engine-unavailable
                                                    - engine-incompatible
                                                    - degraded
                                                    - job-failed
                                                    - upload-checksum-mismatch
                                                    - legacy-unsupported
                                                    - internal
                                                    - clock-unlocked
                                                    - not-configured
                                                    - authorization-pending
                                                    - slow-down
                                                    - access-denied
                                                    - expired-token
                                                    - token-reused
                                                    - idempotency-key-reused
                                                    - idempotency-in-progress
                                                code:
                                                  description: >-
                                                    Stable machine key; also the last path
                                                    segment of `type`. Open set: see
                                                    knownCode.
                                                  type: string
                                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                fieldError:
                                                  type: object
                                                  required:
                                                    - pointer
                                                    - detail
                                                  properties:
                                                    pointer:
                                                      type: string
                                                      format: json-pointer
                                                    detail:
                                                      type: string
                                                    code:
                                                      description: >-
                                                        Stable machine key; also the last path
                                                        segment of `type`. Open set: see
                                                        knownCode.
                                                      type: string
                                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                  additionalProperties: true
                                          additionalProperties: false
                                        rest:
                                          type: object
                                          required:
                                            - state
                                          properties:
                                            state:
                                              anyOf:
                                                - enum:
                                                    - disabled
                                                    - connecting
                                                    - up
                                                    - down
                                                - type: string
                                                  pattern: ^[a-z][a-z_-]{0,31}$
                                              description: >-
                                                for OSC over UDP, up means sending:
                                                there is no acknowledgement
                                            lastOkAt:
                                              description: >-
                                                RFC 3339 UTC with milliseconds, e.g.
                                                2026-10-19T12:00:00.000Z.
                                              type: string
                                              format: date-time
                                              pattern: >-
                                                ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                            sent:
                                              type: integer
                                              minimum: 0
                                            dropped:
                                              type: integer
                                              minimum: 0
                                            problem:
                                              $schema: >-
                                                https://json-schema.org/draft/2020-12/schema
                                              $id: >-
                                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                              $comment: >-
                                                NativeMindNONC — freedome_contract (see
                                                LICENSE). RFC 9457 problem details with
                                                the Freedome `code` catalogue, 02e §3.3.
                                                Also the `data` of WS `error`, the
                                                socket.io ack error and GraphQL
                                                errors[].extensions.problem. The
                                                catalogue is open: unknown codes are
                                                allowed; known codes are bound to their
                                                HTTP status.
                                              title: Problem details
                                              type: object
                                              required:
                                                - type
                                                - title
                                                - code
                                              properties:
                                                type:
                                                  type: string
                                                  format: uri
                                                  description: >-
                                                    https://freedome.nativemind.us/problems/<code>
                                                    for catalogue codes.
                                                title:
                                                  type: string
                                                  minLength: 1
                                                status:
                                                  type: integer
                                                  minimum: 100
                                                  maximum: 599
                                                detail:
                                                  type: string
                                                instance:
                                                  type: string
                                                  format: uri-reference
                                                code:
                                                  description: >-
                                                    Stable machine key; also the last path
                                                    segment of `type`. Open set: see
                                                    knownCode.
                                                  type: string
                                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                traceId:
                                                  type: string
                                                  pattern: ^[0-9a-f]{16,32}$
                                                errors:
                                                  type: array
                                                  items:
                                                    type: object
                                                    required:
                                                      - pointer
                                                      - detail
                                                    properties:
                                                      pointer:
                                                        type: string
                                                        format: json-pointer
                                                      detail:
                                                        type: string
                                                      code:
                                                        description: >-
                                                          Stable machine key; also the last path
                                                          segment of `type`. Open set: see
                                                          knownCode.
                                                        type: string
                                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                    additionalProperties: true
                                              allOf:
                                                - if:
                                                    properties:
                                                      code:
                                                        const: validation-failed
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 422
                                                - if:
                                                    properties:
                                                      code:
                                                        const: not-found
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 404
                                                - if:
                                                    properties:
                                                      code:
                                                        const: conflict
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 409
                                                - if:
                                                    properties:
                                                      code:
                                                        const: precondition-failed
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 412
                                                - if:
                                                    properties:
                                                      code:
                                                        const: precondition-required
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 428
                                                - if:
                                                    properties:
                                                      code:
                                                        const: unauthenticated
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 401
                                                - if:
                                                    properties:
                                                      code:
                                                        const: forbidden
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 403
                                                - if:
                                                    properties:
                                                      code:
                                                        const: rate-limited
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 429
                                                - if:
                                                    properties:
                                                      code:
                                                        const: payload-too-large
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 413
                                                - if:
                                                    properties:
                                                      code:
                                                        const: unsupported-format
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 415
                                                - if:
                                                    properties:
                                                      code:
                                                        const: engine-unavailable
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 503
                                                - if:
                                                    properties:
                                                      code:
                                                        const: engine-incompatible
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 503
                                                - if:
                                                    properties:
                                                      code:
                                                        const: degraded
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 503
                                                - if:
                                                    properties:
                                                      code:
                                                        const: upload-checksum-mismatch
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 422
                                                - if:
                                                    properties:
                                                      code:
                                                        const: legacy-unsupported
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 501
                                                - if:
                                                    properties:
                                                      code:
                                                        const: internal
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 500
                                                - if:
                                                    properties:
                                                      code:
                                                        const: clock-unlocked
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 409
                                                - if:
                                                    properties:
                                                      code:
                                                        const: not-configured
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 503
                                                - if:
                                                    properties:
                                                      code:
                                                        const: authorization-pending
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 400
                                                - if:
                                                    properties:
                                                      code:
                                                        const: slow-down
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 400
                                                - if:
                                                    properties:
                                                      code:
                                                        const: access-denied
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 403
                                                - if:
                                                    properties:
                                                      code:
                                                        const: expired-token
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 400
                                                - if:
                                                    properties:
                                                      code:
                                                        const: token-reused
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 401
                                                - if:
                                                    properties:
                                                      code:
                                                        const: idempotency-key-reused
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 409
                                                - if:
                                                    properties:
                                                      code:
                                                        const: idempotency-in-progress
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 409
                                              additionalProperties: true
                                              examples:
                                                - type: >-
                                                    https://freedome.nativemind.us/problems/engine-unavailable
                                                  title: Visual engine unavailable
                                                  status: 503
                                                  detail: >-
                                                    freedome-engined not reachable at
                                                    unix:/run/freedome/engine.sock
                                                  instance: /api/v1/venues/default/players/main/play
                                                  code: engine-unavailable
                                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                              $defs:
                                                knownCode:
                                                  enum:
                                                    - validation-failed
                                                    - not-found
                                                    - conflict
                                                    - precondition-failed
                                                    - precondition-required
                                                    - unauthenticated
                                                    - forbidden
                                                    - rate-limited
                                                    - payload-too-large
                                                    - unsupported-format
                                                    - engine-unavailable
                                                    - engine-incompatible
                                                    - degraded
                                                    - job-failed
                                                    - upload-checksum-mismatch
                                                    - legacy-unsupported
                                                    - internal
                                                    - clock-unlocked
                                                    - not-configured
                                                    - authorization-pending
                                                    - slow-down
                                                    - access-denied
                                                    - expired-token
                                                    - token-reused
                                                    - idempotency-key-reused
                                                    - idempotency-in-progress
                                                code:
                                                  description: >-
                                                    Stable machine key; also the last path
                                                    segment of `type`. Open set: see
                                                    knownCode.
                                                  type: string
                                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                fieldError:
                                                  type: object
                                                  required:
                                                    - pointer
                                                    - detail
                                                  properties:
                                                    pointer:
                                                      type: string
                                                      format: json-pointer
                                                    detail:
                                                      type: string
                                                    code:
                                                      description: >-
                                                        Stable machine key; also the last path
                                                        segment of `type`. Open set: see
                                                        knownCode.
                                                      type: string
                                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                  additionalProperties: true
                                          additionalProperties: false
                                        ws:
                                          type: object
                                          required:
                                            - state
                                          properties:
                                            state:
                                              anyOf:
                                                - enum:
                                                    - disabled
                                                    - connecting
                                                    - up
                                                    - down
                                                - type: string
                                                  pattern: ^[a-z][a-z_-]{0,31}$
                                              description: >-
                                                for OSC over UDP, up means sending:
                                                there is no acknowledgement
                                            lastOkAt:
                                              description: >-
                                                RFC 3339 UTC with milliseconds, e.g.
                                                2026-10-19T12:00:00.000Z.
                                              type: string
                                              format: date-time
                                              pattern: >-
                                                ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                            sent:
                                              type: integer
                                              minimum: 0
                                            dropped:
                                              type: integer
                                              minimum: 0
                                            problem:
                                              $schema: >-
                                                https://json-schema.org/draft/2020-12/schema
                                              $id: >-
                                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                              $comment: >-
                                                NativeMindNONC — freedome_contract (see
                                                LICENSE). RFC 9457 problem details with
                                                the Freedome `code` catalogue, 02e §3.3.
                                                Also the `data` of WS `error`, the
                                                socket.io ack error and GraphQL
                                                errors[].extensions.problem. The
                                                catalogue is open: unknown codes are
                                                allowed; known codes are bound to their
                                                HTTP status.
                                              title: Problem details
                                              type: object
                                              required:
                                                - type
                                                - title
                                                - code
                                              properties:
                                                type:
                                                  type: string
                                                  format: uri
                                                  description: >-
                                                    https://freedome.nativemind.us/problems/<code>
                                                    for catalogue codes.
                                                title:
                                                  type: string
                                                  minLength: 1
                                                status:
                                                  type: integer
                                                  minimum: 100
                                                  maximum: 599
                                                detail:
                                                  type: string
                                                instance:
                                                  type: string
                                                  format: uri-reference
                                                code:
                                                  description: >-
                                                    Stable machine key; also the last path
                                                    segment of `type`. Open set: see
                                                    knownCode.
                                                  type: string
                                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                traceId:
                                                  type: string
                                                  pattern: ^[0-9a-f]{16,32}$
                                                errors:
                                                  type: array
                                                  items:
                                                    type: object
                                                    required:
                                                      - pointer
                                                      - detail
                                                    properties:
                                                      pointer:
                                                        type: string
                                                        format: json-pointer
                                                      detail:
                                                        type: string
                                                      code:
                                                        description: >-
                                                          Stable machine key; also the last path
                                                          segment of `type`. Open set: see
                                                          knownCode.
                                                        type: string
                                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                    additionalProperties: true
                                              allOf:
                                                - if:
                                                    properties:
                                                      code:
                                                        const: validation-failed
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 422
                                                - if:
                                                    properties:
                                                      code:
                                                        const: not-found
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 404
                                                - if:
                                                    properties:
                                                      code:
                                                        const: conflict
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 409
                                                - if:
                                                    properties:
                                                      code:
                                                        const: precondition-failed
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 412
                                                - if:
                                                    properties:
                                                      code:
                                                        const: precondition-required
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 428
                                                - if:
                                                    properties:
                                                      code:
                                                        const: unauthenticated
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 401
                                                - if:
                                                    properties:
                                                      code:
                                                        const: forbidden
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 403
                                                - if:
                                                    properties:
                                                      code:
                                                        const: rate-limited
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 429
                                                - if:
                                                    properties:
                                                      code:
                                                        const: payload-too-large
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 413
                                                - if:
                                                    properties:
                                                      code:
                                                        const: unsupported-format
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 415
                                                - if:
                                                    properties:
                                                      code:
                                                        const: engine-unavailable
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 503
                                                - if:
                                                    properties:
                                                      code:
                                                        const: engine-incompatible
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 503
                                                - if:
                                                    properties:
                                                      code:
                                                        const: degraded
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 503
                                                - if:
                                                    properties:
                                                      code:
                                                        const: upload-checksum-mismatch
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 422
                                                - if:
                                                    properties:
                                                      code:
                                                        const: legacy-unsupported
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 501
                                                - if:
                                                    properties:
                                                      code:
                                                        const: internal
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 500
                                                - if:
                                                    properties:
                                                      code:
                                                        const: clock-unlocked
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 409
                                                - if:
                                                    properties:
                                                      code:
                                                        const: not-configured
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 503
                                                - if:
                                                    properties:
                                                      code:
                                                        const: authorization-pending
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 400
                                                - if:
                                                    properties:
                                                      code:
                                                        const: slow-down
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 400
                                                - if:
                                                    properties:
                                                      code:
                                                        const: access-denied
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 403
                                                - if:
                                                    properties:
                                                      code:
                                                        const: expired-token
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 400
                                                - if:
                                                    properties:
                                                      code:
                                                        const: token-reused
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 401
                                                - if:
                                                    properties:
                                                      code:
                                                        const: idempotency-key-reused
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 409
                                                - if:
                                                    properties:
                                                      code:
                                                        const: idempotency-in-progress
                                                    required:
                                                      - code
                                                  then:
                                                    properties:
                                                      status:
                                                        const: 409
                                              additionalProperties: true
                                              examples:
                                                - type: >-
                                                    https://freedome.nativemind.us/problems/engine-unavailable
                                                  title: Visual engine unavailable
                                                  status: 503
                                                  detail: >-
                                                    freedome-engined not reachable at
                                                    unix:/run/freedome/engine.sock
                                                  instance: /api/v1/venues/default/players/main/play
                                                  code: engine-unavailable
                                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                              $defs:
                                                knownCode:
                                                  enum:
                                                    - validation-failed
                                                    - not-found
                                                    - conflict
                                                    - precondition-failed
                                                    - precondition-required
                                                    - unauthenticated
                                                    - forbidden
                                                    - rate-limited
                                                    - payload-too-large
                                                    - unsupported-format
                                                    - engine-unavailable
                                                    - engine-incompatible
                                                    - degraded
                                                    - job-failed
                                                    - upload-checksum-mismatch
                                                    - legacy-unsupported
                                                    - internal
                                                    - clock-unlocked
                                                    - not-configured
                                                    - authorization-pending
                                                    - slow-down
                                                    - access-denied
                                                    - expired-token
                                                    - token-reused
                                                    - idempotency-key-reused
                                                    - idempotency-in-progress
                                                code:
                                                  description: >-
                                                    Stable machine key; also the last path
                                                    segment of `type`. Open set: see
                                                    knownCode.
                                                  type: string
                                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                fieldError:
                                                  type: object
                                                  required:
                                                    - pointer
                                                    - detail
                                                  properties:
                                                    pointer:
                                                      type: string
                                                      format: json-pointer
                                                    detail:
                                                      type: string
                                                    code:
                                                      description: >-
                                                        Stable machine key; also the last path
                                                        segment of `type`. Open set: see
                                                        knownCode.
                                                      type: string
                                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                  additionalProperties: true
                                          additionalProperties: false
                                        product:
                                          description: >-
                                            GET /api/v1/product of Resolume, when
                                            reachable.
                                          type: object
                                          properties:
                                            name:
                                              type: string
                                            major:
                                              type: integer
                                              minimum: 0
                                            minor:
                                              type: integer
                                              minimum: 0
                                            micro:
                                              type: integer
                                              minimum: 0
                                            revision:
                                              type: integer
                                              minimum: 0
                                          additionalProperties: false
                                        composition:
                                          description: Summary of the open composition.
                                          type: object
                                          properties:
                                            name:
                                              type: string
                                            layers:
                                              type: integer
                                              minimum: 0
                                            columns:
                                              type: integer
                                              minimum: 0
                                            decks:
                                              type: integer
                                              minimum: 0
                                          additionalProperties: false
                                        lastSyncAt:
                                          description: >-
                                            RFC 3339 UTC with milliseconds, e.g.
                                            2026-10-19T12:00:00.000Z.
                                          type: string
                                          format: date-time
                                          pattern: >-
                                            ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                      additionalProperties: false
                                  if:
                                    properties:
                                      protocol:
                                        const: resolume
                                    required:
                                      - protocol
                                  then:
                                    properties:
                                      config:
                                        description: >-
                                          `config` of the outbound Resolume Arena
                                          / Avenue driver (protocol resolume).
                                          Defaults are Resolume's own ports; they
                                          equal the media server's defaults, so on
                                          one machine move the media server
                                          (docs/audio-reactive.md).
                                        type: object
                                        required:
                                          - host
                                        properties:
                                          host:
                                            type: string
                                            minLength: 1
                                            maxLength: 253
                                            description: host name or IP of the Resolume machine
                                          oscPort:
                                            type: integer
                                            minimum: 1
                                            maximum: 65535
                                            default: 7000
                                          restPort:
                                            type: integer
                                            minimum: 1
                                            maximum: 65535
                                            default: 8080
                                          ws:
                                            type: boolean
                                            default: true
                                            description: >-
                                              keep the WebSocket API connection
                                              (ws://host:restPort/api/v1) for state
                                          oscMaxRateHz:
                                            type: number
                                            exclusiveMinimum: 0
                                            maximum: 1000
                                            description: >-
                                              highest send rate per OSC address; newer
                                              values replace unsent ones
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                            additionalProperties: false
                          testResult:
                            type: object
                            required:
                              - gatewayId
                              - ok
                            properties:
                              gatewayId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              ok:
                                type: boolean
                              latencyMs:
                                type: number
                                minimum: 0
                              remoteVersion:
                                type: string
                              detail:
                                type: string
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                            additionalProperties: false
                          oscArg:
                            type: object
                            required:
                              - type
                              - value
                            properties:
                              type:
                                enum:
                                  - i
                                  - f
                                  - s
                                  - b
                                  - T
                                  - F
                                  - h
                                  - d
                                  - t
                                  - 'N'
                              value:
                                anyOf:
                                  - type: number
                                  - type: string
                                  - type: boolean
                                  - type: 'null'
                                description: b = base64 blob; t = NTP time tag as RFC 3339
                            additionalProperties: false
                          sendOsc:
                            description: >-
                              POST /integrations/osc/send: to a configured OSC
                              target only (never an arbitrary host).
                            type: object
                            required:
                              - target
                              - address
                            properties:
                              target:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              address:
                                type: string
                                pattern: ^/[^\s#*,?\[\]{}]*$
                              args:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - type
                                    - value
                                  properties:
                                    type:
                                      enum:
                                        - i
                                        - f
                                        - s
                                        - b
                                        - T
                                        - F
                                        - h
                                        - d
                                        - t
                                        - 'N'
                                    value:
                                      anyOf:
                                        - type: number
                                        - type: string
                                        - type: boolean
                                        - type: 'null'
                                      description: >-
                                        b = base64 blob; t = NTP time tag as RFC
                                        3339
                                  additionalProperties: false
                                maxItems: 64
                            additionalProperties: false
                      patch:
                        description: Merge patch of the resource (high-rate kinds).
                        type: object
                        minProperties: 1
                - if:
                    properties:
                      kind:
                        const: gateway.message
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: >-
                          Debug trace of a gateway message (gateways:manage
                          only).
                        type: object
                        required:
                          - direction
                          - summary
                        properties:
                          direction:
                            enum:
                              - in
                              - out
                          peer:
                            type: string
                          summary:
                            type: string
                          mapsTo:
                            description: >-
                              OpenAPI operationId (camelCase); also the `op` of
                              WS / socket.io `call`.
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*$
                          raw:
                            type: string
                            maxLength: 4096
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: app.payload
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: >-
                          Response of publishAppPayload and the `data.resource`
                          of event app.payload.
                        type: object
                        required:
                          - id
                          - app
                          - kind
                          - expiresAt
                        properties:
                          id:
                            description: >-
                              Server-owned resource id: UUIDv7, lowercase,
                              sortable by creation time.
                            type: string
                            pattern: >-
                              ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                            examples:
                              - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                          app:
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,128}$
                          kind:
                            type: string
                          schema:
                            type: string
                          data: {}
                          publishedBy:
                            type: string
                          expiresAt:
                            description: >-
                              RFC 3339 UTC with milliseconds, e.g.
                              2026-10-19T12:00:00.000Z.
                            type: string
                            format: date-time
                            pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: app.cleared
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        type: object
                        required:
                          - app
                        properties:
                          app:
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,128}$
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: client.command
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: >-
                          Server → device command, delivered as event
                          client.command on clients/{clientId}/commands.
                        type: object
                        required:
                          - command
                        properties:
                          command:
                            anyOf:
                              - enum:
                                  - vibrate
                                  - capture
                                  - sensors
                                  - biometric
                              - type: string
                                pattern: ^[a-z][A-Za-z0-9_.-]{0,63}$
                          params:
                            type: object
                            additionalProperties: true
                          expiresAt:
                            description: >-
                              RFC 3339 UTC with milliseconds, e.g.
                              2026-10-19T12:00:00.000Z.
                            type: string
                            format: date-time
                            pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: session.revoked
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        type: object
                        required:
                          - reason
                        properties:
                          sessionId:
                            type: string
                          reason:
                            anyOf:
                              - enum:
                                  - signed-out
                                  - refresh-reuse
                                  - password-changed
                                  - user-deleted
                                  - key-revoked
                                  - admin
                              - type: string
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: scenarioSession.state
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/api/1.0/scenario-session.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE).
                          Scenario session (02d §3 ScenarioSession, UC-SC2–SC4;
                          topic venues/{venueId}/scenarios/{sessionId}, RC5).
                          Root = GET
                          /venues/{venueId}/scenario-sessions/{sessionId}.
                        title: Scenario session
                        allOf:
                          - type: object
                            required:
                              - id
                              - venueId
                              - scenarioId
                              - status
                              - params
                              - startedAt
                            properties:
                              id:
                                description: >-
                                  Server-owned resource id: UUIDv7, lowercase,
                                  sortable by creation time.
                                type: string
                                pattern: >-
                                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                examples:
                                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                              venueId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              scenarioId:
                                type: string
                                pattern: ^[a-z][a-z0-9_]{0,63}$
                              scenarioVersion:
                                description: Semantic version 2.0.0.
                                type: string
                                pattern: >-
                                  ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$
                              status:
                                anyOf:
                                  - enum:
                                      - starting
                                      - running
                                      - paused
                                      - finished
                                      - stopped
                                      - failed
                                  - type: string
                                    pattern: ^[a-z][a-z_-]{0,31}$
                              params:
                                type: object
                              owner:
                                type: string
                                description: >-
                                  principal that started it (the session runs
                                  with its role)
                              progress:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              phase:
                                type: string
                              message:
                                type: string
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              startedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              endedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                            allOf:
                              - if:
                                  properties:
                                    status:
                                      const: failed
                                  required:
                                    - status
                                then:
                                  required:
                                    - problem
                        $defs:
                          status:
                            anyOf:
                              - enum:
                                  - starting
                                  - running
                                  - paused
                                  - finished
                                  - stopped
                                  - failed
                              - type: string
                                pattern: ^[a-z][a-z_-]{0,31}$
                          session:
                            type: object
                            required:
                              - id
                              - venueId
                              - scenarioId
                              - status
                              - params
                              - startedAt
                            properties:
                              id:
                                description: >-
                                  Server-owned resource id: UUIDv7, lowercase,
                                  sortable by creation time.
                                type: string
                                pattern: >-
                                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                examples:
                                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                              venueId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              scenarioId:
                                type: string
                                pattern: ^[a-z][a-z0-9_]{0,63}$
                              scenarioVersion:
                                description: Semantic version 2.0.0.
                                type: string
                                pattern: >-
                                  ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$
                              status:
                                anyOf:
                                  - enum:
                                      - starting
                                      - running
                                      - paused
                                      - finished
                                      - stopped
                                      - failed
                                  - type: string
                                    pattern: ^[a-z][a-z_-]{0,31}$
                              params:
                                type: object
                              owner:
                                type: string
                                description: >-
                                  principal that started it (the session runs
                                  with its role)
                              progress:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              phase:
                                type: string
                              message:
                                type: string
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              startedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              endedAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                            allOf:
                              - if:
                                  properties:
                                    status:
                                      const: failed
                                  required:
                                    - status
                                then:
                                  required:
                                    - problem
                          start:
                            description: >-
                              POST /venues/{venueId}/scenario-sessions (UC-SC2);
                              params are validated against the scenario's
                              paramsSchema (422).
                            type: object
                            required:
                              - scenarioId
                            properties:
                              scenarioId:
                                type: string
                                pattern: ^[a-z][a-z0-9_]{0,63}$
                              params:
                                type: object
                                default: {}
                              at:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            additionalProperties: false
                          page:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - id
                                    - venueId
                                    - scenarioId
                                    - status
                                    - params
                                    - startedAt
                                  properties:
                                    id:
                                      description: >-
                                        Server-owned resource id: UUIDv7,
                                        lowercase, sortable by creation time.
                                      type: string
                                      pattern: >-
                                        ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                      examples:
                                        - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                                    venueId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    scenarioId:
                                      type: string
                                      pattern: ^[a-z][a-z0-9_]{0,63}$
                                    scenarioVersion:
                                      description: Semantic version 2.0.0.
                                      type: string
                                      pattern: >-
                                        ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$
                                    status:
                                      anyOf:
                                        - enum:
                                            - starting
                                            - running
                                            - paused
                                            - finished
                                            - stopped
                                            - failed
                                        - type: string
                                          pattern: ^[a-z][a-z_-]{0,31}$
                                    params:
                                      type: object
                                    owner:
                                      type: string
                                      description: >-
                                        principal that started it (the session
                                        runs with its role)
                                    progress:
                                      description: >-
                                        0..1 (brightness, linear volume gain,
                                        progress).
                                      type: number
                                      minimum: 0
                                      maximum: 1
                                    phase:
                                      type: string
                                    message:
                                      type: string
                                    problem:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). RFC 9457 problem details with
                                        the Freedome `code` catalogue, 02e §3.3.
                                        Also the `data` of WS `error`, the
                                        socket.io ack error and GraphQL
                                        errors[].extensions.problem. The
                                        catalogue is open: unknown codes are
                                        allowed; known codes are bound to their
                                        HTTP status.
                                      title: Problem details
                                      type: object
                                      required:
                                        - type
                                        - title
                                        - code
                                      properties:
                                        type:
                                          type: string
                                          format: uri
                                          description: >-
                                            https://freedome.nativemind.us/problems/<code>
                                            for catalogue codes.
                                        title:
                                          type: string
                                          minLength: 1
                                        status:
                                          type: integer
                                          minimum: 100
                                          maximum: 599
                                        detail:
                                          type: string
                                        instance:
                                          type: string
                                          format: uri-reference
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        traceId:
                                          type: string
                                          pattern: ^[0-9a-f]{16,32}$
                                        errors:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                      allOf:
                                        - if:
                                            properties:
                                              code:
                                                const: validation-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: not-found
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 404
                                        - if:
                                            properties:
                                              code:
                                                const: conflict
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 412
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-required
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 428
                                        - if:
                                            properties:
                                              code:
                                                const: unauthenticated
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: forbidden
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: rate-limited
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 429
                                        - if:
                                            properties:
                                              code:
                                                const: payload-too-large
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 413
                                        - if:
                                            properties:
                                              code:
                                                const: unsupported-format
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 415
                                        - if:
                                            properties:
                                              code:
                                                const: engine-unavailable
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: engine-incompatible
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: degraded
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: upload-checksum-mismatch
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: legacy-unsupported
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 501
                                        - if:
                                            properties:
                                              code:
                                                const: internal
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 500
                                        - if:
                                            properties:
                                              code:
                                                const: clock-unlocked
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: not-configured
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: authorization-pending
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: slow-down
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: access-denied
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: expired-token
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: token-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-key-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-in-progress
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                      additionalProperties: true
                                      examples:
                                        - type: >-
                                            https://freedome.nativemind.us/problems/engine-unavailable
                                          title: Visual engine unavailable
                                          status: 503
                                          detail: >-
                                            freedome-engined not reachable at
                                            unix:/run/freedome/engine.sock
                                          instance: /api/v1/venues/default/players/main/play
                                          code: engine-unavailable
                                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                      $defs:
                                        knownCode:
                                          enum:
                                            - validation-failed
                                            - not-found
                                            - conflict
                                            - precondition-failed
                                            - precondition-required
                                            - unauthenticated
                                            - forbidden
                                            - rate-limited
                                            - payload-too-large
                                            - unsupported-format
                                            - engine-unavailable
                                            - engine-incompatible
                                            - degraded
                                            - job-failed
                                            - upload-checksum-mismatch
                                            - legacy-unsupported
                                            - internal
                                            - clock-unlocked
                                            - not-configured
                                            - authorization-pending
                                            - slow-down
                                            - access-denied
                                            - expired-token
                                            - token-reused
                                            - idempotency-key-reused
                                            - idempotency-in-progress
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        fieldError:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    startedAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    endedAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                  allOf:
                                    - if:
                                        properties:
                                          status:
                                            const: failed
                                        required:
                                          - status
                                      then:
                                        required:
                                          - problem
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                            additionalProperties: false
                          logEntry:
                            type: object
                            required:
                              - seq
                              - ts
                              - level
                              - message
                            properties:
                              seq:
                                type: integer
                                minimum: 0
                              ts:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              level:
                                enum:
                                  - debug
                                  - info
                                  - warn
                                  - error
                              message:
                                type: string
                              fields:
                                type: object
                                additionalProperties: true
                            additionalProperties: false
                          logPage:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - seq
                                    - ts
                                    - level
                                    - message
                                  properties:
                                    seq:
                                      type: integer
                                      minimum: 0
                                    ts:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    level:
                                      enum:
                                        - debug
                                        - info
                                        - warn
                                        - error
                                    message:
                                      type: string
                                    fields:
                                      type: object
                                      additionalProperties: true
                                  additionalProperties: false
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                            additionalProperties: false
                      patch:
                        description: Merge patch of the resource (high-rate kinds).
                        type: object
                        minProperties: 1
                - if:
                    properties:
                      kind:
                        const: scenarioSession.log
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        type: object
                        required:
                          - seq
                          - ts
                          - level
                          - message
                        properties:
                          seq:
                            type: integer
                            minimum: 0
                          ts:
                            description: >-
                              RFC 3339 UTC with milliseconds, e.g.
                              2026-10-19T12:00:00.000Z.
                            type: string
                            format: date-time
                            pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          level:
                            enum:
                              - debug
                              - info
                              - warn
                              - error
                          message:
                            type: string
                          fields:
                            type: object
                            additionalProperties: true
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: device.state
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/api/1.0/device.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE).
                          Visual device agents speaking freedome.device.v1
                          (projector variants FD-VP-*, master PR3, MS 1.MS.18):
                          discovery, pairing, binding to a display, telemetry.
                          Root = GET /devices/{deviceId}.
                        title: Visual device
                        allOf:
                          - type: object
                            required:
                              - id
                              - variant
                              - address
                              - paired
                              - state
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              serial:
                                type: string
                              product:
                                type: string
                              variant:
                                type: string
                                description: fd-vp-f-1, fd-vp-p-s, …
                              hwRevision:
                                type: string
                              agentVersion:
                                type: string
                              protocolVersion:
                                type: string
                              capabilities:
                                type: array
                                items:
                                  type: string
                                uniqueItems: true
                              address:
                                type: string
                                description: host:port of the agent
                              paired:
                                type: boolean
                              displayId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                                description: venue display this device drives
                              state:
                                type: object
                                required:
                                  - online
                                properties:
                                  online:
                                    type: boolean
                                  power:
                                    anyOf:
                                      - enum:
                                          - 'on'
                                          - 'off'
                                          - standby
                                          - warming
                                          - cooling
                                          - unknown
                                      - type: string
                                  temperatureC:
                                    type: number
                                  fanRpm:
                                    type: number
                                    minimum: 0
                                  lampHours:
                                    type: number
                                    minimum: 0
                                  battery:
                                    description: >-
                                      0..1 (brightness, linear volume gain,
                                      progress).
                                    type: number
                                    minimum: 0
                                    maximum: 1
                                  faults:
                                    type: array
                                    items:
                                      type: string
                                  lastSeen:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                additionalProperties: true
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                        $defs:
                          device:
                            type: object
                            required:
                              - id
                              - variant
                              - address
                              - paired
                              - state
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              serial:
                                type: string
                              product:
                                type: string
                              variant:
                                type: string
                                description: fd-vp-f-1, fd-vp-p-s, …
                              hwRevision:
                                type: string
                              agentVersion:
                                type: string
                              protocolVersion:
                                type: string
                              capabilities:
                                type: array
                                items:
                                  type: string
                                uniqueItems: true
                              address:
                                type: string
                                description: host:port of the agent
                              paired:
                                type: boolean
                              displayId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                                description: venue display this device drives
                              state:
                                type: object
                                required:
                                  - online
                                properties:
                                  online:
                                    type: boolean
                                  power:
                                    anyOf:
                                      - enum:
                                          - 'on'
                                          - 'off'
                                          - standby
                                          - warming
                                          - cooling
                                          - unknown
                                      - type: string
                                  temperatureC:
                                    type: number
                                  fanRpm:
                                    type: number
                                    minimum: 0
                                  lampHours:
                                    type: number
                                    minimum: 0
                                  battery:
                                    description: >-
                                      0..1 (brightness, linear volume gain,
                                      progress).
                                    type: number
                                    minimum: 0
                                    maximum: 1
                                  faults:
                                    type: array
                                    items:
                                      type: string
                                  lastSeen:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                additionalProperties: true
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          page:
                            type: object
                            required:
                              - items
                              - nextCursor
                            properties:
                              items:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - id
                                    - variant
                                    - address
                                    - paired
                                    - state
                                  properties:
                                    id:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    serial:
                                      type: string
                                    product:
                                      type: string
                                    variant:
                                      type: string
                                      description: fd-vp-f-1, fd-vp-p-s, …
                                    hwRevision:
                                      type: string
                                    agentVersion:
                                      type: string
                                    protocolVersion:
                                      type: string
                                    capabilities:
                                      type: array
                                      items:
                                        type: string
                                      uniqueItems: true
                                    address:
                                      type: string
                                      description: host:port of the agent
                                    paired:
                                      type: boolean
                                    displayId:
                                      anyOf:
                                        - description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        - type: 'null'
                                      description: venue display this device drives
                                    state:
                                      type: object
                                      required:
                                        - online
                                      properties:
                                        online:
                                          type: boolean
                                        power:
                                          anyOf:
                                            - enum:
                                                - 'on'
                                                - 'off'
                                                - standby
                                                - warming
                                                - cooling
                                                - unknown
                                            - type: string
                                        temperatureC:
                                          type: number
                                        fanRpm:
                                          type: number
                                          minimum: 0
                                        lampHours:
                                          type: number
                                          minimum: 0
                                        battery:
                                          description: >-
                                            0..1 (brightness, linear volume gain,
                                            progress).
                                          type: number
                                          minimum: 0
                                          maximum: 1
                                        faults:
                                          type: array
                                          items:
                                            type: string
                                        lastSeen:
                                          description: >-
                                            RFC 3339 UTC with milliseconds, e.g.
                                            2026-10-19T12:00:00.000Z.
                                          type: string
                                          format: date-time
                                          pattern: >-
                                            ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                      additionalProperties: true
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                              nextCursor:
                                anyOf:
                                  - type: string
                                  - type: 'null'
                            additionalProperties: false
                          pairingStarted:
                            description: >-
                              POST /devices/{deviceId}/pairing: the device shows
                              a code (display / LED); the operator confirms it.
                            type: object
                            required:
                              - deviceId
                              - expiresAt
                            properties:
                              deviceId:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              expiresAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              codeLength:
                                type: integer
                                minimum: 4
                                maximum: 8
                            additionalProperties: false
                          pairingConfirm:
                            type: object
                            required:
                              - code
                            properties:
                              code:
                                type: string
                                pattern: ^[0-9A-Z]{4,8}$
                            additionalProperties: false
                          bind:
                            type: object
                            required:
                              - displayId
                            properties:
                              displayId:
                                anyOf:
                                  - description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  - type: 'null'
                                description: null unbinds
                            additionalProperties: false
                      patch:
                        description: Merge patch of the resource (high-rate kinds).
                        type: object
                        minProperties: 1
                - if:
                    properties:
                      kind:
                        const: audioAnalysis.state
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: >-
                          GET /venues/{venueId}/audio/analysis, event
                          audioAnalysis.state.
                        type: object
                        required:
                          - venueId
                          - enabled
                          - status
                          - inputs
                        properties:
                          venueId:
                            description: >-
                              Venue id in a path: a stored venue id or the alias
                              `default`.
                            anyOf:
                              - description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              - const: default
                          enabled:
                            type: boolean
                          status:
                            description: Service status. Open list.
                            anyOf:
                              - enum:
                                  - disabled
                                  - starting
                                  - running
                                  - degraded
                                  - down
                              - type: string
                                pattern: ^[a-z][a-z_-]{0,31}$
                          problem:
                            $schema: https://json-schema.org/draft/2020-12/schema
                            $id: >-
                              https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                            $comment: >-
                              NativeMindNONC — freedome_contract (see LICENSE).
                              RFC 9457 problem details with the Freedome `code`
                              catalogue, 02e §3.3. Also the `data` of WS
                              `error`, the socket.io ack error and GraphQL
                              errors[].extensions.problem. The catalogue is
                              open: unknown codes are allowed; known codes are
                              bound to their HTTP status.
                            title: Problem details
                            type: object
                            required:
                              - type
                              - title
                              - code
                            properties:
                              type:
                                type: string
                                format: uri
                                description: >-
                                  https://freedome.nativemind.us/problems/<code>
                                  for catalogue codes.
                              title:
                                type: string
                                minLength: 1
                              status:
                                type: integer
                                minimum: 100
                                maximum: 599
                              detail:
                                type: string
                              instance:
                                type: string
                                format: uri-reference
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              traceId:
                                type: string
                                pattern: ^[0-9a-f]{16,32}$
                              errors:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                            allOf:
                              - if:
                                  properties:
                                    code:
                                      const: validation-failed
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 422
                              - if:
                                  properties:
                                    code:
                                      const: not-found
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 404
                              - if:
                                  properties:
                                    code:
                                      const: conflict
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 409
                              - if:
                                  properties:
                                    code:
                                      const: precondition-failed
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 412
                              - if:
                                  properties:
                                    code:
                                      const: precondition-required
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 428
                              - if:
                                  properties:
                                    code:
                                      const: unauthenticated
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 401
                              - if:
                                  properties:
                                    code:
                                      const: forbidden
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 403
                              - if:
                                  properties:
                                    code:
                                      const: rate-limited
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 429
                              - if:
                                  properties:
                                    code:
                                      const: payload-too-large
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 413
                              - if:
                                  properties:
                                    code:
                                      const: unsupported-format
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 415
                              - if:
                                  properties:
                                    code:
                                      const: engine-unavailable
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 503
                              - if:
                                  properties:
                                    code:
                                      const: engine-incompatible
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 503
                              - if:
                                  properties:
                                    code:
                                      const: degraded
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 503
                              - if:
                                  properties:
                                    code:
                                      const: upload-checksum-mismatch
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 422
                              - if:
                                  properties:
                                    code:
                                      const: legacy-unsupported
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 501
                              - if:
                                  properties:
                                    code:
                                      const: internal
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 500
                              - if:
                                  properties:
                                    code:
                                      const: clock-unlocked
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 409
                              - if:
                                  properties:
                                    code:
                                      const: not-configured
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 503
                              - if:
                                  properties:
                                    code:
                                      const: authorization-pending
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 400
                              - if:
                                  properties:
                                    code:
                                      const: slow-down
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 400
                              - if:
                                  properties:
                                    code:
                                      const: access-denied
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 403
                              - if:
                                  properties:
                                    code:
                                      const: expired-token
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 400
                              - if:
                                  properties:
                                    code:
                                      const: token-reused
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 401
                              - if:
                                  properties:
                                    code:
                                      const: idempotency-key-reused
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 409
                              - if:
                                  properties:
                                    code:
                                      const: idempotency-in-progress
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 409
                            additionalProperties: true
                            examples:
                              - type: >-
                                  https://freedome.nativemind.us/problems/engine-unavailable
                                title: Visual engine unavailable
                                status: 503
                                detail: >-
                                  freedome-engined not reachable at
                                  unix:/run/freedome/engine.sock
                                instance: /api/v1/venues/default/players/main/play
                                code: engine-unavailable
                                traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                            $defs:
                              knownCode:
                                enum:
                                  - validation-failed
                                  - not-found
                                  - conflict
                                  - precondition-failed
                                  - precondition-required
                                  - unauthenticated
                                  - forbidden
                                  - rate-limited
                                  - payload-too-large
                                  - unsupported-format
                                  - engine-unavailable
                                  - engine-incompatible
                                  - degraded
                                  - job-failed
                                  - upload-checksum-mismatch
                                  - legacy-unsupported
                                  - internal
                                  - clock-unlocked
                                  - not-configured
                                  - authorization-pending
                                  - slow-down
                                  - access-denied
                                  - expired-token
                                  - token-reused
                                  - idempotency-key-reused
                                  - idempotency-in-progress
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              fieldError:
                                type: object
                                required:
                                  - pointer
                                  - detail
                                properties:
                                  pointer:
                                    type: string
                                    format: json-pointer
                                  detail:
                                    type: string
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                additionalProperties: true
                          engine:
                            type: string
                            description: engine that runs the analysis, `<kind>@<node>`
                          sampleRate:
                            type: integer
                            minimum: 1
                          blockSize:
                            type: integer
                            minimum: 1
                          inputs:
                            type: array
                            items:
                              description: >-
                                One analysed input (a vocal microphone, an
                                instrument group, a mix).
                              type: object
                              required:
                                - id
                              properties:
                                id:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                label:
                                  type: string
                                  maxLength: 128
                                device:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                channels:
                                  type: array
                                  items:
                                    type: integer
                                    minimum: 1
                                    maximum: 1024
                                  minItems: 1
                                  maxItems: 64
                                  uniqueItems: true
                                  description: >-
                                    1-based capture channels, summed to mono;
                                    default [1]
                                gainDb:
                                  description: >-
                                    Gain in dB (C5: optional companion of linear
                                    `volume`).
                                  type: number
                                  minimum: -144
                                  maximum: 24
                                gateDb:
                                  type: number
                                  minimum: -144
                                  maximum: 0
                                  description: noise gate threshold, dBFS
                                envelope:
                                  type: object
                                  properties:
                                    attackMs:
                                      type: number
                                      minimum: 0
                                      maximum: 10000
                                      default: 8
                                    decayMs:
                                      type: number
                                      minimum: 0
                                      maximum: 10000
                                      default: 120
                                  additionalProperties: false
                                onset:
                                  type: object
                                  properties:
                                    threshold:
                                      description: >-
                                        0..1 (brightness, linear volume gain,
                                        progress).
                                      type: number
                                      minimum: 0
                                      maximum: 1
                                    refractoryMs:
                                      type: number
                                      minimum: 0
                                      maximum: 10000
                                      description: minimum time between two onsets
                                  additionalProperties: false
                                centroidRange:
                                  description: Frequencies that map to centroid 0 and 1.
                                  type: object
                                  required:
                                    - minHz
                                    - maxHz
                                  properties:
                                    minHz:
                                      type: number
                                      exclusiveMinimum: 0
                                    maxHz:
                                      type: number
                                      exclusiveMinimum: 0
                                  additionalProperties: false
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                            maxItems: 64
                        patternProperties:
                          ^x-: true
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: audio.analysis
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: >-
                          One analysis frame of one input (event
                          audio.analysis). rms, peak and bands are linear
                          amplitude relative to full scale, clamped to 0..1,
                          after the input's envelope (a voice at -24 dBFS reads
                          0.06). Scene smoothing is applied after this.
                        type: object
                        required:
                          - inputId
                          - frame
                          - captureUs
                          - rms
                          - peak
                          - bands
                          - centroid
                          - onset
                        properties:
                          inputId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          frame:
                            type: integer
                            minimum: 0
                            description: >-
                              frame counter of this input since the analysis
                              started
                          captureUs:
                            type: integer
                            minimum: 0
                            description: >-
                              start of the audio block on the analysis node's
                              monotonic clock, µs; comparable only on that node
                          rms:
                            description: 0..1 (brightness, linear volume gain, progress).
                            type: number
                            minimum: 0
                            maximum: 1
                          peak:
                            description: 0..1 (brightness, linear volume gain, progress).
                            type: number
                            minimum: 0
                            maximum: 1
                          rmsDb:
                            type: number
                            description: dBFS, before normalisation
                          peakDb:
                            type: number
                            description: dBFS, before normalisation
                          bands:
                            description: >-
                              Band energies, each 0..1. Fixed ranges: subBass
                              30–150 Hz, mid 150–800 Hz, highMid 800–4000 Hz,
                              treble 4000–16000 Hz.
                            type: object
                            required:
                              - subBass
                              - mid
                              - highMid
                              - treble
                            properties:
                              subBass:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              mid:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              highMid:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                              treble:
                                description: >-
                                  0..1 (brightness, linear volume gain,
                                  progress).
                                type: number
                                minimum: 0
                                maximum: 1
                            additionalProperties: false
                          centroid:
                            description: 0..1 (brightness, linear volume gain, progress).
                            type: number
                            minimum: 0
                            maximum: 1
                          centroidHz:
                            type: number
                            exclusiveMinimum: 0
                          onset:
                            description: 0..1 (brightness, linear volume gain, progress).
                            type: number
                            minimum: 0
                            maximum: 1
                          gated:
                            type: boolean
                            description: >-
                              the input is below its gate: normalised values are
                              0
                        patternProperties:
                          ^x-: true
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: audio.onset
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: One detected attack (event audio.onset).
                        type: object
                        required:
                          - inputId
                          - frame
                          - captureUs
                          - strength
                        properties:
                          inputId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          frame:
                            type: integer
                            minimum: 0
                          captureUs:
                            type: integer
                            minimum: 0
                          strength:
                            description: 0..1 (brightness, linear volume gain, progress).
                            type: number
                            minimum: 0
                            maximum: 1
                          band:
                            enum:
                              - subBass
                              - mid
                              - highMid
                              - treble
                            description: band with the largest energy rise, when known
                        patternProperties:
                          ^x-: true
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: audioReactive.state
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: >-
                          GET /venues/{venueId}/audio/reactive, event
                          audioReactive.state.
                        type: object
                        required:
                          - venueId
                          - enabled
                          - status
                          - activeSceneId
                          - intensity
                        properties:
                          venueId:
                            description: >-
                              Venue id in a path: a stored venue id or the alias
                              `default`.
                            anyOf:
                              - description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              - const: default
                          enabled:
                            type: boolean
                          status:
                            description: Service status. Open list.
                            anyOf:
                              - enum:
                                  - disabled
                                  - starting
                                  - running
                                  - degraded
                                  - down
                              - type: string
                                pattern: ^[a-z][a-z_-]{0,31}$
                          problem:
                            $schema: https://json-schema.org/draft/2020-12/schema
                            $id: >-
                              https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                            $comment: >-
                              NativeMindNONC — freedome_contract (see LICENSE).
                              RFC 9457 problem details with the Freedome `code`
                              catalogue, 02e §3.3. Also the `data` of WS
                              `error`, the socket.io ack error and GraphQL
                              errors[].extensions.problem. The catalogue is
                              open: unknown codes are allowed; known codes are
                              bound to their HTTP status.
                            title: Problem details
                            type: object
                            required:
                              - type
                              - title
                              - code
                            properties:
                              type:
                                type: string
                                format: uri
                                description: >-
                                  https://freedome.nativemind.us/problems/<code>
                                  for catalogue codes.
                              title:
                                type: string
                                minLength: 1
                              status:
                                type: integer
                                minimum: 100
                                maximum: 599
                              detail:
                                type: string
                              instance:
                                type: string
                                format: uri-reference
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              traceId:
                                type: string
                                pattern: ^[0-9a-f]{16,32}$
                              errors:
                                type: array
                                items:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                            allOf:
                              - if:
                                  properties:
                                    code:
                                      const: validation-failed
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 422
                              - if:
                                  properties:
                                    code:
                                      const: not-found
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 404
                              - if:
                                  properties:
                                    code:
                                      const: conflict
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 409
                              - if:
                                  properties:
                                    code:
                                      const: precondition-failed
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 412
                              - if:
                                  properties:
                                    code:
                                      const: precondition-required
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 428
                              - if:
                                  properties:
                                    code:
                                      const: unauthenticated
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 401
                              - if:
                                  properties:
                                    code:
                                      const: forbidden
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 403
                              - if:
                                  properties:
                                    code:
                                      const: rate-limited
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 429
                              - if:
                                  properties:
                                    code:
                                      const: payload-too-large
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 413
                              - if:
                                  properties:
                                    code:
                                      const: unsupported-format
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 415
                              - if:
                                  properties:
                                    code:
                                      const: engine-unavailable
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 503
                              - if:
                                  properties:
                                    code:
                                      const: engine-incompatible
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 503
                              - if:
                                  properties:
                                    code:
                                      const: degraded
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 503
                              - if:
                                  properties:
                                    code:
                                      const: upload-checksum-mismatch
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 422
                              - if:
                                  properties:
                                    code:
                                      const: legacy-unsupported
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 501
                              - if:
                                  properties:
                                    code:
                                      const: internal
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 500
                              - if:
                                  properties:
                                    code:
                                      const: clock-unlocked
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 409
                              - if:
                                  properties:
                                    code:
                                      const: not-configured
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 503
                              - if:
                                  properties:
                                    code:
                                      const: authorization-pending
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 400
                              - if:
                                  properties:
                                    code:
                                      const: slow-down
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 400
                              - if:
                                  properties:
                                    code:
                                      const: access-denied
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 403
                              - if:
                                  properties:
                                    code:
                                      const: expired-token
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 400
                              - if:
                                  properties:
                                    code:
                                      const: token-reused
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 401
                              - if:
                                  properties:
                                    code:
                                      const: idempotency-key-reused
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 409
                              - if:
                                  properties:
                                    code:
                                      const: idempotency-in-progress
                                  required:
                                    - code
                                then:
                                  properties:
                                    status:
                                      const: 409
                            additionalProperties: true
                            examples:
                              - type: >-
                                  https://freedome.nativemind.us/problems/engine-unavailable
                                title: Visual engine unavailable
                                status: 503
                                detail: >-
                                  freedome-engined not reachable at
                                  unix:/run/freedome/engine.sock
                                instance: /api/v1/venues/default/players/main/play
                                code: engine-unavailable
                                traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                            $defs:
                              knownCode:
                                enum:
                                  - validation-failed
                                  - not-found
                                  - conflict
                                  - precondition-failed
                                  - precondition-required
                                  - unauthenticated
                                  - forbidden
                                  - rate-limited
                                  - payload-too-large
                                  - unsupported-format
                                  - engine-unavailable
                                  - engine-incompatible
                                  - degraded
                                  - job-failed
                                  - upload-checksum-mismatch
                                  - legacy-unsupported
                                  - internal
                                  - clock-unlocked
                                  - not-configured
                                  - authorization-pending
                                  - slow-down
                                  - access-denied
                                  - expired-token
                                  - token-reused
                                  - idempotency-key-reused
                                  - idempotency-in-progress
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              fieldError:
                                type: object
                                required:
                                  - pointer
                                  - detail
                                properties:
                                  pointer:
                                    type: string
                                    format: json-pointer
                                  detail:
                                    type: string
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                additionalProperties: true
                          activeSceneId:
                            anyOf:
                              - description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              - type: 'null'
                          intensity:
                            description: 0..1 (brightness, linear volume gain, progress).
                            type: number
                            minimum: 0
                            maximum: 1
                          stats:
                            type: object
                            additionalProperties:
                              type: number
                            description: >-
                              counters, e.g. framesIn, messagesOut,
                              framesDropped
                          resolume:
                            description: >-
                              connection status of gateway `resolume`, the same
                              object as its gateway member, so that
                              playback:read can see it without gateways:manage;
                              absent when no such gateway is configured.
                              Read-only.
                            type: object
                            required:
                              - osc
                              - rest
                              - ws
                            properties:
                              osc:
                                type: object
                                required:
                                  - state
                                properties:
                                  state:
                                    anyOf:
                                      - enum:
                                          - disabled
                                          - connecting
                                          - up
                                          - down
                                      - type: string
                                        pattern: ^[a-z][a-z_-]{0,31}$
                                    description: >-
                                      for OSC over UDP, up means sending: there
                                      is no acknowledgement
                                  lastOkAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  sent:
                                    type: integer
                                    minimum: 0
                                  dropped:
                                    type: integer
                                    minimum: 0
                                  problem:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                additionalProperties: false
                              rest:
                                type: object
                                required:
                                  - state
                                properties:
                                  state:
                                    anyOf:
                                      - enum:
                                          - disabled
                                          - connecting
                                          - up
                                          - down
                                      - type: string
                                        pattern: ^[a-z][a-z_-]{0,31}$
                                    description: >-
                                      for OSC over UDP, up means sending: there
                                      is no acknowledgement
                                  lastOkAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  sent:
                                    type: integer
                                    minimum: 0
                                  dropped:
                                    type: integer
                                    minimum: 0
                                  problem:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                additionalProperties: false
                              ws:
                                type: object
                                required:
                                  - state
                                properties:
                                  state:
                                    anyOf:
                                      - enum:
                                          - disabled
                                          - connecting
                                          - up
                                          - down
                                      - type: string
                                        pattern: ^[a-z][a-z_-]{0,31}$
                                    description: >-
                                      for OSC over UDP, up means sending: there
                                      is no acknowledgement
                                  lastOkAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  sent:
                                    type: integer
                                    minimum: 0
                                  dropped:
                                    type: integer
                                    minimum: 0
                                  problem:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                additionalProperties: false
                              product:
                                description: >-
                                  GET /api/v1/product of Resolume, when
                                  reachable.
                                type: object
                                properties:
                                  name:
                                    type: string
                                  major:
                                    type: integer
                                    minimum: 0
                                  minor:
                                    type: integer
                                    minimum: 0
                                  micro:
                                    type: integer
                                    minimum: 0
                                  revision:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                              composition:
                                description: Summary of the open composition.
                                type: object
                                properties:
                                  name:
                                    type: string
                                  layers:
                                    type: integer
                                    minimum: 0
                                  columns:
                                    type: integer
                                    minimum: 0
                                  decks:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                              lastSyncAt:
                                description: >-
                                  RFC 3339 UTC with milliseconds, e.g.
                                  2026-10-19T12:00:00.000Z.
                                type: string
                                format: date-time
                                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            additionalProperties: false
                        patternProperties:
                          ^x-: true
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: audioReactiveScene.updated
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: >-
                          A scene is data: which metrics drive which targets.
                          Mapping ids are unique within the scene.
                        type: object
                        allOf:
                          - type: object
                            properties:
                              title:
                                description: >-
                                  Plain string (treated as `en`) or a localised
                                  map. (map branch = the root schema, inlined
                                  for tools that mis-handle self references)
                                anyOf:
                                  - type: string
                                  - type: object
                                    minProperties: 1
                                    propertyNames:
                                      pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                    additionalProperties:
                                      type: string
                                    examples:
                                      - en: Intro
                                        ru: Вступление
                              description:
                                description: >-
                                  Plain string (treated as `en`) or a localised
                                  map. (map branch = the root schema, inlined
                                  for tools that mis-handle self references)
                                anyOf:
                                  - type: string
                                  - type: object
                                    minProperties: 1
                                    propertyNames:
                                      pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                    additionalProperties:
                                      type: string
                                    examples:
                                      - en: Intro
                                        ru: Вступление
                              mappings:
                                type: array
                                items:
                                  description: >-
                                    One metric → one target. continuous: the
                                    mapped value is sent on every frame it
                                    changes. trigger: one message when the
                                    metric rises through `threshold`, then
                                    nothing for `cooldownMs`.
                                  type: object
                                  required:
                                    - id
                                    - mode
                                    - source
                                    - target
                                  properties:
                                    id:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    mode:
                                      enum:
                                        - continuous
                                        - trigger
                                    source:
                                      type: object
                                      required:
                                        - input
                                        - metric
                                      properties:
                                        input:
                                          description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        metric:
                                          description: >-
                                            A value of the analysis frame. rms,
                                            peak: envelope; subBass, mid, highMid,
                                            treble: bands; centroid: spectral
                                            brightness; onset: attack strength. Open
                                            list.
                                          anyOf:
                                            - enum:
                                                - rms
                                                - peak
                                                - subBass
                                                - mid
                                                - highMid
                                                - treble
                                                - centroid
                                                - onset
                                            - type: string
                                              pattern: ^[a-z][A-Za-z0-9]{0,31}$
                                      additionalProperties: false
                                    range:
                                      description: >-
                                        Linear map before the curve. inMax >
                                        inMin (422 otherwise); outMin > outMax
                                        inverts. Defaults 0, 1, 0, 1.
                                      type: object
                                      properties:
                                        inMin:
                                          type: number
                                        inMax:
                                          type: number
                                        outMin:
                                          type: number
                                        outMax:
                                          type: number
                                      additionalProperties: false
                                    curve:
                                      anyOf:
                                        - enum:
                                            - linear
                                            - exp
                                            - log
                                            - s-curve
                                        - type: string
                                          pattern: ^[a-z][a-z0-9_-]{0,31}$
                                      default: linear
                                      description: >-
                                        for t in 0..1: linear t; exp t²; log
                                        log10(1 + 9t); s-curve 3t² − 2t³
                                    smoothing:
                                      description: >-
                                        Asymmetric smoothing of the mapped
                                        value, applied by the media server.
                                      type: object
                                      properties:
                                        attackMs:
                                          type: number
                                          minimum: 0
                                          maximum: 10000
                                        decayMs:
                                          type: number
                                          minimum: 0
                                          maximum: 10000
                                      additionalProperties: false
                                    threshold:
                                      description: >-
                                        0..1 (brightness, linear volume gain,
                                        progress).
                                      type: number
                                      minimum: 0
                                      maximum: 1
                                    cooldownMs:
                                      type: number
                                      minimum: 0
                                      maximum: 60000
                                    target:
                                      description: >-
                                        Where a mapping goes. kind osc: an OSC
                                        address of an outbound gateway. Open
                                        list: a server that does not know a kind
                                        answers 422.
                                      type: object
                                      required:
                                        - kind
                                      properties:
                                        kind:
                                          anyOf:
                                            - enum:
                                                - osc
                                            - type: string
                                              pattern: ^[a-z][a-z_-]{0,31}$
                                        gateway:
                                          description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        address:
                                          type: string
                                          pattern: ^/[^\s#*,?\[\]{}]*$
                                          description: >-
                                            concrete address, e.g.
                                            /composition/layers/1/video/opacity
                                        type:
                                          enum:
                                            - f
                                            - i
                                          description: OSC argument type
                                        value:
                                          type: number
                                          description: >-
                                            trigger mode: the argument to send;
                                            default 1
                                      if:
                                        properties:
                                          kind:
                                            const: osc
                                        required:
                                          - kind
                                      then:
                                        required:
                                          - gateway
                                          - address
                                          - type
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                  if:
                                    properties:
                                      mode:
                                        const: trigger
                                    required:
                                      - mode
                                  then:
                                    required:
                                      - threshold
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                maxItems: 256
                            patternProperties:
                              ^x-: true
                        required:
                          - id
                          - title
                          - revision
                          - mappings
                        properties:
                          id:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                        unevaluatedProperties: false
                - if:
                    properties:
                      kind:
                        const: audioReactiveScene.deleted
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        type: object
                        required:
                          - id
                        properties:
                          id:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                        additionalProperties: false
                - if:
                    properties:
                      kind:
                        const: textureSource.state
                    required:
                      - kind
                  then:
                    properties:
                      resource:
                        description: >-
                          A live source seen by the engine (GET
                          /venues/{venueId}/texture-sources, event
                          textureSource.state).
                        type: object
                        required:
                          - id
                          - transport
                          - sender
                          - status
                        properties:
                          id:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          transport:
                            description: >-
                              Shared GPU texture or spare network transport of a
                              live source. Open list.
                            anyOf:
                              - enum:
                                  - spout
                                  - syphon
                                  - dmabuf
                                  - capture
                                  - ndi
                              - type: string
                                pattern: ^[a-z][a-z0-9_-]{0,31}$
                          sender:
                            type: string
                            minLength: 1
                            maxLength: 256
                          application:
                            type: string
                            maxLength: 256
                          status:
                            anyOf:
                              - enum:
                                  - online
                                  - offline
                              - type: string
                                pattern: ^[a-z][a-z_-]{0,31}$
                          width:
                            type: integer
                            minimum: 1
                          height:
                            type: integer
                            minimum: 1
                          fps:
                            type: number
                            minimum: 0
                            description: frames per second measured by the engine
                          pixelFormat:
                            type: string
                            maxLength: 32
                          assetId:
                            description: >-
                              Document-scoped id (.dome displays[].id,
                              assets[].id, playlist / cue ids); unique within
                              its parent.
                            type: string
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                            examples:
                              - p1
                              - intro.mp4
                              - cue-01
                          node:
                            type: string
                            maxLength: 64
                            description: node whose engine sees the source
                          lastSeen:
                            description: >-
                              RFC 3339 UTC with milliseconds, e.g.
                              2026-10-19T12:00:00.000Z.
                            type: string
                            format: date-time
                            pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                        patternProperties:
                          ^x-: true
                        additionalProperties: false
              $defs:
                knownKind:
                  description: >-
                    Kinds of the v1 topic tree (events/topics.yaml); open
                    catalogue — clients ignore unknown kinds.
                  enum:
                    - system.info
                    - system.health
                    - engine.status
                    - engine.metrics
                    - engine.error
                    - venue.updated
                    - venue.deleted
                    - venue.activeShow
                    - output.state
                    - display.state
                    - display.pattern
                    - display.error
                    - calibration.updated
                    - calibrationJob.state
                    - calibrationJob.progress
                    - calibrationJob.awaiting
                    - job.state
                    - job.progress
                    - log.entry
                    - node.state
                    - player.state
                    - player.position
                    - player.ended
                    - player.error
                    - cue.fired
                    - cue.failed
                    - parameter.changed
                    - audio.state
                    - audio.layout
                    - audio.levels
                    - zone.state
                    - zone.deleted
                    - audioDevice.state
                    - audioSession.state
                    - generator.state
                    - show.updated
                    - show.deleted
                    - playlist.updated
                    - playlist.deleted
                    - timeline.updated
                    - timeline.deleted
                    - cue.updated
                    - cue.deleted
                    - trigger.updated
                    - trigger.deleted
                    - matrix.updated
                    - asset.created
                    - asset.progress
                    - asset.ready
                    - asset.failed
                    - asset.deleted
                    - upload.progress
                    - gateway.state
                    - gateway.message
                    - app.payload
                    - app.cleared
                    - client.command
                    - session.revoked
                    - scenarioSession.state
                    - scenarioSession.log
                    - device.state
                    - audioAnalysis.state
                    - audio.analysis
                    - audio.onset
                    - audioReactive.state
                    - audioReactiveScene.updated
                    - audioReactiveScene.deleted
                    - textureSource.state
                engineStatus:
                  type: object
                  required:
                    - name
                    - status
                  properties:
                    name:
                      anyOf:
                        - enum:
                            - visual
                            - anantasound
                            - anantadigital
                        - type: string
                          pattern: ^[a-z][a-z0-9_-]{0,31}(@[A-Za-z0-9._-]{1,64})?$
                    status:
                      enum:
                        - up
                        - degraded
                        - down
                        - incompatible
                    version:
                      type: string
                    protocol:
                      type: string
                      examples:
                        - freedome.engine.v1
                    capabilities:
                      type: array
                      items:
                        type: string
                    message:
                      type: string
                  additionalProperties: false
                engineMetrics:
                  description: ≤ 1 Hz; any subset (patch) of the metrics.
                  type: object
                  properties:
                    fps:
                      type: number
                      minimum: 0
                    frameTimeMs:
                      type: number
                      minimum: 0
                    droppedFrames:
                      type: integer
                      minimum: 0
                    gpuLoad:
                      type: number
                      minimum: 0
                      maximum: 1
                    cpuLoad:
                      type: number
                      minimum: 0
                      maximum: 1
                    temperatureC:
                      type: number
                  patternProperties:
                    ^x-: true
                  additionalProperties: false
                deleted:
                  type: object
                  required:
                    - id
                  properties:
                    id:
                      description: >-
                        Document-scoped id (.dome displays[].id, assets[].id,
                        playlist / cue ids); unique within its parent.
                      type: string
                      pattern: ^[A-Za-z0-9._-]{1,64}$
                      examples:
                        - p1
                        - intro.mp4
                        - cue-01
                  additionalProperties: false
                activeShow:
                  type: object
                  required:
                    - activeShowId
                  properties:
                    activeShowId:
                      anyOf:
                        - description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        - type: 'null'
                  additionalProperties: false
                progressPatch:
                  type: object
                  minProperties: 1
                  properties:
                    progress:
                      type: number
                      minimum: 0
                      maximum: 1
                    currentStep:
                      anyOf:
                        - description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        - type: 'null'
                    message:
                      type: string
                  additionalProperties: false
                awaiting:
                  description: >-
                    Same object as calibration-job `awaiting` (null when nothing
                    is awaited).
                  anyOf:
                    - type: 'null'
                    - type: object
                      required:
                        - kind
                      properties:
                        kind:
                          anyOf:
                            - enum:
                                - camera-capture
                                - manual-adjust
                                - confirm
                            - type: string
                        stepId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        displayId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        pattern:
                          description: >-
                            PUT /venues/{venueId}/displays/{displayId}/pattern
                            body (engine freedome_pattern_*).
                          type: object
                          required:
                            - kind
                          properties:
                            kind:
                              anyOf:
                                - enum:
                                    - 'off'
                                    - grid
                                    - checker
                                    - gray-ramp
                                    - colour-bars
                                    - dots
                                    - crosshair
                                    - solid
                                    - structured-light
                                - type: string
                                  pattern: ^[a-z][a-z0-9_-]{0,31}$
                            params:
                              description: >-
                                Kind-specific: grid {spacingDeg, lineWidthPx,
                                colour}, checker {cells}, solid {colour},
                                structured-light {sequence, index} …
                              type: object
                            face:
                              type: integer
                              minimum: 0
                              maximum: 5
                              description: 'prism / pyramid: limit to one optics face'
                          additionalProperties: false
                        instructions:
                          $schema: https://json-schema.org/draft/2020-12/schema
                          $id: >-
                            https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                          $comment: >-
                            NativeMindNONC — freedome_contract (see LICENSE).
                            Localised text map {"en":…,"ru":…}, 02e §3.1 (as
                            .dome meta.title).
                          title: Localised text
                          type: object
                          minProperties: 1
                          propertyNames:
                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                          additionalProperties:
                            type: string
                          examples:
                            - en: Intro
                              ru: Вступление
                          $defs:
                            textOrI18n:
                              description: >-
                                Plain string (treated as `en`) or a localised
                                map. (map branch = the root schema, inlined for
                                tools that mis-handle self references)
                              anyOf:
                                - type: string
                                - type: object
                                  minProperties: 1
                                  propertyNames:
                                    pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                  additionalProperties:
                                    type: string
                                  examples:
                                    - en: Intro
                                      ru: Вступление
                      additionalProperties: false
                anyPatch:
                  description: Merge patch of the resource (high-rate kinds).
                  type: object
                  minProperties: 1
                positionPatch:
                  description: >-
                    player.position (default 4 Hz, ≤ 30 Hz per subscription
                    option positionHz).
                  type: object
                  required:
                    - position
                  properties:
                    position:
                      description: Media position in seconds from the start.
                      type: number
                      minimum: 0
                    duration:
                      anyOf:
                        - description: Duration in seconds.
                          type: number
                          minimum: 0
                        - type: 'null'
                    rate:
                      type: number
                    timecode:
                      type: string
                      pattern: ^\d{2}:\d{2}:\d{2}[:;]\d{2}$
                  additionalProperties: false
                levels:
                  description: >-
                    audio.levels meters (≤ 10 Hz): id (speaker / zone / device /
                    master) → dBFS.
                  type: object
                  required:
                    - levels
                  properties:
                    levels:
                      type: object
                      additionalProperties:
                        type: number
                        maximum: 24
                    peak:
                      type: object
                      additionalProperties:
                        type: number
                        maximum: 24
                  additionalProperties: false
                showItem:
                  description: Fine-grained show edit (sub-kind of show.updated).
                  type: object
                  required:
                    - showId
                    - itemId
                    - revision
                  properties:
                    showId:
                      description: >-
                        Document-scoped id (.dome displays[].id, assets[].id,
                        playlist / cue ids); unique within its parent.
                      type: string
                      pattern: ^[A-Za-z0-9._-]{1,64}$
                      examples:
                        - p1
                        - intro.mp4
                        - cue-01
                    itemId:
                      description: >-
                        Document-scoped id (.dome displays[].id, assets[].id,
                        playlist / cue ids); unique within its parent.
                      type: string
                      pattern: ^[A-Za-z0-9._-]{1,64}$
                      examples:
                        - p1
                        - intro.mp4
                        - cue-01
                    revision:
                      description: >-
                        Monotonic resource revision; the strong ETag is derived
                        from it.
                      type: integer
                      minimum: 0
                    item:
                      type: object
                      description: the stored .dome entry (absent on delete)
                  additionalProperties: false
                uploadProgress:
                  type: object
                  required:
                    - offset
                  properties:
                    offset:
                      type: integer
                      minimum: 0
                    length:
                      type: integer
                      minimum: 0
                    status:
                      type: string
                  additionalProperties: false
                gatewayMessage:
                  description: Debug trace of a gateway message (gateways:manage only).
                  type: object
                  required:
                    - direction
                    - summary
                  properties:
                    direction:
                      enum:
                        - in
                        - out
                    peer:
                      type: string
                    summary:
                      type: string
                    mapsTo:
                      description: >-
                        OpenAPI operationId (camelCase); also the `op` of WS /
                        socket.io `call`.
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*$
                    raw:
                      type: string
                      maxLength: 4096
                  additionalProperties: false
                appCleared:
                  type: object
                  required:
                    - app
                  properties:
                    app:
                      type: string
                      pattern: ^[A-Za-z0-9._-]{1,128}$
                  additionalProperties: false
                sessionRevoked:
                  type: object
                  required:
                    - reason
                  properties:
                    sessionId:
                      type: string
                    reason:
                      anyOf:
                        - enum:
                            - signed-out
                            - refresh-reuse
                            - password-changed
                            - user-deleted
                            - key-revoked
                            - admin
                        - type: string
                  additionalProperties: false
        examples:
          - name: display.pattern
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789abdc
              ts: '2026-10-19T12:00:01.040Z'
              topic: venues/default/displays/p1
              data:
                seq: 48213
                kind: display.pattern
                resource:
                  kind: grid
          - name: calibrationJob.progress
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789abdd
              ts: '2026-10-19T12:01:00.000Z'
              topic: >-
                venues/default/calibration/jobs/0192f3a4-5b6c-7d8e-9f01-23456789abd0
              data:
                seq: 48250
                kind: calibrationJob.progress
                patch:
                  progress: 0.6
                  currentStep: solve
          - name: output.state
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789abde
              ts: '2026-10-19T12:02:00.000Z'
              topic: venues/default/output
              data:
                seq: 48260
                kind: output.state
                resource:
                  brightness: 0.25
                  volume: 0.5
                  blackout: false
          - name: system.info
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890301
              ts: '2026-10-19T12:05:00.000Z'
              topic: system/info
              data:
                seq: 49769
                kind: system.info
                resource:
                  product: freedome-mediaserver
                  serverVersion: 1.0.0
                  instanceId: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                  apiVersions:
                    - v1
          - name: system.health
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890302
              ts: '2026-10-19T12:05:00.000Z'
              topic: system/health
              data:
                seq: 49770
                kind: system.health
                resource:
                  status: degraded
                  checks:
                    engine.visual:
                      status: down
                      detail: not reachable
          - name: log.entry
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890303
              ts: '2026-10-19T12:05:00.000Z'
              topic: system/logs
              data:
                seq: 49771
                kind: log.entry
                resource:
                  seq: 1201
                  ts: '2026-10-19T12:00:00.123Z'
                  level: warn
                  message: engine reconnect
          - name: node.state
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890304
              ts: '2026-10-19T12:05:00.000Z'
              topic: nodes/node-2
              data:
                seq: 49772
                kind: node.state
                patch:
                  clock:
                    source: ptp
                    offsetMs: 0.09
                    locked: true
          - name: engine.status
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890305
              ts: '2026-10-19T12:05:00.000Z'
              topic: engines/visual
              data:
                seq: 49773
                kind: engine.status
                resource:
                  name: visual
                  status: up
                  version: 1.0.0
                  protocol: freedome.engine.v1
          - name: engine.metrics
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890306
              ts: '2026-10-19T12:05:00.000Z'
              topic: engines/visual
              data:
                seq: 49774
                kind: engine.metrics
                patch:
                  fps: 59.9
                  droppedFrames: 0
                  gpuLoad: 0.41
          - name: engine.error
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890307
              ts: '2026-10-19T12:05:00.000Z'
              topic: engines/anantadigital
              data:
                seq: 49775
                kind: engine.error
                resource:
                  type: https://freedome.nativemind.us/problems/engine-unavailable
                  title: Engine unavailable
                  status: 503
                  code: engine-unavailable
          - name: venue.updated
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890308
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default
              data:
                seq: 49776
                kind: venue.updated
                revision: 4
                patch:
                  meta:
                    title:
                      en: Demo dome
          - name: venue.deleted
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890309
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/old-dome
              data:
                seq: 49777
                kind: venue.deleted
                resource:
                  id: old-dome
          - name: venue.activeShow
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789030a
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default
              data:
                seq: 49778
                kind: venue.activeShow
                resource:
                  activeShowId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
          - name: output.state
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789030b
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/output
              data:
                seq: 49779
                kind: output.state
                resource:
                  brightness: 0.8
                  volume: 0.6
                  blackout: false
          - name: player.state
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789030c
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/players/main
              data:
                seq: 49780
                kind: player.state
                revision: 42
                resource:
                  id: main
                  venueId: default
                  status: playing
                  position: 12.5
                  duration: 600
                  revision: 42
          - name: player.position
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789030d
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/players/main
              data:
                seq: 49781
                kind: player.position
                patch:
                  position: 12.75
                  duration: 600
          - name: player.ended
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789030e
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/players/main
              data:
                seq: 49782
                kind: player.ended
                resource:
                  id: main
                  venueId: default
                  status: stopped
                  position: 600
                  revision: 43
          - name: player.error
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789030f
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/players/main
              data:
                seq: 49783
                kind: player.error
                resource:
                  type: https://freedome.nativemind.us/problems/engine-unavailable
                  title: Engine unavailable
                  status: 503
                  code: engine-unavailable
          - name: cue.fired
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890310
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/cues
              data:
                seq: 49784
                kind: cue.fired
                resource:
                  cueId: dim
                  showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                  firedAt: '2026-10-19T12:01:00.000Z'
                  actions:
                    - do: setBrightness
                      status: ok
          - name: cue.failed
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890311
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/cues
              data:
                seq: 49785
                kind: cue.failed
                resource:
                  cueId: intro
                  showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                  firedAt: '2026-10-19T12:01:00.000Z'
                  actions:
                    - do: play
                      status: failed
                      problem:
                        type: https://freedome.nativemind.us/problems/not-found
                        title: Asset not found
                        status: 404
                        code: not-found
          - name: parameter.changed
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890312
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/parameters
              data:
                seq: 49786
                kind: parameter.changed
                resource:
                  path: master.brightness
                  type: float
                  value: 0.8
                  min: 0
                  max: 1
          - name: display.state
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890313
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/displays/p1
              data:
                seq: 49787
                kind: display.state
                patch:
                  temperatureC: 41.5
          - name: display.error
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890314
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/displays/p2
              data:
                seq: 49788
                kind: display.error
                resource:
                  type: https://freedome.nativemind.us/problems/degraded
                  title: No signal
                  status: 503
                  code: degraded
                  detail: 'p2: no HDMI signal'
          - name: calibration.updated
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890315
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/calibration
              data:
                seq: 49789
                kind: calibration.updated
                revision: 5
                resource:
                  displays:
                    p1:
                      warp:
                        file: calibration/p1.mesh
                        kind: uv-grid
                        size:
                          - 65
                          - 65
          - name: calibrationJob.state
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890316
              ts: '2026-10-19T12:05:00.000Z'
              topic: >-
                venues/default/calibration/jobs/0192f3a4-5b6c-7d8e-9f01-23456789abd0
              data:
                seq: 49790
                kind: calibrationJob.state
                resource:
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789abd0
                  venueId: default
                  kind: visual-camera
                  status: running
                  steps:
                    - id: capture
                      status: running
                  createdAt: '2026-10-19T12:00:00.000Z'
          - name: calibrationJob.awaiting
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890317
              ts: '2026-10-19T12:05:00.000Z'
              topic: >-
                venues/default/calibration/jobs/0192f3a4-5b6c-7d8e-9f01-23456789abd0
              data:
                seq: 49791
                kind: calibrationJob.awaiting
                resource:
                  kind: camera-capture
                  stepId: capture-p1
                  displayId: p1
                  pattern:
                    kind: structured-light
          - name: job.state
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890318
              ts: '2026-10-19T12:05:00.000Z'
              topic: jobs/0192f3a4-5b6c-7d8e-9f01-23456789abd0
              data:
                seq: 49792
                kind: job.state
                resource:
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789abd0
                  kind: import
                  status: succeeded
                  progress: 1
                  createdAt: '2026-10-19T12:00:00.000Z'
                  result:
                    showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
          - name: job.progress
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890319
              ts: '2026-10-19T12:05:00.000Z'
              topic: jobs/0192f3a4-5b6c-7d8e-9f01-23456789abd0
              data:
                seq: 49793
                kind: job.progress
                patch:
                  progress: 0.5
          - name: audio.state
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789031a
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/audio
              data:
                seq: 49794
                kind: audio.state
                resource:
                  venueId: default
                  mode: combined
                  masterGainDb: -6
                  mute: false
                  revision: 12
          - name: audio.layout
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789031b
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/audio/layout
              data:
                seq: 49795
                kind: audio.layout
                resource:
                  ambisonics:
                    order: 3
                  speakers:
                    - id: s1
                      azimuth: 0
                      elevation: 0
                      distance: 4
          - name: audio.levels
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789031c
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/audio/levels
              data:
                seq: 49796
                kind: audio.levels
                resource:
                  levels:
                    master: -18.5
                    s1: -21
          - name: audioAnalysis.state
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890400
              ts: '2026-11-05T12:05:00.000Z'
              topic: venues/default/audio/analysis
              data:
                seq: 50100
                kind: audioAnalysis.state
                resource:
                  venueId: default
                  enabled: true
                  status: running
                  engine: anantadigital@node-1
                  sampleRate: 48000
                  blockSize: 256
                  inputs:
                    - id: vocal
                      channels:
                        - 1
          - name: audio.analysis
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890401
              ts: '2026-11-05T12:05:00.000Z'
              topic: venues/default/audio/analysis/vocal
              data:
                seq: 50101
                kind: audio.analysis
                resource:
                  inputId: vocal
                  frame: 18244
                  captureUs: 912200500
                  rms: 0.41
                  peak: 0.63
                  bands:
                    subBass: 0.08
                    mid: 0.55
                    highMid: 0.31
                    treble: 0.06
                  centroid: 0.37
                  centroidHz: 1850
                  onset: 0
          - name: audio.onset
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890402
              ts: '2026-11-05T12:05:00.000Z'
              topic: venues/default/audio/onsets/drums
              data:
                seq: 50102
                kind: audio.onset
                resource:
                  inputId: drums
                  frame: 18300
                  captureUs: 915000000
                  strength: 0.9
          - name: audioReactive.state
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890403
              ts: '2026-11-05T12:05:00.000Z'
              topic: venues/default/audio/reactive
              data:
                seq: 50103
                kind: audioReactive.state
                resource:
                  venueId: default
                  enabled: true
                  status: running
                  activeSceneId: vocal-aura
                  intensity: 1
                  resolume:
                    osc:
                      state: up
                    rest:
                      state: up
                    ws:
                      state: up
          - name: audioReactiveScene.updated
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890404
              ts: '2026-11-05T12:05:00.000Z'
              topic: venues/default/audio/reactive/scenes
              data:
                seq: 50104
                kind: audioReactiveScene.updated
                resource:
                  id: vocal-aura
                  title:
                    en: Vocal Aura
                  revision: 2
                  mappings:
                    - id: glow
                      mode: continuous
                      source:
                        input: vocal
                        metric: rms
                      target:
                        kind: osc
                        gateway: resolume
                        address: /composition/layers/2/video/opacity
                        type: f
          - name: audioReactiveScene.deleted
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890405
              ts: '2026-11-05T12:05:00.000Z'
              topic: venues/default/audio/reactive/scenes
              data:
                seq: 50105
                kind: audioReactiveScene.deleted
                resource:
                  id: vocal-aura
          - name: textureSource.state
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890406
              ts: '2026-11-05T12:05:00.000Z'
              topic: venues/default/texture-sources/spout-arena
              data:
                seq: 50106
                kind: textureSource.state
                resource:
                  id: spout-arena
                  transport: spout
                  sender: Arena
                  status: online
                  width: 3840
                  height: 2160
          - name: zone.state
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789031d
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/audio/zones/front
              data:
                seq: 49797
                kind: zone.state
                patch:
                  gainDb: -6
          - name: zone.deleted
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789031e
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/audio/zones/back
              data:
                seq: 49798
                kind: zone.deleted
                resource:
                  id: back
          - name: audioDevice.state
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789031f
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/audio/devices/qrd1
              data:
                seq: 49799
                kind: audioDevice.state
                patch:
                  state:
                    online: false
          - name: audioSession.state
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890320
              ts: '2026-10-19T12:05:00.000Z'
              topic: >-
                venues/default/audio/sessions/0192f3a4-5b6c-7d8e-9f01-23456789b001
              data:
                seq: 49800
                kind: audioSession.state
                resource:
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789b001
                  venueId: default
                  presetId: calm-7
                  status: running
                  startedAt: '2026-10-19T12:00:00.000Z'
          - name: generator.state
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890321
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/audio/generator
              data:
                seq: 49801
                kind: generator.state
                resource:
                  running: false
          - name: scenarioSession.state
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890322
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/scenarios/0192f3a4-5b6c-7d8e-9f01-23456789b401
              data:
                seq: 49802
                kind: scenarioSession.state
                resource:
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789b401
                  venueId: default
                  scenarioId: karmic_clusters
                  status: running
                  params:
                    durationS: 600
                  startedAt: '2026-10-19T12:00:00.000Z'
          - name: scenarioSession.log
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890323
              ts: '2026-10-19T12:05:00.000Z'
              topic: venues/default/scenarios/0192f3a4-5b6c-7d8e-9f01-23456789b401
              data:
                seq: 49803
                kind: scenarioSession.log
                resource:
                  seq: 1
                  ts: '2026-10-19T12:00:01.000Z'
                  level: info
                  message: phase warm-up
          - name: show.updated
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890324
              ts: '2026-10-19T12:05:00.000Z'
              topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
              data:
                seq: 49804
                kind: show.updated
                revision: 3
                patch:
                  meta:
                    title:
                      en: Intro v2
          - name: show.deleted
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890325
              ts: '2026-10-19T12:05:00.000Z'
              topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
              data:
                seq: 49805
                kind: show.deleted
                resource:
                  id: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
          - name: playlist.updated
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890326
              ts: '2026-10-19T12:05:00.000Z'
              topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
              data:
                seq: 49806
                kind: playlist.updated
                resource:
                  showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                  itemId: main
                  revision: 4
                  item:
                    id: main
                    items:
                      - asset: intro
          - name: playlist.deleted
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890327
              ts: '2026-10-19T12:05:00.000Z'
              topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
              data:
                seq: 49807
                kind: playlist.deleted
                resource:
                  showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                  itemId: lobby
                  revision: 5
          - name: timeline.updated
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890328
              ts: '2026-10-19T12:05:00.000Z'
              topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
              data:
                seq: 49808
                kind: timeline.updated
                resource:
                  showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                  itemId: tl
                  revision: 6
          - name: timeline.deleted
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890329
              ts: '2026-10-19T12:05:00.000Z'
              topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
              data:
                seq: 49809
                kind: timeline.deleted
                resource:
                  showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                  itemId: tl2
                  revision: 7
          - name: cue.updated
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789032a
              ts: '2026-10-19T12:05:00.000Z'
              topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
              data:
                seq: 49810
                kind: cue.updated
                resource:
                  showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                  itemId: dim
                  revision: 8
          - name: cue.deleted
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789032b
              ts: '2026-10-19T12:05:00.000Z'
              topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
              data:
                seq: 49811
                kind: cue.deleted
                resource:
                  showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                  itemId: old
                  revision: 9
          - name: trigger.updated
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789032c
              ts: '2026-10-19T12:05:00.000Z'
              topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
              data:
                seq: 49812
                kind: trigger.updated
                resource:
                  showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                  itemId: go
                  revision: 10
          - name: trigger.deleted
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789032d
              ts: '2026-10-19T12:05:00.000Z'
              topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
              data:
                seq: 49813
                kind: trigger.deleted
                resource:
                  showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                  itemId: go2
                  revision: 11
          - name: matrix.updated
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789032e
              ts: '2026-10-19T12:05:00.000Z'
              topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
              data:
                seq: 49814
                kind: matrix.updated
                resource:
                  showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                  itemId: matrix
                  revision: 12
          - name: asset.created
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789032f
              ts: '2026-10-19T12:05:00.000Z'
              topic: assets/0192f3a4-5b6c-7d8e-9f01-23456789ae01
              data:
                seq: 49815
                kind: asset.created
                resource:
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789ae01
                  name: intro.mov
                  type: video
                  status: processing
                  revision: 1
                  createdAt: '2026-10-19T12:00:00.000Z'
          - name: asset.progress
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890330
              ts: '2026-10-19T12:05:00.000Z'
              topic: assets/0192f3a4-5b6c-7d8e-9f01-23456789ae01
              data:
                seq: 49816
                kind: asset.progress
                patch:
                  progress: 0.5
          - name: asset.ready
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890331
              ts: '2026-10-19T12:05:00.000Z'
              topic: assets/0192f3a4-5b6c-7d8e-9f01-23456789ae01
              data:
                seq: 49817
                kind: asset.ready
                resource:
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789ae01
                  name: intro.mov
                  type: video
                  status: ready
                  revision: 2
                  createdAt: '2026-10-19T12:00:00.000Z'
          - name: asset.failed
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890332
              ts: '2026-10-19T12:05:00.000Z'
              topic: assets/0192f3a4-5b6c-7d8e-9f01-23456789ae02
              data:
                seq: 49818
                kind: asset.failed
                resource:
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789ae02
                  name: broken.mov
                  type: video
                  status: failed
                  problem:
                    type: >-
                      https://freedome.nativemind.us/problems/upload-checksum-mismatch
                    title: Checksum mismatch
                    status: 422
                    code: upload-checksum-mismatch
                  revision: 2
                  createdAt: '2026-10-19T12:00:00.000Z'
          - name: asset.deleted
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890333
              ts: '2026-10-19T12:05:00.000Z'
              topic: assets/0192f3a4-5b6c-7d8e-9f01-23456789ae03
              data:
                seq: 49819
                kind: asset.deleted
                resource:
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789ae03
          - name: upload.progress
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890334
              ts: '2026-10-19T12:05:00.000Z'
              topic: uploads/0192f3a4-5b6c-7d8e-9f01-23456789ae10
              data:
                seq: 49820
                kind: upload.progress
                patch:
                  offset: 209715200
                  length: 734003200
          - name: gateway.state
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890335
              ts: '2026-10-19T12:05:00.000Z'
              topic: gateways/screenberry
              data:
                seq: 49821
                kind: gateway.state
                patch:
                  status: degraded
          - name: gateway.message
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890336
              ts: '2026-10-19T12:05:00.000Z'
              topic: gateways/screenberry
              data:
                seq: 49822
                kind: gateway.message
                resource:
                  direction: in
                  peer: 10.0.0.50:51234
                  summary: command play
                  mapsTo: play
          - name: app.payload
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890337
              ts: '2026-10-19T12:05:00.000Z'
              topic: apps/net.nativemind.starveda
              data:
                seq: 49823
                kind: app.payload
                resource:
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789b101
                  app: net.nativemind.starveda
                  kind: overlay
                  data:
                    text: Hello
                  expiresAt: '2026-10-19T12:01:00.000Z'
          - name: app.cleared
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890338
              ts: '2026-10-19T12:05:00.000Z'
              topic: apps/net.nativemind.starveda
              data:
                seq: 49824
                kind: app.cleared
                resource:
                  app: net.nativemind.starveda
          - name: client.command
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-234567890339
              ts: '2026-10-19T12:05:00.000Z'
              topic: clients/0192f3a4-5b6c-7d8e-9f01-23456789b201/commands
              data:
                seq: 49825
                kind: client.command
                resource:
                  command: vibrate
                  params:
                    ms: 200
          - name: device.state
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789033a
              ts: '2026-10-19T12:05:00.000Z'
              topic: devices/vp-f-0012
              data:
                seq: 49826
                kind: device.state
                patch:
                  state:
                    temperatureC: 42
          - name: session.revoked
            payload:
              type: event
              id: 0192f3a4-5b6c-7d8e-9f01-23456789033b
              ts: '2026-10-19T12:05:00.000Z'
              topic: auth/sessions
              data:
                seq: 49827
                kind: session.revoked
                resource:
                  reason: password-changed
      resync:
        name: resync
        title: resync (S→C)
        payload:
          description: 'S→C: resume gap too old.'
          type: object
          allOf:
            - $schema: https://json-schema.org/draft/2020-12/schema
              $id: >-
                https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
              $comment: >-
                NativeMindNONC — freedome_contract (see LICENSE). Message
                envelope for plain WS (sub-protocol freedome.v1), socket.io
                `event` payload, GraphQL Event and OSC JSON events, 02e §7.1 /
                §8.1. `type`, `id`, `ts`, `data` on every message; `topic` on
                events; `replyTo` on result / error replies. Message types are
                open (readers ignore unknown ones).
              title: Message envelope
              type: object
              required:
                - type
                - id
                - ts
                - data
              properties:
                type:
                  description: >-
                    Known: hello, welcome, subscribe, unsubscribe, call, result,
                    event, error, resync, ping, pong, bye.
                  type: string
                  pattern: ^[a-z][a-zA-Z0-9]*$
                id:
                  description: Unique per message; the idempotency key of `call`.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts:
                  description: >-
                    RFC 3339 UTC with milliseconds, e.g.
                    2026-10-19T12:00:00.000Z.
                  type: string
                  format: date-time
                  pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                topic:
                  description: >-
                    Concrete event topic (02e §7.2), e.g.
                    venues/default/players/main.
                  type: string
                  maxLength: 512
                  pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
                replyTo:
                  description: >-
                    Server-owned resource id: UUIDv7, lowercase, sortable by
                    creation time.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                data: {}
              allOf:
                - if:
                    properties:
                      type:
                        const: event
                    required:
                      - type
                  then:
                    required:
                      - topic
                    properties:
                      data:
                        type: object
                        required:
                          - seq
                          - kind
                        properties:
                          seq:
                            type: integer
                            minimum: 0
                            description: >-
                              Per-server monotonically increasing sequence
                              (resume with sinceSeq).
                          kind:
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                            description: >-
                              Event kind from events/topics.yaml, e.g.
                              player.state.
                          resource:
                            description: Full new representation.
                          patch:
                            type: object
                            description: JSON merge patch (high-rate kinds).
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                        not:
                          required:
                            - resource
                            - patch
                        additionalProperties: true
                - if:
                    properties:
                      type:
                        const: result
                    required:
                      - type
                  then:
                    required:
                      - replyTo
                - if:
                    properties:
                      type:
                        const: error
                    required:
                      - type
                  then:
                    properties:
                      data:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE). RFC
                          9457 problem details with the Freedome `code`
                          catalogue, 02e §3.3. Also the `data` of WS `error`,
                          the socket.io ack error and GraphQL
                          errors[].extensions.problem. The catalogue is open:
                          unknown codes are allowed; known codes are bound to
                          their HTTP status.
                        title: Problem details
                        type: object
                        required:
                          - type
                          - title
                          - code
                        properties:
                          type:
                            type: string
                            format: uri
                            description: >-
                              https://freedome.nativemind.us/problems/<code> for
                              catalogue codes.
                          title:
                            type: string
                            minLength: 1
                          status:
                            type: integer
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                          instance:
                            type: string
                            format: uri-reference
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          traceId:
                            type: string
                            pattern: ^[0-9a-f]{16,32}$
                          errors:
                            type: array
                            items:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        allOf:
                          - if:
                              properties:
                                code:
                                  const: validation-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: not-found
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 404
                          - if:
                              properties:
                                code:
                                  const: conflict
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: precondition-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 412
                          - if:
                              properties:
                                code:
                                  const: precondition-required
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 428
                          - if:
                              properties:
                                code:
                                  const: unauthenticated
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: forbidden
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: rate-limited
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 429
                          - if:
                              properties:
                                code:
                                  const: payload-too-large
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 413
                          - if:
                              properties:
                                code:
                                  const: unsupported-format
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 415
                          - if:
                              properties:
                                code:
                                  const: engine-unavailable
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: engine-incompatible
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: degraded
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: upload-checksum-mismatch
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: legacy-unsupported
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 501
                          - if:
                              properties:
                                code:
                                  const: internal
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 500
                          - if:
                              properties:
                                code:
                                  const: clock-unlocked
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: not-configured
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: authorization-pending
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: slow-down
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: access-denied
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: expired-token
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: token-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: idempotency-key-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: idempotency-in-progress
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                        additionalProperties: true
                        examples:
                          - type: >-
                              https://freedome.nativemind.us/problems/engine-unavailable
                            title: Visual engine unavailable
                            status: 503
                            detail: >-
                              freedome-engined not reachable at
                              unix:/run/freedome/engine.sock
                            instance: /api/v1/venues/default/players/main/play
                            code: engine-unavailable
                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                        $defs:
                          knownCode:
                            enum:
                              - validation-failed
                              - not-found
                              - conflict
                              - precondition-failed
                              - precondition-required
                              - unauthenticated
                              - forbidden
                              - rate-limited
                              - payload-too-large
                              - unsupported-format
                              - engine-unavailable
                              - engine-incompatible
                              - degraded
                              - job-failed
                              - upload-checksum-mismatch
                              - legacy-unsupported
                              - internal
                              - clock-unlocked
                              - not-configured
                              - authorization-pending
                              - slow-down
                              - access-denied
                              - expired-token
                              - token-reused
                              - idempotency-key-reused
                              - idempotency-in-progress
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          fieldError:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                - if:
                    properties:
                      type:
                        const: call
                    required:
                      - type
                  then:
                    properties:
                      data:
                        type: object
                        required:
                          - op
                        properties:
                          op:
                            description: >-
                              OpenAPI operationId (camelCase); also the `op` of
                              WS / socket.io `call`.
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*$
                          params:
                            type: object
                          body: {}
                          ifMatch:
                            type: string
                        additionalProperties: true
              additionalProperties: true
              examples:
                - type: event
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                  ts: '2026-10-19T12:00:00.123Z'
                  topic: venues/default/players/main
                  data:
                    seq: 48213
                    kind: player.state
                    resource:
                      status: playing
                      position: 12.5
              $defs:
                knownType:
                  enum:
                    - hello
                    - welcome
                    - subscribe
                    - unsubscribe
                    - call
                    - result
                    - event
                    - error
                    - resync
                    - ping
                    - pong
                    - bye
                eventData:
                  type: object
                  required:
                    - seq
                    - kind
                  properties:
                    seq:
                      type: integer
                      minimum: 0
                      description: >-
                        Per-server monotonically increasing sequence (resume
                        with sinceSeq).
                    kind:
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                      description: Event kind from events/topics.yaml, e.g. player.state.
                    resource:
                      description: Full new representation.
                    patch:
                      type: object
                      description: JSON merge patch (high-rate kinds).
                    revision:
                      description: >-
                        Monotonic resource revision; the strong ETag is derived
                        from it.
                      type: integer
                      minimum: 0
                  not:
                    required:
                      - resource
                      - patch
                  additionalProperties: true
                callData:
                  type: object
                  required:
                    - op
                  properties:
                    op:
                      description: >-
                        OpenAPI operationId (camelCase); also the `op` of WS /
                        socket.io `call`.
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*$
                    params:
                      type: object
                    body: {}
                    ifMatch:
                      type: string
                  additionalProperties: true
          required:
            - type
            - id
            - ts
            - data
          properties:
            type:
              const: resync
            data:
              description: Client must re-read state via REST / GraphQL for these topics.
              type: object
              required:
                - topics
                - reason
              properties:
                topics:
                  type: array
                  items:
                    description: >-
                      Subscription filter: a topic where a level may be `+` (one
                      level) and the last level may be `#` (rest), MQTT style.
                    type: string
                    maxLength: 512
                    pattern: >-
                      ^(?:[A-Za-z0-9._@-]+|\+)(?:/(?:[A-Za-z0-9._@-]+|\+))*(?:/#)?$|^#$
                reason:
                  anyOf:
                    - enum:
                        - gap-too-old
                        - server-restart
                        - overflow
                    - type: string
              patternProperties:
                ^x-: true
              additionalProperties: false
        examples:
          - name: gap
            payload:
              type: resync
              id: 0192f3a4-5b6c-7d8e-9f01-23456789abdf
              ts: '2026-10-19T12:00:00.040Z'
              data:
                topics:
                  - venues/default/displays/+
                reason: gap-too-old
      ping:
        name: ping
        title: ping
        payload:
          description: Either side; 2 missed heartbeats → close 4408.
          type: object
          allOf:
            - $schema: https://json-schema.org/draft/2020-12/schema
              $id: >-
                https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
              $comment: >-
                NativeMindNONC — freedome_contract (see LICENSE). Message
                envelope for plain WS (sub-protocol freedome.v1), socket.io
                `event` payload, GraphQL Event and OSC JSON events, 02e §7.1 /
                §8.1. `type`, `id`, `ts`, `data` on every message; `topic` on
                events; `replyTo` on result / error replies. Message types are
                open (readers ignore unknown ones).
              title: Message envelope
              type: object
              required:
                - type
                - id
                - ts
                - data
              properties:
                type:
                  description: >-
                    Known: hello, welcome, subscribe, unsubscribe, call, result,
                    event, error, resync, ping, pong, bye.
                  type: string
                  pattern: ^[a-z][a-zA-Z0-9]*$
                id:
                  description: Unique per message; the idempotency key of `call`.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts:
                  description: >-
                    RFC 3339 UTC with milliseconds, e.g.
                    2026-10-19T12:00:00.000Z.
                  type: string
                  format: date-time
                  pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                topic:
                  description: >-
                    Concrete event topic (02e §7.2), e.g.
                    venues/default/players/main.
                  type: string
                  maxLength: 512
                  pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
                replyTo:
                  description: >-
                    Server-owned resource id: UUIDv7, lowercase, sortable by
                    creation time.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                data: {}
              allOf:
                - if:
                    properties:
                      type:
                        const: event
                    required:
                      - type
                  then:
                    required:
                      - topic
                    properties:
                      data:
                        type: object
                        required:
                          - seq
                          - kind
                        properties:
                          seq:
                            type: integer
                            minimum: 0
                            description: >-
                              Per-server monotonically increasing sequence
                              (resume with sinceSeq).
                          kind:
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                            description: >-
                              Event kind from events/topics.yaml, e.g.
                              player.state.
                          resource:
                            description: Full new representation.
                          patch:
                            type: object
                            description: JSON merge patch (high-rate kinds).
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                        not:
                          required:
                            - resource
                            - patch
                        additionalProperties: true
                - if:
                    properties:
                      type:
                        const: result
                    required:
                      - type
                  then:
                    required:
                      - replyTo
                - if:
                    properties:
                      type:
                        const: error
                    required:
                      - type
                  then:
                    properties:
                      data:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE). RFC
                          9457 problem details with the Freedome `code`
                          catalogue, 02e §3.3. Also the `data` of WS `error`,
                          the socket.io ack error and GraphQL
                          errors[].extensions.problem. The catalogue is open:
                          unknown codes are allowed; known codes are bound to
                          their HTTP status.
                        title: Problem details
                        type: object
                        required:
                          - type
                          - title
                          - code
                        properties:
                          type:
                            type: string
                            format: uri
                            description: >-
                              https://freedome.nativemind.us/problems/<code> for
                              catalogue codes.
                          title:
                            type: string
                            minLength: 1
                          status:
                            type: integer
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                          instance:
                            type: string
                            format: uri-reference
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          traceId:
                            type: string
                            pattern: ^[0-9a-f]{16,32}$
                          errors:
                            type: array
                            items:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        allOf:
                          - if:
                              properties:
                                code:
                                  const: validation-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: not-found
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 404
                          - if:
                              properties:
                                code:
                                  const: conflict
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: precondition-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 412
                          - if:
                              properties:
                                code:
                                  const: precondition-required
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 428
                          - if:
                              properties:
                                code:
                                  const: unauthenticated
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: forbidden
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: rate-limited
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 429
                          - if:
                              properties:
                                code:
                                  const: payload-too-large
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 413
                          - if:
                              properties:
                                code:
                                  const: unsupported-format
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 415
                          - if:
                              properties:
                                code:
                                  const: engine-unavailable
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: engine-incompatible
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: degraded
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: upload-checksum-mismatch
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: legacy-unsupported
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 501
                          - if:
                              properties:
                                code:
                                  const: internal
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 500
                          - if:
                              properties:
                                code:
                                  const: clock-unlocked
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: not-configured
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: authorization-pending
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: slow-down
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: access-denied
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: expired-token
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: token-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: idempotency-key-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: idempotency-in-progress
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                        additionalProperties: true
                        examples:
                          - type: >-
                              https://freedome.nativemind.us/problems/engine-unavailable
                            title: Visual engine unavailable
                            status: 503
                            detail: >-
                              freedome-engined not reachable at
                              unix:/run/freedome/engine.sock
                            instance: /api/v1/venues/default/players/main/play
                            code: engine-unavailable
                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                        $defs:
                          knownCode:
                            enum:
                              - validation-failed
                              - not-found
                              - conflict
                              - precondition-failed
                              - precondition-required
                              - unauthenticated
                              - forbidden
                              - rate-limited
                              - payload-too-large
                              - unsupported-format
                              - engine-unavailable
                              - engine-incompatible
                              - degraded
                              - job-failed
                              - upload-checksum-mismatch
                              - legacy-unsupported
                              - internal
                              - clock-unlocked
                              - not-configured
                              - authorization-pending
                              - slow-down
                              - access-denied
                              - expired-token
                              - token-reused
                              - idempotency-key-reused
                              - idempotency-in-progress
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          fieldError:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                - if:
                    properties:
                      type:
                        const: call
                    required:
                      - type
                  then:
                    properties:
                      data:
                        type: object
                        required:
                          - op
                        properties:
                          op:
                            description: >-
                              OpenAPI operationId (camelCase); also the `op` of
                              WS / socket.io `call`.
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*$
                          params:
                            type: object
                          body: {}
                          ifMatch:
                            type: string
                        additionalProperties: true
              additionalProperties: true
              examples:
                - type: event
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                  ts: '2026-10-19T12:00:00.123Z'
                  topic: venues/default/players/main
                  data:
                    seq: 48213
                    kind: player.state
                    resource:
                      status: playing
                      position: 12.5
              $defs:
                knownType:
                  enum:
                    - hello
                    - welcome
                    - subscribe
                    - unsubscribe
                    - call
                    - result
                    - event
                    - error
                    - resync
                    - ping
                    - pong
                    - bye
                eventData:
                  type: object
                  required:
                    - seq
                    - kind
                  properties:
                    seq:
                      type: integer
                      minimum: 0
                      description: >-
                        Per-server monotonically increasing sequence (resume
                        with sinceSeq).
                    kind:
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                      description: Event kind from events/topics.yaml, e.g. player.state.
                    resource:
                      description: Full new representation.
                    patch:
                      type: object
                      description: JSON merge patch (high-rate kinds).
                    revision:
                      description: >-
                        Monotonic resource revision; the strong ETag is derived
                        from it.
                      type: integer
                      minimum: 0
                  not:
                    required:
                      - resource
                      - patch
                  additionalProperties: true
                callData:
                  type: object
                  required:
                    - op
                  properties:
                    op:
                      description: >-
                        OpenAPI operationId (camelCase); also the `op` of WS /
                        socket.io `call`.
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*$
                    params:
                      type: object
                    body: {}
                    ifMatch:
                      type: string
                  additionalProperties: true
          required:
            - type
            - id
            - ts
            - data
          properties:
            type:
              const: ping
            data:
              type: object
              maxProperties: 0
        examples:
          - name: ping
            payload:
              type: ping
              id: 0192f3a4-5b6c-7d8e-9f01-23456789abe0
              ts: '2026-10-19T12:00:20.000Z'
              data: {}
      pong:
        name: pong
        title: pong
        payload:
          description: Reply to ping.
          type: object
          allOf:
            - $schema: https://json-schema.org/draft/2020-12/schema
              $id: >-
                https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
              $comment: >-
                NativeMindNONC — freedome_contract (see LICENSE). Message
                envelope for plain WS (sub-protocol freedome.v1), socket.io
                `event` payload, GraphQL Event and OSC JSON events, 02e §7.1 /
                §8.1. `type`, `id`, `ts`, `data` on every message; `topic` on
                events; `replyTo` on result / error replies. Message types are
                open (readers ignore unknown ones).
              title: Message envelope
              type: object
              required:
                - type
                - id
                - ts
                - data
              properties:
                type:
                  description: >-
                    Known: hello, welcome, subscribe, unsubscribe, call, result,
                    event, error, resync, ping, pong, bye.
                  type: string
                  pattern: ^[a-z][a-zA-Z0-9]*$
                id:
                  description: Unique per message; the idempotency key of `call`.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts:
                  description: >-
                    RFC 3339 UTC with milliseconds, e.g.
                    2026-10-19T12:00:00.000Z.
                  type: string
                  format: date-time
                  pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                topic:
                  description: >-
                    Concrete event topic (02e §7.2), e.g.
                    venues/default/players/main.
                  type: string
                  maxLength: 512
                  pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
                replyTo:
                  description: >-
                    Server-owned resource id: UUIDv7, lowercase, sortable by
                    creation time.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                data: {}
              allOf:
                - if:
                    properties:
                      type:
                        const: event
                    required:
                      - type
                  then:
                    required:
                      - topic
                    properties:
                      data:
                        type: object
                        required:
                          - seq
                          - kind
                        properties:
                          seq:
                            type: integer
                            minimum: 0
                            description: >-
                              Per-server monotonically increasing sequence
                              (resume with sinceSeq).
                          kind:
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                            description: >-
                              Event kind from events/topics.yaml, e.g.
                              player.state.
                          resource:
                            description: Full new representation.
                          patch:
                            type: object
                            description: JSON merge patch (high-rate kinds).
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                        not:
                          required:
                            - resource
                            - patch
                        additionalProperties: true
                - if:
                    properties:
                      type:
                        const: result
                    required:
                      - type
                  then:
                    required:
                      - replyTo
                - if:
                    properties:
                      type:
                        const: error
                    required:
                      - type
                  then:
                    properties:
                      data:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE). RFC
                          9457 problem details with the Freedome `code`
                          catalogue, 02e §3.3. Also the `data` of WS `error`,
                          the socket.io ack error and GraphQL
                          errors[].extensions.problem. The catalogue is open:
                          unknown codes are allowed; known codes are bound to
                          their HTTP status.
                        title: Problem details
                        type: object
                        required:
                          - type
                          - title
                          - code
                        properties:
                          type:
                            type: string
                            format: uri
                            description: >-
                              https://freedome.nativemind.us/problems/<code> for
                              catalogue codes.
                          title:
                            type: string
                            minLength: 1
                          status:
                            type: integer
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                          instance:
                            type: string
                            format: uri-reference
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          traceId:
                            type: string
                            pattern: ^[0-9a-f]{16,32}$
                          errors:
                            type: array
                            items:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        allOf:
                          - if:
                              properties:
                                code:
                                  const: validation-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: not-found
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 404
                          - if:
                              properties:
                                code:
                                  const: conflict
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: precondition-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 412
                          - if:
                              properties:
                                code:
                                  const: precondition-required
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 428
                          - if:
                              properties:
                                code:
                                  const: unauthenticated
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: forbidden
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: rate-limited
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 429
                          - if:
                              properties:
                                code:
                                  const: payload-too-large
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 413
                          - if:
                              properties:
                                code:
                                  const: unsupported-format
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 415
                          - if:
                              properties:
                                code:
                                  const: engine-unavailable
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: engine-incompatible
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: degraded
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: upload-checksum-mismatch
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: legacy-unsupported
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 501
                          - if:
                              properties:
                                code:
                                  const: internal
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 500
                          - if:
                              properties:
                                code:
                                  const: clock-unlocked
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: not-configured
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: authorization-pending
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: slow-down
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: access-denied
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: expired-token
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: token-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: idempotency-key-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: idempotency-in-progress
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                        additionalProperties: true
                        examples:
                          - type: >-
                              https://freedome.nativemind.us/problems/engine-unavailable
                            title: Visual engine unavailable
                            status: 503
                            detail: >-
                              freedome-engined not reachable at
                              unix:/run/freedome/engine.sock
                            instance: /api/v1/venues/default/players/main/play
                            code: engine-unavailable
                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                        $defs:
                          knownCode:
                            enum:
                              - validation-failed
                              - not-found
                              - conflict
                              - precondition-failed
                              - precondition-required
                              - unauthenticated
                              - forbidden
                              - rate-limited
                              - payload-too-large
                              - unsupported-format
                              - engine-unavailable
                              - engine-incompatible
                              - degraded
                              - job-failed
                              - upload-checksum-mismatch
                              - legacy-unsupported
                              - internal
                              - clock-unlocked
                              - not-configured
                              - authorization-pending
                              - slow-down
                              - access-denied
                              - expired-token
                              - token-reused
                              - idempotency-key-reused
                              - idempotency-in-progress
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          fieldError:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                - if:
                    properties:
                      type:
                        const: call
                    required:
                      - type
                  then:
                    properties:
                      data:
                        type: object
                        required:
                          - op
                        properties:
                          op:
                            description: >-
                              OpenAPI operationId (camelCase); also the `op` of
                              WS / socket.io `call`.
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*$
                          params:
                            type: object
                          body: {}
                          ifMatch:
                            type: string
                        additionalProperties: true
              additionalProperties: true
              examples:
                - type: event
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                  ts: '2026-10-19T12:00:00.123Z'
                  topic: venues/default/players/main
                  data:
                    seq: 48213
                    kind: player.state
                    resource:
                      status: playing
                      position: 12.5
              $defs:
                knownType:
                  enum:
                    - hello
                    - welcome
                    - subscribe
                    - unsubscribe
                    - call
                    - result
                    - event
                    - error
                    - resync
                    - ping
                    - pong
                    - bye
                eventData:
                  type: object
                  required:
                    - seq
                    - kind
                  properties:
                    seq:
                      type: integer
                      minimum: 0
                      description: >-
                        Per-server monotonically increasing sequence (resume
                        with sinceSeq).
                    kind:
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                      description: Event kind from events/topics.yaml, e.g. player.state.
                    resource:
                      description: Full new representation.
                    patch:
                      type: object
                      description: JSON merge patch (high-rate kinds).
                    revision:
                      description: >-
                        Monotonic resource revision; the strong ETag is derived
                        from it.
                      type: integer
                      minimum: 0
                  not:
                    required:
                      - resource
                      - patch
                  additionalProperties: true
                callData:
                  type: object
                  required:
                    - op
                  properties:
                    op:
                      description: >-
                        OpenAPI operationId (camelCase); also the `op` of WS /
                        socket.io `call`.
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*$
                    params:
                      type: object
                    body: {}
                    ifMatch:
                      type: string
                  additionalProperties: true
          required:
            - type
            - id
            - ts
            - data
            - replyTo
          properties:
            type:
              const: pong
            data:
              type: object
              maxProperties: 0
        examples:
          - name: pong
            payload:
              type: pong
              id: 0192f3a4-5b6c-7d8e-9f01-23456789abe1
              ts: '2026-10-19T12:00:20.002Z'
              replyTo: 0192f3a4-5b6c-7d8e-9f01-23456789abe0
              data: {}
      bye:
        name: bye
        title: bye (S→C)
        payload:
          description: S→C before closing.
          type: object
          allOf:
            - $schema: https://json-schema.org/draft/2020-12/schema
              $id: >-
                https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
              $comment: >-
                NativeMindNONC — freedome_contract (see LICENSE). Message
                envelope for plain WS (sub-protocol freedome.v1), socket.io
                `event` payload, GraphQL Event and OSC JSON events, 02e §7.1 /
                §8.1. `type`, `id`, `ts`, `data` on every message; `topic` on
                events; `replyTo` on result / error replies. Message types are
                open (readers ignore unknown ones).
              title: Message envelope
              type: object
              required:
                - type
                - id
                - ts
                - data
              properties:
                type:
                  description: >-
                    Known: hello, welcome, subscribe, unsubscribe, call, result,
                    event, error, resync, ping, pong, bye.
                  type: string
                  pattern: ^[a-z][a-zA-Z0-9]*$
                id:
                  description: Unique per message; the idempotency key of `call`.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts:
                  description: >-
                    RFC 3339 UTC with milliseconds, e.g.
                    2026-10-19T12:00:00.000Z.
                  type: string
                  format: date-time
                  pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                topic:
                  description: >-
                    Concrete event topic (02e §7.2), e.g.
                    venues/default/players/main.
                  type: string
                  maxLength: 512
                  pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
                replyTo:
                  description: >-
                    Server-owned resource id: UUIDv7, lowercase, sortable by
                    creation time.
                  type: string
                  pattern: >-
                    ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  examples:
                    - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                data: {}
              allOf:
                - if:
                    properties:
                      type:
                        const: event
                    required:
                      - type
                  then:
                    required:
                      - topic
                    properties:
                      data:
                        type: object
                        required:
                          - seq
                          - kind
                        properties:
                          seq:
                            type: integer
                            minimum: 0
                            description: >-
                              Per-server monotonically increasing sequence
                              (resume with sinceSeq).
                          kind:
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                            description: >-
                              Event kind from events/topics.yaml, e.g.
                              player.state.
                          resource:
                            description: Full new representation.
                          patch:
                            type: object
                            description: JSON merge patch (high-rate kinds).
                          revision:
                            description: >-
                              Monotonic resource revision; the strong ETag is
                              derived from it.
                            type: integer
                            minimum: 0
                        not:
                          required:
                            - resource
                            - patch
                        additionalProperties: true
                - if:
                    properties:
                      type:
                        const: result
                    required:
                      - type
                  then:
                    required:
                      - replyTo
                - if:
                    properties:
                      type:
                        const: error
                    required:
                      - type
                  then:
                    properties:
                      data:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE). RFC
                          9457 problem details with the Freedome `code`
                          catalogue, 02e §3.3. Also the `data` of WS `error`,
                          the socket.io ack error and GraphQL
                          errors[].extensions.problem. The catalogue is open:
                          unknown codes are allowed; known codes are bound to
                          their HTTP status.
                        title: Problem details
                        type: object
                        required:
                          - type
                          - title
                          - code
                        properties:
                          type:
                            type: string
                            format: uri
                            description: >-
                              https://freedome.nativemind.us/problems/<code> for
                              catalogue codes.
                          title:
                            type: string
                            minLength: 1
                          status:
                            type: integer
                            minimum: 100
                            maximum: 599
                          detail:
                            type: string
                          instance:
                            type: string
                            format: uri-reference
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          traceId:
                            type: string
                            pattern: ^[0-9a-f]{16,32}$
                          errors:
                            type: array
                            items:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        allOf:
                          - if:
                              properties:
                                code:
                                  const: validation-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: not-found
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 404
                          - if:
                              properties:
                                code:
                                  const: conflict
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: precondition-failed
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 412
                          - if:
                              properties:
                                code:
                                  const: precondition-required
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 428
                          - if:
                              properties:
                                code:
                                  const: unauthenticated
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: forbidden
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: rate-limited
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 429
                          - if:
                              properties:
                                code:
                                  const: payload-too-large
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 413
                          - if:
                              properties:
                                code:
                                  const: unsupported-format
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 415
                          - if:
                              properties:
                                code:
                                  const: engine-unavailable
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: engine-incompatible
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: degraded
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: upload-checksum-mismatch
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 422
                          - if:
                              properties:
                                code:
                                  const: legacy-unsupported
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 501
                          - if:
                              properties:
                                code:
                                  const: internal
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 500
                          - if:
                              properties:
                                code:
                                  const: clock-unlocked
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: not-configured
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 503
                          - if:
                              properties:
                                code:
                                  const: authorization-pending
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: slow-down
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: access-denied
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 403
                          - if:
                              properties:
                                code:
                                  const: expired-token
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 400
                          - if:
                              properties:
                                code:
                                  const: token-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 401
                          - if:
                              properties:
                                code:
                                  const: idempotency-key-reused
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                          - if:
                              properties:
                                code:
                                  const: idempotency-in-progress
                              required:
                                - code
                            then:
                              properties:
                                status:
                                  const: 409
                        additionalProperties: true
                        examples:
                          - type: >-
                              https://freedome.nativemind.us/problems/engine-unavailable
                            title: Visual engine unavailable
                            status: 503
                            detail: >-
                              freedome-engined not reachable at
                              unix:/run/freedome/engine.sock
                            instance: /api/v1/venues/default/players/main/play
                            code: engine-unavailable
                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                        $defs:
                          knownCode:
                            enum:
                              - validation-failed
                              - not-found
                              - conflict
                              - precondition-failed
                              - precondition-required
                              - unauthenticated
                              - forbidden
                              - rate-limited
                              - payload-too-large
                              - unsupported-format
                              - engine-unavailable
                              - engine-incompatible
                              - degraded
                              - job-failed
                              - upload-checksum-mismatch
                              - legacy-unsupported
                              - internal
                              - clock-unlocked
                              - not-configured
                              - authorization-pending
                              - slow-down
                              - access-denied
                              - expired-token
                              - token-reused
                              - idempotency-key-reused
                              - idempotency-in-progress
                          code:
                            description: >-
                              Stable machine key; also the last path segment of
                              `type`. Open set: see knownCode.
                            type: string
                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          fieldError:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                - if:
                    properties:
                      type:
                        const: call
                    required:
                      - type
                  then:
                    properties:
                      data:
                        type: object
                        required:
                          - op
                        properties:
                          op:
                            description: >-
                              OpenAPI operationId (camelCase); also the `op` of
                              WS / socket.io `call`.
                            type: string
                            pattern: ^[a-z][a-zA-Z0-9]*$
                          params:
                            type: object
                          body: {}
                          ifMatch:
                            type: string
                        additionalProperties: true
              additionalProperties: true
              examples:
                - type: event
                  id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                  ts: '2026-10-19T12:00:00.123Z'
                  topic: venues/default/players/main
                  data:
                    seq: 48213
                    kind: player.state
                    resource:
                      status: playing
                      position: 12.5
              $defs:
                knownType:
                  enum:
                    - hello
                    - welcome
                    - subscribe
                    - unsubscribe
                    - call
                    - result
                    - event
                    - error
                    - resync
                    - ping
                    - pong
                    - bye
                eventData:
                  type: object
                  required:
                    - seq
                    - kind
                  properties:
                    seq:
                      type: integer
                      minimum: 0
                      description: >-
                        Per-server monotonically increasing sequence (resume
                        with sinceSeq).
                    kind:
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                      description: Event kind from events/topics.yaml, e.g. player.state.
                    resource:
                      description: Full new representation.
                    patch:
                      type: object
                      description: JSON merge patch (high-rate kinds).
                    revision:
                      description: >-
                        Monotonic resource revision; the strong ETag is derived
                        from it.
                      type: integer
                      minimum: 0
                  not:
                    required:
                      - resource
                      - patch
                  additionalProperties: true
                callData:
                  type: object
                  required:
                    - op
                  properties:
                    op:
                      description: >-
                        OpenAPI operationId (camelCase); also the `op` of WS /
                        socket.io `call`.
                      type: string
                      pattern: ^[a-z][a-zA-Z0-9]*$
                    params:
                      type: object
                    body: {}
                    ifMatch:
                      type: string
                  additionalProperties: true
          required:
            - type
            - id
            - ts
            - data
          properties:
            type:
              const: bye
            data:
              type: object
              required:
                - reason
              properties:
                reason:
                  type: string
                code:
                  type: integer
                  description: >-
                    WebSocket close code that follows: 4401 unauthenticated,
                    4403 forbidden, 4408 heartbeat timeout, 4409 superseded,
                    4413 message too large, 1012 restart
              patternProperties:
                ^x-: true
              additionalProperties: false
        examples:
          - name: expired
            payload:
              type: bye
              id: 0192f3a4-5b6c-7d8e-9f01-23456789abe2
              ts: '2026-10-19T12:15:00.000Z'
              data:
                reason: token expired
                code: 4401
    bindings:
      ws:
        query:
          type: object
          properties:
            access_token:
              type: string
              description: Browser alternative to the Authorization header
operations:
  sendHello:
    action: send
    channel:
      $ref: '#/channels/ws'
    summary: Open the session (first message).
    messages:
      - $ref: '#/channels/ws/messages/hello'
    reply:
      channel:
        $ref: '#/channels/ws'
      messages:
        - $ref: '#/channels/ws/messages/welcome'
        - $ref: '#/channels/ws/messages/error'
  sendSubscribe:
    action: send
    channel:
      $ref: '#/channels/ws'
    summary: Subscribe to topic filters (+ /
    messages:
      - $ref: '#/channels/ws/messages/subscribe'
    reply:
      channel:
        $ref: '#/channels/ws'
      messages:
        - $ref: '#/channels/ws/messages/result'
        - $ref: '#/channels/ws/messages/error'
  sendUnsubscribe:
    action: send
    channel:
      $ref: '#/channels/ws'
    messages:
      - $ref: '#/channels/ws/messages/unsubscribe'
    reply:
      channel:
        $ref: '#/channels/ws'
      messages:
        - $ref: '#/channels/ws/messages/result'
  sendCall:
    action: send
    channel:
      $ref: '#/channels/ws'
    summary: >-
      Call any REST operation by operationId (same scopes and validation as
      REST).
    messages:
      - $ref: '#/channels/ws/messages/call'
    reply:
      channel:
        $ref: '#/channels/ws'
      messages:
        - $ref: '#/channels/ws/messages/result'
        - $ref: '#/channels/ws/messages/error'
  receiveEvent:
    action: receive
    channel:
      $ref: '#/channels/ws'
    summary: Events of subscribed topics (events/topics.yaml).
    messages:
      - $ref: '#/channels/ws/messages/event'
  receiveResync:
    action: receive
    channel:
      $ref: '#/channels/ws'
    messages:
      - $ref: '#/channels/ws/messages/resync'
  sendPing:
    action: send
    channel:
      $ref: '#/channels/ws'
    messages:
      - $ref: '#/channels/ws/messages/ping'
    reply:
      channel:
        $ref: '#/channels/ws'
      messages:
        - $ref: '#/channels/ws/messages/pong'
  receivePing:
    action: receive
    channel:
      $ref: '#/channels/ws'
    messages:
      - $ref: '#/channels/ws/messages/ping'
  receiveBye:
    action: receive
    channel:
      $ref: '#/channels/ws'
    messages:
      - $ref: '#/channels/ws/messages/bye'
components:
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      bearerFormat: JWT or fdk_ API key
      description: >-
        Access JWT (POST /auth/session) or API key `fdk_…`; scopes as in
        openapi/mediaserver.yaml.
  messages:
    hello:
      name: hello
      title: hello (C→S)
      payload:
        description: C→S first message.
        type: object
        allOf:
          - $schema: https://json-schema.org/draft/2020-12/schema
            $id: >-
              https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
            $comment: >-
              NativeMindNONC — freedome_contract (see LICENSE). Message envelope
              for plain WS (sub-protocol freedome.v1), socket.io `event`
              payload, GraphQL Event and OSC JSON events, 02e §7.1 / §8.1.
              `type`, `id`, `ts`, `data` on every message; `topic` on events;
              `replyTo` on result / error replies. Message types are open
              (readers ignore unknown ones).
            title: Message envelope
            type: object
            required:
              - type
              - id
              - ts
              - data
            properties:
              type:
                description: >-
                  Known: hello, welcome, subscribe, unsubscribe, call, result,
                  event, error, resync, ping, pong, bye.
                type: string
                pattern: ^[a-z][a-zA-Z0-9]*$
              id:
                description: Unique per message; the idempotency key of `call`.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              ts:
                description: RFC 3339 UTC with milliseconds, e.g. 2026-10-19T12:00:00.000Z.
                type: string
                format: date-time
                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
              topic:
                description: >-
                  Concrete event topic (02e §7.2), e.g.
                  venues/default/players/main.
                type: string
                maxLength: 512
                pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
              replyTo:
                description: >-
                  Server-owned resource id: UUIDv7, lowercase, sortable by
                  creation time.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              data: {}
            allOf:
              - if:
                  properties:
                    type:
                      const: event
                  required:
                    - type
                then:
                  required:
                    - topic
                  properties:
                    data:
                      type: object
                      required:
                        - seq
                        - kind
                      properties:
                        seq:
                          type: integer
                          minimum: 0
                          description: >-
                            Per-server monotonically increasing sequence (resume
                            with sinceSeq).
                        kind:
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                          description: >-
                            Event kind from events/topics.yaml, e.g.
                            player.state.
                        resource:
                          description: Full new representation.
                        patch:
                          type: object
                          description: JSON merge patch (high-rate kinds).
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                      not:
                        required:
                          - resource
                          - patch
                      additionalProperties: true
              - if:
                  properties:
                    type:
                      const: result
                  required:
                    - type
                then:
                  required:
                    - replyTo
              - if:
                  properties:
                    type:
                      const: error
                  required:
                    - type
                then:
                  properties:
                    data:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). RFC
                        9457 problem details with the Freedome `code` catalogue,
                        02e §3.3. Also the `data` of WS `error`, the socket.io
                        ack error and GraphQL errors[].extensions.problem. The
                        catalogue is open: unknown codes are allowed; known
                        codes are bound to their HTTP status.
                      title: Problem details
                      type: object
                      required:
                        - type
                        - title
                        - code
                      properties:
                        type:
                          type: string
                          format: uri
                          description: >-
                            https://freedome.nativemind.us/problems/<code> for
                            catalogue codes.
                        title:
                          type: string
                          minLength: 1
                        status:
                          type: integer
                          minimum: 100
                          maximum: 599
                        detail:
                          type: string
                        instance:
                          type: string
                          format: uri-reference
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        traceId:
                          type: string
                          pattern: ^[0-9a-f]{16,32}$
                        errors:
                          type: array
                          items:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                      allOf:
                        - if:
                            properties:
                              code:
                                const: validation-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: not-found
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 404
                        - if:
                            properties:
                              code:
                                const: conflict
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: precondition-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 412
                        - if:
                            properties:
                              code:
                                const: precondition-required
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 428
                        - if:
                            properties:
                              code:
                                const: unauthenticated
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: forbidden
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: rate-limited
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 429
                        - if:
                            properties:
                              code:
                                const: payload-too-large
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 413
                        - if:
                            properties:
                              code:
                                const: unsupported-format
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 415
                        - if:
                            properties:
                              code:
                                const: engine-unavailable
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: engine-incompatible
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: degraded
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: upload-checksum-mismatch
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: legacy-unsupported
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 501
                        - if:
                            properties:
                              code:
                                const: internal
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 500
                        - if:
                            properties:
                              code:
                                const: clock-unlocked
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: not-configured
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: authorization-pending
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: slow-down
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: access-denied
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: expired-token
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: token-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: idempotency-key-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: idempotency-in-progress
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                      additionalProperties: true
                      examples:
                        - type: >-
                            https://freedome.nativemind.us/problems/engine-unavailable
                          title: Visual engine unavailable
                          status: 503
                          detail: >-
                            freedome-engined not reachable at
                            unix:/run/freedome/engine.sock
                          instance: /api/v1/venues/default/players/main/play
                          code: engine-unavailable
                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                      $defs:
                        knownCode:
                          enum:
                            - validation-failed
                            - not-found
                            - conflict
                            - precondition-failed
                            - precondition-required
                            - unauthenticated
                            - forbidden
                            - rate-limited
                            - payload-too-large
                            - unsupported-format
                            - engine-unavailable
                            - engine-incompatible
                            - degraded
                            - job-failed
                            - upload-checksum-mismatch
                            - legacy-unsupported
                            - internal
                            - clock-unlocked
                            - not-configured
                            - authorization-pending
                            - slow-down
                            - access-denied
                            - expired-token
                            - token-reused
                            - idempotency-key-reused
                            - idempotency-in-progress
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        fieldError:
                          type: object
                          required:
                            - pointer
                            - detail
                          properties:
                            pointer:
                              type: string
                              format: json-pointer
                            detail:
                              type: string
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          additionalProperties: true
              - if:
                  properties:
                    type:
                      const: call
                  required:
                    - type
                then:
                  properties:
                    data:
                      type: object
                      required:
                        - op
                      properties:
                        op:
                          description: >-
                            OpenAPI operationId (camelCase); also the `op` of WS
                            / socket.io `call`.
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*$
                        params:
                          type: object
                        body: {}
                        ifMatch:
                          type: string
                      additionalProperties: true
            additionalProperties: true
            examples:
              - type: event
                id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts: '2026-10-19T12:00:00.123Z'
                topic: venues/default/players/main
                data:
                  seq: 48213
                  kind: player.state
                  resource:
                    status: playing
                    position: 12.5
            $defs:
              knownType:
                enum:
                  - hello
                  - welcome
                  - subscribe
                  - unsubscribe
                  - call
                  - result
                  - event
                  - error
                  - resync
                  - ping
                  - pong
                  - bye
              eventData:
                type: object
                required:
                  - seq
                  - kind
                properties:
                  seq:
                    type: integer
                    minimum: 0
                    description: >-
                      Per-server monotonically increasing sequence (resume with
                      sinceSeq).
                  kind:
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                    description: Event kind from events/topics.yaml, e.g. player.state.
                  resource:
                    description: Full new representation.
                  patch:
                    type: object
                    description: JSON merge patch (high-rate kinds).
                  revision:
                    description: >-
                      Monotonic resource revision; the strong ETag is derived
                      from it.
                    type: integer
                    minimum: 0
                not:
                  required:
                    - resource
                    - patch
                additionalProperties: true
              callData:
                type: object
                required:
                  - op
                properties:
                  op:
                    description: >-
                      OpenAPI operationId (camelCase); also the `op` of WS /
                      socket.io `call`.
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*$
                  params:
                    type: object
                  body: {}
                  ifMatch:
                    type: string
                additionalProperties: true
        required:
          - type
          - id
          - ts
          - data
        properties:
          type:
            const: hello
          data:
            type: object
            required:
              - app
            properties:
              token:
                type: string
                description: >-
                  access JWT or fdk_ key (or Authorization header /
                  ?access_token= for browsers)
              app:
                type: string
                minLength: 1
              appVersion:
                type: string
              sdk:
                type: string
                examples:
                  - freedome_client/1.0.0
              resume:
                type: object
                required:
                  - sinceSeq
                properties:
                  sinceSeq:
                    type: integer
                    minimum: 0
                patternProperties:
                  ^x-: true
                additionalProperties: false
            patternProperties:
              ^x-: true
            additionalProperties: false
      examples:
        - name: manager
          payload:
            type: hello
            id: 0192f3a4-5b6c-7d8e-9f01-23456789abd3
            ts: '2026-10-19T12:00:00.000Z'
            data:
              app: freedome_manager
              appVersion: 4.0.0
              sdk: freedome_client/0.1.0
    welcome:
      name: welcome
      title: welcome (S→C)
      payload:
        description: S→C answer to hello.
        type: object
        allOf:
          - $schema: https://json-schema.org/draft/2020-12/schema
            $id: >-
              https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
            $comment: >-
              NativeMindNONC — freedome_contract (see LICENSE). Message envelope
              for plain WS (sub-protocol freedome.v1), socket.io `event`
              payload, GraphQL Event and OSC JSON events, 02e §7.1 / §8.1.
              `type`, `id`, `ts`, `data` on every message; `topic` on events;
              `replyTo` on result / error replies. Message types are open
              (readers ignore unknown ones).
            title: Message envelope
            type: object
            required:
              - type
              - id
              - ts
              - data
            properties:
              type:
                description: >-
                  Known: hello, welcome, subscribe, unsubscribe, call, result,
                  event, error, resync, ping, pong, bye.
                type: string
                pattern: ^[a-z][a-zA-Z0-9]*$
              id:
                description: Unique per message; the idempotency key of `call`.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              ts:
                description: RFC 3339 UTC with milliseconds, e.g. 2026-10-19T12:00:00.000Z.
                type: string
                format: date-time
                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
              topic:
                description: >-
                  Concrete event topic (02e §7.2), e.g.
                  venues/default/players/main.
                type: string
                maxLength: 512
                pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
              replyTo:
                description: >-
                  Server-owned resource id: UUIDv7, lowercase, sortable by
                  creation time.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              data: {}
            allOf:
              - if:
                  properties:
                    type:
                      const: event
                  required:
                    - type
                then:
                  required:
                    - topic
                  properties:
                    data:
                      type: object
                      required:
                        - seq
                        - kind
                      properties:
                        seq:
                          type: integer
                          minimum: 0
                          description: >-
                            Per-server monotonically increasing sequence (resume
                            with sinceSeq).
                        kind:
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                          description: >-
                            Event kind from events/topics.yaml, e.g.
                            player.state.
                        resource:
                          description: Full new representation.
                        patch:
                          type: object
                          description: JSON merge patch (high-rate kinds).
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                      not:
                        required:
                          - resource
                          - patch
                      additionalProperties: true
              - if:
                  properties:
                    type:
                      const: result
                  required:
                    - type
                then:
                  required:
                    - replyTo
              - if:
                  properties:
                    type:
                      const: error
                  required:
                    - type
                then:
                  properties:
                    data:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). RFC
                        9457 problem details with the Freedome `code` catalogue,
                        02e §3.3. Also the `data` of WS `error`, the socket.io
                        ack error and GraphQL errors[].extensions.problem. The
                        catalogue is open: unknown codes are allowed; known
                        codes are bound to their HTTP status.
                      title: Problem details
                      type: object
                      required:
                        - type
                        - title
                        - code
                      properties:
                        type:
                          type: string
                          format: uri
                          description: >-
                            https://freedome.nativemind.us/problems/<code> for
                            catalogue codes.
                        title:
                          type: string
                          minLength: 1
                        status:
                          type: integer
                          minimum: 100
                          maximum: 599
                        detail:
                          type: string
                        instance:
                          type: string
                          format: uri-reference
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        traceId:
                          type: string
                          pattern: ^[0-9a-f]{16,32}$
                        errors:
                          type: array
                          items:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                      allOf:
                        - if:
                            properties:
                              code:
                                const: validation-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: not-found
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 404
                        - if:
                            properties:
                              code:
                                const: conflict
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: precondition-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 412
                        - if:
                            properties:
                              code:
                                const: precondition-required
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 428
                        - if:
                            properties:
                              code:
                                const: unauthenticated
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: forbidden
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: rate-limited
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 429
                        - if:
                            properties:
                              code:
                                const: payload-too-large
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 413
                        - if:
                            properties:
                              code:
                                const: unsupported-format
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 415
                        - if:
                            properties:
                              code:
                                const: engine-unavailable
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: engine-incompatible
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: degraded
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: upload-checksum-mismatch
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: legacy-unsupported
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 501
                        - if:
                            properties:
                              code:
                                const: internal
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 500
                        - if:
                            properties:
                              code:
                                const: clock-unlocked
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: not-configured
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: authorization-pending
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: slow-down
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: access-denied
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: expired-token
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: token-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: idempotency-key-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: idempotency-in-progress
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                      additionalProperties: true
                      examples:
                        - type: >-
                            https://freedome.nativemind.us/problems/engine-unavailable
                          title: Visual engine unavailable
                          status: 503
                          detail: >-
                            freedome-engined not reachable at
                            unix:/run/freedome/engine.sock
                          instance: /api/v1/venues/default/players/main/play
                          code: engine-unavailable
                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                      $defs:
                        knownCode:
                          enum:
                            - validation-failed
                            - not-found
                            - conflict
                            - precondition-failed
                            - precondition-required
                            - unauthenticated
                            - forbidden
                            - rate-limited
                            - payload-too-large
                            - unsupported-format
                            - engine-unavailable
                            - engine-incompatible
                            - degraded
                            - job-failed
                            - upload-checksum-mismatch
                            - legacy-unsupported
                            - internal
                            - clock-unlocked
                            - not-configured
                            - authorization-pending
                            - slow-down
                            - access-denied
                            - expired-token
                            - token-reused
                            - idempotency-key-reused
                            - idempotency-in-progress
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        fieldError:
                          type: object
                          required:
                            - pointer
                            - detail
                          properties:
                            pointer:
                              type: string
                              format: json-pointer
                            detail:
                              type: string
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          additionalProperties: true
              - if:
                  properties:
                    type:
                      const: call
                  required:
                    - type
                then:
                  properties:
                    data:
                      type: object
                      required:
                        - op
                      properties:
                        op:
                          description: >-
                            OpenAPI operationId (camelCase); also the `op` of WS
                            / socket.io `call`.
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*$
                        params:
                          type: object
                        body: {}
                        ifMatch:
                          type: string
                      additionalProperties: true
            additionalProperties: true
            examples:
              - type: event
                id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts: '2026-10-19T12:00:00.123Z'
                topic: venues/default/players/main
                data:
                  seq: 48213
                  kind: player.state
                  resource:
                    status: playing
                    position: 12.5
            $defs:
              knownType:
                enum:
                  - hello
                  - welcome
                  - subscribe
                  - unsubscribe
                  - call
                  - result
                  - event
                  - error
                  - resync
                  - ping
                  - pong
                  - bye
              eventData:
                type: object
                required:
                  - seq
                  - kind
                properties:
                  seq:
                    type: integer
                    minimum: 0
                    description: >-
                      Per-server monotonically increasing sequence (resume with
                      sinceSeq).
                  kind:
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                    description: Event kind from events/topics.yaml, e.g. player.state.
                  resource:
                    description: Full new representation.
                  patch:
                    type: object
                    description: JSON merge patch (high-rate kinds).
                  revision:
                    description: >-
                      Monotonic resource revision; the strong ETag is derived
                      from it.
                    type: integer
                    minimum: 0
                not:
                  required:
                    - resource
                    - patch
                additionalProperties: true
              callData:
                type: object
                required:
                  - op
                properties:
                  op:
                    description: >-
                      OpenAPI operationId (camelCase); also the `op` of WS /
                      socket.io `call`.
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*$
                  params:
                    type: object
                  body: {}
                  ifMatch:
                    type: string
                additionalProperties: true
        required:
          - type
          - id
          - ts
          - data
          - replyTo
        properties:
          type:
            const: welcome
          data:
            type: object
            required:
              - sessionId
              - server
              - scopes
              - heartbeatSec
            properties:
              sessionId:
                description: >-
                  Server-owned resource id: UUIDv7, lowercase, sortable by
                  creation time.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              server:
                $schema: https://json-schema.org/draft/2020-12/schema
                $id: >-
                  https://freedome.nativemind.us/schemas/api/1.0/info.schema.json
                $comment: >-
                  NativeMindNONC — freedome_contract (see LICENSE). GET
                  /api/v1/info (02e §5.1) and the unversioned /health, /ready
                  bodies ($defs/health).
                title: Server info
                type: object
                required:
                  - product
                  - serverVersion
                  - instanceId
                  - apiVersions
                properties:
                  product:
                    anyOf:
                      - enum:
                          - freedome-mediaserver
                          - freedome-cloud
                      - type: string
                        minLength: 1
                  serverVersion:
                    description: Semantic version 2.0.0.
                    type: string
                    pattern: >-
                      ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$
                  contractVersion:
                    description: Semantic version 2.0.0.
                    type: string
                    pattern: >-
                      ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$
                  instanceId:
                    description: >-
                      Server-owned resource id: UUIDv7, lowercase, sortable by
                      creation time.
                    type: string
                    pattern: >-
                      ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                    examples:
                      - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                  name:
                    type: string
                  apiVersions:
                    type: array
                    minItems: 1
                    items:
                      type: string
                      pattern: ^v\d+$
                  legacyProfile:
                    type: boolean
                    description: >-
                      legacy (flutter_freedome 3.0 / razvivalka) listener
                      enabled
                  transports:
                    type: object
                    properties:
                      rest:
                        type: object
                        properties:
                          basePath:
                            type: string
                        additionalProperties: true
                      graphql:
                        type: object
                        properties:
                          enabled:
                            type: boolean
                          path:
                            type: string
                        additionalProperties: true
                      ws:
                        type: object
                        properties:
                          path:
                            type: string
                          subprotocol:
                            type: string
                        additionalProperties: true
                      socketio:
                        type: object
                        properties:
                          path:
                            type: string
                          namespace:
                            type: string
                        additionalProperties: true
                      osc:
                        type: object
                        properties:
                          udpIn:
                            type: integer
                            minimum: 1
                            maximum: 65535
                          udpOut:
                            type: integer
                            minimum: 1
                            maximum: 65535
                          tcp:
                            type: integer
                            minimum: 1
                            maximum: 65535
                        additionalProperties: true
                    additionalProperties: true
                  auth:
                    type: object
                    properties:
                      methods:
                        type: array
                        items:
                          anyOf:
                            - enum:
                                - password
                                - apiKey
                                - pairing
                                - cloud
                                - anonymous
                            - type: string
                    additionalProperties: true
                  venues:
                    type: array
                    items:
                      type: object
                      required:
                        - id
                      properties:
                        id:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        title:
                          $schema: https://json-schema.org/draft/2020-12/schema
                          $id: >-
                            https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                          $comment: >-
                            NativeMindNONC — freedome_contract (see LICENSE).
                            Localised text map {"en":…,"ru":…}, 02e §3.1 (as
                            .dome meta.title).
                          title: Localised text
                          type: object
                          minProperties: 1
                          propertyNames:
                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                          additionalProperties:
                            type: string
                          examples:
                            - en: Intro
                              ru: Вступление
                          $defs:
                            textOrI18n:
                              description: >-
                                Plain string (treated as `en`) or a localised
                                map. (map branch = the root schema, inlined for
                                tools that mis-handle self references)
                              anyOf:
                                - type: string
                                - type: object
                                  minProperties: 1
                                  propertyNames:
                                    pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                  additionalProperties:
                                    type: string
                                  examples:
                                    - en: Intro
                                      ru: Вступление
                        default:
                          type: boolean
                        status:
                          type: string
                      additionalProperties: true
                  capabilities:
                    description: >-
                      Engines, audio modes, display types, test patterns,
                      gateways … (open object; clients ignore unknown keys).
                    type: object
                    additionalProperties: true
                  links:
                    type: object
                    additionalProperties:
                      type: string
                      format: uri-reference
                additionalProperties: true
                $defs:
                  health:
                    description: GET /health and /ready (unversioned, anonymous).
                    type: object
                    required:
                      - status
                    properties:
                      status:
                        enum:
                          - ok
                          - degraded
                          - down
                      checks:
                        type: object
                        additionalProperties:
                          type: object
                          required:
                            - status
                          properties:
                            status:
                              enum:
                                - ok
                                - degraded
                                - down
                            detail:
                              type: string
                          additionalProperties: false
                    additionalProperties: false
              scopes:
                type: array
                items:
                  description: Authorisation scope (02e §3.6), `<area>:<action>`.
                  type: string
                  pattern: ^[a-z]+:[a-z]+$
                  examples:
                    - info:read
                    - playback:control
                    - system:admin
              heartbeatSec:
                type: integer
                minimum: 1
                default: 20
              maxMessageBytes:
                type: integer
                minimum: 1024
                default: 1048576
            patternProperties:
              ^x-: true
            additionalProperties: false
      examples:
        - name: operator
          payload:
            type: welcome
            id: 0192f3a4-5b6c-7d8e-9f01-23456789abd4
            ts: '2026-10-19T12:00:00.010Z'
            replyTo: 0192f3a4-5b6c-7d8e-9f01-23456789abd3
            data:
              sessionId: 0192f3a4-5b6c-7d8e-9f01-23456789abd9
              server:
                product: freedome-mediaserver
                serverVersion: 0.1.0
                instanceId: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                apiVersions:
                  - v1
              scopes:
                - info:read
                - events:subscribe
                - playback:read
                - playback:control
                - displays:control
              heartbeatSec: 20
              maxMessageBytes: 1048576
    subscribe:
      name: subscribe
      title: subscribe (C→S)
      payload:
        description: C→S; answered by result (subscribeResult).
        type: object
        allOf:
          - $schema: https://json-schema.org/draft/2020-12/schema
            $id: >-
              https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
            $comment: >-
              NativeMindNONC — freedome_contract (see LICENSE). Message envelope
              for plain WS (sub-protocol freedome.v1), socket.io `event`
              payload, GraphQL Event and OSC JSON events, 02e §7.1 / §8.1.
              `type`, `id`, `ts`, `data` on every message; `topic` on events;
              `replyTo` on result / error replies. Message types are open
              (readers ignore unknown ones).
            title: Message envelope
            type: object
            required:
              - type
              - id
              - ts
              - data
            properties:
              type:
                description: >-
                  Known: hello, welcome, subscribe, unsubscribe, call, result,
                  event, error, resync, ping, pong, bye.
                type: string
                pattern: ^[a-z][a-zA-Z0-9]*$
              id:
                description: Unique per message; the idempotency key of `call`.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              ts:
                description: RFC 3339 UTC with milliseconds, e.g. 2026-10-19T12:00:00.000Z.
                type: string
                format: date-time
                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
              topic:
                description: >-
                  Concrete event topic (02e §7.2), e.g.
                  venues/default/players/main.
                type: string
                maxLength: 512
                pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
              replyTo:
                description: >-
                  Server-owned resource id: UUIDv7, lowercase, sortable by
                  creation time.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              data: {}
            allOf:
              - if:
                  properties:
                    type:
                      const: event
                  required:
                    - type
                then:
                  required:
                    - topic
                  properties:
                    data:
                      type: object
                      required:
                        - seq
                        - kind
                      properties:
                        seq:
                          type: integer
                          minimum: 0
                          description: >-
                            Per-server monotonically increasing sequence (resume
                            with sinceSeq).
                        kind:
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                          description: >-
                            Event kind from events/topics.yaml, e.g.
                            player.state.
                        resource:
                          description: Full new representation.
                        patch:
                          type: object
                          description: JSON merge patch (high-rate kinds).
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                      not:
                        required:
                          - resource
                          - patch
                      additionalProperties: true
              - if:
                  properties:
                    type:
                      const: result
                  required:
                    - type
                then:
                  required:
                    - replyTo
              - if:
                  properties:
                    type:
                      const: error
                  required:
                    - type
                then:
                  properties:
                    data:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). RFC
                        9457 problem details with the Freedome `code` catalogue,
                        02e §3.3. Also the `data` of WS `error`, the socket.io
                        ack error and GraphQL errors[].extensions.problem. The
                        catalogue is open: unknown codes are allowed; known
                        codes are bound to their HTTP status.
                      title: Problem details
                      type: object
                      required:
                        - type
                        - title
                        - code
                      properties:
                        type:
                          type: string
                          format: uri
                          description: >-
                            https://freedome.nativemind.us/problems/<code> for
                            catalogue codes.
                        title:
                          type: string
                          minLength: 1
                        status:
                          type: integer
                          minimum: 100
                          maximum: 599
                        detail:
                          type: string
                        instance:
                          type: string
                          format: uri-reference
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        traceId:
                          type: string
                          pattern: ^[0-9a-f]{16,32}$
                        errors:
                          type: array
                          items:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                      allOf:
                        - if:
                            properties:
                              code:
                                const: validation-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: not-found
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 404
                        - if:
                            properties:
                              code:
                                const: conflict
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: precondition-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 412
                        - if:
                            properties:
                              code:
                                const: precondition-required
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 428
                        - if:
                            properties:
                              code:
                                const: unauthenticated
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: forbidden
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: rate-limited
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 429
                        - if:
                            properties:
                              code:
                                const: payload-too-large
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 413
                        - if:
                            properties:
                              code:
                                const: unsupported-format
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 415
                        - if:
                            properties:
                              code:
                                const: engine-unavailable
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: engine-incompatible
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: degraded
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: upload-checksum-mismatch
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: legacy-unsupported
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 501
                        - if:
                            properties:
                              code:
                                const: internal
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 500
                        - if:
                            properties:
                              code:
                                const: clock-unlocked
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: not-configured
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: authorization-pending
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: slow-down
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: access-denied
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: expired-token
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: token-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: idempotency-key-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: idempotency-in-progress
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                      additionalProperties: true
                      examples:
                        - type: >-
                            https://freedome.nativemind.us/problems/engine-unavailable
                          title: Visual engine unavailable
                          status: 503
                          detail: >-
                            freedome-engined not reachable at
                            unix:/run/freedome/engine.sock
                          instance: /api/v1/venues/default/players/main/play
                          code: engine-unavailable
                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                      $defs:
                        knownCode:
                          enum:
                            - validation-failed
                            - not-found
                            - conflict
                            - precondition-failed
                            - precondition-required
                            - unauthenticated
                            - forbidden
                            - rate-limited
                            - payload-too-large
                            - unsupported-format
                            - engine-unavailable
                            - engine-incompatible
                            - degraded
                            - job-failed
                            - upload-checksum-mismatch
                            - legacy-unsupported
                            - internal
                            - clock-unlocked
                            - not-configured
                            - authorization-pending
                            - slow-down
                            - access-denied
                            - expired-token
                            - token-reused
                            - idempotency-key-reused
                            - idempotency-in-progress
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        fieldError:
                          type: object
                          required:
                            - pointer
                            - detail
                          properties:
                            pointer:
                              type: string
                              format: json-pointer
                            detail:
                              type: string
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          additionalProperties: true
              - if:
                  properties:
                    type:
                      const: call
                  required:
                    - type
                then:
                  properties:
                    data:
                      type: object
                      required:
                        - op
                      properties:
                        op:
                          description: >-
                            OpenAPI operationId (camelCase); also the `op` of WS
                            / socket.io `call`.
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*$
                        params:
                          type: object
                        body: {}
                        ifMatch:
                          type: string
                      additionalProperties: true
            additionalProperties: true
            examples:
              - type: event
                id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts: '2026-10-19T12:00:00.123Z'
                topic: venues/default/players/main
                data:
                  seq: 48213
                  kind: player.state
                  resource:
                    status: playing
                    position: 12.5
            $defs:
              knownType:
                enum:
                  - hello
                  - welcome
                  - subscribe
                  - unsubscribe
                  - call
                  - result
                  - event
                  - error
                  - resync
                  - ping
                  - pong
                  - bye
              eventData:
                type: object
                required:
                  - seq
                  - kind
                properties:
                  seq:
                    type: integer
                    minimum: 0
                    description: >-
                      Per-server monotonically increasing sequence (resume with
                      sinceSeq).
                  kind:
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                    description: Event kind from events/topics.yaml, e.g. player.state.
                  resource:
                    description: Full new representation.
                  patch:
                    type: object
                    description: JSON merge patch (high-rate kinds).
                  revision:
                    description: >-
                      Monotonic resource revision; the strong ETag is derived
                      from it.
                    type: integer
                    minimum: 0
                not:
                  required:
                    - resource
                    - patch
                additionalProperties: true
              callData:
                type: object
                required:
                  - op
                properties:
                  op:
                    description: >-
                      OpenAPI operationId (camelCase); also the `op` of WS /
                      socket.io `call`.
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*$
                  params:
                    type: object
                  body: {}
                  ifMatch:
                    type: string
                additionalProperties: true
        required:
          - type
          - id
          - ts
          - data
        properties:
          type:
            const: subscribe
          data:
            type: object
            required:
              - topics
            properties:
              topics:
                type: array
                minItems: 1
                maxItems: 256
                items:
                  description: >-
                    Subscription filter: a topic where a level may be `+` (one
                    level) and the last level may be `#` (rest), MQTT style.
                  type: string
                  maxLength: 512
                  pattern: >-
                    ^(?:[A-Za-z0-9._@-]+|\+)(?:/(?:[A-Za-z0-9._@-]+|\+))*(?:/#)?$|^#$
              sinceSeq:
                type: integer
                minimum: 0
              options:
                type: object
                properties:
                  positionHz:
                    type: number
                    exclusiveMinimum: 0
                    maximum: 30
                    description: player.position rate (default 4)
                  analysisHz:
                    type: number
                    exclusiveMinimum: 0
                    maximum: 60
                    description: >-
                      audio.analysis rate (default 15); the server sends the
                      newest frame
                patternProperties:
                  ^x-: true
                additionalProperties: false
            patternProperties:
              ^x-: true
            additionalProperties: false
      examples:
        - name: displays-and-calibration
          payload:
            type: subscribe
            id: 0192f3a4-5b6c-7d8e-9f01-23456789abd5
            ts: '2026-10-19T12:00:00.020Z'
            data:
              topics:
                - venues/default/displays/+
                - venues/default/calibration/#
              sinceSeq: 48000
    unsubscribe:
      name: unsubscribe
      title: unsubscribe (C→S)
      payload:
        description: C→S; answered by result.
        type: object
        allOf:
          - $schema: https://json-schema.org/draft/2020-12/schema
            $id: >-
              https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
            $comment: >-
              NativeMindNONC — freedome_contract (see LICENSE). Message envelope
              for plain WS (sub-protocol freedome.v1), socket.io `event`
              payload, GraphQL Event and OSC JSON events, 02e §7.1 / §8.1.
              `type`, `id`, `ts`, `data` on every message; `topic` on events;
              `replyTo` on result / error replies. Message types are open
              (readers ignore unknown ones).
            title: Message envelope
            type: object
            required:
              - type
              - id
              - ts
              - data
            properties:
              type:
                description: >-
                  Known: hello, welcome, subscribe, unsubscribe, call, result,
                  event, error, resync, ping, pong, bye.
                type: string
                pattern: ^[a-z][a-zA-Z0-9]*$
              id:
                description: Unique per message; the idempotency key of `call`.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              ts:
                description: RFC 3339 UTC with milliseconds, e.g. 2026-10-19T12:00:00.000Z.
                type: string
                format: date-time
                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
              topic:
                description: >-
                  Concrete event topic (02e §7.2), e.g.
                  venues/default/players/main.
                type: string
                maxLength: 512
                pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
              replyTo:
                description: >-
                  Server-owned resource id: UUIDv7, lowercase, sortable by
                  creation time.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              data: {}
            allOf:
              - if:
                  properties:
                    type:
                      const: event
                  required:
                    - type
                then:
                  required:
                    - topic
                  properties:
                    data:
                      type: object
                      required:
                        - seq
                        - kind
                      properties:
                        seq:
                          type: integer
                          minimum: 0
                          description: >-
                            Per-server monotonically increasing sequence (resume
                            with sinceSeq).
                        kind:
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                          description: >-
                            Event kind from events/topics.yaml, e.g.
                            player.state.
                        resource:
                          description: Full new representation.
                        patch:
                          type: object
                          description: JSON merge patch (high-rate kinds).
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                      not:
                        required:
                          - resource
                          - patch
                      additionalProperties: true
              - if:
                  properties:
                    type:
                      const: result
                  required:
                    - type
                then:
                  required:
                    - replyTo
              - if:
                  properties:
                    type:
                      const: error
                  required:
                    - type
                then:
                  properties:
                    data:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). RFC
                        9457 problem details with the Freedome `code` catalogue,
                        02e §3.3. Also the `data` of WS `error`, the socket.io
                        ack error and GraphQL errors[].extensions.problem. The
                        catalogue is open: unknown codes are allowed; known
                        codes are bound to their HTTP status.
                      title: Problem details
                      type: object
                      required:
                        - type
                        - title
                        - code
                      properties:
                        type:
                          type: string
                          format: uri
                          description: >-
                            https://freedome.nativemind.us/problems/<code> for
                            catalogue codes.
                        title:
                          type: string
                          minLength: 1
                        status:
                          type: integer
                          minimum: 100
                          maximum: 599
                        detail:
                          type: string
                        instance:
                          type: string
                          format: uri-reference
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        traceId:
                          type: string
                          pattern: ^[0-9a-f]{16,32}$
                        errors:
                          type: array
                          items:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                      allOf:
                        - if:
                            properties:
                              code:
                                const: validation-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: not-found
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 404
                        - if:
                            properties:
                              code:
                                const: conflict
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: precondition-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 412
                        - if:
                            properties:
                              code:
                                const: precondition-required
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 428
                        - if:
                            properties:
                              code:
                                const: unauthenticated
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: forbidden
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: rate-limited
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 429
                        - if:
                            properties:
                              code:
                                const: payload-too-large
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 413
                        - if:
                            properties:
                              code:
                                const: unsupported-format
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 415
                        - if:
                            properties:
                              code:
                                const: engine-unavailable
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: engine-incompatible
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: degraded
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: upload-checksum-mismatch
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: legacy-unsupported
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 501
                        - if:
                            properties:
                              code:
                                const: internal
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 500
                        - if:
                            properties:
                              code:
                                const: clock-unlocked
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: not-configured
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: authorization-pending
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: slow-down
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: access-denied
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: expired-token
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: token-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: idempotency-key-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: idempotency-in-progress
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                      additionalProperties: true
                      examples:
                        - type: >-
                            https://freedome.nativemind.us/problems/engine-unavailable
                          title: Visual engine unavailable
                          status: 503
                          detail: >-
                            freedome-engined not reachable at
                            unix:/run/freedome/engine.sock
                          instance: /api/v1/venues/default/players/main/play
                          code: engine-unavailable
                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                      $defs:
                        knownCode:
                          enum:
                            - validation-failed
                            - not-found
                            - conflict
                            - precondition-failed
                            - precondition-required
                            - unauthenticated
                            - forbidden
                            - rate-limited
                            - payload-too-large
                            - unsupported-format
                            - engine-unavailable
                            - engine-incompatible
                            - degraded
                            - job-failed
                            - upload-checksum-mismatch
                            - legacy-unsupported
                            - internal
                            - clock-unlocked
                            - not-configured
                            - authorization-pending
                            - slow-down
                            - access-denied
                            - expired-token
                            - token-reused
                            - idempotency-key-reused
                            - idempotency-in-progress
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        fieldError:
                          type: object
                          required:
                            - pointer
                            - detail
                          properties:
                            pointer:
                              type: string
                              format: json-pointer
                            detail:
                              type: string
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          additionalProperties: true
              - if:
                  properties:
                    type:
                      const: call
                  required:
                    - type
                then:
                  properties:
                    data:
                      type: object
                      required:
                        - op
                      properties:
                        op:
                          description: >-
                            OpenAPI operationId (camelCase); also the `op` of WS
                            / socket.io `call`.
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*$
                        params:
                          type: object
                        body: {}
                        ifMatch:
                          type: string
                      additionalProperties: true
            additionalProperties: true
            examples:
              - type: event
                id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts: '2026-10-19T12:00:00.123Z'
                topic: venues/default/players/main
                data:
                  seq: 48213
                  kind: player.state
                  resource:
                    status: playing
                    position: 12.5
            $defs:
              knownType:
                enum:
                  - hello
                  - welcome
                  - subscribe
                  - unsubscribe
                  - call
                  - result
                  - event
                  - error
                  - resync
                  - ping
                  - pong
                  - bye
              eventData:
                type: object
                required:
                  - seq
                  - kind
                properties:
                  seq:
                    type: integer
                    minimum: 0
                    description: >-
                      Per-server monotonically increasing sequence (resume with
                      sinceSeq).
                  kind:
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                    description: Event kind from events/topics.yaml, e.g. player.state.
                  resource:
                    description: Full new representation.
                  patch:
                    type: object
                    description: JSON merge patch (high-rate kinds).
                  revision:
                    description: >-
                      Monotonic resource revision; the strong ETag is derived
                      from it.
                    type: integer
                    minimum: 0
                not:
                  required:
                    - resource
                    - patch
                additionalProperties: true
              callData:
                type: object
                required:
                  - op
                properties:
                  op:
                    description: >-
                      OpenAPI operationId (camelCase); also the `op` of WS /
                      socket.io `call`.
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*$
                  params:
                    type: object
                  body: {}
                  ifMatch:
                    type: string
                additionalProperties: true
        required:
          - type
          - id
          - ts
          - data
        properties:
          type:
            const: unsubscribe
          data:
            type: object
            required:
              - topics
            properties:
              topics:
                type: array
                minItems: 1
                maxItems: 256
                items:
                  description: >-
                    Subscription filter: a topic where a level may be `+` (one
                    level) and the last level may be `#` (rest), MQTT style.
                  type: string
                  maxLength: 512
                  pattern: >-
                    ^(?:[A-Za-z0-9._@-]+|\+)(?:/(?:[A-Za-z0-9._@-]+|\+))*(?:/#)?$|^#$
            patternProperties:
              ^x-: true
            additionalProperties: false
      examples:
        - name: calibration
          payload:
            type: unsubscribe
            id: 0192f3a4-5b6c-7d8e-9f01-23456789abd6
            ts: '2026-10-19T12:10:00.000Z'
            data:
              topics:
                - venues/default/calibration/#
    call:
      name: call
      title: call (C→S)
      payload:
        description: >-
          C→S operation call (`op` = OpenAPI operationId; envelope id =
          idempotency key).
        type: object
        allOf:
          - $schema: https://json-schema.org/draft/2020-12/schema
            $id: >-
              https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
            $comment: >-
              NativeMindNONC — freedome_contract (see LICENSE). Message envelope
              for plain WS (sub-protocol freedome.v1), socket.io `event`
              payload, GraphQL Event and OSC JSON events, 02e §7.1 / §8.1.
              `type`, `id`, `ts`, `data` on every message; `topic` on events;
              `replyTo` on result / error replies. Message types are open
              (readers ignore unknown ones).
            title: Message envelope
            type: object
            required:
              - type
              - id
              - ts
              - data
            properties:
              type:
                description: >-
                  Known: hello, welcome, subscribe, unsubscribe, call, result,
                  event, error, resync, ping, pong, bye.
                type: string
                pattern: ^[a-z][a-zA-Z0-9]*$
              id:
                description: Unique per message; the idempotency key of `call`.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              ts:
                description: RFC 3339 UTC with milliseconds, e.g. 2026-10-19T12:00:00.000Z.
                type: string
                format: date-time
                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
              topic:
                description: >-
                  Concrete event topic (02e §7.2), e.g.
                  venues/default/players/main.
                type: string
                maxLength: 512
                pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
              replyTo:
                description: >-
                  Server-owned resource id: UUIDv7, lowercase, sortable by
                  creation time.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              data: {}
            allOf:
              - if:
                  properties:
                    type:
                      const: event
                  required:
                    - type
                then:
                  required:
                    - topic
                  properties:
                    data:
                      type: object
                      required:
                        - seq
                        - kind
                      properties:
                        seq:
                          type: integer
                          minimum: 0
                          description: >-
                            Per-server monotonically increasing sequence (resume
                            with sinceSeq).
                        kind:
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                          description: >-
                            Event kind from events/topics.yaml, e.g.
                            player.state.
                        resource:
                          description: Full new representation.
                        patch:
                          type: object
                          description: JSON merge patch (high-rate kinds).
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                      not:
                        required:
                          - resource
                          - patch
                      additionalProperties: true
              - if:
                  properties:
                    type:
                      const: result
                  required:
                    - type
                then:
                  required:
                    - replyTo
              - if:
                  properties:
                    type:
                      const: error
                  required:
                    - type
                then:
                  properties:
                    data:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). RFC
                        9457 problem details with the Freedome `code` catalogue,
                        02e §3.3. Also the `data` of WS `error`, the socket.io
                        ack error and GraphQL errors[].extensions.problem. The
                        catalogue is open: unknown codes are allowed; known
                        codes are bound to their HTTP status.
                      title: Problem details
                      type: object
                      required:
                        - type
                        - title
                        - code
                      properties:
                        type:
                          type: string
                          format: uri
                          description: >-
                            https://freedome.nativemind.us/problems/<code> for
                            catalogue codes.
                        title:
                          type: string
                          minLength: 1
                        status:
                          type: integer
                          minimum: 100
                          maximum: 599
                        detail:
                          type: string
                        instance:
                          type: string
                          format: uri-reference
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        traceId:
                          type: string
                          pattern: ^[0-9a-f]{16,32}$
                        errors:
                          type: array
                          items:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                      allOf:
                        - if:
                            properties:
                              code:
                                const: validation-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: not-found
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 404
                        - if:
                            properties:
                              code:
                                const: conflict
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: precondition-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 412
                        - if:
                            properties:
                              code:
                                const: precondition-required
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 428
                        - if:
                            properties:
                              code:
                                const: unauthenticated
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: forbidden
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: rate-limited
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 429
                        - if:
                            properties:
                              code:
                                const: payload-too-large
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 413
                        - if:
                            properties:
                              code:
                                const: unsupported-format
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 415
                        - if:
                            properties:
                              code:
                                const: engine-unavailable
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: engine-incompatible
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: degraded
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: upload-checksum-mismatch
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: legacy-unsupported
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 501
                        - if:
                            properties:
                              code:
                                const: internal
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 500
                        - if:
                            properties:
                              code:
                                const: clock-unlocked
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: not-configured
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: authorization-pending
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: slow-down
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: access-denied
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: expired-token
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: token-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: idempotency-key-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: idempotency-in-progress
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                      additionalProperties: true
                      examples:
                        - type: >-
                            https://freedome.nativemind.us/problems/engine-unavailable
                          title: Visual engine unavailable
                          status: 503
                          detail: >-
                            freedome-engined not reachable at
                            unix:/run/freedome/engine.sock
                          instance: /api/v1/venues/default/players/main/play
                          code: engine-unavailable
                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                      $defs:
                        knownCode:
                          enum:
                            - validation-failed
                            - not-found
                            - conflict
                            - precondition-failed
                            - precondition-required
                            - unauthenticated
                            - forbidden
                            - rate-limited
                            - payload-too-large
                            - unsupported-format
                            - engine-unavailable
                            - engine-incompatible
                            - degraded
                            - job-failed
                            - upload-checksum-mismatch
                            - legacy-unsupported
                            - internal
                            - clock-unlocked
                            - not-configured
                            - authorization-pending
                            - slow-down
                            - access-denied
                            - expired-token
                            - token-reused
                            - idempotency-key-reused
                            - idempotency-in-progress
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        fieldError:
                          type: object
                          required:
                            - pointer
                            - detail
                          properties:
                            pointer:
                              type: string
                              format: json-pointer
                            detail:
                              type: string
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          additionalProperties: true
              - if:
                  properties:
                    type:
                      const: call
                  required:
                    - type
                then:
                  properties:
                    data:
                      type: object
                      required:
                        - op
                      properties:
                        op:
                          description: >-
                            OpenAPI operationId (camelCase); also the `op` of WS
                            / socket.io `call`.
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*$
                        params:
                          type: object
                        body: {}
                        ifMatch:
                          type: string
                      additionalProperties: true
            additionalProperties: true
            examples:
              - type: event
                id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts: '2026-10-19T12:00:00.123Z'
                topic: venues/default/players/main
                data:
                  seq: 48213
                  kind: player.state
                  resource:
                    status: playing
                    position: 12.5
            $defs:
              knownType:
                enum:
                  - hello
                  - welcome
                  - subscribe
                  - unsubscribe
                  - call
                  - result
                  - event
                  - error
                  - resync
                  - ping
                  - pong
                  - bye
              eventData:
                type: object
                required:
                  - seq
                  - kind
                properties:
                  seq:
                    type: integer
                    minimum: 0
                    description: >-
                      Per-server monotonically increasing sequence (resume with
                      sinceSeq).
                  kind:
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                    description: Event kind from events/topics.yaml, e.g. player.state.
                  resource:
                    description: Full new representation.
                  patch:
                    type: object
                    description: JSON merge patch (high-rate kinds).
                  revision:
                    description: >-
                      Monotonic resource revision; the strong ETag is derived
                      from it.
                    type: integer
                    minimum: 0
                not:
                  required:
                    - resource
                    - patch
                additionalProperties: true
              callData:
                type: object
                required:
                  - op
                properties:
                  op:
                    description: >-
                      OpenAPI operationId (camelCase); also the `op` of WS /
                      socket.io `call`.
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*$
                  params:
                    type: object
                  body: {}
                  ifMatch:
                    type: string
                additionalProperties: true
        required:
          - type
          - id
          - ts
          - data
        properties:
          type:
            const: call
          data:
            type: object
            required:
              - op
            properties:
              op:
                description: >-
                  OpenAPI operationId (camelCase); also the `op` of WS /
                  socket.io `call`.
                type: string
                pattern: ^[a-z][a-zA-Z0-9]*$
              params:
                type: object
              body: {}
              ifMatch:
                type: string
            additionalProperties: true
      examples:
        - name: setTestPattern
          payload:
            type: call
            id: 0192f3a4-5b6c-7d8e-9f01-23456789abd7
            ts: '2026-10-19T12:00:01.000Z'
            data:
              op: setTestPattern
              params:
                venueId: default
                displayId: p1
              body:
                kind: grid
    result:
      name: result
      title: result (S→C)
      payload:
        description: S→C reply to subscribe / unsubscribe / call.
        type: object
        allOf:
          - $schema: https://json-schema.org/draft/2020-12/schema
            $id: >-
              https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
            $comment: >-
              NativeMindNONC — freedome_contract (see LICENSE). Message envelope
              for plain WS (sub-protocol freedome.v1), socket.io `event`
              payload, GraphQL Event and OSC JSON events, 02e §7.1 / §8.1.
              `type`, `id`, `ts`, `data` on every message; `topic` on events;
              `replyTo` on result / error replies. Message types are open
              (readers ignore unknown ones).
            title: Message envelope
            type: object
            required:
              - type
              - id
              - ts
              - data
            properties:
              type:
                description: >-
                  Known: hello, welcome, subscribe, unsubscribe, call, result,
                  event, error, resync, ping, pong, bye.
                type: string
                pattern: ^[a-z][a-zA-Z0-9]*$
              id:
                description: Unique per message; the idempotency key of `call`.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              ts:
                description: RFC 3339 UTC with milliseconds, e.g. 2026-10-19T12:00:00.000Z.
                type: string
                format: date-time
                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
              topic:
                description: >-
                  Concrete event topic (02e §7.2), e.g.
                  venues/default/players/main.
                type: string
                maxLength: 512
                pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
              replyTo:
                description: >-
                  Server-owned resource id: UUIDv7, lowercase, sortable by
                  creation time.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              data: {}
            allOf:
              - if:
                  properties:
                    type:
                      const: event
                  required:
                    - type
                then:
                  required:
                    - topic
                  properties:
                    data:
                      type: object
                      required:
                        - seq
                        - kind
                      properties:
                        seq:
                          type: integer
                          minimum: 0
                          description: >-
                            Per-server monotonically increasing sequence (resume
                            with sinceSeq).
                        kind:
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                          description: >-
                            Event kind from events/topics.yaml, e.g.
                            player.state.
                        resource:
                          description: Full new representation.
                        patch:
                          type: object
                          description: JSON merge patch (high-rate kinds).
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                      not:
                        required:
                          - resource
                          - patch
                      additionalProperties: true
              - if:
                  properties:
                    type:
                      const: result
                  required:
                    - type
                then:
                  required:
                    - replyTo
              - if:
                  properties:
                    type:
                      const: error
                  required:
                    - type
                then:
                  properties:
                    data:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). RFC
                        9457 problem details with the Freedome `code` catalogue,
                        02e §3.3. Also the `data` of WS `error`, the socket.io
                        ack error and GraphQL errors[].extensions.problem. The
                        catalogue is open: unknown codes are allowed; known
                        codes are bound to their HTTP status.
                      title: Problem details
                      type: object
                      required:
                        - type
                        - title
                        - code
                      properties:
                        type:
                          type: string
                          format: uri
                          description: >-
                            https://freedome.nativemind.us/problems/<code> for
                            catalogue codes.
                        title:
                          type: string
                          minLength: 1
                        status:
                          type: integer
                          minimum: 100
                          maximum: 599
                        detail:
                          type: string
                        instance:
                          type: string
                          format: uri-reference
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        traceId:
                          type: string
                          pattern: ^[0-9a-f]{16,32}$
                        errors:
                          type: array
                          items:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                      allOf:
                        - if:
                            properties:
                              code:
                                const: validation-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: not-found
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 404
                        - if:
                            properties:
                              code:
                                const: conflict
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: precondition-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 412
                        - if:
                            properties:
                              code:
                                const: precondition-required
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 428
                        - if:
                            properties:
                              code:
                                const: unauthenticated
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: forbidden
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: rate-limited
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 429
                        - if:
                            properties:
                              code:
                                const: payload-too-large
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 413
                        - if:
                            properties:
                              code:
                                const: unsupported-format
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 415
                        - if:
                            properties:
                              code:
                                const: engine-unavailable
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: engine-incompatible
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: degraded
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: upload-checksum-mismatch
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: legacy-unsupported
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 501
                        - if:
                            properties:
                              code:
                                const: internal
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 500
                        - if:
                            properties:
                              code:
                                const: clock-unlocked
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: not-configured
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: authorization-pending
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: slow-down
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: access-denied
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: expired-token
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: token-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: idempotency-key-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: idempotency-in-progress
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                      additionalProperties: true
                      examples:
                        - type: >-
                            https://freedome.nativemind.us/problems/engine-unavailable
                          title: Visual engine unavailable
                          status: 503
                          detail: >-
                            freedome-engined not reachable at
                            unix:/run/freedome/engine.sock
                          instance: /api/v1/venues/default/players/main/play
                          code: engine-unavailable
                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                      $defs:
                        knownCode:
                          enum:
                            - validation-failed
                            - not-found
                            - conflict
                            - precondition-failed
                            - precondition-required
                            - unauthenticated
                            - forbidden
                            - rate-limited
                            - payload-too-large
                            - unsupported-format
                            - engine-unavailable
                            - engine-incompatible
                            - degraded
                            - job-failed
                            - upload-checksum-mismatch
                            - legacy-unsupported
                            - internal
                            - clock-unlocked
                            - not-configured
                            - authorization-pending
                            - slow-down
                            - access-denied
                            - expired-token
                            - token-reused
                            - idempotency-key-reused
                            - idempotency-in-progress
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        fieldError:
                          type: object
                          required:
                            - pointer
                            - detail
                          properties:
                            pointer:
                              type: string
                              format: json-pointer
                            detail:
                              type: string
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          additionalProperties: true
              - if:
                  properties:
                    type:
                      const: call
                  required:
                    - type
                then:
                  properties:
                    data:
                      type: object
                      required:
                        - op
                      properties:
                        op:
                          description: >-
                            OpenAPI operationId (camelCase); also the `op` of WS
                            / socket.io `call`.
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*$
                        params:
                          type: object
                        body: {}
                        ifMatch:
                          type: string
                      additionalProperties: true
            additionalProperties: true
            examples:
              - type: event
                id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts: '2026-10-19T12:00:00.123Z'
                topic: venues/default/players/main
                data:
                  seq: 48213
                  kind: player.state
                  resource:
                    status: playing
                    position: 12.5
            $defs:
              knownType:
                enum:
                  - hello
                  - welcome
                  - subscribe
                  - unsubscribe
                  - call
                  - result
                  - event
                  - error
                  - resync
                  - ping
                  - pong
                  - bye
              eventData:
                type: object
                required:
                  - seq
                  - kind
                properties:
                  seq:
                    type: integer
                    minimum: 0
                    description: >-
                      Per-server monotonically increasing sequence (resume with
                      sinceSeq).
                  kind:
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                    description: Event kind from events/topics.yaml, e.g. player.state.
                  resource:
                    description: Full new representation.
                  patch:
                    type: object
                    description: JSON merge patch (high-rate kinds).
                  revision:
                    description: >-
                      Monotonic resource revision; the strong ETag is derived
                      from it.
                    type: integer
                    minimum: 0
                not:
                  required:
                    - resource
                    - patch
                additionalProperties: true
              callData:
                type: object
                required:
                  - op
                properties:
                  op:
                    description: >-
                      OpenAPI operationId (camelCase); also the `op` of WS /
                      socket.io `call`.
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*$
                  params:
                    type: object
                  body: {}
                  ifMatch:
                    type: string
                additionalProperties: true
        required:
          - type
          - id
          - ts
          - data
          - replyTo
        properties:
          type:
            const: result
          data:
            type: object
            required:
              - status
            properties:
              status:
                type: integer
                minimum: 100
                maximum: 599
                description: HTTP status of the equivalent REST call
              etag:
                type: string
              body:
                description: REST response body of the operation (absent for 204)
            patternProperties:
              ^x-: true
            additionalProperties: false
      examples:
        - name: setTestPattern
          payload:
            type: result
            id: 0192f3a4-5b6c-7d8e-9f01-23456789abd8
            ts: '2026-10-19T12:00:01.050Z'
            replyTo: 0192f3a4-5b6c-7d8e-9f01-23456789abd7
            data:
              status: 200
              body:
                online: true
                pattern:
                  kind: grid
        - name: subscribe
          payload:
            type: result
            id: 0192f3a4-5b6c-7d8e-9f01-23456789abda
            ts: '2026-10-19T12:00:00.030Z'
            replyTo: 0192f3a4-5b6c-7d8e-9f01-23456789abd5
            data:
              status: 200
              body:
                topics:
                  - venues/default/displays/+
                  - venues/default/calibration/#
                denied: []
    error:
      name: error
      title: error (S→C)
      payload:
        description: S→C problem reply (replyTo set when answering a message).
        type: object
        allOf:
          - $schema: https://json-schema.org/draft/2020-12/schema
            $id: >-
              https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
            $comment: >-
              NativeMindNONC — freedome_contract (see LICENSE). Message envelope
              for plain WS (sub-protocol freedome.v1), socket.io `event`
              payload, GraphQL Event and OSC JSON events, 02e §7.1 / §8.1.
              `type`, `id`, `ts`, `data` on every message; `topic` on events;
              `replyTo` on result / error replies. Message types are open
              (readers ignore unknown ones).
            title: Message envelope
            type: object
            required:
              - type
              - id
              - ts
              - data
            properties:
              type:
                description: >-
                  Known: hello, welcome, subscribe, unsubscribe, call, result,
                  event, error, resync, ping, pong, bye.
                type: string
                pattern: ^[a-z][a-zA-Z0-9]*$
              id:
                description: Unique per message; the idempotency key of `call`.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              ts:
                description: RFC 3339 UTC with milliseconds, e.g. 2026-10-19T12:00:00.000Z.
                type: string
                format: date-time
                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
              topic:
                description: >-
                  Concrete event topic (02e §7.2), e.g.
                  venues/default/players/main.
                type: string
                maxLength: 512
                pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
              replyTo:
                description: >-
                  Server-owned resource id: UUIDv7, lowercase, sortable by
                  creation time.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              data: {}
            allOf:
              - if:
                  properties:
                    type:
                      const: event
                  required:
                    - type
                then:
                  required:
                    - topic
                  properties:
                    data:
                      type: object
                      required:
                        - seq
                        - kind
                      properties:
                        seq:
                          type: integer
                          minimum: 0
                          description: >-
                            Per-server monotonically increasing sequence (resume
                            with sinceSeq).
                        kind:
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                          description: >-
                            Event kind from events/topics.yaml, e.g.
                            player.state.
                        resource:
                          description: Full new representation.
                        patch:
                          type: object
                          description: JSON merge patch (high-rate kinds).
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                      not:
                        required:
                          - resource
                          - patch
                      additionalProperties: true
              - if:
                  properties:
                    type:
                      const: result
                  required:
                    - type
                then:
                  required:
                    - replyTo
              - if:
                  properties:
                    type:
                      const: error
                  required:
                    - type
                then:
                  properties:
                    data:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). RFC
                        9457 problem details with the Freedome `code` catalogue,
                        02e §3.3. Also the `data` of WS `error`, the socket.io
                        ack error and GraphQL errors[].extensions.problem. The
                        catalogue is open: unknown codes are allowed; known
                        codes are bound to their HTTP status.
                      title: Problem details
                      type: object
                      required:
                        - type
                        - title
                        - code
                      properties:
                        type:
                          type: string
                          format: uri
                          description: >-
                            https://freedome.nativemind.us/problems/<code> for
                            catalogue codes.
                        title:
                          type: string
                          minLength: 1
                        status:
                          type: integer
                          minimum: 100
                          maximum: 599
                        detail:
                          type: string
                        instance:
                          type: string
                          format: uri-reference
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        traceId:
                          type: string
                          pattern: ^[0-9a-f]{16,32}$
                        errors:
                          type: array
                          items:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                      allOf:
                        - if:
                            properties:
                              code:
                                const: validation-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: not-found
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 404
                        - if:
                            properties:
                              code:
                                const: conflict
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: precondition-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 412
                        - if:
                            properties:
                              code:
                                const: precondition-required
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 428
                        - if:
                            properties:
                              code:
                                const: unauthenticated
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: forbidden
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: rate-limited
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 429
                        - if:
                            properties:
                              code:
                                const: payload-too-large
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 413
                        - if:
                            properties:
                              code:
                                const: unsupported-format
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 415
                        - if:
                            properties:
                              code:
                                const: engine-unavailable
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: engine-incompatible
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: degraded
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: upload-checksum-mismatch
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: legacy-unsupported
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 501
                        - if:
                            properties:
                              code:
                                const: internal
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 500
                        - if:
                            properties:
                              code:
                                const: clock-unlocked
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: not-configured
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: authorization-pending
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: slow-down
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: access-denied
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: expired-token
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: token-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: idempotency-key-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: idempotency-in-progress
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                      additionalProperties: true
                      examples:
                        - type: >-
                            https://freedome.nativemind.us/problems/engine-unavailable
                          title: Visual engine unavailable
                          status: 503
                          detail: >-
                            freedome-engined not reachable at
                            unix:/run/freedome/engine.sock
                          instance: /api/v1/venues/default/players/main/play
                          code: engine-unavailable
                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                      $defs:
                        knownCode:
                          enum:
                            - validation-failed
                            - not-found
                            - conflict
                            - precondition-failed
                            - precondition-required
                            - unauthenticated
                            - forbidden
                            - rate-limited
                            - payload-too-large
                            - unsupported-format
                            - engine-unavailable
                            - engine-incompatible
                            - degraded
                            - job-failed
                            - upload-checksum-mismatch
                            - legacy-unsupported
                            - internal
                            - clock-unlocked
                            - not-configured
                            - authorization-pending
                            - slow-down
                            - access-denied
                            - expired-token
                            - token-reused
                            - idempotency-key-reused
                            - idempotency-in-progress
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        fieldError:
                          type: object
                          required:
                            - pointer
                            - detail
                          properties:
                            pointer:
                              type: string
                              format: json-pointer
                            detail:
                              type: string
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          additionalProperties: true
              - if:
                  properties:
                    type:
                      const: call
                  required:
                    - type
                then:
                  properties:
                    data:
                      type: object
                      required:
                        - op
                      properties:
                        op:
                          description: >-
                            OpenAPI operationId (camelCase); also the `op` of WS
                            / socket.io `call`.
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*$
                        params:
                          type: object
                        body: {}
                        ifMatch:
                          type: string
                      additionalProperties: true
            additionalProperties: true
            examples:
              - type: event
                id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts: '2026-10-19T12:00:00.123Z'
                topic: venues/default/players/main
                data:
                  seq: 48213
                  kind: player.state
                  resource:
                    status: playing
                    position: 12.5
            $defs:
              knownType:
                enum:
                  - hello
                  - welcome
                  - subscribe
                  - unsubscribe
                  - call
                  - result
                  - event
                  - error
                  - resync
                  - ping
                  - pong
                  - bye
              eventData:
                type: object
                required:
                  - seq
                  - kind
                properties:
                  seq:
                    type: integer
                    minimum: 0
                    description: >-
                      Per-server monotonically increasing sequence (resume with
                      sinceSeq).
                  kind:
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                    description: Event kind from events/topics.yaml, e.g. player.state.
                  resource:
                    description: Full new representation.
                  patch:
                    type: object
                    description: JSON merge patch (high-rate kinds).
                  revision:
                    description: >-
                      Monotonic resource revision; the strong ETag is derived
                      from it.
                    type: integer
                    minimum: 0
                not:
                  required:
                    - resource
                    - patch
                additionalProperties: true
              callData:
                type: object
                required:
                  - op
                properties:
                  op:
                    description: >-
                      OpenAPI operationId (camelCase); also the `op` of WS /
                      socket.io `call`.
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*$
                  params:
                    type: object
                  body: {}
                  ifMatch:
                    type: string
                additionalProperties: true
        required:
          - type
          - id
          - ts
          - data
        properties:
          type:
            const: error
          data:
            $schema: https://json-schema.org/draft/2020-12/schema
            $id: >-
              https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
            $comment: >-
              NativeMindNONC — freedome_contract (see LICENSE). RFC 9457 problem
              details with the Freedome `code` catalogue, 02e §3.3. Also the
              `data` of WS `error`, the socket.io ack error and GraphQL
              errors[].extensions.problem. The catalogue is open: unknown codes
              are allowed; known codes are bound to their HTTP status.
            title: Problem details
            type: object
            required:
              - type
              - title
              - code
            properties:
              type:
                type: string
                format: uri
                description: >-
                  https://freedome.nativemind.us/problems/<code> for catalogue
                  codes.
              title:
                type: string
                minLength: 1
              status:
                type: integer
                minimum: 100
                maximum: 599
              detail:
                type: string
              instance:
                type: string
                format: uri-reference
              code:
                description: >-
                  Stable machine key; also the last path segment of `type`. Open
                  set: see knownCode.
                type: string
                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
              traceId:
                type: string
                pattern: ^[0-9a-f]{16,32}$
              errors:
                type: array
                items:
                  type: object
                  required:
                    - pointer
                    - detail
                  properties:
                    pointer:
                      type: string
                      format: json-pointer
                    detail:
                      type: string
                    code:
                      description: >-
                        Stable machine key; also the last path segment of
                        `type`. Open set: see knownCode.
                      type: string
                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                  additionalProperties: true
            allOf:
              - if:
                  properties:
                    code:
                      const: validation-failed
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 422
              - if:
                  properties:
                    code:
                      const: not-found
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 404
              - if:
                  properties:
                    code:
                      const: conflict
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 409
              - if:
                  properties:
                    code:
                      const: precondition-failed
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 412
              - if:
                  properties:
                    code:
                      const: precondition-required
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 428
              - if:
                  properties:
                    code:
                      const: unauthenticated
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 401
              - if:
                  properties:
                    code:
                      const: forbidden
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 403
              - if:
                  properties:
                    code:
                      const: rate-limited
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 429
              - if:
                  properties:
                    code:
                      const: payload-too-large
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 413
              - if:
                  properties:
                    code:
                      const: unsupported-format
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 415
              - if:
                  properties:
                    code:
                      const: engine-unavailable
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 503
              - if:
                  properties:
                    code:
                      const: engine-incompatible
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 503
              - if:
                  properties:
                    code:
                      const: degraded
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 503
              - if:
                  properties:
                    code:
                      const: upload-checksum-mismatch
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 422
              - if:
                  properties:
                    code:
                      const: legacy-unsupported
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 501
              - if:
                  properties:
                    code:
                      const: internal
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 500
              - if:
                  properties:
                    code:
                      const: clock-unlocked
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 409
              - if:
                  properties:
                    code:
                      const: not-configured
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 503
              - if:
                  properties:
                    code:
                      const: authorization-pending
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 400
              - if:
                  properties:
                    code:
                      const: slow-down
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 400
              - if:
                  properties:
                    code:
                      const: access-denied
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 403
              - if:
                  properties:
                    code:
                      const: expired-token
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 400
              - if:
                  properties:
                    code:
                      const: token-reused
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 401
              - if:
                  properties:
                    code:
                      const: idempotency-key-reused
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 409
              - if:
                  properties:
                    code:
                      const: idempotency-in-progress
                  required:
                    - code
                then:
                  properties:
                    status:
                      const: 409
            additionalProperties: true
            examples:
              - type: https://freedome.nativemind.us/problems/engine-unavailable
                title: Visual engine unavailable
                status: 503
                detail: >-
                  freedome-engined not reachable at
                  unix:/run/freedome/engine.sock
                instance: /api/v1/venues/default/players/main/play
                code: engine-unavailable
                traceId: 4bf92f3577b34da6a3ce929d0e0e4736
            $defs:
              knownCode:
                enum:
                  - validation-failed
                  - not-found
                  - conflict
                  - precondition-failed
                  - precondition-required
                  - unauthenticated
                  - forbidden
                  - rate-limited
                  - payload-too-large
                  - unsupported-format
                  - engine-unavailable
                  - engine-incompatible
                  - degraded
                  - job-failed
                  - upload-checksum-mismatch
                  - legacy-unsupported
                  - internal
                  - clock-unlocked
                  - not-configured
                  - authorization-pending
                  - slow-down
                  - access-denied
                  - expired-token
                  - token-reused
                  - idempotency-key-reused
                  - idempotency-in-progress
              code:
                description: >-
                  Stable machine key; also the last path segment of `type`. Open
                  set: see knownCode.
                type: string
                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
              fieldError:
                type: object
                required:
                  - pointer
                  - detail
                properties:
                  pointer:
                    type: string
                    format: json-pointer
                  detail:
                    type: string
                  code:
                    description: >-
                      Stable machine key; also the last path segment of `type`.
                      Open set: see knownCode.
                    type: string
                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                additionalProperties: true
      examples:
        - name: forbidden
          payload:
            type: error
            id: 0192f3a4-5b6c-7d8e-9f01-23456789abdb
            ts: '2026-10-19T12:00:01.050Z'
            replyTo: 0192f3a4-5b6c-7d8e-9f01-23456789abd7
            data:
              type: https://freedome.nativemind.us/problems/forbidden
              title: Forbidden
              status: 403
              code: forbidden
              detail: missing scope displays:control
    event:
      name: event
      title: event (S→C)
      payload:
        description: S→C event (02e §7.1).
        type: object
        allOf:
          - $schema: https://json-schema.org/draft/2020-12/schema
            $id: >-
              https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
            $comment: >-
              NativeMindNONC — freedome_contract (see LICENSE). Message envelope
              for plain WS (sub-protocol freedome.v1), socket.io `event`
              payload, GraphQL Event and OSC JSON events, 02e §7.1 / §8.1.
              `type`, `id`, `ts`, `data` on every message; `topic` on events;
              `replyTo` on result / error replies. Message types are open
              (readers ignore unknown ones).
            title: Message envelope
            type: object
            required:
              - type
              - id
              - ts
              - data
            properties:
              type:
                description: >-
                  Known: hello, welcome, subscribe, unsubscribe, call, result,
                  event, error, resync, ping, pong, bye.
                type: string
                pattern: ^[a-z][a-zA-Z0-9]*$
              id:
                description: Unique per message; the idempotency key of `call`.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              ts:
                description: RFC 3339 UTC with milliseconds, e.g. 2026-10-19T12:00:00.000Z.
                type: string
                format: date-time
                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
              topic:
                description: >-
                  Concrete event topic (02e §7.2), e.g.
                  venues/default/players/main.
                type: string
                maxLength: 512
                pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
              replyTo:
                description: >-
                  Server-owned resource id: UUIDv7, lowercase, sortable by
                  creation time.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              data: {}
            allOf:
              - if:
                  properties:
                    type:
                      const: event
                  required:
                    - type
                then:
                  required:
                    - topic
                  properties:
                    data:
                      type: object
                      required:
                        - seq
                        - kind
                      properties:
                        seq:
                          type: integer
                          minimum: 0
                          description: >-
                            Per-server monotonically increasing sequence (resume
                            with sinceSeq).
                        kind:
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                          description: >-
                            Event kind from events/topics.yaml, e.g.
                            player.state.
                        resource:
                          description: Full new representation.
                        patch:
                          type: object
                          description: JSON merge patch (high-rate kinds).
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                      not:
                        required:
                          - resource
                          - patch
                      additionalProperties: true
              - if:
                  properties:
                    type:
                      const: result
                  required:
                    - type
                then:
                  required:
                    - replyTo
              - if:
                  properties:
                    type:
                      const: error
                  required:
                    - type
                then:
                  properties:
                    data:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). RFC
                        9457 problem details with the Freedome `code` catalogue,
                        02e §3.3. Also the `data` of WS `error`, the socket.io
                        ack error and GraphQL errors[].extensions.problem. The
                        catalogue is open: unknown codes are allowed; known
                        codes are bound to their HTTP status.
                      title: Problem details
                      type: object
                      required:
                        - type
                        - title
                        - code
                      properties:
                        type:
                          type: string
                          format: uri
                          description: >-
                            https://freedome.nativemind.us/problems/<code> for
                            catalogue codes.
                        title:
                          type: string
                          minLength: 1
                        status:
                          type: integer
                          minimum: 100
                          maximum: 599
                        detail:
                          type: string
                        instance:
                          type: string
                          format: uri-reference
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        traceId:
                          type: string
                          pattern: ^[0-9a-f]{16,32}$
                        errors:
                          type: array
                          items:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                      allOf:
                        - if:
                            properties:
                              code:
                                const: validation-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: not-found
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 404
                        - if:
                            properties:
                              code:
                                const: conflict
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: precondition-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 412
                        - if:
                            properties:
                              code:
                                const: precondition-required
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 428
                        - if:
                            properties:
                              code:
                                const: unauthenticated
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: forbidden
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: rate-limited
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 429
                        - if:
                            properties:
                              code:
                                const: payload-too-large
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 413
                        - if:
                            properties:
                              code:
                                const: unsupported-format
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 415
                        - if:
                            properties:
                              code:
                                const: engine-unavailable
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: engine-incompatible
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: degraded
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: upload-checksum-mismatch
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: legacy-unsupported
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 501
                        - if:
                            properties:
                              code:
                                const: internal
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 500
                        - if:
                            properties:
                              code:
                                const: clock-unlocked
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: not-configured
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: authorization-pending
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: slow-down
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: access-denied
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: expired-token
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: token-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: idempotency-key-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: idempotency-in-progress
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                      additionalProperties: true
                      examples:
                        - type: >-
                            https://freedome.nativemind.us/problems/engine-unavailable
                          title: Visual engine unavailable
                          status: 503
                          detail: >-
                            freedome-engined not reachable at
                            unix:/run/freedome/engine.sock
                          instance: /api/v1/venues/default/players/main/play
                          code: engine-unavailable
                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                      $defs:
                        knownCode:
                          enum:
                            - validation-failed
                            - not-found
                            - conflict
                            - precondition-failed
                            - precondition-required
                            - unauthenticated
                            - forbidden
                            - rate-limited
                            - payload-too-large
                            - unsupported-format
                            - engine-unavailable
                            - engine-incompatible
                            - degraded
                            - job-failed
                            - upload-checksum-mismatch
                            - legacy-unsupported
                            - internal
                            - clock-unlocked
                            - not-configured
                            - authorization-pending
                            - slow-down
                            - access-denied
                            - expired-token
                            - token-reused
                            - idempotency-key-reused
                            - idempotency-in-progress
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        fieldError:
                          type: object
                          required:
                            - pointer
                            - detail
                          properties:
                            pointer:
                              type: string
                              format: json-pointer
                            detail:
                              type: string
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          additionalProperties: true
              - if:
                  properties:
                    type:
                      const: call
                  required:
                    - type
                then:
                  properties:
                    data:
                      type: object
                      required:
                        - op
                      properties:
                        op:
                          description: >-
                            OpenAPI operationId (camelCase); also the `op` of WS
                            / socket.io `call`.
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*$
                        params:
                          type: object
                        body: {}
                        ifMatch:
                          type: string
                      additionalProperties: true
            additionalProperties: true
            examples:
              - type: event
                id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts: '2026-10-19T12:00:00.123Z'
                topic: venues/default/players/main
                data:
                  seq: 48213
                  kind: player.state
                  resource:
                    status: playing
                    position: 12.5
            $defs:
              knownType:
                enum:
                  - hello
                  - welcome
                  - subscribe
                  - unsubscribe
                  - call
                  - result
                  - event
                  - error
                  - resync
                  - ping
                  - pong
                  - bye
              eventData:
                type: object
                required:
                  - seq
                  - kind
                properties:
                  seq:
                    type: integer
                    minimum: 0
                    description: >-
                      Per-server monotonically increasing sequence (resume with
                      sinceSeq).
                  kind:
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                    description: Event kind from events/topics.yaml, e.g. player.state.
                  resource:
                    description: Full new representation.
                  patch:
                    type: object
                    description: JSON merge patch (high-rate kinds).
                  revision:
                    description: >-
                      Monotonic resource revision; the strong ETag is derived
                      from it.
                    type: integer
                    minimum: 0
                not:
                  required:
                    - resource
                    - patch
                additionalProperties: true
              callData:
                type: object
                required:
                  - op
                properties:
                  op:
                    description: >-
                      OpenAPI operationId (camelCase); also the `op` of WS /
                      socket.io `call`.
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*$
                  params:
                    type: object
                  body: {}
                  ifMatch:
                    type: string
                additionalProperties: true
        required:
          - type
          - id
          - ts
          - data
          - topic
        properties:
          type:
            const: event
          data:
            $schema: https://json-schema.org/draft/2020-12/schema
            $id: >-
              https://freedome.nativemind.us/schemas/api/1.0/event-kinds.schema.json
            $comment: >-
              NativeMindNONC — freedome_contract (see LICENSE). `data` of an
              event message (02e §7.1) with the payload bound to its `kind`
              (events/topics.yaml). v1: every kind of the topic tree (02e §7.2 +
              scenarios, parameters, nodes, devices). Unknown kinds stay valid
              (open catalogue, 02e §13).
            title: Event data by kind
            type: object
            allOf:
              - type: object
                required:
                  - seq
                  - kind
                properties:
                  seq:
                    type: integer
                    minimum: 0
                    description: >-
                      Per-server monotonically increasing sequence (resume with
                      sinceSeq).
                  kind:
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                    description: Event kind from events/topics.yaml, e.g. player.state.
                  resource:
                    description: Full new representation.
                  patch:
                    type: object
                    description: JSON merge patch (high-rate kinds).
                  revision:
                    description: >-
                      Monotonic resource revision; the strong ETag is derived
                      from it.
                    type: integer
                    minimum: 0
                not:
                  required:
                    - resource
                    - patch
                additionalProperties: true
              - if:
                  properties:
                    kind:
                      const: system.info
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/api/1.0/info.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). GET
                        /api/v1/info (02e §5.1) and the unversioned /health,
                        /ready bodies ($defs/health).
                      title: Server info
                      type: object
                      required:
                        - product
                        - serverVersion
                        - instanceId
                        - apiVersions
                      properties:
                        product:
                          anyOf:
                            - enum:
                                - freedome-mediaserver
                                - freedome-cloud
                            - type: string
                              minLength: 1
                        serverVersion:
                          description: Semantic version 2.0.0.
                          type: string
                          pattern: >-
                            ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$
                        contractVersion:
                          description: Semantic version 2.0.0.
                          type: string
                          pattern: >-
                            ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$
                        instanceId:
                          description: >-
                            Server-owned resource id: UUIDv7, lowercase,
                            sortable by creation time.
                          type: string
                          pattern: >-
                            ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                          examples:
                            - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                        name:
                          type: string
                        apiVersions:
                          type: array
                          minItems: 1
                          items:
                            type: string
                            pattern: ^v\d+$
                        legacyProfile:
                          type: boolean
                          description: >-
                            legacy (flutter_freedome 3.0 / razvivalka) listener
                            enabled
                        transports:
                          type: object
                          properties:
                            rest:
                              type: object
                              properties:
                                basePath:
                                  type: string
                              additionalProperties: true
                            graphql:
                              type: object
                              properties:
                                enabled:
                                  type: boolean
                                path:
                                  type: string
                              additionalProperties: true
                            ws:
                              type: object
                              properties:
                                path:
                                  type: string
                                subprotocol:
                                  type: string
                              additionalProperties: true
                            socketio:
                              type: object
                              properties:
                                path:
                                  type: string
                                namespace:
                                  type: string
                              additionalProperties: true
                            osc:
                              type: object
                              properties:
                                udpIn:
                                  type: integer
                                  minimum: 1
                                  maximum: 65535
                                udpOut:
                                  type: integer
                                  minimum: 1
                                  maximum: 65535
                                tcp:
                                  type: integer
                                  minimum: 1
                                  maximum: 65535
                              additionalProperties: true
                          additionalProperties: true
                        auth:
                          type: object
                          properties:
                            methods:
                              type: array
                              items:
                                anyOf:
                                  - enum:
                                      - password
                                      - apiKey
                                      - pairing
                                      - cloud
                                      - anonymous
                                  - type: string
                          additionalProperties: true
                        venues:
                          type: array
                          items:
                            type: object
                            required:
                              - id
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              title:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). Localised text map {"en":…,"ru":…},
                                  02e §3.1 (as .dome meta.title).
                                title: Localised text
                                type: object
                                minProperties: 1
                                propertyNames:
                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                additionalProperties:
                                  type: string
                                examples:
                                  - en: Intro
                                    ru: Вступление
                                $defs:
                                  textOrI18n:
                                    description: >-
                                      Plain string (treated as `en`) or a
                                      localised map. (map branch = the root
                                      schema, inlined for tools that mis-handle
                                      self references)
                                    anyOf:
                                      - type: string
                                      - type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                              default:
                                type: boolean
                              status:
                                type: string
                            additionalProperties: true
                        capabilities:
                          description: >-
                            Engines, audio modes, display types, test patterns,
                            gateways … (open object; clients ignore unknown
                            keys).
                          type: object
                          additionalProperties: true
                        links:
                          type: object
                          additionalProperties:
                            type: string
                            format: uri-reference
                      additionalProperties: true
                      $defs:
                        health:
                          description: GET /health and /ready (unversioned, anonymous).
                          type: object
                          required:
                            - status
                          properties:
                            status:
                              enum:
                                - ok
                                - degraded
                                - down
                            checks:
                              type: object
                              additionalProperties:
                                type: object
                                required:
                                  - status
                                properties:
                                  status:
                                    enum:
                                      - ok
                                      - degraded
                                      - down
                                  detail:
                                    type: string
                                additionalProperties: false
                          additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: system.health
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: GET /health and /ready (unversioned, anonymous).
                      type: object
                      required:
                        - status
                      properties:
                        status:
                          enum:
                            - ok
                            - degraded
                            - down
                        checks:
                          type: object
                          additionalProperties:
                            type: object
                            required:
                              - status
                            properties:
                              status:
                                enum:
                                  - ok
                                  - degraded
                                  - down
                              detail:
                                type: string
                            additionalProperties: false
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: engine.status
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      type: object
                      required:
                        - name
                        - status
                      properties:
                        name:
                          anyOf:
                            - enum:
                                - visual
                                - anantasound
                                - anantadigital
                            - type: string
                              pattern: ^[a-z][a-z0-9_-]{0,31}(@[A-Za-z0-9._-]{1,64})?$
                        status:
                          enum:
                            - up
                            - degraded
                            - down
                            - incompatible
                        version:
                          type: string
                        protocol:
                          type: string
                          examples:
                            - freedome.engine.v1
                        capabilities:
                          type: array
                          items:
                            type: string
                        message:
                          type: string
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: engine.metrics
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: ≤ 1 Hz; any subset (patch) of the metrics.
                      type: object
                      properties:
                        fps:
                          type: number
                          minimum: 0
                        frameTimeMs:
                          type: number
                          minimum: 0
                        droppedFrames:
                          type: integer
                          minimum: 0
                        gpuLoad:
                          type: number
                          minimum: 0
                          maximum: 1
                        cpuLoad:
                          type: number
                          minimum: 0
                          maximum: 1
                        temperatureC:
                          type: number
                      patternProperties:
                        ^x-: true
                      additionalProperties: false
                    patch:
                      description: ≤ 1 Hz; any subset (patch) of the metrics.
                      type: object
                      properties:
                        fps:
                          type: number
                          minimum: 0
                        frameTimeMs:
                          type: number
                          minimum: 0
                        droppedFrames:
                          type: integer
                          minimum: 0
                        gpuLoad:
                          type: number
                          minimum: 0
                          maximum: 1
                        cpuLoad:
                          type: number
                          minimum: 0
                          maximum: 1
                        temperatureC:
                          type: number
                      patternProperties:
                        ^x-: true
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: engine.error
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). RFC
                        9457 problem details with the Freedome `code` catalogue,
                        02e §3.3. Also the `data` of WS `error`, the socket.io
                        ack error and GraphQL errors[].extensions.problem. The
                        catalogue is open: unknown codes are allowed; known
                        codes are bound to their HTTP status.
                      title: Problem details
                      type: object
                      required:
                        - type
                        - title
                        - code
                      properties:
                        type:
                          type: string
                          format: uri
                          description: >-
                            https://freedome.nativemind.us/problems/<code> for
                            catalogue codes.
                        title:
                          type: string
                          minLength: 1
                        status:
                          type: integer
                          minimum: 100
                          maximum: 599
                        detail:
                          type: string
                        instance:
                          type: string
                          format: uri-reference
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        traceId:
                          type: string
                          pattern: ^[0-9a-f]{16,32}$
                        errors:
                          type: array
                          items:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                      allOf:
                        - if:
                            properties:
                              code:
                                const: validation-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: not-found
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 404
                        - if:
                            properties:
                              code:
                                const: conflict
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: precondition-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 412
                        - if:
                            properties:
                              code:
                                const: precondition-required
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 428
                        - if:
                            properties:
                              code:
                                const: unauthenticated
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: forbidden
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: rate-limited
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 429
                        - if:
                            properties:
                              code:
                                const: payload-too-large
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 413
                        - if:
                            properties:
                              code:
                                const: unsupported-format
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 415
                        - if:
                            properties:
                              code:
                                const: engine-unavailable
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: engine-incompatible
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: degraded
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: upload-checksum-mismatch
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: legacy-unsupported
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 501
                        - if:
                            properties:
                              code:
                                const: internal
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 500
                        - if:
                            properties:
                              code:
                                const: clock-unlocked
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: not-configured
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: authorization-pending
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: slow-down
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: access-denied
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: expired-token
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: token-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: idempotency-key-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: idempotency-in-progress
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                      additionalProperties: true
                      examples:
                        - type: >-
                            https://freedome.nativemind.us/problems/engine-unavailable
                          title: Visual engine unavailable
                          status: 503
                          detail: >-
                            freedome-engined not reachable at
                            unix:/run/freedome/engine.sock
                          instance: /api/v1/venues/default/players/main/play
                          code: engine-unavailable
                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                      $defs:
                        knownCode:
                          enum:
                            - validation-failed
                            - not-found
                            - conflict
                            - precondition-failed
                            - precondition-required
                            - unauthenticated
                            - forbidden
                            - rate-limited
                            - payload-too-large
                            - unsupported-format
                            - engine-unavailable
                            - engine-incompatible
                            - degraded
                            - job-failed
                            - upload-checksum-mismatch
                            - legacy-unsupported
                            - internal
                            - clock-unlocked
                            - not-configured
                            - authorization-pending
                            - slow-down
                            - access-denied
                            - expired-token
                            - token-reused
                            - idempotency-key-reused
                            - idempotency-in-progress
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        fieldError:
                          type: object
                          required:
                            - pointer
                            - detail
                          properties:
                            pointer:
                              type: string
                              format: json-pointer
                            detail:
                              type: string
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          additionalProperties: true
              - if:
                  properties:
                    kind:
                      const: venue.updated
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/api/1.0/venue.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). Venue
                        resource (02e §4, §5.2) = .dome 1.1 venue manifest
                        without format / kind ($defs reused from dome/1.1) +
                        server fields. Root = GET representation.
                      title: Venue
                      allOf:
                        - type: object
                          allOf:
                            - description: >-
                                Venue content shared by GET / PUT / POST: the
                                .dome venue sections.
                              type: object
                              properties:
                                meta:
                                  type: object
                                  required:
                                    - id
                                    - title
                                  properties:
                                    id:
                                      description: >-
                                        Stable document id (UUID, lowercase);
                                        the venue / show id on import (02e
                                        §3.2).
                                      type: string
                                      pattern: >-
                                        ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                    title:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Localised text map
                                        {"en":…,"ru":…}, 02e §3.1 (as .dome
                                        meta.title).
                                      title: Localised text
                                      type: object
                                      minProperties: 1
                                      propertyNames:
                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                      additionalProperties:
                                        type: string
                                      examples:
                                        - en: Intro
                                          ru: Вступление
                                      $defs:
                                        textOrI18n:
                                          description: >-
                                            Plain string (treated as `en`) or a
                                            localised map. (map branch = the root
                                            schema, inlined for tools that
                                            mis-handle self references)
                                          anyOf:
                                            - type: string
                                            - type: object
                                              minProperties: 1
                                              propertyNames:
                                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                              additionalProperties:
                                                type: string
                                              examples:
                                                - en: Intro
                                                  ru: Вступление
                                    description:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Localised text map
                                        {"en":…,"ru":…}, 02e §3.1 (as .dome
                                        meta.title).
                                      title: Localised text
                                      type: object
                                      minProperties: 1
                                      propertyNames:
                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                      additionalProperties:
                                        type: string
                                      examples:
                                        - en: Intro
                                          ru: Вступление
                                      $defs:
                                        textOrI18n:
                                          description: >-
                                            Plain string (treated as `en`) or a
                                            localised map. (map branch = the root
                                            schema, inlined for tools that
                                            mis-handle self references)
                                          anyOf:
                                            - type: string
                                            - type: object
                                              minProperties: 1
                                              propertyNames:
                                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                              additionalProperties:
                                                type: string
                                              examples:
                                                - en: Intro
                                                  ru: Вступление
                                    authors:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - name
                                        properties:
                                          name:
                                            type: string
                                            minLength: 1
                                          email:
                                            type: string
                                            format: email
                                          url:
                                            type: string
                                            format: uri
                                          role:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    created:
                                      type: string
                                      format: date-time
                                    modified:
                                      type: string
                                      format: date-time
                                    generator:
                                      type: object
                                      required:
                                        - name
                                      properties:
                                        name:
                                          type: string
                                          minLength: 1
                                        version:
                                          type: string
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    license:
                                      type: string
                                      minLength: 1
                                      default: NativeMindNONC
                                    tags:
                                      type: array
                                      items:
                                        type: string
                                        minLength: 1
                                        maxLength: 64
                                      uniqueItems: true
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                dome:
                                  description: >-
                                    Dome geometry (01b §4.1). Right-handed,
                                    metres, degrees; +Y zenith, -Z front.
                                  type: object
                                  required:
                                    - mode
                                    - shape
                                    - radius
                                  properties:
                                    mode:
                                      anyOf:
                                        - enum:
                                            - classical
                                            - quantum
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    shape:
                                      anyOf:
                                        - enum:
                                            - hemisphere
                                            - sphere
                                            - truncated
                                            - cylinder
                                            - cylinder_outer
                                            - cone
                                            - pyramid
                                            - geodesic
                                            - flat
                                            - multiwall
                                            - cave
                                            - volumetric
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    radius:
                                      type: number
                                      exclusiveMinimum: 0
                                      description: m
                                    tilt:
                                      type: number
                                      minimum: -90
                                      maximum: 90
                                      description: ° forward tilt of the dome axis
                                    truncation:
                                      type: number
                                      minimum: -90
                                      maximum: 90
                                      description: >-
                                        ° below the spring line projected
                                        (negative = cut off)
                                    orientation:
                                      anyOf:
                                        - enum:
                                            - upright
                                            - inverted
                                            - tilted
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    springLineHeight:
                                      type: number
                                      description: m above floor
                                    surface:
                                      type: object
                                      properties:
                                        gain:
                                          type: number
                                          minimum: 0
                                        material:
                                          type: string
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    seating:
                                      anyOf:
                                        - enum:
                                            - unidirectional
                                            - concentric
                                            - free
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    sweetSpot:
                                      type: array
                                      items:
                                        type: number
                                      minItems: 3
                                      maxItems: 3
                                      description: '[x, y, z], metres, dome frame (01b §3).'
                                    angularBase:
                                      type: integer
                                      minimum: 1
                                      description: >-
                                        Quantum mode only: presentation base of
                                        the circle (e.g. 108); values stay in
                                        degrees.
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                  if:
                                    required:
                                      - angularBase
                                  then:
                                    properties:
                                      mode:
                                        const: quantum
                                displays:
                                  type: array
                                  items:
                                    description: >-
                                      Visual device (01b §4.2): projector (incl.
                                      fisheye), LED, prism unit, smartphone +
                                      lens, NDI output.
                                    type: object
                                    required:
                                      - id
                                      - type
                                    properties:
                                      id:
                                        description: Document-scoped id (02e §3.2).
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      name:
                                        type: string
                                      type:
                                        anyOf:
                                          - enum:
                                              - projector
                                              - led
                                              - prism_unit
                                              - smartphone_lens
                                              - ndi_output
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      model:
                                        type: object
                                        properties:
                                          vendor:
                                            type: string
                                          product:
                                            type: string
                                          variant:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      resolution:
                                        type: array
                                        items:
                                          type: integer
                                          minimum: 1
                                        minItems: 2
                                        maxItems: 2
                                        description: '[width, height] or [cols, rows].'
                                      refreshRate:
                                        type: number
                                        exclusiveMinimum: 0
                                        description: Hz
                                      lens:
                                        type: object
                                        required:
                                          - kind
                                        properties:
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - fisheye
                                                  - standard
                                                  - pyramid
                                                  - prism
                                                  - equirect
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          fov:
                                            type: number
                                            exclusiveMinimum: 0
                                            maximum: 360
                                            description: °
                                          throwRatio:
                                            type:
                                              - number
                                              - 'null'
                                            exclusiveMinimum: 0
                                          shift:
                                            description: >-
                                              lens shift [x, y] as a fraction of the
                                              image size
                                            type: array
                                            items:
                                              type: number
                                            minItems: 2
                                            maxItems: 2
                                          distortion:
                                            description: '1.1 (02b E4): lens distortion model.'
                                            type: object
                                            required:
                                              - model
                                            properties:
                                              model:
                                                anyOf:
                                                  - enum:
                                                      - brown-conrady
                                                      - fisheye-equidistant
                                                      - fisheye-equisolid
                                                      - fisheye-poly
                                                      - radial
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              coefficients:
                                                type: array
                                                items:
                                                  type: number
                                                maxItems: 16
                                                description: >-
                                                  brown-conrady [k1,k2,k3,p1,p2];
                                                  fisheye-poly [k1..k4]; radial [k1,k2,k3]
                                                  (01b §4.2.1)
                                              centre:
                                                type: array
                                                items:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 1
                                                minItems: 2
                                                maxItems: 2
                                                description: >-
                                                  distortion centre, normalised image
                                                  coordinates
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          profileRef:
                                            description: >-
                                              1.1 (02b E4): lens profile id shipped as
                                              data (engine
                                              data/lens_profiles/<id>.json), e.g.
                                              sh001.
                                            type: string
                                            pattern: ^[a-z0-9][a-z0-9._-]{0,63}$
                                          curvature:
                                            description: >-
                                              1.1 (EN, curved LED walls): the display
                                              surface is a cylinder (axis vertical =
                                              curved horizontally, the usual curved
                                              wall) or a sphere section; absent =
                                              flat.
                                            type: object
                                            required:
                                              - radius
                                            properties:
                                              radius:
                                                type: number
                                                exclusiveMinimum: 0
                                                description: m, curvature radius of the panel surface
                                              axis:
                                                anyOf:
                                                  - enum:
                                                      - vertical
                                                      - horizontal
                                                      - spherical
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                default: vertical
                                              concave:
                                                type: boolean
                                                default: true
                                                description: true = curved towards the audience
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      pose:
                                        type: object
                                        properties:
                                          position:
                                            type: array
                                            items:
                                              type: number
                                            minItems: 3
                                            maxItems: 3
                                            description: '[x, y, z], metres, dome frame (01b §3).'
                                          rotation:
                                            type: array
                                            items:
                                              type: number
                                              minimum: -1
                                              maximum: 1
                                            minItems: 4
                                            maxItems: 4
                                            description: Rotation quaternion [x, y, z, w].
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      output:
                                        type: object
                                        properties:
                                          host:
                                            type: string
                                            minLength: 1
                                          connector:
                                            type: string
                                            minLength: 1
                                            description: e.g. DP-1, HDMI-1, stream:<displayId>
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      colour:
                                        type: object
                                        properties:
                                          gamut:
                                            anyOf:
                                              - enum:
                                                  - rec709
                                                  - dci-p3
                                                  - display-p3
                                                  - rec2020
                                                  - srgb
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          gamma:
                                            type: number
                                            exclusiveMinimum: 0
                                          whitePoint:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      stereo:
                                        oneOf:
                                          - type: 'null'
                                          - type: object
                                            required:
                                              - eye
                                            properties:
                                              eye:
                                                enum:
                                                  - left
                                                  - right
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                      optics:
                                        description: >-
                                          1.1 (02a V12, replaces
                                          x-freedome-optics): per-face layout of
                                          prism / pyramid optics on the display
                                          frame.
                                        type: object
                                        required:
                                          - faces
                                        properties:
                                          faces:
                                            enum:
                                              - 1
                                              - 3
                                              - 4
                                              - 6
                                          faceAngle:
                                            type: number
                                            exclusiveMinimum: 0
                                            exclusiveMaximum: 90
                                            description: ° between a face and the screen plane
                                          viewports:
                                            type: array
                                            maxItems: 6
                                            items:
                                              type: object
                                              required:
                                                - face
                                                - rect
                                              properties:
                                                face:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 5
                                                  description: 0 = front, clockwise from above
                                                rect:
                                                  description: >-
                                                    Normalised [x, y, w, h] of the display
                                                    frame (0..1, origin top-left, y down;
                                                    01b §3).
                                                  type: array
                                                  items:
                                                    type: number
                                                    minimum: 0
                                                    maximum: 1
                                                  minItems: 4
                                                  maxItems: 4
                                                rotation:
                                                  type: number
                                                  minimum: -360
                                                  maximum: 360
                                                  description: ° clockwise
                                                mirror:
                                                  enum:
                                                    - none
                                                    - horizontal
                                                    - vertical
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          activeRegion:
                                            description: >-
                                              Normalised [x, y, w, h] of the display
                                              frame (0..1, origin top-left, y down;
                                              01b §3).
                                            type: array
                                            items:
                                              type: number
                                              minimum: 0
                                              maximum: 1
                                            minItems: 4
                                            maxItems: 4
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      prism:
                                        description: >-
                                          1.1 (02b E4): physical prism / pyramid
                                          geometry (engine PrismGeometry).
                                        type: object
                                        required:
                                          - faces
                                        properties:
                                          faces:
                                            type: integer
                                            minimum: 1
                                            maximum: 12
                                          baseMm:
                                            type: number
                                            exclusiveMinimum: 0
                                          heightMm:
                                            type: number
                                            exclusiveMinimum: 0
                                          faceAngle:
                                            type: number
                                            exclusiveMinimum: 0
                                            exclusiveMaximum: 90
                                          refractiveIndex:
                                            type: number
                                            minimum: 1
                                          solid:
                                            type: boolean
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                calibration:
                                  description: >-
                                    Per-display calibration (01b §4.3); keys of
                                    `displays` are display ids (checked by the
                                    codecs).
                                  type: object
                                  properties:
                                    displays:
                                      type: object
                                      propertyNames:
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                      additionalProperties:
                                        type: object
                                        properties:
                                          warp:
                                            type: object
                                            required:
                                              - file
                                            properties:
                                              file:
                                                description: FDMESH file (01b §5)
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              kind:
                                                anyOf:
                                                  - enum:
                                                      - uv-grid
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              size:
                                                type: array
                                                items:
                                                  type: integer
                                                  minimum: 1
                                                minItems: 2
                                                maxItems: 2
                                                description: '[width, height] or [cols, rows].'
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          blend:
                                            type: object
                                            required:
                                              - file
                                            properties:
                                              file:
                                                description: 16-bit greyscale PNG
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              bitDepth:
                                                enum:
                                                  - 8
                                                  - 16
                                              gamma:
                                                type: number
                                                exclusiveMinimum: 0
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          colour:
                                            type: object
                                            properties:
                                              lut:
                                                description: Adobe / Resolve .cube 3D LUT
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              blackLevel:
                                                type: number
                                                minimum: 0
                                                maximum: 1
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          report:
                                            type: object
                                            properties:
                                              method:
                                                anyOf:
                                                  - enum:
                                                      - camera-homography
                                                      - manual
                                                      - imported
                                                      - model
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              date:
                                                type: string
                                                format: date-time
                                              meanError:
                                                type: number
                                                minimum: 0
                                              maxError:
                                                type: number
                                                minimum: 0
                                              unit:
                                                anyOf:
                                                  - enum:
                                                      - px
                                                      - deg
                                                      - mm
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              file:
                                                description: >-
                                                  Entry path inside the container:
                                                  relative, `/`-separated, no `..`
                                                  segment, no backslash, no NUL.
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                audio:
                                  description: AnantaSound layout (01b §4.4).
                                  type: object
                                  properties:
                                    ambisonics:
                                      type: object
                                      properties:
                                        order:
                                          type: integer
                                          minimum: 0
                                          maximum: 7
                                        normalisation:
                                          anyOf:
                                            - enum:
                                                - SN3D
                                                - N3D
                                                - FuMa
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        channelOrder:
                                          anyOf:
                                            - enum:
                                                - ACN
                                                - FuMa
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    decoder:
                                      type: object
                                      properties:
                                        kind:
                                          anyOf:
                                            - enum:
                                                - allrad
                                                - sad
                                                - mmd
                                                - epad
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        dualBand:
                                          type: boolean
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    speakers:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - azimuth
                                          - elevation
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          azimuth:
                                            type: number
                                            minimum: -360
                                            maximum: 360
                                            description: ° (0 = front, clockwise from above)
                                          elevation:
                                            type: number
                                            minimum: -90
                                            maximum: 90
                                            description: ° (0 = spring line)
                                          distance:
                                            type: number
                                            exclusiveMinimum: 0
                                            description: m
                                          channel:
                                            type: integer
                                            minimum: 1
                                          delayMs:
                                            type: number
                                            minimum: 0
                                          gainDb:
                                            type: number
                                            minimum: -144
                                            maximum: 24
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - fullrange
                                                  - subwoofer
                                                  - satellite
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          lfe:
                                            type: boolean
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    roomCorrection:
                                      type: object
                                      required:
                                        - file
                                      properties:
                                        file:
                                          description: >-
                                            Entry path inside the container:
                                            relative, `/`-separated, no `..`
                                            segment, no backslash, no NUL.
                                          type: string
                                          minLength: 1
                                          maxLength: 1024
                                          pattern: >-
                                            ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                        kind:
                                          anyOf:
                                            - enum:
                                                - fir
                                                - iir
                                                - peq
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    devices:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - kind
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          name:
                                            type: string
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - qrd
                                                  - patefon
                                                  - karmic_cluster
                                                  - speaker_amp
                                                  - microphone
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          address:
                                            type: string
                                            minLength: 1
                                            description: e.g. osc://10.0.0.20:9000
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                compat:
                                  description: >-
                                    Declarative mappings for the A6 gateways
                                    (01b §4.7); never required for playback.
                                  type: object
                                  propertyNames:
                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
                                  additionalProperties:
                                    type: object
                              patternProperties:
                                ^x-: true
                          required:
                            - id
                            - revision
                            - status
                            - meta
                            - dome
                            - displays
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            revision:
                              description: >-
                                Monotonic resource revision; the strong ETag is
                                derived from it.
                              type: integer
                              minimum: 0
                            status:
                              anyOf:
                                - enum:
                                    - idle
                                    - loading
                                    - ready
                                    - playing
                                    - degraded
                                    - error
                                - type: string
                                  pattern: ^[a-z][a-z_-]{0,31}$
                            default:
                              type: boolean
                              description: >-
                                true for the venue the alias `default` resolves
                                to
                            activeShowId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            createdAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          unevaluatedProperties: false
                      $defs:
                        venue:
                          type: object
                          allOf:
                            - description: >-
                                Venue content shared by GET / PUT / POST: the
                                .dome venue sections.
                              type: object
                              properties:
                                meta:
                                  type: object
                                  required:
                                    - id
                                    - title
                                  properties:
                                    id:
                                      description: >-
                                        Stable document id (UUID, lowercase);
                                        the venue / show id on import (02e
                                        §3.2).
                                      type: string
                                      pattern: >-
                                        ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                    title:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Localised text map
                                        {"en":…,"ru":…}, 02e §3.1 (as .dome
                                        meta.title).
                                      title: Localised text
                                      type: object
                                      minProperties: 1
                                      propertyNames:
                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                      additionalProperties:
                                        type: string
                                      examples:
                                        - en: Intro
                                          ru: Вступление
                                      $defs:
                                        textOrI18n:
                                          description: >-
                                            Plain string (treated as `en`) or a
                                            localised map. (map branch = the root
                                            schema, inlined for tools that
                                            mis-handle self references)
                                          anyOf:
                                            - type: string
                                            - type: object
                                              minProperties: 1
                                              propertyNames:
                                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                              additionalProperties:
                                                type: string
                                              examples:
                                                - en: Intro
                                                  ru: Вступление
                                    description:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Localised text map
                                        {"en":…,"ru":…}, 02e §3.1 (as .dome
                                        meta.title).
                                      title: Localised text
                                      type: object
                                      minProperties: 1
                                      propertyNames:
                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                      additionalProperties:
                                        type: string
                                      examples:
                                        - en: Intro
                                          ru: Вступление
                                      $defs:
                                        textOrI18n:
                                          description: >-
                                            Plain string (treated as `en`) or a
                                            localised map. (map branch = the root
                                            schema, inlined for tools that
                                            mis-handle self references)
                                          anyOf:
                                            - type: string
                                            - type: object
                                              minProperties: 1
                                              propertyNames:
                                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                              additionalProperties:
                                                type: string
                                              examples:
                                                - en: Intro
                                                  ru: Вступление
                                    authors:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - name
                                        properties:
                                          name:
                                            type: string
                                            minLength: 1
                                          email:
                                            type: string
                                            format: email
                                          url:
                                            type: string
                                            format: uri
                                          role:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    created:
                                      type: string
                                      format: date-time
                                    modified:
                                      type: string
                                      format: date-time
                                    generator:
                                      type: object
                                      required:
                                        - name
                                      properties:
                                        name:
                                          type: string
                                          minLength: 1
                                        version:
                                          type: string
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    license:
                                      type: string
                                      minLength: 1
                                      default: NativeMindNONC
                                    tags:
                                      type: array
                                      items:
                                        type: string
                                        minLength: 1
                                        maxLength: 64
                                      uniqueItems: true
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                dome:
                                  description: >-
                                    Dome geometry (01b §4.1). Right-handed,
                                    metres, degrees; +Y zenith, -Z front.
                                  type: object
                                  required:
                                    - mode
                                    - shape
                                    - radius
                                  properties:
                                    mode:
                                      anyOf:
                                        - enum:
                                            - classical
                                            - quantum
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    shape:
                                      anyOf:
                                        - enum:
                                            - hemisphere
                                            - sphere
                                            - truncated
                                            - cylinder
                                            - cylinder_outer
                                            - cone
                                            - pyramid
                                            - geodesic
                                            - flat
                                            - multiwall
                                            - cave
                                            - volumetric
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    radius:
                                      type: number
                                      exclusiveMinimum: 0
                                      description: m
                                    tilt:
                                      type: number
                                      minimum: -90
                                      maximum: 90
                                      description: ° forward tilt of the dome axis
                                    truncation:
                                      type: number
                                      minimum: -90
                                      maximum: 90
                                      description: >-
                                        ° below the spring line projected
                                        (negative = cut off)
                                    orientation:
                                      anyOf:
                                        - enum:
                                            - upright
                                            - inverted
                                            - tilted
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    springLineHeight:
                                      type: number
                                      description: m above floor
                                    surface:
                                      type: object
                                      properties:
                                        gain:
                                          type: number
                                          minimum: 0
                                        material:
                                          type: string
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    seating:
                                      anyOf:
                                        - enum:
                                            - unidirectional
                                            - concentric
                                            - free
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    sweetSpot:
                                      type: array
                                      items:
                                        type: number
                                      minItems: 3
                                      maxItems: 3
                                      description: '[x, y, z], metres, dome frame (01b §3).'
                                    angularBase:
                                      type: integer
                                      minimum: 1
                                      description: >-
                                        Quantum mode only: presentation base of
                                        the circle (e.g. 108); values stay in
                                        degrees.
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                  if:
                                    required:
                                      - angularBase
                                  then:
                                    properties:
                                      mode:
                                        const: quantum
                                displays:
                                  type: array
                                  items:
                                    description: >-
                                      Visual device (01b §4.2): projector (incl.
                                      fisheye), LED, prism unit, smartphone +
                                      lens, NDI output.
                                    type: object
                                    required:
                                      - id
                                      - type
                                    properties:
                                      id:
                                        description: Document-scoped id (02e §3.2).
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      name:
                                        type: string
                                      type:
                                        anyOf:
                                          - enum:
                                              - projector
                                              - led
                                              - prism_unit
                                              - smartphone_lens
                                              - ndi_output
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      model:
                                        type: object
                                        properties:
                                          vendor:
                                            type: string
                                          product:
                                            type: string
                                          variant:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      resolution:
                                        type: array
                                        items:
                                          type: integer
                                          minimum: 1
                                        minItems: 2
                                        maxItems: 2
                                        description: '[width, height] or [cols, rows].'
                                      refreshRate:
                                        type: number
                                        exclusiveMinimum: 0
                                        description: Hz
                                      lens:
                                        type: object
                                        required:
                                          - kind
                                        properties:
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - fisheye
                                                  - standard
                                                  - pyramid
                                                  - prism
                                                  - equirect
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          fov:
                                            type: number
                                            exclusiveMinimum: 0
                                            maximum: 360
                                            description: °
                                          throwRatio:
                                            type:
                                              - number
                                              - 'null'
                                            exclusiveMinimum: 0
                                          shift:
                                            description: >-
                                              lens shift [x, y] as a fraction of the
                                              image size
                                            type: array
                                            items:
                                              type: number
                                            minItems: 2
                                            maxItems: 2
                                          distortion:
                                            description: '1.1 (02b E4): lens distortion model.'
                                            type: object
                                            required:
                                              - model
                                            properties:
                                              model:
                                                anyOf:
                                                  - enum:
                                                      - brown-conrady
                                                      - fisheye-equidistant
                                                      - fisheye-equisolid
                                                      - fisheye-poly
                                                      - radial
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              coefficients:
                                                type: array
                                                items:
                                                  type: number
                                                maxItems: 16
                                                description: >-
                                                  brown-conrady [k1,k2,k3,p1,p2];
                                                  fisheye-poly [k1..k4]; radial [k1,k2,k3]
                                                  (01b §4.2.1)
                                              centre:
                                                type: array
                                                items:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 1
                                                minItems: 2
                                                maxItems: 2
                                                description: >-
                                                  distortion centre, normalised image
                                                  coordinates
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          profileRef:
                                            description: >-
                                              1.1 (02b E4): lens profile id shipped as
                                              data (engine
                                              data/lens_profiles/<id>.json), e.g.
                                              sh001.
                                            type: string
                                            pattern: ^[a-z0-9][a-z0-9._-]{0,63}$
                                          curvature:
                                            description: >-
                                              1.1 (EN, curved LED walls): the display
                                              surface is a cylinder (axis vertical =
                                              curved horizontally, the usual curved
                                              wall) or a sphere section; absent =
                                              flat.
                                            type: object
                                            required:
                                              - radius
                                            properties:
                                              radius:
                                                type: number
                                                exclusiveMinimum: 0
                                                description: m, curvature radius of the panel surface
                                              axis:
                                                anyOf:
                                                  - enum:
                                                      - vertical
                                                      - horizontal
                                                      - spherical
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                default: vertical
                                              concave:
                                                type: boolean
                                                default: true
                                                description: true = curved towards the audience
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      pose:
                                        type: object
                                        properties:
                                          position:
                                            type: array
                                            items:
                                              type: number
                                            minItems: 3
                                            maxItems: 3
                                            description: '[x, y, z], metres, dome frame (01b §3).'
                                          rotation:
                                            type: array
                                            items:
                                              type: number
                                              minimum: -1
                                              maximum: 1
                                            minItems: 4
                                            maxItems: 4
                                            description: Rotation quaternion [x, y, z, w].
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      output:
                                        type: object
                                        properties:
                                          host:
                                            type: string
                                            minLength: 1
                                          connector:
                                            type: string
                                            minLength: 1
                                            description: e.g. DP-1, HDMI-1, stream:<displayId>
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      colour:
                                        type: object
                                        properties:
                                          gamut:
                                            anyOf:
                                              - enum:
                                                  - rec709
                                                  - dci-p3
                                                  - display-p3
                                                  - rec2020
                                                  - srgb
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          gamma:
                                            type: number
                                            exclusiveMinimum: 0
                                          whitePoint:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      stereo:
                                        oneOf:
                                          - type: 'null'
                                          - type: object
                                            required:
                                              - eye
                                            properties:
                                              eye:
                                                enum:
                                                  - left
                                                  - right
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                      optics:
                                        description: >-
                                          1.1 (02a V12, replaces
                                          x-freedome-optics): per-face layout of
                                          prism / pyramid optics on the display
                                          frame.
                                        type: object
                                        required:
                                          - faces
                                        properties:
                                          faces:
                                            enum:
                                              - 1
                                              - 3
                                              - 4
                                              - 6
                                          faceAngle:
                                            type: number
                                            exclusiveMinimum: 0
                                            exclusiveMaximum: 90
                                            description: ° between a face and the screen plane
                                          viewports:
                                            type: array
                                            maxItems: 6
                                            items:
                                              type: object
                                              required:
                                                - face
                                                - rect
                                              properties:
                                                face:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 5
                                                  description: 0 = front, clockwise from above
                                                rect:
                                                  description: >-
                                                    Normalised [x, y, w, h] of the display
                                                    frame (0..1, origin top-left, y down;
                                                    01b §3).
                                                  type: array
                                                  items:
                                                    type: number
                                                    minimum: 0
                                                    maximum: 1
                                                  minItems: 4
                                                  maxItems: 4
                                                rotation:
                                                  type: number
                                                  minimum: -360
                                                  maximum: 360
                                                  description: ° clockwise
                                                mirror:
                                                  enum:
                                                    - none
                                                    - horizontal
                                                    - vertical
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          activeRegion:
                                            description: >-
                                              Normalised [x, y, w, h] of the display
                                              frame (0..1, origin top-left, y down;
                                              01b §3).
                                            type: array
                                            items:
                                              type: number
                                              minimum: 0
                                              maximum: 1
                                            minItems: 4
                                            maxItems: 4
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      prism:
                                        description: >-
                                          1.1 (02b E4): physical prism / pyramid
                                          geometry (engine PrismGeometry).
                                        type: object
                                        required:
                                          - faces
                                        properties:
                                          faces:
                                            type: integer
                                            minimum: 1
                                            maximum: 12
                                          baseMm:
                                            type: number
                                            exclusiveMinimum: 0
                                          heightMm:
                                            type: number
                                            exclusiveMinimum: 0
                                          faceAngle:
                                            type: number
                                            exclusiveMinimum: 0
                                            exclusiveMaximum: 90
                                          refractiveIndex:
                                            type: number
                                            minimum: 1
                                          solid:
                                            type: boolean
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                calibration:
                                  description: >-
                                    Per-display calibration (01b §4.3); keys of
                                    `displays` are display ids (checked by the
                                    codecs).
                                  type: object
                                  properties:
                                    displays:
                                      type: object
                                      propertyNames:
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                      additionalProperties:
                                        type: object
                                        properties:
                                          warp:
                                            type: object
                                            required:
                                              - file
                                            properties:
                                              file:
                                                description: FDMESH file (01b §5)
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              kind:
                                                anyOf:
                                                  - enum:
                                                      - uv-grid
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              size:
                                                type: array
                                                items:
                                                  type: integer
                                                  minimum: 1
                                                minItems: 2
                                                maxItems: 2
                                                description: '[width, height] or [cols, rows].'
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          blend:
                                            type: object
                                            required:
                                              - file
                                            properties:
                                              file:
                                                description: 16-bit greyscale PNG
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              bitDepth:
                                                enum:
                                                  - 8
                                                  - 16
                                              gamma:
                                                type: number
                                                exclusiveMinimum: 0
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          colour:
                                            type: object
                                            properties:
                                              lut:
                                                description: Adobe / Resolve .cube 3D LUT
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              blackLevel:
                                                type: number
                                                minimum: 0
                                                maximum: 1
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          report:
                                            type: object
                                            properties:
                                              method:
                                                anyOf:
                                                  - enum:
                                                      - camera-homography
                                                      - manual
                                                      - imported
                                                      - model
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              date:
                                                type: string
                                                format: date-time
                                              meanError:
                                                type: number
                                                minimum: 0
                                              maxError:
                                                type: number
                                                minimum: 0
                                              unit:
                                                anyOf:
                                                  - enum:
                                                      - px
                                                      - deg
                                                      - mm
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              file:
                                                description: >-
                                                  Entry path inside the container:
                                                  relative, `/`-separated, no `..`
                                                  segment, no backslash, no NUL.
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                audio:
                                  description: AnantaSound layout (01b §4.4).
                                  type: object
                                  properties:
                                    ambisonics:
                                      type: object
                                      properties:
                                        order:
                                          type: integer
                                          minimum: 0
                                          maximum: 7
                                        normalisation:
                                          anyOf:
                                            - enum:
                                                - SN3D
                                                - N3D
                                                - FuMa
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        channelOrder:
                                          anyOf:
                                            - enum:
                                                - ACN
                                                - FuMa
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    decoder:
                                      type: object
                                      properties:
                                        kind:
                                          anyOf:
                                            - enum:
                                                - allrad
                                                - sad
                                                - mmd
                                                - epad
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        dualBand:
                                          type: boolean
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    speakers:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - azimuth
                                          - elevation
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          azimuth:
                                            type: number
                                            minimum: -360
                                            maximum: 360
                                            description: ° (0 = front, clockwise from above)
                                          elevation:
                                            type: number
                                            minimum: -90
                                            maximum: 90
                                            description: ° (0 = spring line)
                                          distance:
                                            type: number
                                            exclusiveMinimum: 0
                                            description: m
                                          channel:
                                            type: integer
                                            minimum: 1
                                          delayMs:
                                            type: number
                                            minimum: 0
                                          gainDb:
                                            type: number
                                            minimum: -144
                                            maximum: 24
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - fullrange
                                                  - subwoofer
                                                  - satellite
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          lfe:
                                            type: boolean
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    roomCorrection:
                                      type: object
                                      required:
                                        - file
                                      properties:
                                        file:
                                          description: >-
                                            Entry path inside the container:
                                            relative, `/`-separated, no `..`
                                            segment, no backslash, no NUL.
                                          type: string
                                          minLength: 1
                                          maxLength: 1024
                                          pattern: >-
                                            ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                        kind:
                                          anyOf:
                                            - enum:
                                                - fir
                                                - iir
                                                - peq
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    devices:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - kind
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          name:
                                            type: string
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - qrd
                                                  - patefon
                                                  - karmic_cluster
                                                  - speaker_amp
                                                  - microphone
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          address:
                                            type: string
                                            minLength: 1
                                            description: e.g. osc://10.0.0.20:9000
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                compat:
                                  description: >-
                                    Declarative mappings for the A6 gateways
                                    (01b §4.7); never required for playback.
                                  type: object
                                  propertyNames:
                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
                                  additionalProperties:
                                    type: object
                              patternProperties:
                                ^x-: true
                          required:
                            - id
                            - revision
                            - status
                            - meta
                            - dome
                            - displays
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            revision:
                              description: >-
                                Monotonic resource revision; the strong ETag is
                                derived from it.
                              type: integer
                              minimum: 0
                            status:
                              anyOf:
                                - enum:
                                    - idle
                                    - loading
                                    - ready
                                    - playing
                                    - degraded
                                    - error
                                - type: string
                                  pattern: ^[a-z][a-z_-]{0,31}$
                            default:
                              type: boolean
                              description: >-
                                true for the venue the alias `default` resolves
                                to
                            activeShowId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            createdAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          unevaluatedProperties: false
                        body:
                          description: >-
                            Venue content shared by GET / PUT / POST: the .dome
                            venue sections.
                          type: object
                          properties:
                            meta:
                              type: object
                              required:
                                - id
                                - title
                              properties:
                                id:
                                  description: >-
                                    Stable document id (UUID, lowercase); the
                                    venue / show id on import (02e §3.2).
                                  type: string
                                  pattern: >-
                                    ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                title:
                                  $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). Localised text map
                                    {"en":…,"ru":…}, 02e §3.1 (as .dome
                                    meta.title).
                                  title: Localised text
                                  type: object
                                  minProperties: 1
                                  propertyNames:
                                    pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                  additionalProperties:
                                    type: string
                                  examples:
                                    - en: Intro
                                      ru: Вступление
                                  $defs:
                                    textOrI18n:
                                      description: >-
                                        Plain string (treated as `en`) or a
                                        localised map. (map branch = the root
                                        schema, inlined for tools that
                                        mis-handle self references)
                                      anyOf:
                                        - type: string
                                        - type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                          examples:
                                            - en: Intro
                                              ru: Вступление
                                description:
                                  $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). Localised text map
                                    {"en":…,"ru":…}, 02e §3.1 (as .dome
                                    meta.title).
                                  title: Localised text
                                  type: object
                                  minProperties: 1
                                  propertyNames:
                                    pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                  additionalProperties:
                                    type: string
                                  examples:
                                    - en: Intro
                                      ru: Вступление
                                  $defs:
                                    textOrI18n:
                                      description: >-
                                        Plain string (treated as `en`) or a
                                        localised map. (map branch = the root
                                        schema, inlined for tools that
                                        mis-handle self references)
                                      anyOf:
                                        - type: string
                                        - type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                          examples:
                                            - en: Intro
                                              ru: Вступление
                                authors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - name
                                    properties:
                                      name:
                                        type: string
                                        minLength: 1
                                      email:
                                        type: string
                                        format: email
                                      url:
                                        type: string
                                        format: uri
                                      role:
                                        type: string
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                created:
                                  type: string
                                  format: date-time
                                modified:
                                  type: string
                                  format: date-time
                                generator:
                                  type: object
                                  required:
                                    - name
                                  properties:
                                    name:
                                      type: string
                                      minLength: 1
                                    version:
                                      type: string
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                license:
                                  type: string
                                  minLength: 1
                                  default: NativeMindNONC
                                tags:
                                  type: array
                                  items:
                                    type: string
                                    minLength: 1
                                    maxLength: 64
                                  uniqueItems: true
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                            dome:
                              description: >-
                                Dome geometry (01b §4.1). Right-handed, metres,
                                degrees; +Y zenith, -Z front.
                              type: object
                              required:
                                - mode
                                - shape
                                - radius
                              properties:
                                mode:
                                  anyOf:
                                    - enum:
                                        - classical
                                        - quantum
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                shape:
                                  anyOf:
                                    - enum:
                                        - hemisphere
                                        - sphere
                                        - truncated
                                        - cylinder
                                        - cylinder_outer
                                        - cone
                                        - pyramid
                                        - geodesic
                                        - flat
                                        - multiwall
                                        - cave
                                        - volumetric
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                radius:
                                  type: number
                                  exclusiveMinimum: 0
                                  description: m
                                tilt:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                  description: ° forward tilt of the dome axis
                                truncation:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                  description: >-
                                    ° below the spring line projected (negative
                                    = cut off)
                                orientation:
                                  anyOf:
                                    - enum:
                                        - upright
                                        - inverted
                                        - tilted
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                springLineHeight:
                                  type: number
                                  description: m above floor
                                surface:
                                  type: object
                                  properties:
                                    gain:
                                      type: number
                                      minimum: 0
                                    material:
                                      type: string
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                seating:
                                  anyOf:
                                    - enum:
                                        - unidirectional
                                        - concentric
                                        - free
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                sweetSpot:
                                  type: array
                                  items:
                                    type: number
                                  minItems: 3
                                  maxItems: 3
                                  description: '[x, y, z], metres, dome frame (01b §3).'
                                angularBase:
                                  type: integer
                                  minimum: 1
                                  description: >-
                                    Quantum mode only: presentation base of the
                                    circle (e.g. 108); values stay in degrees.
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                              if:
                                required:
                                  - angularBase
                              then:
                                properties:
                                  mode:
                                    const: quantum
                            displays:
                              type: array
                              items:
                                description: >-
                                  Visual device (01b §4.2): projector (incl.
                                  fisheye), LED, prism unit, smartphone + lens,
                                  NDI output.
                                type: object
                                required:
                                  - id
                                  - type
                                properties:
                                  id:
                                    description: Document-scoped id (02e §3.2).
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  name:
                                    type: string
                                  type:
                                    anyOf:
                                      - enum:
                                          - projector
                                          - led
                                          - prism_unit
                                          - smartphone_lens
                                          - ndi_output
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  model:
                                    type: object
                                    properties:
                                      vendor:
                                        type: string
                                      product:
                                        type: string
                                      variant:
                                        type: string
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  resolution:
                                    type: array
                                    items:
                                      type: integer
                                      minimum: 1
                                    minItems: 2
                                    maxItems: 2
                                    description: '[width, height] or [cols, rows].'
                                  refreshRate:
                                    type: number
                                    exclusiveMinimum: 0
                                    description: Hz
                                  lens:
                                    type: object
                                    required:
                                      - kind
                                    properties:
                                      kind:
                                        anyOf:
                                          - enum:
                                              - fisheye
                                              - standard
                                              - pyramid
                                              - prism
                                              - equirect
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      fov:
                                        type: number
                                        exclusiveMinimum: 0
                                        maximum: 360
                                        description: °
                                      throwRatio:
                                        type:
                                          - number
                                          - 'null'
                                        exclusiveMinimum: 0
                                      shift:
                                        description: >-
                                          lens shift [x, y] as a fraction of the
                                          image size
                                        type: array
                                        items:
                                          type: number
                                        minItems: 2
                                        maxItems: 2
                                      distortion:
                                        description: '1.1 (02b E4): lens distortion model.'
                                        type: object
                                        required:
                                          - model
                                        properties:
                                          model:
                                            anyOf:
                                              - enum:
                                                  - brown-conrady
                                                  - fisheye-equidistant
                                                  - fisheye-equisolid
                                                  - fisheye-poly
                                                  - radial
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          coefficients:
                                            type: array
                                            items:
                                              type: number
                                            maxItems: 16
                                            description: >-
                                              brown-conrady [k1,k2,k3,p1,p2];
                                              fisheye-poly [k1..k4]; radial [k1,k2,k3]
                                              (01b §4.2.1)
                                          centre:
                                            type: array
                                            items:
                                              type: number
                                              minimum: 0
                                              maximum: 1
                                            minItems: 2
                                            maxItems: 2
                                            description: >-
                                              distortion centre, normalised image
                                              coordinates
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      profileRef:
                                        description: >-
                                          1.1 (02b E4): lens profile id shipped as
                                          data (engine
                                          data/lens_profiles/<id>.json), e.g.
                                          sh001.
                                        type: string
                                        pattern: ^[a-z0-9][a-z0-9._-]{0,63}$
                                      curvature:
                                        description: >-
                                          1.1 (EN, curved LED walls): the display
                                          surface is a cylinder (axis vertical =
                                          curved horizontally, the usual curved
                                          wall) or a sphere section; absent =
                                          flat.
                                        type: object
                                        required:
                                          - radius
                                        properties:
                                          radius:
                                            type: number
                                            exclusiveMinimum: 0
                                            description: m, curvature radius of the panel surface
                                          axis:
                                            anyOf:
                                              - enum:
                                                  - vertical
                                                  - horizontal
                                                  - spherical
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            default: vertical
                                          concave:
                                            type: boolean
                                            default: true
                                            description: true = curved towards the audience
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  pose:
                                    type: object
                                    properties:
                                      position:
                                        type: array
                                        items:
                                          type: number
                                        minItems: 3
                                        maxItems: 3
                                        description: '[x, y, z], metres, dome frame (01b §3).'
                                      rotation:
                                        type: array
                                        items:
                                          type: number
                                          minimum: -1
                                          maximum: 1
                                        minItems: 4
                                        maxItems: 4
                                        description: Rotation quaternion [x, y, z, w].
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  output:
                                    type: object
                                    properties:
                                      host:
                                        type: string
                                        minLength: 1
                                      connector:
                                        type: string
                                        minLength: 1
                                        description: e.g. DP-1, HDMI-1, stream:<displayId>
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  colour:
                                    type: object
                                    properties:
                                      gamut:
                                        anyOf:
                                          - enum:
                                              - rec709
                                              - dci-p3
                                              - display-p3
                                              - rec2020
                                              - srgb
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      gamma:
                                        type: number
                                        exclusiveMinimum: 0
                                      whitePoint:
                                        type: string
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  stereo:
                                    oneOf:
                                      - type: 'null'
                                      - type: object
                                        required:
                                          - eye
                                        properties:
                                          eye:
                                            enum:
                                              - left
                                              - right
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                  optics:
                                    description: >-
                                      1.1 (02a V12, replaces x-freedome-optics):
                                      per-face layout of prism / pyramid optics
                                      on the display frame.
                                    type: object
                                    required:
                                      - faces
                                    properties:
                                      faces:
                                        enum:
                                          - 1
                                          - 3
                                          - 4
                                          - 6
                                      faceAngle:
                                        type: number
                                        exclusiveMinimum: 0
                                        exclusiveMaximum: 90
                                        description: ° between a face and the screen plane
                                      viewports:
                                        type: array
                                        maxItems: 6
                                        items:
                                          type: object
                                          required:
                                            - face
                                            - rect
                                          properties:
                                            face:
                                              type: integer
                                              minimum: 0
                                              maximum: 5
                                              description: 0 = front, clockwise from above
                                            rect:
                                              description: >-
                                                Normalised [x, y, w, h] of the display
                                                frame (0..1, origin top-left, y down;
                                                01b §3).
                                              type: array
                                              items:
                                                type: number
                                                minimum: 0
                                                maximum: 1
                                              minItems: 4
                                              maxItems: 4
                                            rotation:
                                              type: number
                                              minimum: -360
                                              maximum: 360
                                              description: ° clockwise
                                            mirror:
                                              enum:
                                                - none
                                                - horizontal
                                                - vertical
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      activeRegion:
                                        description: >-
                                          Normalised [x, y, w, h] of the display
                                          frame (0..1, origin top-left, y down;
                                          01b §3).
                                        type: array
                                        items:
                                          type: number
                                          minimum: 0
                                          maximum: 1
                                        minItems: 4
                                        maxItems: 4
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  prism:
                                    description: >-
                                      1.1 (02b E4): physical prism / pyramid
                                      geometry (engine PrismGeometry).
                                    type: object
                                    required:
                                      - faces
                                    properties:
                                      faces:
                                        type: integer
                                        minimum: 1
                                        maximum: 12
                                      baseMm:
                                        type: number
                                        exclusiveMinimum: 0
                                      heightMm:
                                        type: number
                                        exclusiveMinimum: 0
                                      faceAngle:
                                        type: number
                                        exclusiveMinimum: 0
                                        exclusiveMaximum: 90
                                      refractiveIndex:
                                        type: number
                                        minimum: 1
                                      solid:
                                        type: boolean
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                            calibration:
                              description: >-
                                Per-display calibration (01b §4.3); keys of
                                `displays` are display ids (checked by the
                                codecs).
                              type: object
                              properties:
                                displays:
                                  type: object
                                  propertyNames:
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                  additionalProperties:
                                    type: object
                                    properties:
                                      warp:
                                        type: object
                                        required:
                                          - file
                                        properties:
                                          file:
                                            description: FDMESH file (01b §5)
                                            type: string
                                            minLength: 1
                                            maxLength: 1024
                                            pattern: >-
                                              ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - uv-grid
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          size:
                                            type: array
                                            items:
                                              type: integer
                                              minimum: 1
                                            minItems: 2
                                            maxItems: 2
                                            description: '[width, height] or [cols, rows].'
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      blend:
                                        type: object
                                        required:
                                          - file
                                        properties:
                                          file:
                                            description: 16-bit greyscale PNG
                                            type: string
                                            minLength: 1
                                            maxLength: 1024
                                            pattern: >-
                                              ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                          bitDepth:
                                            enum:
                                              - 8
                                              - 16
                                          gamma:
                                            type: number
                                            exclusiveMinimum: 0
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      colour:
                                        type: object
                                        properties:
                                          lut:
                                            description: Adobe / Resolve .cube 3D LUT
                                            type: string
                                            minLength: 1
                                            maxLength: 1024
                                            pattern: >-
                                              ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                          blackLevel:
                                            type: number
                                            minimum: 0
                                            maximum: 1
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      report:
                                        type: object
                                        properties:
                                          method:
                                            anyOf:
                                              - enum:
                                                  - camera-homography
                                                  - manual
                                                  - imported
                                                  - model
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          date:
                                            type: string
                                            format: date-time
                                          meanError:
                                            type: number
                                            minimum: 0
                                          maxError:
                                            type: number
                                            minimum: 0
                                          unit:
                                            anyOf:
                                              - enum:
                                                  - px
                                                  - deg
                                                  - mm
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          file:
                                            description: >-
                                              Entry path inside the container:
                                              relative, `/`-separated, no `..`
                                              segment, no backslash, no NUL.
                                            type: string
                                            minLength: 1
                                            maxLength: 1024
                                            pattern: >-
                                              ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                            audio:
                              description: AnantaSound layout (01b §4.4).
                              type: object
                              properties:
                                ambisonics:
                                  type: object
                                  properties:
                                    order:
                                      type: integer
                                      minimum: 0
                                      maximum: 7
                                    normalisation:
                                      anyOf:
                                        - enum:
                                            - SN3D
                                            - N3D
                                            - FuMa
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    channelOrder:
                                      anyOf:
                                        - enum:
                                            - ACN
                                            - FuMa
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                decoder:
                                  type: object
                                  properties:
                                    kind:
                                      anyOf:
                                        - enum:
                                            - allrad
                                            - sad
                                            - mmd
                                            - epad
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    dualBand:
                                      type: boolean
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                speakers:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - id
                                      - azimuth
                                      - elevation
                                    properties:
                                      id:
                                        description: Document-scoped id (02e §3.2).
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      azimuth:
                                        type: number
                                        minimum: -360
                                        maximum: 360
                                        description: ° (0 = front, clockwise from above)
                                      elevation:
                                        type: number
                                        minimum: -90
                                        maximum: 90
                                        description: ° (0 = spring line)
                                      distance:
                                        type: number
                                        exclusiveMinimum: 0
                                        description: m
                                      channel:
                                        type: integer
                                        minimum: 1
                                      delayMs:
                                        type: number
                                        minimum: 0
                                      gainDb:
                                        type: number
                                        minimum: -144
                                        maximum: 24
                                      kind:
                                        anyOf:
                                          - enum:
                                              - fullrange
                                              - subwoofer
                                              - satellite
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      lfe:
                                        type: boolean
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                roomCorrection:
                                  type: object
                                  required:
                                    - file
                                  properties:
                                    file:
                                      description: >-
                                        Entry path inside the container:
                                        relative, `/`-separated, no `..`
                                        segment, no backslash, no NUL.
                                      type: string
                                      minLength: 1
                                      maxLength: 1024
                                      pattern: >-
                                        ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                    kind:
                                      anyOf:
                                        - enum:
                                            - fir
                                            - iir
                                            - peq
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                devices:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - id
                                      - kind
                                    properties:
                                      id:
                                        description: Document-scoped id (02e §3.2).
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      name:
                                        type: string
                                      kind:
                                        anyOf:
                                          - enum:
                                              - qrd
                                              - patefon
                                              - karmic_cluster
                                              - speaker_amp
                                              - microphone
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      address:
                                        type: string
                                        minLength: 1
                                        description: e.g. osc://10.0.0.20:9000
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                            compat:
                              description: >-
                                Declarative mappings for the A6 gateways (01b
                                §4.7); never required for playback.
                              type: object
                              propertyNames:
                                pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
                              additionalProperties:
                                type: object
                          patternProperties:
                            ^x-: true
                        input:
                          description: POST /venues and PUT /venues/{venueId} body.
                          type: object
                          allOf:
                            - description: >-
                                Venue content shared by GET / PUT / POST: the
                                .dome venue sections.
                              type: object
                              properties:
                                meta:
                                  type: object
                                  required:
                                    - id
                                    - title
                                  properties:
                                    id:
                                      description: >-
                                        Stable document id (UUID, lowercase);
                                        the venue / show id on import (02e
                                        §3.2).
                                      type: string
                                      pattern: >-
                                        ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                    title:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Localised text map
                                        {"en":…,"ru":…}, 02e §3.1 (as .dome
                                        meta.title).
                                      title: Localised text
                                      type: object
                                      minProperties: 1
                                      propertyNames:
                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                      additionalProperties:
                                        type: string
                                      examples:
                                        - en: Intro
                                          ru: Вступление
                                      $defs:
                                        textOrI18n:
                                          description: >-
                                            Plain string (treated as `en`) or a
                                            localised map. (map branch = the root
                                            schema, inlined for tools that
                                            mis-handle self references)
                                          anyOf:
                                            - type: string
                                            - type: object
                                              minProperties: 1
                                              propertyNames:
                                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                              additionalProperties:
                                                type: string
                                              examples:
                                                - en: Intro
                                                  ru: Вступление
                                    description:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Localised text map
                                        {"en":…,"ru":…}, 02e §3.1 (as .dome
                                        meta.title).
                                      title: Localised text
                                      type: object
                                      minProperties: 1
                                      propertyNames:
                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                      additionalProperties:
                                        type: string
                                      examples:
                                        - en: Intro
                                          ru: Вступление
                                      $defs:
                                        textOrI18n:
                                          description: >-
                                            Plain string (treated as `en`) or a
                                            localised map. (map branch = the root
                                            schema, inlined for tools that
                                            mis-handle self references)
                                          anyOf:
                                            - type: string
                                            - type: object
                                              minProperties: 1
                                              propertyNames:
                                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                              additionalProperties:
                                                type: string
                                              examples:
                                                - en: Intro
                                                  ru: Вступление
                                    authors:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - name
                                        properties:
                                          name:
                                            type: string
                                            minLength: 1
                                          email:
                                            type: string
                                            format: email
                                          url:
                                            type: string
                                            format: uri
                                          role:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    created:
                                      type: string
                                      format: date-time
                                    modified:
                                      type: string
                                      format: date-time
                                    generator:
                                      type: object
                                      required:
                                        - name
                                      properties:
                                        name:
                                          type: string
                                          minLength: 1
                                        version:
                                          type: string
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    license:
                                      type: string
                                      minLength: 1
                                      default: NativeMindNONC
                                    tags:
                                      type: array
                                      items:
                                        type: string
                                        minLength: 1
                                        maxLength: 64
                                      uniqueItems: true
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                dome:
                                  description: >-
                                    Dome geometry (01b §4.1). Right-handed,
                                    metres, degrees; +Y zenith, -Z front.
                                  type: object
                                  required:
                                    - mode
                                    - shape
                                    - radius
                                  properties:
                                    mode:
                                      anyOf:
                                        - enum:
                                            - classical
                                            - quantum
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    shape:
                                      anyOf:
                                        - enum:
                                            - hemisphere
                                            - sphere
                                            - truncated
                                            - cylinder
                                            - cylinder_outer
                                            - cone
                                            - pyramid
                                            - geodesic
                                            - flat
                                            - multiwall
                                            - cave
                                            - volumetric
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    radius:
                                      type: number
                                      exclusiveMinimum: 0
                                      description: m
                                    tilt:
                                      type: number
                                      minimum: -90
                                      maximum: 90
                                      description: ° forward tilt of the dome axis
                                    truncation:
                                      type: number
                                      minimum: -90
                                      maximum: 90
                                      description: >-
                                        ° below the spring line projected
                                        (negative = cut off)
                                    orientation:
                                      anyOf:
                                        - enum:
                                            - upright
                                            - inverted
                                            - tilted
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    springLineHeight:
                                      type: number
                                      description: m above floor
                                    surface:
                                      type: object
                                      properties:
                                        gain:
                                          type: number
                                          minimum: 0
                                        material:
                                          type: string
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    seating:
                                      anyOf:
                                        - enum:
                                            - unidirectional
                                            - concentric
                                            - free
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    sweetSpot:
                                      type: array
                                      items:
                                        type: number
                                      minItems: 3
                                      maxItems: 3
                                      description: '[x, y, z], metres, dome frame (01b §3).'
                                    angularBase:
                                      type: integer
                                      minimum: 1
                                      description: >-
                                        Quantum mode only: presentation base of
                                        the circle (e.g. 108); values stay in
                                        degrees.
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                  if:
                                    required:
                                      - angularBase
                                  then:
                                    properties:
                                      mode:
                                        const: quantum
                                displays:
                                  type: array
                                  items:
                                    description: >-
                                      Visual device (01b §4.2): projector (incl.
                                      fisheye), LED, prism unit, smartphone +
                                      lens, NDI output.
                                    type: object
                                    required:
                                      - id
                                      - type
                                    properties:
                                      id:
                                        description: Document-scoped id (02e §3.2).
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      name:
                                        type: string
                                      type:
                                        anyOf:
                                          - enum:
                                              - projector
                                              - led
                                              - prism_unit
                                              - smartphone_lens
                                              - ndi_output
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      model:
                                        type: object
                                        properties:
                                          vendor:
                                            type: string
                                          product:
                                            type: string
                                          variant:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      resolution:
                                        type: array
                                        items:
                                          type: integer
                                          minimum: 1
                                        minItems: 2
                                        maxItems: 2
                                        description: '[width, height] or [cols, rows].'
                                      refreshRate:
                                        type: number
                                        exclusiveMinimum: 0
                                        description: Hz
                                      lens:
                                        type: object
                                        required:
                                          - kind
                                        properties:
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - fisheye
                                                  - standard
                                                  - pyramid
                                                  - prism
                                                  - equirect
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          fov:
                                            type: number
                                            exclusiveMinimum: 0
                                            maximum: 360
                                            description: °
                                          throwRatio:
                                            type:
                                              - number
                                              - 'null'
                                            exclusiveMinimum: 0
                                          shift:
                                            description: >-
                                              lens shift [x, y] as a fraction of the
                                              image size
                                            type: array
                                            items:
                                              type: number
                                            minItems: 2
                                            maxItems: 2
                                          distortion:
                                            description: '1.1 (02b E4): lens distortion model.'
                                            type: object
                                            required:
                                              - model
                                            properties:
                                              model:
                                                anyOf:
                                                  - enum:
                                                      - brown-conrady
                                                      - fisheye-equidistant
                                                      - fisheye-equisolid
                                                      - fisheye-poly
                                                      - radial
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              coefficients:
                                                type: array
                                                items:
                                                  type: number
                                                maxItems: 16
                                                description: >-
                                                  brown-conrady [k1,k2,k3,p1,p2];
                                                  fisheye-poly [k1..k4]; radial [k1,k2,k3]
                                                  (01b §4.2.1)
                                              centre:
                                                type: array
                                                items:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 1
                                                minItems: 2
                                                maxItems: 2
                                                description: >-
                                                  distortion centre, normalised image
                                                  coordinates
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          profileRef:
                                            description: >-
                                              1.1 (02b E4): lens profile id shipped as
                                              data (engine
                                              data/lens_profiles/<id>.json), e.g.
                                              sh001.
                                            type: string
                                            pattern: ^[a-z0-9][a-z0-9._-]{0,63}$
                                          curvature:
                                            description: >-
                                              1.1 (EN, curved LED walls): the display
                                              surface is a cylinder (axis vertical =
                                              curved horizontally, the usual curved
                                              wall) or a sphere section; absent =
                                              flat.
                                            type: object
                                            required:
                                              - radius
                                            properties:
                                              radius:
                                                type: number
                                                exclusiveMinimum: 0
                                                description: m, curvature radius of the panel surface
                                              axis:
                                                anyOf:
                                                  - enum:
                                                      - vertical
                                                      - horizontal
                                                      - spherical
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                default: vertical
                                              concave:
                                                type: boolean
                                                default: true
                                                description: true = curved towards the audience
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      pose:
                                        type: object
                                        properties:
                                          position:
                                            type: array
                                            items:
                                              type: number
                                            minItems: 3
                                            maxItems: 3
                                            description: '[x, y, z], metres, dome frame (01b §3).'
                                          rotation:
                                            type: array
                                            items:
                                              type: number
                                              minimum: -1
                                              maximum: 1
                                            minItems: 4
                                            maxItems: 4
                                            description: Rotation quaternion [x, y, z, w].
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      output:
                                        type: object
                                        properties:
                                          host:
                                            type: string
                                            minLength: 1
                                          connector:
                                            type: string
                                            minLength: 1
                                            description: e.g. DP-1, HDMI-1, stream:<displayId>
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      colour:
                                        type: object
                                        properties:
                                          gamut:
                                            anyOf:
                                              - enum:
                                                  - rec709
                                                  - dci-p3
                                                  - display-p3
                                                  - rec2020
                                                  - srgb
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          gamma:
                                            type: number
                                            exclusiveMinimum: 0
                                          whitePoint:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      stereo:
                                        oneOf:
                                          - type: 'null'
                                          - type: object
                                            required:
                                              - eye
                                            properties:
                                              eye:
                                                enum:
                                                  - left
                                                  - right
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                      optics:
                                        description: >-
                                          1.1 (02a V12, replaces
                                          x-freedome-optics): per-face layout of
                                          prism / pyramid optics on the display
                                          frame.
                                        type: object
                                        required:
                                          - faces
                                        properties:
                                          faces:
                                            enum:
                                              - 1
                                              - 3
                                              - 4
                                              - 6
                                          faceAngle:
                                            type: number
                                            exclusiveMinimum: 0
                                            exclusiveMaximum: 90
                                            description: ° between a face and the screen plane
                                          viewports:
                                            type: array
                                            maxItems: 6
                                            items:
                                              type: object
                                              required:
                                                - face
                                                - rect
                                              properties:
                                                face:
                                                  type: integer
                                                  minimum: 0
                                                  maximum: 5
                                                  description: 0 = front, clockwise from above
                                                rect:
                                                  description: >-
                                                    Normalised [x, y, w, h] of the display
                                                    frame (0..1, origin top-left, y down;
                                                    01b §3).
                                                  type: array
                                                  items:
                                                    type: number
                                                    minimum: 0
                                                    maximum: 1
                                                  minItems: 4
                                                  maxItems: 4
                                                rotation:
                                                  type: number
                                                  minimum: -360
                                                  maximum: 360
                                                  description: ° clockwise
                                                mirror:
                                                  enum:
                                                    - none
                                                    - horizontal
                                                    - vertical
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          activeRegion:
                                            description: >-
                                              Normalised [x, y, w, h] of the display
                                              frame (0..1, origin top-left, y down;
                                              01b §3).
                                            type: array
                                            items:
                                              type: number
                                              minimum: 0
                                              maximum: 1
                                            minItems: 4
                                            maxItems: 4
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      prism:
                                        description: >-
                                          1.1 (02b E4): physical prism / pyramid
                                          geometry (engine PrismGeometry).
                                        type: object
                                        required:
                                          - faces
                                        properties:
                                          faces:
                                            type: integer
                                            minimum: 1
                                            maximum: 12
                                          baseMm:
                                            type: number
                                            exclusiveMinimum: 0
                                          heightMm:
                                            type: number
                                            exclusiveMinimum: 0
                                          faceAngle:
                                            type: number
                                            exclusiveMinimum: 0
                                            exclusiveMaximum: 90
                                          refractiveIndex:
                                            type: number
                                            minimum: 1
                                          solid:
                                            type: boolean
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                calibration:
                                  description: >-
                                    Per-display calibration (01b §4.3); keys of
                                    `displays` are display ids (checked by the
                                    codecs).
                                  type: object
                                  properties:
                                    displays:
                                      type: object
                                      propertyNames:
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                      additionalProperties:
                                        type: object
                                        properties:
                                          warp:
                                            type: object
                                            required:
                                              - file
                                            properties:
                                              file:
                                                description: FDMESH file (01b §5)
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              kind:
                                                anyOf:
                                                  - enum:
                                                      - uv-grid
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              size:
                                                type: array
                                                items:
                                                  type: integer
                                                  minimum: 1
                                                minItems: 2
                                                maxItems: 2
                                                description: '[width, height] or [cols, rows].'
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          blend:
                                            type: object
                                            required:
                                              - file
                                            properties:
                                              file:
                                                description: 16-bit greyscale PNG
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              bitDepth:
                                                enum:
                                                  - 8
                                                  - 16
                                              gamma:
                                                type: number
                                                exclusiveMinimum: 0
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          colour:
                                            type: object
                                            properties:
                                              lut:
                                                description: Adobe / Resolve .cube 3D LUT
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              blackLevel:
                                                type: number
                                                minimum: 0
                                                maximum: 1
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          report:
                                            type: object
                                            properties:
                                              method:
                                                anyOf:
                                                  - enum:
                                                      - camera-homography
                                                      - manual
                                                      - imported
                                                      - model
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              date:
                                                type: string
                                                format: date-time
                                              meanError:
                                                type: number
                                                minimum: 0
                                              maxError:
                                                type: number
                                                minimum: 0
                                              unit:
                                                anyOf:
                                                  - enum:
                                                      - px
                                                      - deg
                                                      - mm
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              file:
                                                description: >-
                                                  Entry path inside the container:
                                                  relative, `/`-separated, no `..`
                                                  segment, no backslash, no NUL.
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                audio:
                                  description: AnantaSound layout (01b §4.4).
                                  type: object
                                  properties:
                                    ambisonics:
                                      type: object
                                      properties:
                                        order:
                                          type: integer
                                          minimum: 0
                                          maximum: 7
                                        normalisation:
                                          anyOf:
                                            - enum:
                                                - SN3D
                                                - N3D
                                                - FuMa
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        channelOrder:
                                          anyOf:
                                            - enum:
                                                - ACN
                                                - FuMa
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    decoder:
                                      type: object
                                      properties:
                                        kind:
                                          anyOf:
                                            - enum:
                                                - allrad
                                                - sad
                                                - mmd
                                                - epad
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        dualBand:
                                          type: boolean
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    speakers:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - azimuth
                                          - elevation
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          azimuth:
                                            type: number
                                            minimum: -360
                                            maximum: 360
                                            description: ° (0 = front, clockwise from above)
                                          elevation:
                                            type: number
                                            minimum: -90
                                            maximum: 90
                                            description: ° (0 = spring line)
                                          distance:
                                            type: number
                                            exclusiveMinimum: 0
                                            description: m
                                          channel:
                                            type: integer
                                            minimum: 1
                                          delayMs:
                                            type: number
                                            minimum: 0
                                          gainDb:
                                            type: number
                                            minimum: -144
                                            maximum: 24
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - fullrange
                                                  - subwoofer
                                                  - satellite
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          lfe:
                                            type: boolean
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    roomCorrection:
                                      type: object
                                      required:
                                        - file
                                      properties:
                                        file:
                                          description: >-
                                            Entry path inside the container:
                                            relative, `/`-separated, no `..`
                                            segment, no backslash, no NUL.
                                          type: string
                                          minLength: 1
                                          maxLength: 1024
                                          pattern: >-
                                            ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                        kind:
                                          anyOf:
                                            - enum:
                                                - fir
                                                - iir
                                                - peq
                                            - description: >-
                                                Value of an open enum: one of the listed
                                                values or any other token (clients
                                                tolerate unknown values).
                                              type: string
                                              pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    devices:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - kind
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          name:
                                            type: string
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - qrd
                                                  - patefon
                                                  - karmic_cluster
                                                  - speaker_amp
                                                  - microphone
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          address:
                                            type: string
                                            minLength: 1
                                            description: e.g. osc://10.0.0.20:9000
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                compat:
                                  description: >-
                                    Declarative mappings for the A6 gateways
                                    (01b §4.7); never required for playback.
                                  type: object
                                  propertyNames:
                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
                                  additionalProperties:
                                    type: object
                              patternProperties:
                                ^x-: true
                          required:
                            - meta
                            - dome
                            - displays
                          unevaluatedProperties: false
                        patch:
                          description: >-
                            PATCH body (application/merge-patch+json, RFC 7396)
                            over the venue sections; the merged result must be a
                            valid input.
                          type: object
                          minProperties: 1
                          propertyNames:
                            pattern: >-
                              ^(meta|dome|displays|calibration|audio|compat|x-.+)$
                        page:
                          description: GET /venues page.
                          type: object
                          allOf:
                            - $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/pagination.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). Cursor pagination, 02e §3.4. Root =
                                collection page; specialise with allOf + items.
                              title: Collection page
                              type: object
                              required:
                                - items
                                - nextCursor
                              properties:
                                items:
                                  type: array
                                nextCursor:
                                  anyOf:
                                    - description: Opaque continuation token.
                                      type: string
                                      minLength: 1
                                      maxLength: 1024
                                    - type: 'null'
                                count:
                                  type: integer
                                  minimum: 0
                                  description: Only with ?count=true where cheap.
                              additionalProperties: true
                              $defs:
                                limit:
                                  type: integer
                                  minimum: 1
                                  maximum: 500
                                  default: 50
                                cursor:
                                  description: Opaque continuation token.
                                  type: string
                                  minLength: 1
                                  maxLength: 1024
                                sort:
                                  description: >-
                                    Comma-separated fields, `-` prefix =
                                    descending.
                                  type: string
                                  pattern: >-
                                    ^-?[a-zA-Z][a-zA-Z0-9]*(,-?[a-zA-Z][a-zA-Z0-9]*)*$
                          properties:
                            items:
                              type: array
                              items:
                                type: object
                                allOf:
                                  - description: >-
                                      Venue content shared by GET / PUT / POST:
                                      the .dome venue sections.
                                    type: object
                                    properties:
                                      meta:
                                        type: object
                                        required:
                                          - id
                                          - title
                                        properties:
                                          id:
                                            description: >-
                                              Stable document id (UUID, lowercase);
                                              the venue / show id on import (02e
                                              §3.2).
                                            type: string
                                            pattern: >-
                                              ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                          title:
                                            $schema: >-
                                              https://json-schema.org/draft/2020-12/schema
                                            $id: >-
                                              https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                            $comment: >-
                                              NativeMindNONC — freedome_contract (see
                                              LICENSE). Localised text map
                                              {"en":…,"ru":…}, 02e §3.1 (as .dome
                                              meta.title).
                                            title: Localised text
                                            type: object
                                            minProperties: 1
                                            propertyNames:
                                              pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                            additionalProperties:
                                              type: string
                                            examples:
                                              - en: Intro
                                                ru: Вступление
                                            $defs:
                                              textOrI18n:
                                                description: >-
                                                  Plain string (treated as `en`) or a
                                                  localised map. (map branch = the root
                                                  schema, inlined for tools that
                                                  mis-handle self references)
                                                anyOf:
                                                  - type: string
                                                  - type: object
                                                    minProperties: 1
                                                    propertyNames:
                                                      pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                    additionalProperties:
                                                      type: string
                                                    examples:
                                                      - en: Intro
                                                        ru: Вступление
                                          description:
                                            $schema: >-
                                              https://json-schema.org/draft/2020-12/schema
                                            $id: >-
                                              https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                            $comment: >-
                                              NativeMindNONC — freedome_contract (see
                                              LICENSE). Localised text map
                                              {"en":…,"ru":…}, 02e §3.1 (as .dome
                                              meta.title).
                                            title: Localised text
                                            type: object
                                            minProperties: 1
                                            propertyNames:
                                              pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                            additionalProperties:
                                              type: string
                                            examples:
                                              - en: Intro
                                                ru: Вступление
                                            $defs:
                                              textOrI18n:
                                                description: >-
                                                  Plain string (treated as `en`) or a
                                                  localised map. (map branch = the root
                                                  schema, inlined for tools that
                                                  mis-handle self references)
                                                anyOf:
                                                  - type: string
                                                  - type: object
                                                    minProperties: 1
                                                    propertyNames:
                                                      pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                    additionalProperties:
                                                      type: string
                                                    examples:
                                                      - en: Intro
                                                        ru: Вступление
                                          authors:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - name
                                              properties:
                                                name:
                                                  type: string
                                                  minLength: 1
                                                email:
                                                  type: string
                                                  format: email
                                                url:
                                                  type: string
                                                  format: uri
                                                role:
                                                  type: string
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          created:
                                            type: string
                                            format: date-time
                                          modified:
                                            type: string
                                            format: date-time
                                          generator:
                                            type: object
                                            required:
                                              - name
                                            properties:
                                              name:
                                                type: string
                                                minLength: 1
                                              version:
                                                type: string
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          license:
                                            type: string
                                            minLength: 1
                                            default: NativeMindNONC
                                          tags:
                                            type: array
                                            items:
                                              type: string
                                              minLength: 1
                                              maxLength: 64
                                            uniqueItems: true
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      dome:
                                        description: >-
                                          Dome geometry (01b §4.1). Right-handed,
                                          metres, degrees; +Y zenith, -Z front.
                                        type: object
                                        required:
                                          - mode
                                          - shape
                                          - radius
                                        properties:
                                          mode:
                                            anyOf:
                                              - enum:
                                                  - classical
                                                  - quantum
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          shape:
                                            anyOf:
                                              - enum:
                                                  - hemisphere
                                                  - sphere
                                                  - truncated
                                                  - cylinder
                                                  - cylinder_outer
                                                  - cone
                                                  - pyramid
                                                  - geodesic
                                                  - flat
                                                  - multiwall
                                                  - cave
                                                  - volumetric
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          radius:
                                            type: number
                                            exclusiveMinimum: 0
                                            description: m
                                          tilt:
                                            type: number
                                            minimum: -90
                                            maximum: 90
                                            description: ° forward tilt of the dome axis
                                          truncation:
                                            type: number
                                            minimum: -90
                                            maximum: 90
                                            description: >-
                                              ° below the spring line projected
                                              (negative = cut off)
                                          orientation:
                                            anyOf:
                                              - enum:
                                                  - upright
                                                  - inverted
                                                  - tilted
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          springLineHeight:
                                            type: number
                                            description: m above floor
                                          surface:
                                            type: object
                                            properties:
                                              gain:
                                                type: number
                                                minimum: 0
                                              material:
                                                type: string
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          seating:
                                            anyOf:
                                              - enum:
                                                  - unidirectional
                                                  - concentric
                                                  - free
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          sweetSpot:
                                            type: array
                                            items:
                                              type: number
                                            minItems: 3
                                            maxItems: 3
                                            description: '[x, y, z], metres, dome frame (01b §3).'
                                          angularBase:
                                            type: integer
                                            minimum: 1
                                            description: >-
                                              Quantum mode only: presentation base of
                                              the circle (e.g. 108); values stay in
                                              degrees.
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                        if:
                                          required:
                                            - angularBase
                                        then:
                                          properties:
                                            mode:
                                              const: quantum
                                      displays:
                                        type: array
                                        items:
                                          description: >-
                                            Visual device (01b §4.2): projector
                                            (incl. fisheye), LED, prism unit,
                                            smartphone + lens, NDI output.
                                          type: object
                                          required:
                                            - id
                                            - type
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            name:
                                              type: string
                                            type:
                                              anyOf:
                                                - enum:
                                                    - projector
                                                    - led
                                                    - prism_unit
                                                    - smartphone_lens
                                                    - ndi_output
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            model:
                                              type: object
                                              properties:
                                                vendor:
                                                  type: string
                                                product:
                                                  type: string
                                                variant:
                                                  type: string
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            resolution:
                                              type: array
                                              items:
                                                type: integer
                                                minimum: 1
                                              minItems: 2
                                              maxItems: 2
                                              description: '[width, height] or [cols, rows].'
                                            refreshRate:
                                              type: number
                                              exclusiveMinimum: 0
                                              description: Hz
                                            lens:
                                              type: object
                                              required:
                                                - kind
                                              properties:
                                                kind:
                                                  anyOf:
                                                    - enum:
                                                        - fisheye
                                                        - standard
                                                        - pyramid
                                                        - prism
                                                        - equirect
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                fov:
                                                  type: number
                                                  exclusiveMinimum: 0
                                                  maximum: 360
                                                  description: °
                                                throwRatio:
                                                  type:
                                                    - number
                                                    - 'null'
                                                  exclusiveMinimum: 0
                                                shift:
                                                  description: >-
                                                    lens shift [x, y] as a fraction of the
                                                    image size
                                                  type: array
                                                  items:
                                                    type: number
                                                  minItems: 2
                                                  maxItems: 2
                                                distortion:
                                                  description: '1.1 (02b E4): lens distortion model.'
                                                  type: object
                                                  required:
                                                    - model
                                                  properties:
                                                    model:
                                                      anyOf:
                                                        - enum:
                                                            - brown-conrady
                                                            - fisheye-equidistant
                                                            - fisheye-equisolid
                                                            - fisheye-poly
                                                            - radial
                                                        - description: >-
                                                            Value of an open enum: one of the listed
                                                            values or any other token (clients
                                                            tolerate unknown values).
                                                          type: string
                                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                    coefficients:
                                                      type: array
                                                      items:
                                                        type: number
                                                      maxItems: 16
                                                      description: >-
                                                        brown-conrady [k1,k2,k3,p1,p2];
                                                        fisheye-poly [k1..k4]; radial [k1,k2,k3]
                                                        (01b §4.2.1)
                                                    centre:
                                                      type: array
                                                      items:
                                                        type: number
                                                        minimum: 0
                                                        maximum: 1
                                                      minItems: 2
                                                      maxItems: 2
                                                      description: >-
                                                        distortion centre, normalised image
                                                        coordinates
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                                profileRef:
                                                  description: >-
                                                    1.1 (02b E4): lens profile id shipped as
                                                    data (engine
                                                    data/lens_profiles/<id>.json), e.g.
                                                    sh001.
                                                  type: string
                                                  pattern: ^[a-z0-9][a-z0-9._-]{0,63}$
                                                curvature:
                                                  description: >-
                                                    1.1 (EN, curved LED walls): the display
                                                    surface is a cylinder (axis vertical =
                                                    curved horizontally, the usual curved
                                                    wall) or a sphere section; absent =
                                                    flat.
                                                  type: object
                                                  required:
                                                    - radius
                                                  properties:
                                                    radius:
                                                      type: number
                                                      exclusiveMinimum: 0
                                                      description: m, curvature radius of the panel surface
                                                    axis:
                                                      anyOf:
                                                        - enum:
                                                            - vertical
                                                            - horizontal
                                                            - spherical
                                                        - description: >-
                                                            Value of an open enum: one of the listed
                                                            values or any other token (clients
                                                            tolerate unknown values).
                                                          type: string
                                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                      default: vertical
                                                    concave:
                                                      type: boolean
                                                      default: true
                                                      description: true = curved towards the audience
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            pose:
                                              type: object
                                              properties:
                                                position:
                                                  type: array
                                                  items:
                                                    type: number
                                                  minItems: 3
                                                  maxItems: 3
                                                  description: '[x, y, z], metres, dome frame (01b §3).'
                                                rotation:
                                                  type: array
                                                  items:
                                                    type: number
                                                    minimum: -1
                                                    maximum: 1
                                                  minItems: 4
                                                  maxItems: 4
                                                  description: Rotation quaternion [x, y, z, w].
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            output:
                                              type: object
                                              properties:
                                                host:
                                                  type: string
                                                  minLength: 1
                                                connector:
                                                  type: string
                                                  minLength: 1
                                                  description: e.g. DP-1, HDMI-1, stream:<displayId>
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            colour:
                                              type: object
                                              properties:
                                                gamut:
                                                  anyOf:
                                                    - enum:
                                                        - rec709
                                                        - dci-p3
                                                        - display-p3
                                                        - rec2020
                                                        - srgb
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                gamma:
                                                  type: number
                                                  exclusiveMinimum: 0
                                                whitePoint:
                                                  type: string
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            stereo:
                                              oneOf:
                                                - type: 'null'
                                                - type: object
                                                  required:
                                                    - eye
                                                  properties:
                                                    eye:
                                                      enum:
                                                        - left
                                                        - right
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                            optics:
                                              description: >-
                                                1.1 (02a V12, replaces
                                                x-freedome-optics): per-face layout of
                                                prism / pyramid optics on the display
                                                frame.
                                              type: object
                                              required:
                                                - faces
                                              properties:
                                                faces:
                                                  enum:
                                                    - 1
                                                    - 3
                                                    - 4
                                                    - 6
                                                faceAngle:
                                                  type: number
                                                  exclusiveMinimum: 0
                                                  exclusiveMaximum: 90
                                                  description: ° between a face and the screen plane
                                                viewports:
                                                  type: array
                                                  maxItems: 6
                                                  items:
                                                    type: object
                                                    required:
                                                      - face
                                                      - rect
                                                    properties:
                                                      face:
                                                        type: integer
                                                        minimum: 0
                                                        maximum: 5
                                                        description: 0 = front, clockwise from above
                                                      rect:
                                                        description: >-
                                                          Normalised [x, y, w, h] of the display
                                                          frame (0..1, origin top-left, y down;
                                                          01b §3).
                                                        type: array
                                                        items:
                                                          type: number
                                                          minimum: 0
                                                          maximum: 1
                                                        minItems: 4
                                                        maxItems: 4
                                                      rotation:
                                                        type: number
                                                        minimum: -360
                                                        maximum: 360
                                                        description: ° clockwise
                                                      mirror:
                                                        enum:
                                                          - none
                                                          - horizontal
                                                          - vertical
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                activeRegion:
                                                  description: >-
                                                    Normalised [x, y, w, h] of the display
                                                    frame (0..1, origin top-left, y down;
                                                    01b §3).
                                                  type: array
                                                  items:
                                                    type: number
                                                    minimum: 0
                                                    maximum: 1
                                                  minItems: 4
                                                  maxItems: 4
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            prism:
                                              description: >-
                                                1.1 (02b E4): physical prism / pyramid
                                                geometry (engine PrismGeometry).
                                              type: object
                                              required:
                                                - faces
                                              properties:
                                                faces:
                                                  type: integer
                                                  minimum: 1
                                                  maximum: 12
                                                baseMm:
                                                  type: number
                                                  exclusiveMinimum: 0
                                                heightMm:
                                                  type: number
                                                  exclusiveMinimum: 0
                                                faceAngle:
                                                  type: number
                                                  exclusiveMinimum: 0
                                                  exclusiveMaximum: 90
                                                refractiveIndex:
                                                  type: number
                                                  minimum: 1
                                                solid:
                                                  type: boolean
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      calibration:
                                        description: >-
                                          Per-display calibration (01b §4.3); keys
                                          of `displays` are display ids (checked
                                          by the codecs).
                                        type: object
                                        properties:
                                          displays:
                                            type: object
                                            propertyNames:
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                            additionalProperties:
                                              type: object
                                              properties:
                                                warp:
                                                  type: object
                                                  required:
                                                    - file
                                                  properties:
                                                    file:
                                                      description: FDMESH file (01b §5)
                                                      type: string
                                                      minLength: 1
                                                      maxLength: 1024
                                                      pattern: >-
                                                        ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                    kind:
                                                      anyOf:
                                                        - enum:
                                                            - uv-grid
                                                        - description: >-
                                                            Value of an open enum: one of the listed
                                                            values or any other token (clients
                                                            tolerate unknown values).
                                                          type: string
                                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                    size:
                                                      type: array
                                                      items:
                                                        type: integer
                                                        minimum: 1
                                                      minItems: 2
                                                      maxItems: 2
                                                      description: '[width, height] or [cols, rows].'
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                                blend:
                                                  type: object
                                                  required:
                                                    - file
                                                  properties:
                                                    file:
                                                      description: 16-bit greyscale PNG
                                                      type: string
                                                      minLength: 1
                                                      maxLength: 1024
                                                      pattern: >-
                                                        ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                    bitDepth:
                                                      enum:
                                                        - 8
                                                        - 16
                                                    gamma:
                                                      type: number
                                                      exclusiveMinimum: 0
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                                colour:
                                                  type: object
                                                  properties:
                                                    lut:
                                                      description: Adobe / Resolve .cube 3D LUT
                                                      type: string
                                                      minLength: 1
                                                      maxLength: 1024
                                                      pattern: >-
                                                        ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                    blackLevel:
                                                      type: number
                                                      minimum: 0
                                                      maximum: 1
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                                report:
                                                  type: object
                                                  properties:
                                                    method:
                                                      anyOf:
                                                        - enum:
                                                            - camera-homography
                                                            - manual
                                                            - imported
                                                            - model
                                                        - description: >-
                                                            Value of an open enum: one of the listed
                                                            values or any other token (clients
                                                            tolerate unknown values).
                                                          type: string
                                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                    date:
                                                      type: string
                                                      format: date-time
                                                    meanError:
                                                      type: number
                                                      minimum: 0
                                                    maxError:
                                                      type: number
                                                      minimum: 0
                                                    unit:
                                                      anyOf:
                                                        - enum:
                                                            - px
                                                            - deg
                                                            - mm
                                                        - description: >-
                                                            Value of an open enum: one of the listed
                                                            values or any other token (clients
                                                            tolerate unknown values).
                                                          type: string
                                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                    file:
                                                      description: >-
                                                        Entry path inside the container:
                                                        relative, `/`-separated, no `..`
                                                        segment, no backslash, no NUL.
                                                      type: string
                                                      minLength: 1
                                                      maxLength: 1024
                                                      pattern: >-
                                                        ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      audio:
                                        description: AnantaSound layout (01b §4.4).
                                        type: object
                                        properties:
                                          ambisonics:
                                            type: object
                                            properties:
                                              order:
                                                type: integer
                                                minimum: 0
                                                maximum: 7
                                              normalisation:
                                                anyOf:
                                                  - enum:
                                                      - SN3D
                                                      - N3D
                                                      - FuMa
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              channelOrder:
                                                anyOf:
                                                  - enum:
                                                      - ACN
                                                      - FuMa
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          decoder:
                                            type: object
                                            properties:
                                              kind:
                                                anyOf:
                                                  - enum:
                                                      - allrad
                                                      - sad
                                                      - mmd
                                                      - epad
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              dualBand:
                                                type: boolean
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          speakers:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - id
                                                - azimuth
                                                - elevation
                                              properties:
                                                id:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                azimuth:
                                                  type: number
                                                  minimum: -360
                                                  maximum: 360
                                                  description: ° (0 = front, clockwise from above)
                                                elevation:
                                                  type: number
                                                  minimum: -90
                                                  maximum: 90
                                                  description: ° (0 = spring line)
                                                distance:
                                                  type: number
                                                  exclusiveMinimum: 0
                                                  description: m
                                                channel:
                                                  type: integer
                                                  minimum: 1
                                                delayMs:
                                                  type: number
                                                  minimum: 0
                                                gainDb:
                                                  type: number
                                                  minimum: -144
                                                  maximum: 24
                                                kind:
                                                  anyOf:
                                                    - enum:
                                                        - fullrange
                                                        - subwoofer
                                                        - satellite
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                lfe:
                                                  type: boolean
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          roomCorrection:
                                            type: object
                                            required:
                                              - file
                                            properties:
                                              file:
                                                description: >-
                                                  Entry path inside the container:
                                                  relative, `/`-separated, no `..`
                                                  segment, no backslash, no NUL.
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              kind:
                                                anyOf:
                                                  - enum:
                                                      - fir
                                                      - iir
                                                      - peq
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          devices:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - id
                                                - kind
                                              properties:
                                                id:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                name:
                                                  type: string
                                                kind:
                                                  anyOf:
                                                    - enum:
                                                        - qrd
                                                        - patefon
                                                        - karmic_cluster
                                                        - speaker_amp
                                                        - microphone
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                address:
                                                  type: string
                                                  minLength: 1
                                                  description: e.g. osc://10.0.0.20:9000
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      compat:
                                        description: >-
                                          Declarative mappings for the A6 gateways
                                          (01b §4.7); never required for playback.
                                        type: object
                                        propertyNames:
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
                                        additionalProperties:
                                          type: object
                                    patternProperties:
                                      ^x-: true
                                required:
                                  - id
                                  - revision
                                  - status
                                  - meta
                                  - dome
                                  - displays
                                properties:
                                  id:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  revision:
                                    description: >-
                                      Monotonic resource revision; the strong
                                      ETag is derived from it.
                                    type: integer
                                    minimum: 0
                                  status:
                                    anyOf:
                                      - enum:
                                          - idle
                                          - loading
                                          - ready
                                          - playing
                                          - degraded
                                          - error
                                      - type: string
                                        pattern: ^[a-z][a-z_-]{0,31}$
                                  default:
                                    type: boolean
                                    description: >-
                                      true for the venue the alias `default`
                                      resolves to
                                  activeShowId:
                                    anyOf:
                                      - description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      - type: 'null'
                                  createdAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  updatedAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                unevaluatedProperties: false
                    patch:
                      description: >-
                        PATCH body (application/merge-patch+json, RFC 7396) over
                        the venue sections; the merged result must be a valid
                        input.
                      type: object
                      minProperties: 1
                      propertyNames:
                        pattern: ^(meta|dome|displays|calibration|audio|compat|x-.+)$
              - if:
                  properties:
                    kind:
                      const: venue.deleted
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      type: object
                      required:
                        - id
                      properties:
                        id:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: venue.activeShow
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      type: object
                      required:
                        - activeShowId
                      properties:
                        activeShowId:
                          anyOf:
                            - description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            - type: 'null'
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: output.state
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/api/1.0/output.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). Venue
                        output state (02e §5.2 GET/PATCH
                        /venues/{venueId}/output; fulldome /@1/* coverage).
                      title: Venue output
                      type: object
                      required:
                        - brightness
                        - volume
                        - blackout
                      properties:
                        brightness:
                          description: master brightness 0..1
                          type: number
                          minimum: 0
                          maximum: 1
                        volume:
                          description: master volume, linear 0..1 (C5)
                          type: number
                          minimum: 0
                          maximum: 1
                        gainDb:
                          description: >-
                            Gain in dB (C5: optional companion of linear
                            `volume`).
                          type: number
                          minimum: -144
                          maximum: 24
                        mute:
                          type: boolean
                        blackout:
                          type: boolean
                        rotation:
                          type: number
                          minimum: -360
                          maximum: 360
                          description: ° content rotation about the dome axis
                        lighting:
                          type: boolean
                          description: stage / house light relay
                        ndi:
                          type: object
                          properties:
                            enabled:
                              type: boolean
                            name:
                              type: string
                          additionalProperties: false
                      patternProperties:
                        ^x-: true
                      additionalProperties: false
                      $defs:
                        patch:
                          description: >-
                            PATCH body (application/merge-patch+json): any
                            subset of the output fields.
                          type: object
                          minProperties: 1
                          properties:
                            brightness:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            volume:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            gainDb:
                              description: >-
                                Gain in dB (C5: optional companion of linear
                                `volume`).
                              type: number
                              minimum: -144
                              maximum: 24
                            mute:
                              type: boolean
                            blackout:
                              type: boolean
                            rotation:
                              type: number
                              minimum: -360
                              maximum: 360
                            lighting:
                              type: boolean
                            ndi:
                              type: object
                              properties:
                                enabled:
                                  type: boolean
                                name:
                                  type: string
                              additionalProperties: false
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                    patch:
                      description: >-
                        PATCH body (application/merge-patch+json): any subset of
                        the output fields.
                      type: object
                      minProperties: 1
                      properties:
                        brightness:
                          description: 0..1 (brightness, linear volume gain, progress).
                          type: number
                          minimum: 0
                          maximum: 1
                        volume:
                          description: 0..1 (brightness, linear volume gain, progress).
                          type: number
                          minimum: 0
                          maximum: 1
                        gainDb:
                          description: >-
                            Gain in dB (C5: optional companion of linear
                            `volume`).
                          type: number
                          minimum: -144
                          maximum: 24
                        mute:
                          type: boolean
                        blackout:
                          type: boolean
                        rotation:
                          type: number
                          minimum: -360
                          maximum: 360
                        lighting:
                          type: boolean
                        ndi:
                          type: object
                          properties:
                            enabled:
                              type: boolean
                            name:
                              type: string
                          additionalProperties: false
                      patternProperties:
                        ^x-: true
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: display.state
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      type: object
                      required:
                        - online
                      properties:
                        online:
                          type: boolean
                          description: engine output / device agent reachable
                        power:
                          anyOf:
                            - enum:
                                - 'on'
                                - 'off'
                                - standby
                                - warming
                                - cooling
                                - unknown
                            - type: string
                              pattern: ^[a-z][a-z_-]{0,31}$
                        shutter:
                          enum:
                            - open
                            - closed
                            - unknown
                        signal:
                          type: boolean
                        temperatureC:
                          type:
                            - number
                            - 'null'
                        pattern:
                          anyOf:
                            - description: >-
                                PUT
                                /venues/{venueId}/displays/{displayId}/pattern
                                body (engine freedome_pattern_*).
                              type: object
                              required:
                                - kind
                              properties:
                                kind:
                                  anyOf:
                                    - enum:
                                        - 'off'
                                        - grid
                                        - checker
                                        - gray-ramp
                                        - colour-bars
                                        - dots
                                        - crosshair
                                        - solid
                                        - structured-light
                                    - type: string
                                      pattern: ^[a-z][a-z0-9_-]{0,31}$
                                params:
                                  description: >-
                                    Kind-specific: grid {spacingDeg,
                                    lineWidthPx, colour}, checker {cells}, solid
                                    {colour}, structured-light {sequence, index}
                                    …
                                  type: object
                                face:
                                  type: integer
                                  minimum: 0
                                  maximum: 5
                                  description: 'prism / pyramid: limit to one optics face'
                              additionalProperties: false
                            - type: 'null'
                        lastSeen:
                          description: >-
                            RFC 3339 UTC with milliseconds, e.g.
                            2026-10-19T12:00:00.000Z.
                          type: string
                          format: date-time
                          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                        capabilities:
                          type: array
                          items:
                            anyOf:
                              - enum:
                                  - power
                                  - shutter
                                  - identify
                                  - temperature
                                  - pjlink
                              - type: string
                        faults:
                          type: array
                          items:
                            type: object
                            required:
                              - code
                            properties:
                              code:
                                type: string
                              detail:
                                type: string
                            additionalProperties: false
                      additionalProperties: false
                    patch:
                      type: object
              - if:
                  properties:
                    kind:
                      const: display.pattern
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      anyOf:
                        - description: >-
                            PUT /venues/{venueId}/displays/{displayId}/pattern
                            body (engine freedome_pattern_*).
                          type: object
                          required:
                            - kind
                          properties:
                            kind:
                              anyOf:
                                - enum:
                                    - 'off'
                                    - grid
                                    - checker
                                    - gray-ramp
                                    - colour-bars
                                    - dots
                                    - crosshair
                                    - solid
                                    - structured-light
                                - type: string
                                  pattern: ^[a-z][a-z0-9_-]{0,31}$
                            params:
                              description: >-
                                Kind-specific: grid {spacingDeg, lineWidthPx,
                                colour}, checker {cells}, solid {colour},
                                structured-light {sequence, index} …
                              type: object
                            face:
                              type: integer
                              minimum: 0
                              maximum: 5
                              description: 'prism / pyramid: limit to one optics face'
                          additionalProperties: false
                        - type: 'null'
              - if:
                  properties:
                    kind:
                      const: display.error
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). RFC
                        9457 problem details with the Freedome `code` catalogue,
                        02e §3.3. Also the `data` of WS `error`, the socket.io
                        ack error and GraphQL errors[].extensions.problem. The
                        catalogue is open: unknown codes are allowed; known
                        codes are bound to their HTTP status.
                      title: Problem details
                      type: object
                      required:
                        - type
                        - title
                        - code
                      properties:
                        type:
                          type: string
                          format: uri
                          description: >-
                            https://freedome.nativemind.us/problems/<code> for
                            catalogue codes.
                        title:
                          type: string
                          minLength: 1
                        status:
                          type: integer
                          minimum: 100
                          maximum: 599
                        detail:
                          type: string
                        instance:
                          type: string
                          format: uri-reference
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        traceId:
                          type: string
                          pattern: ^[0-9a-f]{16,32}$
                        errors:
                          type: array
                          items:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                      allOf:
                        - if:
                            properties:
                              code:
                                const: validation-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: not-found
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 404
                        - if:
                            properties:
                              code:
                                const: conflict
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: precondition-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 412
                        - if:
                            properties:
                              code:
                                const: precondition-required
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 428
                        - if:
                            properties:
                              code:
                                const: unauthenticated
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: forbidden
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: rate-limited
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 429
                        - if:
                            properties:
                              code:
                                const: payload-too-large
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 413
                        - if:
                            properties:
                              code:
                                const: unsupported-format
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 415
                        - if:
                            properties:
                              code:
                                const: engine-unavailable
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: engine-incompatible
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: degraded
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: upload-checksum-mismatch
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: legacy-unsupported
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 501
                        - if:
                            properties:
                              code:
                                const: internal
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 500
                        - if:
                            properties:
                              code:
                                const: clock-unlocked
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: not-configured
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: authorization-pending
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: slow-down
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: access-denied
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: expired-token
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: token-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: idempotency-key-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: idempotency-in-progress
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                      additionalProperties: true
                      examples:
                        - type: >-
                            https://freedome.nativemind.us/problems/engine-unavailable
                          title: Visual engine unavailable
                          status: 503
                          detail: >-
                            freedome-engined not reachable at
                            unix:/run/freedome/engine.sock
                          instance: /api/v1/venues/default/players/main/play
                          code: engine-unavailable
                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                      $defs:
                        knownCode:
                          enum:
                            - validation-failed
                            - not-found
                            - conflict
                            - precondition-failed
                            - precondition-required
                            - unauthenticated
                            - forbidden
                            - rate-limited
                            - payload-too-large
                            - unsupported-format
                            - engine-unavailable
                            - engine-incompatible
                            - degraded
                            - job-failed
                            - upload-checksum-mismatch
                            - legacy-unsupported
                            - internal
                            - clock-unlocked
                            - not-configured
                            - authorization-pending
                            - slow-down
                            - access-denied
                            - expired-token
                            - token-reused
                            - idempotency-key-reused
                            - idempotency-in-progress
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        fieldError:
                          type: object
                          required:
                            - pointer
                            - detail
                          properties:
                            pointer:
                              type: string
                              format: json-pointer
                            detail:
                              type: string
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          additionalProperties: true
              - if:
                  properties:
                    kind:
                      const: calibration.updated
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: >-
                        Per-display calibration (01b §4.3); keys of `displays`
                        are display ids (checked by the codecs).
                      type: object
                      properties:
                        displays:
                          type: object
                          propertyNames:
                            pattern: ^[A-Za-z0-9._-]{1,64}$
                          additionalProperties:
                            type: object
                            properties:
                              warp:
                                type: object
                                required:
                                  - file
                                properties:
                                  file:
                                    description: FDMESH file (01b §5)
                                    type: string
                                    minLength: 1
                                    maxLength: 1024
                                    pattern: >-
                                      ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                  kind:
                                    anyOf:
                                      - enum:
                                          - uv-grid
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  size:
                                    type: array
                                    items:
                                      type: integer
                                      minimum: 1
                                    minItems: 2
                                    maxItems: 2
                                    description: '[width, height] or [cols, rows].'
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                              blend:
                                type: object
                                required:
                                  - file
                                properties:
                                  file:
                                    description: 16-bit greyscale PNG
                                    type: string
                                    minLength: 1
                                    maxLength: 1024
                                    pattern: >-
                                      ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                  bitDepth:
                                    enum:
                                      - 8
                                      - 16
                                  gamma:
                                    type: number
                                    exclusiveMinimum: 0
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                              colour:
                                type: object
                                properties:
                                  lut:
                                    description: Adobe / Resolve .cube 3D LUT
                                    type: string
                                    minLength: 1
                                    maxLength: 1024
                                    pattern: >-
                                      ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                  blackLevel:
                                    type: number
                                    minimum: 0
                                    maximum: 1
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                              report:
                                type: object
                                properties:
                                  method:
                                    anyOf:
                                      - enum:
                                          - camera-homography
                                          - manual
                                          - imported
                                          - model
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  date:
                                    type: string
                                    format: date-time
                                  meanError:
                                    type: number
                                    minimum: 0
                                  maxError:
                                    type: number
                                    minimum: 0
                                  unit:
                                    anyOf:
                                      - enum:
                                          - px
                                          - deg
                                          - mm
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  file:
                                    description: >-
                                      Entry path inside the container: relative,
                                      `/`-separated, no `..` segment, no
                                      backslash, no NUL.
                                    type: string
                                    minLength: 1
                                    maxLength: 1024
                                    pattern: >-
                                      ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                      patternProperties:
                        ^x-: true
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: calibrationJob.state
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/api/1.0/calibration-job.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE).
                        Calibration job (02e §5.2, 02a §2.5 / §4.7, 02b §4.5).
                        Root = GET …/calibration/jobs/{jobId}.
                      title: Calibration job
                      allOf:
                        - type: object
                          required:
                            - id
                            - venueId
                            - kind
                            - status
                            - steps
                            - createdAt
                          properties:
                            id:
                              description: >-
                                Server-owned resource id: UUIDv7, lowercase,
                                sortable by creation time.
                              type: string
                              pattern: >-
                                ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                              examples:
                                - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                            venueId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            kind:
                              anyOf:
                                - enum:
                                    - visual-camera
                                    - visual-manual
                                    - visual-import
                                    - audio-room
                                    - audio-speaker-check
                                - type: string
                                  pattern: ^[a-z][a-z0-9-]{0,63}$
                            status:
                              description: >-
                                queued → running ⇄ awaiting_input → succeeded |
                                failed | cancelled.
                              enum:
                                - queued
                                - running
                                - awaiting_input
                                - succeeded
                                - failed
                                - cancelled
                            progress:
                              type: number
                              minimum: 0
                              maximum: 1
                            displays:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                            speakers:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                            steps:
                              type: array
                              items:
                                type: object
                                required:
                                  - id
                                  - status
                                properties:
                                  id:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  name:
                                    type: string
                                  displayId:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  status:
                                    enum:
                                      - pending
                                      - running
                                      - awaiting_input
                                      - done
                                      - failed
                                      - skipped
                                additionalProperties: false
                            currentStep:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            awaiting:
                              description: >-
                                Set while status = awaiting_input: what the
                                operator / camera must provide.
                              anyOf:
                                - type: 'null'
                                - type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      anyOf:
                                        - enum:
                                            - camera-capture
                                            - manual-adjust
                                            - confirm
                                        - type: string
                                    stepId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    displayId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    pattern:
                                      description: >-
                                        PUT
                                        /venues/{venueId}/displays/{displayId}/pattern
                                        body (engine freedome_pattern_*).
                                      type: object
                                      required:
                                        - kind
                                      properties:
                                        kind:
                                          anyOf:
                                            - enum:
                                                - 'off'
                                                - grid
                                                - checker
                                                - gray-ramp
                                                - colour-bars
                                                - dots
                                                - crosshair
                                                - solid
                                                - structured-light
                                            - type: string
                                              pattern: ^[a-z][a-z0-9_-]{0,31}$
                                        params:
                                          description: >-
                                            Kind-specific: grid {spacingDeg,
                                            lineWidthPx, colour}, checker {cells},
                                            solid {colour}, structured-light
                                            {sequence, index} …
                                          type: object
                                        face:
                                          type: integer
                                          minimum: 0
                                          maximum: 5
                                          description: >-
                                            prism / pyramid: limit to one optics
                                            face
                                      additionalProperties: false
                                    instructions:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Localised text map
                                        {"en":…,"ru":…}, 02e §3.1 (as .dome
                                        meta.title).
                                      title: Localised text
                                      type: object
                                      minProperties: 1
                                      propertyNames:
                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                      additionalProperties:
                                        type: string
                                      examples:
                                        - en: Intro
                                          ru: Вступление
                                      $defs:
                                        textOrI18n:
                                          description: >-
                                            Plain string (treated as `en`) or a
                                            localised map. (map branch = the root
                                            schema, inlined for tools that
                                            mis-handle self references)
                                          anyOf:
                                            - type: string
                                            - type: object
                                              minProperties: 1
                                              propertyNames:
                                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                              additionalProperties:
                                                type: string
                                              examples:
                                                - en: Intro
                                                  ru: Вступление
                                  additionalProperties: false
                            errors:
                              description: Per-display residual error after solving.
                              type: array
                              items:
                                type: object
                                required:
                                  - displayId
                                properties:
                                  displayId:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  meanError:
                                    type: number
                                    minimum: 0
                                  maxError:
                                    type: number
                                    minimum: 0
                                  unit:
                                    type: string
                                additionalProperties: false
                            result:
                              description: >-
                                Proposed calibration (applied to the venue by
                                POST …/apply).
                              anyOf:
                                - type: 'null'
                                - description: >-
                                    Per-display calibration (01b §4.3); keys of
                                    `displays` are display ids (checked by the
                                    codecs).
                                  type: object
                                  properties:
                                    displays:
                                      type: object
                                      propertyNames:
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                      additionalProperties:
                                        type: object
                                        properties:
                                          warp:
                                            type: object
                                            required:
                                              - file
                                            properties:
                                              file:
                                                description: FDMESH file (01b §5)
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              kind:
                                                anyOf:
                                                  - enum:
                                                      - uv-grid
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              size:
                                                type: array
                                                items:
                                                  type: integer
                                                  minimum: 1
                                                minItems: 2
                                                maxItems: 2
                                                description: '[width, height] or [cols, rows].'
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          blend:
                                            type: object
                                            required:
                                              - file
                                            properties:
                                              file:
                                                description: 16-bit greyscale PNG
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              bitDepth:
                                                enum:
                                                  - 8
                                                  - 16
                                              gamma:
                                                type: number
                                                exclusiveMinimum: 0
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          colour:
                                            type: object
                                            properties:
                                              lut:
                                                description: Adobe / Resolve .cube 3D LUT
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              blackLevel:
                                                type: number
                                                minimum: 0
                                                maximum: 1
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          report:
                                            type: object
                                            properties:
                                              method:
                                                anyOf:
                                                  - enum:
                                                      - camera-homography
                                                      - manual
                                                      - imported
                                                      - model
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              date:
                                                type: string
                                                format: date-time
                                              meanError:
                                                type: number
                                                minimum: 0
                                              maxError:
                                                type: number
                                                minimum: 0
                                              unit:
                                                anyOf:
                                                  - enum:
                                                      - px
                                                      - deg
                                                      - mm
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              file:
                                                description: >-
                                                  Entry path inside the container:
                                                  relative, `/`-separated, no `..`
                                                  segment, no backslash, no NUL.
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                            problem:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). RFC 9457 problem details with the
                                Freedome `code` catalogue, 02e §3.3. Also the
                                `data` of WS `error`, the socket.io ack error
                                and GraphQL errors[].extensions.problem. The
                                catalogue is open: unknown codes are allowed;
                                known codes are bound to their HTTP status.
                              title: Problem details
                              type: object
                              required:
                                - type
                                - title
                                - code
                              properties:
                                type:
                                  type: string
                                  format: uri
                                  description: >-
                                    https://freedome.nativemind.us/problems/<code>
                                    for catalogue codes.
                                title:
                                  type: string
                                  minLength: 1
                                status:
                                  type: integer
                                  minimum: 100
                                  maximum: 599
                                detail:
                                  type: string
                                instance:
                                  type: string
                                  format: uri-reference
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                traceId:
                                  type: string
                                  pattern: ^[0-9a-f]{16,32}$
                                errors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              allOf:
                                - if:
                                    properties:
                                      code:
                                        const: validation-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: not-found
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 404
                                - if:
                                    properties:
                                      code:
                                        const: conflict
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: precondition-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 412
                                - if:
                                    properties:
                                      code:
                                        const: precondition-required
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 428
                                - if:
                                    properties:
                                      code:
                                        const: unauthenticated
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: forbidden
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: rate-limited
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 429
                                - if:
                                    properties:
                                      code:
                                        const: payload-too-large
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 413
                                - if:
                                    properties:
                                      code:
                                        const: unsupported-format
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 415
                                - if:
                                    properties:
                                      code:
                                        const: engine-unavailable
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: engine-incompatible
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: degraded
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: upload-checksum-mismatch
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: legacy-unsupported
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 501
                                - if:
                                    properties:
                                      code:
                                        const: internal
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 500
                                - if:
                                    properties:
                                      code:
                                        const: clock-unlocked
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: not-configured
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: authorization-pending
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: slow-down
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: access-denied
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: expired-token
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: token-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-key-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-in-progress
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                              additionalProperties: true
                              examples:
                                - type: >-
                                    https://freedome.nativemind.us/problems/engine-unavailable
                                  title: Visual engine unavailable
                                  status: 503
                                  detail: >-
                                    freedome-engined not reachable at
                                    unix:/run/freedome/engine.sock
                                  instance: /api/v1/venues/default/players/main/play
                                  code: engine-unavailable
                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                              $defs:
                                knownCode:
                                  enum:
                                    - validation-failed
                                    - not-found
                                    - conflict
                                    - precondition-failed
                                    - precondition-required
                                    - unauthenticated
                                    - forbidden
                                    - rate-limited
                                    - payload-too-large
                                    - unsupported-format
                                    - engine-unavailable
                                    - engine-incompatible
                                    - degraded
                                    - job-failed
                                    - upload-checksum-mismatch
                                    - legacy-unsupported
                                    - internal
                                    - clock-unlocked
                                    - not-configured
                                    - authorization-pending
                                    - slow-down
                                    - access-denied
                                    - expired-token
                                    - token-reused
                                    - idempotency-key-reused
                                    - idempotency-in-progress
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                fieldError:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                            createdAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          additionalProperties: false
                      $defs:
                        calibrationJob:
                          type: object
                          required:
                            - id
                            - venueId
                            - kind
                            - status
                            - steps
                            - createdAt
                          properties:
                            id:
                              description: >-
                                Server-owned resource id: UUIDv7, lowercase,
                                sortable by creation time.
                              type: string
                              pattern: >-
                                ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                              examples:
                                - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                            venueId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            kind:
                              anyOf:
                                - enum:
                                    - visual-camera
                                    - visual-manual
                                    - visual-import
                                    - audio-room
                                    - audio-speaker-check
                                - type: string
                                  pattern: ^[a-z][a-z0-9-]{0,63}$
                            status:
                              description: >-
                                queued → running ⇄ awaiting_input → succeeded |
                                failed | cancelled.
                              enum:
                                - queued
                                - running
                                - awaiting_input
                                - succeeded
                                - failed
                                - cancelled
                            progress:
                              type: number
                              minimum: 0
                              maximum: 1
                            displays:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                            speakers:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                            steps:
                              type: array
                              items:
                                type: object
                                required:
                                  - id
                                  - status
                                properties:
                                  id:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  name:
                                    type: string
                                  displayId:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  status:
                                    enum:
                                      - pending
                                      - running
                                      - awaiting_input
                                      - done
                                      - failed
                                      - skipped
                                additionalProperties: false
                            currentStep:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            awaiting:
                              description: >-
                                Set while status = awaiting_input: what the
                                operator / camera must provide.
                              anyOf:
                                - type: 'null'
                                - type: object
                                  required:
                                    - kind
                                  properties:
                                    kind:
                                      anyOf:
                                        - enum:
                                            - camera-capture
                                            - manual-adjust
                                            - confirm
                                        - type: string
                                    stepId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    displayId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    pattern:
                                      description: >-
                                        PUT
                                        /venues/{venueId}/displays/{displayId}/pattern
                                        body (engine freedome_pattern_*).
                                      type: object
                                      required:
                                        - kind
                                      properties:
                                        kind:
                                          anyOf:
                                            - enum:
                                                - 'off'
                                                - grid
                                                - checker
                                                - gray-ramp
                                                - colour-bars
                                                - dots
                                                - crosshair
                                                - solid
                                                - structured-light
                                            - type: string
                                              pattern: ^[a-z][a-z0-9_-]{0,31}$
                                        params:
                                          description: >-
                                            Kind-specific: grid {spacingDeg,
                                            lineWidthPx, colour}, checker {cells},
                                            solid {colour}, structured-light
                                            {sequence, index} …
                                          type: object
                                        face:
                                          type: integer
                                          minimum: 0
                                          maximum: 5
                                          description: >-
                                            prism / pyramid: limit to one optics
                                            face
                                      additionalProperties: false
                                    instructions:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Localised text map
                                        {"en":…,"ru":…}, 02e §3.1 (as .dome
                                        meta.title).
                                      title: Localised text
                                      type: object
                                      minProperties: 1
                                      propertyNames:
                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                      additionalProperties:
                                        type: string
                                      examples:
                                        - en: Intro
                                          ru: Вступление
                                      $defs:
                                        textOrI18n:
                                          description: >-
                                            Plain string (treated as `en`) or a
                                            localised map. (map branch = the root
                                            schema, inlined for tools that
                                            mis-handle self references)
                                          anyOf:
                                            - type: string
                                            - type: object
                                              minProperties: 1
                                              propertyNames:
                                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                              additionalProperties:
                                                type: string
                                              examples:
                                                - en: Intro
                                                  ru: Вступление
                                  additionalProperties: false
                            errors:
                              description: Per-display residual error after solving.
                              type: array
                              items:
                                type: object
                                required:
                                  - displayId
                                properties:
                                  displayId:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  meanError:
                                    type: number
                                    minimum: 0
                                  maxError:
                                    type: number
                                    minimum: 0
                                  unit:
                                    type: string
                                additionalProperties: false
                            result:
                              description: >-
                                Proposed calibration (applied to the venue by
                                POST …/apply).
                              anyOf:
                                - type: 'null'
                                - description: >-
                                    Per-display calibration (01b §4.3); keys of
                                    `displays` are display ids (checked by the
                                    codecs).
                                  type: object
                                  properties:
                                    displays:
                                      type: object
                                      propertyNames:
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                      additionalProperties:
                                        type: object
                                        properties:
                                          warp:
                                            type: object
                                            required:
                                              - file
                                            properties:
                                              file:
                                                description: FDMESH file (01b §5)
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              kind:
                                                anyOf:
                                                  - enum:
                                                      - uv-grid
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              size:
                                                type: array
                                                items:
                                                  type: integer
                                                  minimum: 1
                                                minItems: 2
                                                maxItems: 2
                                                description: '[width, height] or [cols, rows].'
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          blend:
                                            type: object
                                            required:
                                              - file
                                            properties:
                                              file:
                                                description: 16-bit greyscale PNG
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              bitDepth:
                                                enum:
                                                  - 8
                                                  - 16
                                              gamma:
                                                type: number
                                                exclusiveMinimum: 0
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          colour:
                                            type: object
                                            properties:
                                              lut:
                                                description: Adobe / Resolve .cube 3D LUT
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                              blackLevel:
                                                type: number
                                                minimum: 0
                                                maximum: 1
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          report:
                                            type: object
                                            properties:
                                              method:
                                                anyOf:
                                                  - enum:
                                                      - camera-homography
                                                      - manual
                                                      - imported
                                                      - model
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              date:
                                                type: string
                                                format: date-time
                                              meanError:
                                                type: number
                                                minimum: 0
                                              maxError:
                                                type: number
                                                minimum: 0
                                              unit:
                                                anyOf:
                                                  - enum:
                                                      - px
                                                      - deg
                                                      - mm
                                                  - description: >-
                                                      Value of an open enum: one of the listed
                                                      values or any other token (clients
                                                      tolerate unknown values).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              file:
                                                description: >-
                                                  Entry path inside the container:
                                                  relative, `/`-separated, no `..`
                                                  segment, no backslash, no NUL.
                                                type: string
                                                minLength: 1
                                                maxLength: 1024
                                                pattern: >-
                                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                            problem:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). RFC 9457 problem details with the
                                Freedome `code` catalogue, 02e §3.3. Also the
                                `data` of WS `error`, the socket.io ack error
                                and GraphQL errors[].extensions.problem. The
                                catalogue is open: unknown codes are allowed;
                                known codes are bound to their HTTP status.
                              title: Problem details
                              type: object
                              required:
                                - type
                                - title
                                - code
                              properties:
                                type:
                                  type: string
                                  format: uri
                                  description: >-
                                    https://freedome.nativemind.us/problems/<code>
                                    for catalogue codes.
                                title:
                                  type: string
                                  minLength: 1
                                status:
                                  type: integer
                                  minimum: 100
                                  maximum: 599
                                detail:
                                  type: string
                                instance:
                                  type: string
                                  format: uri-reference
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                traceId:
                                  type: string
                                  pattern: ^[0-9a-f]{16,32}$
                                errors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              allOf:
                                - if:
                                    properties:
                                      code:
                                        const: validation-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: not-found
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 404
                                - if:
                                    properties:
                                      code:
                                        const: conflict
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: precondition-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 412
                                - if:
                                    properties:
                                      code:
                                        const: precondition-required
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 428
                                - if:
                                    properties:
                                      code:
                                        const: unauthenticated
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: forbidden
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: rate-limited
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 429
                                - if:
                                    properties:
                                      code:
                                        const: payload-too-large
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 413
                                - if:
                                    properties:
                                      code:
                                        const: unsupported-format
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 415
                                - if:
                                    properties:
                                      code:
                                        const: engine-unavailable
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: engine-incompatible
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: degraded
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: upload-checksum-mismatch
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: legacy-unsupported
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 501
                                - if:
                                    properties:
                                      code:
                                        const: internal
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 500
                                - if:
                                    properties:
                                      code:
                                        const: clock-unlocked
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: not-configured
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: authorization-pending
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: slow-down
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: access-denied
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: expired-token
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: token-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-key-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-in-progress
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                              additionalProperties: true
                              examples:
                                - type: >-
                                    https://freedome.nativemind.us/problems/engine-unavailable
                                  title: Visual engine unavailable
                                  status: 503
                                  detail: >-
                                    freedome-engined not reachable at
                                    unix:/run/freedome/engine.sock
                                  instance: /api/v1/venues/default/players/main/play
                                  code: engine-unavailable
                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                              $defs:
                                knownCode:
                                  enum:
                                    - validation-failed
                                    - not-found
                                    - conflict
                                    - precondition-failed
                                    - precondition-required
                                    - unauthenticated
                                    - forbidden
                                    - rate-limited
                                    - payload-too-large
                                    - unsupported-format
                                    - engine-unavailable
                                    - engine-incompatible
                                    - degraded
                                    - job-failed
                                    - upload-checksum-mismatch
                                    - legacy-unsupported
                                    - internal
                                    - clock-unlocked
                                    - not-configured
                                    - authorization-pending
                                    - slow-down
                                    - access-denied
                                    - expired-token
                                    - token-reused
                                    - idempotency-key-reused
                                    - idempotency-in-progress
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                fieldError:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                            createdAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          additionalProperties: false
                        kind:
                          anyOf:
                            - enum:
                                - visual-camera
                                - visual-manual
                                - visual-import
                                - audio-room
                                - audio-speaker-check
                            - type: string
                              pattern: ^[a-z][a-z0-9-]{0,63}$
                        start:
                          description: POST /venues/{venueId}/calibration/jobs body.
                          type: object
                          required:
                            - kind
                          properties:
                            kind:
                              anyOf:
                                - enum:
                                    - visual-camera
                                    - visual-manual
                                    - visual-import
                                    - audio-room
                                    - audio-speaker-check
                                - type: string
                                  pattern: ^[a-z][a-z0-9-]{0,63}$
                            displays:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              uniqueItems: true
                            speakers:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              uniqueItems: true
                            options:
                              type: object
                              description: >-
                                kind-specific (grid density, camera model,
                                import format …)
                          additionalProperties: false
                        capture:
                          description: >-
                            POST …/captures JSON body: a camera frame uploaded
                            before (tus upload id); multipart/form-data with an
                            `image` part is the alternative (≤ 32 MB).
                          type: object
                          required:
                            - uploadId
                          properties:
                            uploadId:
                              description: >-
                                Server-owned resource id: UUIDv7, lowercase,
                                sortable by creation time.
                              type: string
                              pattern: >-
                                ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                              examples:
                                - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                            stepId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                          additionalProperties: false
                        awaiting:
                          type: object
                          required:
                            - kind
                          properties:
                            kind:
                              anyOf:
                                - enum:
                                    - camera-capture
                                    - manual-adjust
                                    - confirm
                                - type: string
                            stepId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            displayId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            pattern:
                              description: >-
                                PUT
                                /venues/{venueId}/displays/{displayId}/pattern
                                body (engine freedome_pattern_*).
                              type: object
                              required:
                                - kind
                              properties:
                                kind:
                                  anyOf:
                                    - enum:
                                        - 'off'
                                        - grid
                                        - checker
                                        - gray-ramp
                                        - colour-bars
                                        - dots
                                        - crosshair
                                        - solid
                                        - structured-light
                                    - type: string
                                      pattern: ^[a-z][a-z0-9_-]{0,31}$
                                params:
                                  description: >-
                                    Kind-specific: grid {spacingDeg,
                                    lineWidthPx, colour}, checker {cells}, solid
                                    {colour}, structured-light {sequence, index}
                                    …
                                  type: object
                                face:
                                  type: integer
                                  minimum: 0
                                  maximum: 5
                                  description: 'prism / pyramid: limit to one optics face'
                              additionalProperties: false
                            instructions:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). Localised text map {"en":…,"ru":…},
                                02e §3.1 (as .dome meta.title).
                              title: Localised text
                              type: object
                              minProperties: 1
                              propertyNames:
                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                              additionalProperties:
                                type: string
                              examples:
                                - en: Intro
                                  ru: Вступление
                              $defs:
                                textOrI18n:
                                  description: >-
                                    Plain string (treated as `en`) or a
                                    localised map. (map branch = the root
                                    schema, inlined for tools that mis-handle
                                    self references)
                                  anyOf:
                                    - type: string
                                    - type: object
                                      minProperties: 1
                                      propertyNames:
                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                      additionalProperties:
                                        type: string
                                      examples:
                                        - en: Intro
                                          ru: Вступление
                          additionalProperties: false
                        page:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                type: object
                                required:
                                  - id
                                  - venueId
                                  - kind
                                  - status
                                  - steps
                                  - createdAt
                                properties:
                                  id:
                                    description: >-
                                      Server-owned resource id: UUIDv7,
                                      lowercase, sortable by creation time.
                                    type: string
                                    pattern: >-
                                      ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                    examples:
                                      - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                                  venueId:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  kind:
                                    anyOf:
                                      - enum:
                                          - visual-camera
                                          - visual-manual
                                          - visual-import
                                          - audio-room
                                          - audio-speaker-check
                                      - type: string
                                        pattern: ^[a-z][a-z0-9-]{0,63}$
                                  status:
                                    description: >-
                                      queued → running ⇄ awaiting_input →
                                      succeeded | failed | cancelled.
                                    enum:
                                      - queued
                                      - running
                                      - awaiting_input
                                      - succeeded
                                      - failed
                                      - cancelled
                                  progress:
                                    type: number
                                    minimum: 0
                                    maximum: 1
                                  displays:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                  speakers:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                  steps:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - id
                                        - status
                                      properties:
                                        id:
                                          description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        name:
                                          type: string
                                        displayId:
                                          description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        status:
                                          enum:
                                            - pending
                                            - running
                                            - awaiting_input
                                            - done
                                            - failed
                                            - skipped
                                      additionalProperties: false
                                  currentStep:
                                    anyOf:
                                      - description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      - type: 'null'
                                  awaiting:
                                    description: >-
                                      Set while status = awaiting_input: what
                                      the operator / camera must provide.
                                    anyOf:
                                      - type: 'null'
                                      - type: object
                                        required:
                                          - kind
                                        properties:
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - camera-capture
                                                  - manual-adjust
                                                  - confirm
                                              - type: string
                                          stepId:
                                            description: >-
                                              Document-scoped id (.dome displays[].id,
                                              assets[].id, playlist / cue ids); unique
                                              within its parent.
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          displayId:
                                            description: >-
                                              Document-scoped id (.dome displays[].id,
                                              assets[].id, playlist / cue ids); unique
                                              within its parent.
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          pattern:
                                            description: >-
                                              PUT
                                              /venues/{venueId}/displays/{displayId}/pattern
                                              body (engine freedome_pattern_*).
                                            type: object
                                            required:
                                              - kind
                                            properties:
                                              kind:
                                                anyOf:
                                                  - enum:
                                                      - 'off'
                                                      - grid
                                                      - checker
                                                      - gray-ramp
                                                      - colour-bars
                                                      - dots
                                                      - crosshair
                                                      - solid
                                                      - structured-light
                                                  - type: string
                                                    pattern: ^[a-z][a-z0-9_-]{0,31}$
                                              params:
                                                description: >-
                                                  Kind-specific: grid {spacingDeg,
                                                  lineWidthPx, colour}, checker {cells},
                                                  solid {colour}, structured-light
                                                  {sequence, index} …
                                                type: object
                                              face:
                                                type: integer
                                                minimum: 0
                                                maximum: 5
                                                description: >-
                                                  prism / pyramid: limit to one optics
                                                  face
                                            additionalProperties: false
                                          instructions:
                                            $schema: >-
                                              https://json-schema.org/draft/2020-12/schema
                                            $id: >-
                                              https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                            $comment: >-
                                              NativeMindNONC — freedome_contract (see
                                              LICENSE). Localised text map
                                              {"en":…,"ru":…}, 02e §3.1 (as .dome
                                              meta.title).
                                            title: Localised text
                                            type: object
                                            minProperties: 1
                                            propertyNames:
                                              pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                            additionalProperties:
                                              type: string
                                            examples:
                                              - en: Intro
                                                ru: Вступление
                                            $defs:
                                              textOrI18n:
                                                description: >-
                                                  Plain string (treated as `en`) or a
                                                  localised map. (map branch = the root
                                                  schema, inlined for tools that
                                                  mis-handle self references)
                                                anyOf:
                                                  - type: string
                                                  - type: object
                                                    minProperties: 1
                                                    propertyNames:
                                                      pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                    additionalProperties:
                                                      type: string
                                                    examples:
                                                      - en: Intro
                                                        ru: Вступление
                                        additionalProperties: false
                                  errors:
                                    description: Per-display residual error after solving.
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - displayId
                                      properties:
                                        displayId:
                                          description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        meanError:
                                          type: number
                                          minimum: 0
                                        maxError:
                                          type: number
                                          minimum: 0
                                        unit:
                                          type: string
                                      additionalProperties: false
                                  result:
                                    description: >-
                                      Proposed calibration (applied to the venue
                                      by POST …/apply).
                                    anyOf:
                                      - type: 'null'
                                      - description: >-
                                          Per-display calibration (01b §4.3); keys
                                          of `displays` are display ids (checked
                                          by the codecs).
                                        type: object
                                        properties:
                                          displays:
                                            type: object
                                            propertyNames:
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                            additionalProperties:
                                              type: object
                                              properties:
                                                warp:
                                                  type: object
                                                  required:
                                                    - file
                                                  properties:
                                                    file:
                                                      description: FDMESH file (01b §5)
                                                      type: string
                                                      minLength: 1
                                                      maxLength: 1024
                                                      pattern: >-
                                                        ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                    kind:
                                                      anyOf:
                                                        - enum:
                                                            - uv-grid
                                                        - description: >-
                                                            Value of an open enum: one of the listed
                                                            values or any other token (clients
                                                            tolerate unknown values).
                                                          type: string
                                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                    size:
                                                      type: array
                                                      items:
                                                        type: integer
                                                        minimum: 1
                                                      minItems: 2
                                                      maxItems: 2
                                                      description: '[width, height] or [cols, rows].'
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                                blend:
                                                  type: object
                                                  required:
                                                    - file
                                                  properties:
                                                    file:
                                                      description: 16-bit greyscale PNG
                                                      type: string
                                                      minLength: 1
                                                      maxLength: 1024
                                                      pattern: >-
                                                        ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                    bitDepth:
                                                      enum:
                                                        - 8
                                                        - 16
                                                    gamma:
                                                      type: number
                                                      exclusiveMinimum: 0
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                                colour:
                                                  type: object
                                                  properties:
                                                    lut:
                                                      description: Adobe / Resolve .cube 3D LUT
                                                      type: string
                                                      minLength: 1
                                                      maxLength: 1024
                                                      pattern: >-
                                                        ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                    blackLevel:
                                                      type: number
                                                      minimum: 0
                                                      maximum: 1
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                                report:
                                                  type: object
                                                  properties:
                                                    method:
                                                      anyOf:
                                                        - enum:
                                                            - camera-homography
                                                            - manual
                                                            - imported
                                                            - model
                                                        - description: >-
                                                            Value of an open enum: one of the listed
                                                            values or any other token (clients
                                                            tolerate unknown values).
                                                          type: string
                                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                    date:
                                                      type: string
                                                      format: date-time
                                                    meanError:
                                                      type: number
                                                      minimum: 0
                                                    maxError:
                                                      type: number
                                                      minimum: 0
                                                    unit:
                                                      anyOf:
                                                        - enum:
                                                            - px
                                                            - deg
                                                            - mm
                                                        - description: >-
                                                            Value of an open enum: one of the listed
                                                            values or any other token (clients
                                                            tolerate unknown values).
                                                          type: string
                                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                    file:
                                                      description: >-
                                                        Entry path inside the container:
                                                        relative, `/`-separated, no `..`
                                                        segment, no backslash, no NUL.
                                                      type: string
                                                      minLength: 1
                                                      maxLength: 1024
                                                      pattern: >-
                                                        ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                  problem:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  createdAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  updatedAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                additionalProperties: false
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                          additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: calibrationJob.progress
                  required:
                    - kind
                then:
                  properties:
                    patch:
                      type: object
                      minProperties: 1
                      properties:
                        progress:
                          type: number
                          minimum: 0
                          maximum: 1
                        currentStep:
                          anyOf:
                            - description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            - type: 'null'
                        message:
                          type: string
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: calibrationJob.awaiting
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: >-
                        Same object as calibration-job `awaiting` (null when
                        nothing is awaited).
                      anyOf:
                        - type: 'null'
                        - type: object
                          required:
                            - kind
                          properties:
                            kind:
                              anyOf:
                                - enum:
                                    - camera-capture
                                    - manual-adjust
                                    - confirm
                                - type: string
                            stepId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            displayId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            pattern:
                              description: >-
                                PUT
                                /venues/{venueId}/displays/{displayId}/pattern
                                body (engine freedome_pattern_*).
                              type: object
                              required:
                                - kind
                              properties:
                                kind:
                                  anyOf:
                                    - enum:
                                        - 'off'
                                        - grid
                                        - checker
                                        - gray-ramp
                                        - colour-bars
                                        - dots
                                        - crosshair
                                        - solid
                                        - structured-light
                                    - type: string
                                      pattern: ^[a-z][a-z0-9_-]{0,31}$
                                params:
                                  description: >-
                                    Kind-specific: grid {spacingDeg,
                                    lineWidthPx, colour}, checker {cells}, solid
                                    {colour}, structured-light {sequence, index}
                                    …
                                  type: object
                                face:
                                  type: integer
                                  minimum: 0
                                  maximum: 5
                                  description: 'prism / pyramid: limit to one optics face'
                              additionalProperties: false
                            instructions:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). Localised text map {"en":…,"ru":…},
                                02e §3.1 (as .dome meta.title).
                              title: Localised text
                              type: object
                              minProperties: 1
                              propertyNames:
                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                              additionalProperties:
                                type: string
                              examples:
                                - en: Intro
                                  ru: Вступление
                              $defs:
                                textOrI18n:
                                  description: >-
                                    Plain string (treated as `en`) or a
                                    localised map. (map branch = the root
                                    schema, inlined for tools that mis-handle
                                    self references)
                                  anyOf:
                                    - type: string
                                    - type: object
                                      minProperties: 1
                                      propertyNames:
                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                      additionalProperties:
                                        type: string
                                      examples:
                                        - en: Intro
                                          ru: Вступление
                          additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: job.state
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/api/1.0/job.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE).
                        Generic long-running operation (02e §3.1, §5.1 GET
                        /jobs/{jobId}).
                      title: Job
                      allOf:
                        - type: object
                          required:
                            - id
                            - kind
                            - status
                            - createdAt
                          properties:
                            id:
                              description: >-
                                Server-owned resource id: UUIDv7, lowercase,
                                sortable by creation time.
                              type: string
                              pattern: >-
                                ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                              examples:
                                - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                            kind:
                              anyOf:
                                - enum:
                                    - calibration
                                    - import
                                    - export
                                    - backup
                                    - restore
                                    - diagnostics
                                    - update
                                    - probe
                                - type: string
                                  pattern: ^[a-z0-9][a-z0-9._-]{0,63}$
                            status:
                              description: >-
                                queued → running ⇄ awaiting_input → succeeded |
                                failed | cancelled.
                              enum:
                                - queued
                                - running
                                - awaiting_input
                                - succeeded
                                - failed
                                - cancelled
                            progress:
                              type: number
                              minimum: 0
                              maximum: 1
                            message:
                              type: string
                            createdAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            finishedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            result:
                              description: >-
                                Kind-specific result (e.g. { venueId } of an
                                import).
                            problem:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). RFC 9457 problem details with the
                                Freedome `code` catalogue, 02e §3.3. Also the
                                `data` of WS `error`, the socket.io ack error
                                and GraphQL errors[].extensions.problem. The
                                catalogue is open: unknown codes are allowed;
                                known codes are bound to their HTTP status.
                              title: Problem details
                              type: object
                              required:
                                - type
                                - title
                                - code
                              properties:
                                type:
                                  type: string
                                  format: uri
                                  description: >-
                                    https://freedome.nativemind.us/problems/<code>
                                    for catalogue codes.
                                title:
                                  type: string
                                  minLength: 1
                                status:
                                  type: integer
                                  minimum: 100
                                  maximum: 599
                                detail:
                                  type: string
                                instance:
                                  type: string
                                  format: uri-reference
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                traceId:
                                  type: string
                                  pattern: ^[0-9a-f]{16,32}$
                                errors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              allOf:
                                - if:
                                    properties:
                                      code:
                                        const: validation-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: not-found
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 404
                                - if:
                                    properties:
                                      code:
                                        const: conflict
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: precondition-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 412
                                - if:
                                    properties:
                                      code:
                                        const: precondition-required
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 428
                                - if:
                                    properties:
                                      code:
                                        const: unauthenticated
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: forbidden
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: rate-limited
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 429
                                - if:
                                    properties:
                                      code:
                                        const: payload-too-large
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 413
                                - if:
                                    properties:
                                      code:
                                        const: unsupported-format
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 415
                                - if:
                                    properties:
                                      code:
                                        const: engine-unavailable
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: engine-incompatible
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: degraded
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: upload-checksum-mismatch
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: legacy-unsupported
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 501
                                - if:
                                    properties:
                                      code:
                                        const: internal
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 500
                                - if:
                                    properties:
                                      code:
                                        const: clock-unlocked
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: not-configured
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: authorization-pending
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: slow-down
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: access-denied
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: expired-token
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: token-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-key-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-in-progress
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                              additionalProperties: true
                              examples:
                                - type: >-
                                    https://freedome.nativemind.us/problems/engine-unavailable
                                  title: Visual engine unavailable
                                  status: 503
                                  detail: >-
                                    freedome-engined not reachable at
                                    unix:/run/freedome/engine.sock
                                  instance: /api/v1/venues/default/players/main/play
                                  code: engine-unavailable
                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                              $defs:
                                knownCode:
                                  enum:
                                    - validation-failed
                                    - not-found
                                    - conflict
                                    - precondition-failed
                                    - precondition-required
                                    - unauthenticated
                                    - forbidden
                                    - rate-limited
                                    - payload-too-large
                                    - unsupported-format
                                    - engine-unavailable
                                    - engine-incompatible
                                    - degraded
                                    - job-failed
                                    - upload-checksum-mismatch
                                    - legacy-unsupported
                                    - internal
                                    - clock-unlocked
                                    - not-configured
                                    - authorization-pending
                                    - slow-down
                                    - access-denied
                                    - expired-token
                                    - token-reused
                                    - idempotency-key-reused
                                    - idempotency-in-progress
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                fieldError:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                            links:
                              type: object
                              properties:
                                self:
                                  type: string
                                  format: uri-reference
                                cancel:
                                  type: string
                                  format: uri-reference
                                resource:
                                  type: string
                                  format: uri-reference
                              additionalProperties: false
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                          allOf:
                            - if:
                                properties:
                                  status:
                                    const: failed
                                required:
                                  - status
                              then:
                                required:
                                  - problem
                      $defs:
                        job:
                          type: object
                          required:
                            - id
                            - kind
                            - status
                            - createdAt
                          properties:
                            id:
                              description: >-
                                Server-owned resource id: UUIDv7, lowercase,
                                sortable by creation time.
                              type: string
                              pattern: >-
                                ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                              examples:
                                - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                            kind:
                              anyOf:
                                - enum:
                                    - calibration
                                    - import
                                    - export
                                    - backup
                                    - restore
                                    - diagnostics
                                    - update
                                    - probe
                                - type: string
                                  pattern: ^[a-z0-9][a-z0-9._-]{0,63}$
                            status:
                              description: >-
                                queued → running ⇄ awaiting_input → succeeded |
                                failed | cancelled.
                              enum:
                                - queued
                                - running
                                - awaiting_input
                                - succeeded
                                - failed
                                - cancelled
                            progress:
                              type: number
                              minimum: 0
                              maximum: 1
                            message:
                              type: string
                            createdAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            finishedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            result:
                              description: >-
                                Kind-specific result (e.g. { venueId } of an
                                import).
                            problem:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). RFC 9457 problem details with the
                                Freedome `code` catalogue, 02e §3.3. Also the
                                `data` of WS `error`, the socket.io ack error
                                and GraphQL errors[].extensions.problem. The
                                catalogue is open: unknown codes are allowed;
                                known codes are bound to their HTTP status.
                              title: Problem details
                              type: object
                              required:
                                - type
                                - title
                                - code
                              properties:
                                type:
                                  type: string
                                  format: uri
                                  description: >-
                                    https://freedome.nativemind.us/problems/<code>
                                    for catalogue codes.
                                title:
                                  type: string
                                  minLength: 1
                                status:
                                  type: integer
                                  minimum: 100
                                  maximum: 599
                                detail:
                                  type: string
                                instance:
                                  type: string
                                  format: uri-reference
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                traceId:
                                  type: string
                                  pattern: ^[0-9a-f]{16,32}$
                                errors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              allOf:
                                - if:
                                    properties:
                                      code:
                                        const: validation-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: not-found
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 404
                                - if:
                                    properties:
                                      code:
                                        const: conflict
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: precondition-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 412
                                - if:
                                    properties:
                                      code:
                                        const: precondition-required
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 428
                                - if:
                                    properties:
                                      code:
                                        const: unauthenticated
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: forbidden
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: rate-limited
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 429
                                - if:
                                    properties:
                                      code:
                                        const: payload-too-large
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 413
                                - if:
                                    properties:
                                      code:
                                        const: unsupported-format
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 415
                                - if:
                                    properties:
                                      code:
                                        const: engine-unavailable
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: engine-incompatible
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: degraded
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: upload-checksum-mismatch
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: legacy-unsupported
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 501
                                - if:
                                    properties:
                                      code:
                                        const: internal
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 500
                                - if:
                                    properties:
                                      code:
                                        const: clock-unlocked
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: not-configured
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: authorization-pending
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: slow-down
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: access-denied
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: expired-token
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: token-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-key-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-in-progress
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                              additionalProperties: true
                              examples:
                                - type: >-
                                    https://freedome.nativemind.us/problems/engine-unavailable
                                  title: Visual engine unavailable
                                  status: 503
                                  detail: >-
                                    freedome-engined not reachable at
                                    unix:/run/freedome/engine.sock
                                  instance: /api/v1/venues/default/players/main/play
                                  code: engine-unavailable
                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                              $defs:
                                knownCode:
                                  enum:
                                    - validation-failed
                                    - not-found
                                    - conflict
                                    - precondition-failed
                                    - precondition-required
                                    - unauthenticated
                                    - forbidden
                                    - rate-limited
                                    - payload-too-large
                                    - unsupported-format
                                    - engine-unavailable
                                    - engine-incompatible
                                    - degraded
                                    - job-failed
                                    - upload-checksum-mismatch
                                    - legacy-unsupported
                                    - internal
                                    - clock-unlocked
                                    - not-configured
                                    - authorization-pending
                                    - slow-down
                                    - access-denied
                                    - expired-token
                                    - token-reused
                                    - idempotency-key-reused
                                    - idempotency-in-progress
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                fieldError:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                            links:
                              type: object
                              properties:
                                self:
                                  type: string
                                  format: uri-reference
                                cancel:
                                  type: string
                                  format: uri-reference
                                resource:
                                  type: string
                                  format: uri-reference
                              additionalProperties: false
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                          allOf:
                            - if:
                                properties:
                                  status:
                                    const: failed
                                required:
                                  - status
                              then:
                                required:
                                  - problem
                        token:
                          type: string
                          pattern: ^[a-z0-9][a-z0-9._-]{0,63}$
                        status:
                          description: >-
                            queued → running ⇄ awaiting_input → succeeded |
                            failed | cancelled.
                          enum:
                            - queued
                            - running
                            - awaiting_input
                            - succeeded
                            - failed
                            - cancelled
                        page:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                type: object
                                required:
                                  - id
                                  - kind
                                  - status
                                  - createdAt
                                properties:
                                  id:
                                    description: >-
                                      Server-owned resource id: UUIDv7,
                                      lowercase, sortable by creation time.
                                    type: string
                                    pattern: >-
                                      ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                    examples:
                                      - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                                  kind:
                                    anyOf:
                                      - enum:
                                          - calibration
                                          - import
                                          - export
                                          - backup
                                          - restore
                                          - diagnostics
                                          - update
                                          - probe
                                      - type: string
                                        pattern: ^[a-z0-9][a-z0-9._-]{0,63}$
                                  status:
                                    description: >-
                                      queued → running ⇄ awaiting_input →
                                      succeeded | failed | cancelled.
                                    enum:
                                      - queued
                                      - running
                                      - awaiting_input
                                      - succeeded
                                      - failed
                                      - cancelled
                                  progress:
                                    type: number
                                    minimum: 0
                                    maximum: 1
                                  message:
                                    type: string
                                  createdAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  updatedAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  finishedAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  result:
                                    description: >-
                                      Kind-specific result (e.g. { venueId } of
                                      an import).
                                  problem:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  links:
                                    type: object
                                    properties:
                                      self:
                                        type: string
                                        format: uri-reference
                                      cancel:
                                        type: string
                                        format: uri-reference
                                      resource:
                                        type: string
                                        format: uri-reference
                                    additionalProperties: false
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                allOf:
                                  - if:
                                      properties:
                                        status:
                                          const: failed
                                      required:
                                        - status
                                    then:
                                      required:
                                        - problem
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                          additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: job.progress
                  required:
                    - kind
                then:
                  properties:
                    patch:
                      type: object
                      minProperties: 1
                      properties:
                        progress:
                          type: number
                          minimum: 0
                          maximum: 1
                        currentStep:
                          anyOf:
                            - description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            - type: 'null'
                        message:
                          type: string
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: log.entry
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      type: object
                      required:
                        - ts
                        - level
                        - message
                      properties:
                        seq:
                          type: integer
                          minimum: 0
                        ts:
                          description: >-
                            RFC 3339 UTC with milliseconds, e.g.
                            2026-10-19T12:00:00.000Z.
                          type: string
                          format: date-time
                          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                        level:
                          enum:
                            - trace
                            - debug
                            - info
                            - warn
                            - error
                        target:
                          type: string
                          description: module / component
                        message:
                          type: string
                        fields:
                          type: object
                          additionalProperties: true
                        traceId:
                          type: string
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: node.state
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: >-
                        Cluster node (02d UC-K1–K3): this server and the engine
                        hosts it drives.
                      type: object
                      required:
                        - id
                        - role
                        - status
                      properties:
                        id:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        name:
                          type: string
                        role:
                          anyOf:
                            - enum:
                                - primary
                                - engine
                                - peer
                            - type: string
                        status:
                          anyOf:
                            - enum:
                                - up
                                - degraded
                                - down
                            - type: string
                        address:
                          type: string
                        engines:
                          type: array
                          items:
                            type: string
                        clock:
                          description: Clock status of a node (02d ClockStatus).
                          type: object
                          required:
                            - source
                            - locked
                          properties:
                            source:
                              anyOf:
                                - enum:
                                    - ptp
                                    - ntp
                                    - local
                                - type: string
                            offsetMs:
                              type: number
                            jitterMs:
                              type: number
                              minimum: 0
                            masterId:
                              type: string
                            locked:
                              type: boolean
                          additionalProperties: false
                        lastSeen:
                          description: >-
                            RFC 3339 UTC with milliseconds, e.g.
                            2026-10-19T12:00:00.000Z.
                          type: string
                          format: date-time
                          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                      patternProperties:
                        ^x-: true
                      additionalProperties: false
                    patch:
                      description: Merge patch of the resource (high-rate kinds).
                      type: object
                      minProperties: 1
              - if:
                  properties:
                    kind:
                      const: player.state
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/api/1.0/player.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). Media
                        player state and playback command bodies (02e §5.3:
                        players, play / pause / resume / stop / next / previous
                        / seek, fireCue, setActiveShow, parameters). Root = GET
                        /venues/{venueId}/players/{playerId}.
                      title: Media player
                      allOf:
                        - type: object
                          required:
                            - id
                            - venueId
                            - status
                            - position
                            - revision
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            venueId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            name:
                              type: string
                            status:
                              anyOf:
                                - enum:
                                    - idle
                                    - loading
                                    - playing
                                    - paused
                                    - stopped
                                    - error
                                - type: string
                                  pattern: ^[a-z][a-z_-]{0,31}$
                            showId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            playlistId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            timelineId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            matrixCell:
                              anyOf:
                                - type: object
                                  required:
                                    - row
                                    - column
                                  properties:
                                    matrixId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    row:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    column:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                  additionalProperties: false
                                - type: 'null'
                            itemIndex:
                              anyOf:
                                - type: integer
                                  minimum: 0
                                - type: 'null'
                            assetId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            position:
                              description: Media position in seconds from the start.
                              type: number
                              minimum: 0
                            duration:
                              anyOf:
                                - description: Duration in seconds.
                                  type: number
                                  minimum: 0
                                - type: 'null'
                            rate:
                              type: number
                              exclusiveMinimum: 0
                              maximum: 16
                              description: playback rate, 1 = normal
                            loop:
                              type: boolean
                            volume:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            opacity:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            brightness:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            rotation:
                              type: number
                              minimum: -360
                              maximum: 360
                            target:
                              type: object
                              properties:
                                displays:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                layer:
                                  type: integer
                                  minimum: 0
                              additionalProperties: false
                            pending:
                              type: boolean
                              description: >-
                                last command not yet acknowledged by the engine
                                (2 s timeout); a later player.state resolves it
                            scheduledAt:
                              anyOf:
                                - description: >-
                                    RFC 3339 UTC with milliseconds, e.g.
                                    2026-10-19T12:00:00.000Z.
                                  type: string
                                  format: date-time
                                  pattern: >-
                                    ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                - type: 'null'
                              description: pending scheduled start (play.at)
                            error:
                              anyOf:
                                - $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). RFC 9457 problem details with the
                                    Freedome `code` catalogue, 02e §3.3. Also
                                    the `data` of WS `error`, the socket.io ack
                                    error and GraphQL
                                    errors[].extensions.problem. The catalogue
                                    is open: unknown codes are allowed; known
                                    codes are bound to their HTTP status.
                                  title: Problem details
                                  type: object
                                  required:
                                    - type
                                    - title
                                    - code
                                  properties:
                                    type:
                                      type: string
                                      format: uri
                                      description: >-
                                        https://freedome.nativemind.us/problems/<code>
                                        for catalogue codes.
                                    title:
                                      type: string
                                      minLength: 1
                                    status:
                                      type: integer
                                      minimum: 100
                                      maximum: 599
                                    detail:
                                      type: string
                                    instance:
                                      type: string
                                      format: uri-reference
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    traceId:
                                      type: string
                                      pattern: ^[0-9a-f]{16,32}$
                                    errors:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  allOf:
                                    - if:
                                        properties:
                                          code:
                                            const: validation-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: not-found
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 404
                                    - if:
                                        properties:
                                          code:
                                            const: conflict
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 412
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-required
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 428
                                    - if:
                                        properties:
                                          code:
                                            const: unauthenticated
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: forbidden
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: rate-limited
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 429
                                    - if:
                                        properties:
                                          code:
                                            const: payload-too-large
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 413
                                    - if:
                                        properties:
                                          code:
                                            const: unsupported-format
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 415
                                    - if:
                                        properties:
                                          code:
                                            const: engine-unavailable
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: engine-incompatible
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: degraded
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: upload-checksum-mismatch
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: legacy-unsupported
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 501
                                    - if:
                                        properties:
                                          code:
                                            const: internal
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 500
                                    - if:
                                        properties:
                                          code:
                                            const: clock-unlocked
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: not-configured
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: authorization-pending
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: slow-down
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: access-denied
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: expired-token
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: token-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-key-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-in-progress
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                  additionalProperties: true
                                  examples:
                                    - type: >-
                                        https://freedome.nativemind.us/problems/engine-unavailable
                                      title: Visual engine unavailable
                                      status: 503
                                      detail: >-
                                        freedome-engined not reachable at
                                        unix:/run/freedome/engine.sock
                                      instance: /api/v1/venues/default/players/main/play
                                      code: engine-unavailable
                                      traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                  $defs:
                                    knownCode:
                                      enum:
                                        - validation-failed
                                        - not-found
                                        - conflict
                                        - precondition-failed
                                        - precondition-required
                                        - unauthenticated
                                        - forbidden
                                        - rate-limited
                                        - payload-too-large
                                        - unsupported-format
                                        - engine-unavailable
                                        - engine-incompatible
                                        - degraded
                                        - job-failed
                                        - upload-checksum-mismatch
                                        - legacy-unsupported
                                        - internal
                                        - clock-unlocked
                                        - not-configured
                                        - authorization-pending
                                        - slow-down
                                        - access-denied
                                        - expired-token
                                        - token-reused
                                        - idempotency-key-reused
                                        - idempotency-in-progress
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    fieldError:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                - type: 'null'
                            revision:
                              description: >-
                                Monotonic resource revision; the strong ETag is
                                derived from it.
                              type: integer
                              minimum: 0
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                      $defs:
                        player:
                          type: object
                          required:
                            - id
                            - venueId
                            - status
                            - position
                            - revision
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            venueId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            name:
                              type: string
                            status:
                              anyOf:
                                - enum:
                                    - idle
                                    - loading
                                    - playing
                                    - paused
                                    - stopped
                                    - error
                                - type: string
                                  pattern: ^[a-z][a-z_-]{0,31}$
                            showId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            playlistId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            timelineId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            matrixCell:
                              anyOf:
                                - type: object
                                  required:
                                    - row
                                    - column
                                  properties:
                                    matrixId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    row:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    column:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                  additionalProperties: false
                                - type: 'null'
                            itemIndex:
                              anyOf:
                                - type: integer
                                  minimum: 0
                                - type: 'null'
                            assetId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            position:
                              description: Media position in seconds from the start.
                              type: number
                              minimum: 0
                            duration:
                              anyOf:
                                - description: Duration in seconds.
                                  type: number
                                  minimum: 0
                                - type: 'null'
                            rate:
                              type: number
                              exclusiveMinimum: 0
                              maximum: 16
                              description: playback rate, 1 = normal
                            loop:
                              type: boolean
                            volume:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            opacity:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            brightness:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            rotation:
                              type: number
                              minimum: -360
                              maximum: 360
                            target:
                              type: object
                              properties:
                                displays:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                layer:
                                  type: integer
                                  minimum: 0
                              additionalProperties: false
                            pending:
                              type: boolean
                              description: >-
                                last command not yet acknowledged by the engine
                                (2 s timeout); a later player.state resolves it
                            scheduledAt:
                              anyOf:
                                - description: >-
                                    RFC 3339 UTC with milliseconds, e.g.
                                    2026-10-19T12:00:00.000Z.
                                  type: string
                                  format: date-time
                                  pattern: >-
                                    ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                - type: 'null'
                              description: pending scheduled start (play.at)
                            error:
                              anyOf:
                                - $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). RFC 9457 problem details with the
                                    Freedome `code` catalogue, 02e §3.3. Also
                                    the `data` of WS `error`, the socket.io ack
                                    error and GraphQL
                                    errors[].extensions.problem. The catalogue
                                    is open: unknown codes are allowed; known
                                    codes are bound to their HTTP status.
                                  title: Problem details
                                  type: object
                                  required:
                                    - type
                                    - title
                                    - code
                                  properties:
                                    type:
                                      type: string
                                      format: uri
                                      description: >-
                                        https://freedome.nativemind.us/problems/<code>
                                        for catalogue codes.
                                    title:
                                      type: string
                                      minLength: 1
                                    status:
                                      type: integer
                                      minimum: 100
                                      maximum: 599
                                    detail:
                                      type: string
                                    instance:
                                      type: string
                                      format: uri-reference
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    traceId:
                                      type: string
                                      pattern: ^[0-9a-f]{16,32}$
                                    errors:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  allOf:
                                    - if:
                                        properties:
                                          code:
                                            const: validation-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: not-found
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 404
                                    - if:
                                        properties:
                                          code:
                                            const: conflict
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 412
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-required
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 428
                                    - if:
                                        properties:
                                          code:
                                            const: unauthenticated
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: forbidden
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: rate-limited
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 429
                                    - if:
                                        properties:
                                          code:
                                            const: payload-too-large
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 413
                                    - if:
                                        properties:
                                          code:
                                            const: unsupported-format
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 415
                                    - if:
                                        properties:
                                          code:
                                            const: engine-unavailable
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: engine-incompatible
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: degraded
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: upload-checksum-mismatch
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: legacy-unsupported
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 501
                                    - if:
                                        properties:
                                          code:
                                            const: internal
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 500
                                    - if:
                                        properties:
                                          code:
                                            const: clock-unlocked
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: not-configured
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: authorization-pending
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: slow-down
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: access-denied
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: expired-token
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: token-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-key-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-in-progress
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                  additionalProperties: true
                                  examples:
                                    - type: >-
                                        https://freedome.nativemind.us/problems/engine-unavailable
                                      title: Visual engine unavailable
                                      status: 503
                                      detail: >-
                                        freedome-engined not reachable at
                                        unix:/run/freedome/engine.sock
                                      instance: /api/v1/venues/default/players/main/play
                                      code: engine-unavailable
                                      traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                  $defs:
                                    knownCode:
                                      enum:
                                        - validation-failed
                                        - not-found
                                        - conflict
                                        - precondition-failed
                                        - precondition-required
                                        - unauthenticated
                                        - forbidden
                                        - rate-limited
                                        - payload-too-large
                                        - unsupported-format
                                        - engine-unavailable
                                        - engine-incompatible
                                        - degraded
                                        - job-failed
                                        - upload-checksum-mismatch
                                        - legacy-unsupported
                                        - internal
                                        - clock-unlocked
                                        - not-configured
                                        - authorization-pending
                                        - slow-down
                                        - access-denied
                                        - expired-token
                                        - token-reused
                                        - idempotency-key-reused
                                        - idempotency-in-progress
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    fieldError:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                - type: 'null'
                            revision:
                              description: >-
                                Monotonic resource revision; the strong ETag is
                                derived from it.
                              type: integer
                              minimum: 0
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        status:
                          anyOf:
                            - enum:
                                - idle
                                - loading
                                - playing
                                - paused
                                - stopped
                                - error
                            - type: string
                              pattern: ^[a-z][a-z_-]{0,31}$
                        rate:
                          type: number
                          exclusiveMinimum: 0
                          maximum: 16
                          description: playback rate, 1 = normal
                        matrixCell:
                          type: object
                          required:
                            - row
                            - column
                          properties:
                            matrixId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            row:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            column:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                          additionalProperties: false
                        page:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                type: object
                                required:
                                  - id
                                  - venueId
                                  - status
                                  - position
                                  - revision
                                properties:
                                  id:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  venueId:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  name:
                                    type: string
                                  status:
                                    anyOf:
                                      - enum:
                                          - idle
                                          - loading
                                          - playing
                                          - paused
                                          - stopped
                                          - error
                                      - type: string
                                        pattern: ^[a-z][a-z_-]{0,31}$
                                  showId:
                                    anyOf:
                                      - description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      - type: 'null'
                                  playlistId:
                                    anyOf:
                                      - description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      - type: 'null'
                                  timelineId:
                                    anyOf:
                                      - description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      - type: 'null'
                                  matrixCell:
                                    anyOf:
                                      - type: object
                                        required:
                                          - row
                                          - column
                                        properties:
                                          matrixId:
                                            description: >-
                                              Document-scoped id (.dome displays[].id,
                                              assets[].id, playlist / cue ids); unique
                                              within its parent.
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          row:
                                            description: >-
                                              Document-scoped id (.dome displays[].id,
                                              assets[].id, playlist / cue ids); unique
                                              within its parent.
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          column:
                                            description: >-
                                              Document-scoped id (.dome displays[].id,
                                              assets[].id, playlist / cue ids); unique
                                              within its parent.
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                        additionalProperties: false
                                      - type: 'null'
                                  itemIndex:
                                    anyOf:
                                      - type: integer
                                        minimum: 0
                                      - type: 'null'
                                  assetId:
                                    anyOf:
                                      - description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      - type: 'null'
                                  position:
                                    description: Media position in seconds from the start.
                                    type: number
                                    minimum: 0
                                  duration:
                                    anyOf:
                                      - description: Duration in seconds.
                                        type: number
                                        minimum: 0
                                      - type: 'null'
                                  rate:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 16
                                    description: playback rate, 1 = normal
                                  loop:
                                    type: boolean
                                  volume:
                                    description: >-
                                      0..1 (brightness, linear volume gain,
                                      progress).
                                    type: number
                                    minimum: 0
                                    maximum: 1
                                  opacity:
                                    description: >-
                                      0..1 (brightness, linear volume gain,
                                      progress).
                                    type: number
                                    minimum: 0
                                    maximum: 1
                                  brightness:
                                    description: >-
                                      0..1 (brightness, linear volume gain,
                                      progress).
                                    type: number
                                    minimum: 0
                                    maximum: 1
                                  rotation:
                                    type: number
                                    minimum: -360
                                    maximum: 360
                                  target:
                                    type: object
                                    properties:
                                      displays:
                                        type: array
                                        items:
                                          description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                      layer:
                                        type: integer
                                        minimum: 0
                                    additionalProperties: false
                                  pending:
                                    type: boolean
                                    description: >-
                                      last command not yet acknowledged by the
                                      engine (2 s timeout); a later player.state
                                      resolves it
                                  scheduledAt:
                                    anyOf:
                                      - description: >-
                                          RFC 3339 UTC with milliseconds, e.g.
                                          2026-10-19T12:00:00.000Z.
                                        type: string
                                        format: date-time
                                        pattern: >-
                                          ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                      - type: 'null'
                                    description: pending scheduled start (play.at)
                                  error:
                                    anyOf:
                                      - $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). RFC 9457 problem details with
                                          the Freedome `code` catalogue, 02e §3.3.
                                          Also the `data` of WS `error`, the
                                          socket.io ack error and GraphQL
                                          errors[].extensions.problem. The
                                          catalogue is open: unknown codes are
                                          allowed; known codes are bound to their
                                          HTTP status.
                                        title: Problem details
                                        type: object
                                        required:
                                          - type
                                          - title
                                          - code
                                        properties:
                                          type:
                                            type: string
                                            format: uri
                                            description: >-
                                              https://freedome.nativemind.us/problems/<code>
                                              for catalogue codes.
                                          title:
                                            type: string
                                            minLength: 1
                                          status:
                                            type: integer
                                            minimum: 100
                                            maximum: 599
                                          detail:
                                            type: string
                                          instance:
                                            type: string
                                            format: uri-reference
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          traceId:
                                            type: string
                                            pattern: ^[0-9a-f]{16,32}$
                                          errors:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - pointer
                                                - detail
                                              properties:
                                                pointer:
                                                  type: string
                                                  format: json-pointer
                                                detail:
                                                  type: string
                                                code:
                                                  description: >-
                                                    Stable machine key; also the last path
                                                    segment of `type`. Open set: see
                                                    knownCode.
                                                  type: string
                                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                              additionalProperties: true
                                        allOf:
                                          - if:
                                              properties:
                                                code:
                                                  const: validation-failed
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 422
                                          - if:
                                              properties:
                                                code:
                                                  const: not-found
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 404
                                          - if:
                                              properties:
                                                code:
                                                  const: conflict
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: precondition-failed
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 412
                                          - if:
                                              properties:
                                                code:
                                                  const: precondition-required
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 428
                                          - if:
                                              properties:
                                                code:
                                                  const: unauthenticated
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 401
                                          - if:
                                              properties:
                                                code:
                                                  const: forbidden
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 403
                                          - if:
                                              properties:
                                                code:
                                                  const: rate-limited
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 429
                                          - if:
                                              properties:
                                                code:
                                                  const: payload-too-large
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 413
                                          - if:
                                              properties:
                                                code:
                                                  const: unsupported-format
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 415
                                          - if:
                                              properties:
                                                code:
                                                  const: engine-unavailable
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: engine-incompatible
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: degraded
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: upload-checksum-mismatch
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 422
                                          - if:
                                              properties:
                                                code:
                                                  const: legacy-unsupported
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 501
                                          - if:
                                              properties:
                                                code:
                                                  const: internal
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 500
                                          - if:
                                              properties:
                                                code:
                                                  const: clock-unlocked
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: not-configured
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: authorization-pending
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: slow-down
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: access-denied
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 403
                                          - if:
                                              properties:
                                                code:
                                                  const: expired-token
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: token-reused
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 401
                                          - if:
                                              properties:
                                                code:
                                                  const: idempotency-key-reused
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: idempotency-in-progress
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                        additionalProperties: true
                                        examples:
                                          - type: >-
                                              https://freedome.nativemind.us/problems/engine-unavailable
                                            title: Visual engine unavailable
                                            status: 503
                                            detail: >-
                                              freedome-engined not reachable at
                                              unix:/run/freedome/engine.sock
                                            instance: /api/v1/venues/default/players/main/play
                                            code: engine-unavailable
                                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                        $defs:
                                          knownCode:
                                            enum:
                                              - validation-failed
                                              - not-found
                                              - conflict
                                              - precondition-failed
                                              - precondition-required
                                              - unauthenticated
                                              - forbidden
                                              - rate-limited
                                              - payload-too-large
                                              - unsupported-format
                                              - engine-unavailable
                                              - engine-incompatible
                                              - degraded
                                              - job-failed
                                              - upload-checksum-mismatch
                                              - legacy-unsupported
                                              - internal
                                              - clock-unlocked
                                              - not-configured
                                              - authorization-pending
                                              - slow-down
                                              - access-denied
                                              - expired-token
                                              - token-reused
                                              - idempotency-key-reused
                                              - idempotency-in-progress
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          fieldError:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                      - type: 'null'
                                  revision:
                                    description: >-
                                      Monotonic resource revision; the strong
                                      ETag is derived from it.
                                    type: integer
                                    minimum: 0
                                  updatedAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                          additionalProperties: false
                        patch:
                          description: >-
                            PATCH /venues/{venueId}/players/{playerId}
                            (merge-patch; playback is last-writer-wins, no
                            If-Match).
                          type: object
                          minProperties: 1
                          properties:
                            rate:
                              type: number
                              exclusiveMinimum: 0
                              maximum: 16
                              description: playback rate, 1 = normal
                            loop:
                              type: boolean
                            volume:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            opacity:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            brightness:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            rotation:
                              type: number
                              minimum: -360
                              maximum: 360
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        play:
                          description: >-
                            POST …/play: what to play (absent = resume the
                            loaded source / startup) and when. `at` = scheduled
                            start on the server clock (multi-node sync, 02d
                            UC-K5).
                          type: object
                          properties:
                            showId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            playlistId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            itemIndex:
                              type: integer
                              minimum: 0
                            timelineId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            matrixCell:
                              type: object
                              required:
                                - row
                                - column
                              properties:
                                matrixId:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                row:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                column:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                              additionalProperties: false
                            assetId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            position:
                              description: Media position in seconds from the start.
                              type: number
                              minimum: 0
                            at:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            loop:
                              type: boolean
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                          not:
                            anyOf:
                              - required:
                                  - playlistId
                                  - timelineId
                              - required:
                                  - playlistId
                                  - assetId
                              - required:
                                  - timelineId
                                  - assetId
                              - required:
                                  - matrixCell
                                  - playlistId
                              - required:
                                  - matrixCell
                                  - timelineId
                              - required:
                                  - matrixCell
                                  - assetId
                        seek:
                          description: >-
                            POST …/seek: exactly one of position (s), marker
                            (timeline marker id) or normalized (0..1).
                          type: object
                          properties:
                            position:
                              description: Media position in seconds from the start.
                              type: number
                              minimum: 0
                            marker:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            normalized:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            at:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          additionalProperties: false
                          oneOf:
                            - required:
                                - position
                            - required:
                                - marker
                            - required:
                                - normalized
                        activeShow:
                          description: >-
                            PUT /venues/{venueId}/active-show: load a show onto
                            the venue (mapped onto its geometry); showId null
                            unloads.
                          type: object
                          required:
                            - showId
                          properties:
                            showId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            autoplay:
                              type: boolean
                              default: false
                              description: start `show.startup` on player main
                          additionalProperties: false
                        activeShowState:
                          type: object
                          required:
                            - venueId
                            - showId
                          properties:
                            venueId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            showId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            warnings:
                              type: array
                              items:
                                type: object
                                required:
                                  - code
                                  - detail
                                properties:
                                  code:
                                    type: string
                                    pattern: ^[a-z][a-z0-9-]{0,63}$
                                  detail:
                                    type: string
                                  pointer:
                                    type: string
                                additionalProperties: false
                          additionalProperties: false
                        fireCue:
                          type: object
                          properties:
                            showId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                          additionalProperties: false
                        cueFired:
                          type: object
                          required:
                            - cueId
                            - showId
                            - firedAt
                          properties:
                            cueId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            showId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            firedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            actions:
                              type: array
                              items:
                                type: object
                                required:
                                  - do
                                  - status
                                properties:
                                  do:
                                    type: string
                                  status:
                                    enum:
                                      - ok
                                      - failed
                                      - skipped
                                  problem:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                additionalProperties: false
                          additionalProperties: false
                        parameterValue:
                          description: PUT /venues/{venueId}/parameters/{path} body.
                          type: object
                          required:
                            - value
                          properties:
                            value:
                              anyOf:
                                - type: number
                                - type: boolean
                                - type: string
                            fadeSec:
                              type: number
                              minimum: 0
                              maximum: 3600
                          additionalProperties: false
                        parameter:
                          description: >-
                            A node / layer parameter (02d ParameterService
                            UC-N1–N3; Screenberry-compatible surface).
                          type: object
                          required:
                            - path
                            - type
                            - value
                          properties:
                            path:
                              type: string
                              pattern: ^[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+){0,15}$
                            type:
                              enum:
                                - float
                                - int
                                - bool
                                - string
                                - enum
                                - colour
                            value:
                              anyOf:
                                - type: number
                                - type: boolean
                                - type: string
                            min:
                              type: number
                            max:
                              type: number
                            unit:
                              type: string
                            values:
                              type: array
                              items:
                                type: string
                              description: allowed values of an enum parameter
                            readOnly:
                              type: boolean
                            description:
                              type: string
                          additionalProperties: false
                        parameterPage:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                description: >-
                                  A node / layer parameter (02d ParameterService
                                  UC-N1–N3; Screenberry-compatible surface).
                                type: object
                                required:
                                  - path
                                  - type
                                  - value
                                properties:
                                  path:
                                    type: string
                                    pattern: ^[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+){0,15}$
                                  type:
                                    enum:
                                      - float
                                      - int
                                      - bool
                                      - string
                                      - enum
                                      - colour
                                  value:
                                    anyOf:
                                      - type: number
                                      - type: boolean
                                      - type: string
                                  min:
                                    type: number
                                  max:
                                    type: number
                                  unit:
                                    type: string
                                  values:
                                    type: array
                                    items:
                                      type: string
                                    description: allowed values of an enum parameter
                                  readOnly:
                                    type: boolean
                                  description:
                                    type: string
                                additionalProperties: false
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                          additionalProperties: false
                    patch:
                      description: Merge patch of the resource (high-rate kinds).
                      type: object
                      minProperties: 1
              - if:
                  properties:
                    kind:
                      const: player.position
                  required:
                    - kind
                then:
                  properties:
                    patch:
                      description: >-
                        player.position (default 4 Hz, ≤ 30 Hz per subscription
                        option positionHz).
                      type: object
                      required:
                        - position
                      properties:
                        position:
                          description: Media position in seconds from the start.
                          type: number
                          minimum: 0
                        duration:
                          anyOf:
                            - description: Duration in seconds.
                              type: number
                              minimum: 0
                            - type: 'null'
                        rate:
                          type: number
                        timecode:
                          type: string
                          pattern: ^\d{2}:\d{2}:\d{2}[:;]\d{2}$
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: player.ended
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/api/1.0/player.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). Media
                        player state and playback command bodies (02e §5.3:
                        players, play / pause / resume / stop / next / previous
                        / seek, fireCue, setActiveShow, parameters). Root = GET
                        /venues/{venueId}/players/{playerId}.
                      title: Media player
                      allOf:
                        - type: object
                          required:
                            - id
                            - venueId
                            - status
                            - position
                            - revision
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            venueId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            name:
                              type: string
                            status:
                              anyOf:
                                - enum:
                                    - idle
                                    - loading
                                    - playing
                                    - paused
                                    - stopped
                                    - error
                                - type: string
                                  pattern: ^[a-z][a-z_-]{0,31}$
                            showId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            playlistId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            timelineId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            matrixCell:
                              anyOf:
                                - type: object
                                  required:
                                    - row
                                    - column
                                  properties:
                                    matrixId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    row:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    column:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                  additionalProperties: false
                                - type: 'null'
                            itemIndex:
                              anyOf:
                                - type: integer
                                  minimum: 0
                                - type: 'null'
                            assetId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            position:
                              description: Media position in seconds from the start.
                              type: number
                              minimum: 0
                            duration:
                              anyOf:
                                - description: Duration in seconds.
                                  type: number
                                  minimum: 0
                                - type: 'null'
                            rate:
                              type: number
                              exclusiveMinimum: 0
                              maximum: 16
                              description: playback rate, 1 = normal
                            loop:
                              type: boolean
                            volume:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            opacity:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            brightness:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            rotation:
                              type: number
                              minimum: -360
                              maximum: 360
                            target:
                              type: object
                              properties:
                                displays:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                layer:
                                  type: integer
                                  minimum: 0
                              additionalProperties: false
                            pending:
                              type: boolean
                              description: >-
                                last command not yet acknowledged by the engine
                                (2 s timeout); a later player.state resolves it
                            scheduledAt:
                              anyOf:
                                - description: >-
                                    RFC 3339 UTC with milliseconds, e.g.
                                    2026-10-19T12:00:00.000Z.
                                  type: string
                                  format: date-time
                                  pattern: >-
                                    ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                - type: 'null'
                              description: pending scheduled start (play.at)
                            error:
                              anyOf:
                                - $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). RFC 9457 problem details with the
                                    Freedome `code` catalogue, 02e §3.3. Also
                                    the `data` of WS `error`, the socket.io ack
                                    error and GraphQL
                                    errors[].extensions.problem. The catalogue
                                    is open: unknown codes are allowed; known
                                    codes are bound to their HTTP status.
                                  title: Problem details
                                  type: object
                                  required:
                                    - type
                                    - title
                                    - code
                                  properties:
                                    type:
                                      type: string
                                      format: uri
                                      description: >-
                                        https://freedome.nativemind.us/problems/<code>
                                        for catalogue codes.
                                    title:
                                      type: string
                                      minLength: 1
                                    status:
                                      type: integer
                                      minimum: 100
                                      maximum: 599
                                    detail:
                                      type: string
                                    instance:
                                      type: string
                                      format: uri-reference
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    traceId:
                                      type: string
                                      pattern: ^[0-9a-f]{16,32}$
                                    errors:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  allOf:
                                    - if:
                                        properties:
                                          code:
                                            const: validation-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: not-found
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 404
                                    - if:
                                        properties:
                                          code:
                                            const: conflict
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 412
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-required
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 428
                                    - if:
                                        properties:
                                          code:
                                            const: unauthenticated
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: forbidden
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: rate-limited
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 429
                                    - if:
                                        properties:
                                          code:
                                            const: payload-too-large
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 413
                                    - if:
                                        properties:
                                          code:
                                            const: unsupported-format
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 415
                                    - if:
                                        properties:
                                          code:
                                            const: engine-unavailable
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: engine-incompatible
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: degraded
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: upload-checksum-mismatch
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: legacy-unsupported
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 501
                                    - if:
                                        properties:
                                          code:
                                            const: internal
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 500
                                    - if:
                                        properties:
                                          code:
                                            const: clock-unlocked
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: not-configured
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: authorization-pending
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: slow-down
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: access-denied
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: expired-token
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: token-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-key-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-in-progress
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                  additionalProperties: true
                                  examples:
                                    - type: >-
                                        https://freedome.nativemind.us/problems/engine-unavailable
                                      title: Visual engine unavailable
                                      status: 503
                                      detail: >-
                                        freedome-engined not reachable at
                                        unix:/run/freedome/engine.sock
                                      instance: /api/v1/venues/default/players/main/play
                                      code: engine-unavailable
                                      traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                  $defs:
                                    knownCode:
                                      enum:
                                        - validation-failed
                                        - not-found
                                        - conflict
                                        - precondition-failed
                                        - precondition-required
                                        - unauthenticated
                                        - forbidden
                                        - rate-limited
                                        - payload-too-large
                                        - unsupported-format
                                        - engine-unavailable
                                        - engine-incompatible
                                        - degraded
                                        - job-failed
                                        - upload-checksum-mismatch
                                        - legacy-unsupported
                                        - internal
                                        - clock-unlocked
                                        - not-configured
                                        - authorization-pending
                                        - slow-down
                                        - access-denied
                                        - expired-token
                                        - token-reused
                                        - idempotency-key-reused
                                        - idempotency-in-progress
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    fieldError:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                - type: 'null'
                            revision:
                              description: >-
                                Monotonic resource revision; the strong ETag is
                                derived from it.
                              type: integer
                              minimum: 0
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                      $defs:
                        player:
                          type: object
                          required:
                            - id
                            - venueId
                            - status
                            - position
                            - revision
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            venueId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            name:
                              type: string
                            status:
                              anyOf:
                                - enum:
                                    - idle
                                    - loading
                                    - playing
                                    - paused
                                    - stopped
                                    - error
                                - type: string
                                  pattern: ^[a-z][a-z_-]{0,31}$
                            showId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            playlistId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            timelineId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            matrixCell:
                              anyOf:
                                - type: object
                                  required:
                                    - row
                                    - column
                                  properties:
                                    matrixId:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    row:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    column:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                  additionalProperties: false
                                - type: 'null'
                            itemIndex:
                              anyOf:
                                - type: integer
                                  minimum: 0
                                - type: 'null'
                            assetId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            position:
                              description: Media position in seconds from the start.
                              type: number
                              minimum: 0
                            duration:
                              anyOf:
                                - description: Duration in seconds.
                                  type: number
                                  minimum: 0
                                - type: 'null'
                            rate:
                              type: number
                              exclusiveMinimum: 0
                              maximum: 16
                              description: playback rate, 1 = normal
                            loop:
                              type: boolean
                            volume:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            opacity:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            brightness:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            rotation:
                              type: number
                              minimum: -360
                              maximum: 360
                            target:
                              type: object
                              properties:
                                displays:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                layer:
                                  type: integer
                                  minimum: 0
                              additionalProperties: false
                            pending:
                              type: boolean
                              description: >-
                                last command not yet acknowledged by the engine
                                (2 s timeout); a later player.state resolves it
                            scheduledAt:
                              anyOf:
                                - description: >-
                                    RFC 3339 UTC with milliseconds, e.g.
                                    2026-10-19T12:00:00.000Z.
                                  type: string
                                  format: date-time
                                  pattern: >-
                                    ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                - type: 'null'
                              description: pending scheduled start (play.at)
                            error:
                              anyOf:
                                - $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). RFC 9457 problem details with the
                                    Freedome `code` catalogue, 02e §3.3. Also
                                    the `data` of WS `error`, the socket.io ack
                                    error and GraphQL
                                    errors[].extensions.problem. The catalogue
                                    is open: unknown codes are allowed; known
                                    codes are bound to their HTTP status.
                                  title: Problem details
                                  type: object
                                  required:
                                    - type
                                    - title
                                    - code
                                  properties:
                                    type:
                                      type: string
                                      format: uri
                                      description: >-
                                        https://freedome.nativemind.us/problems/<code>
                                        for catalogue codes.
                                    title:
                                      type: string
                                      minLength: 1
                                    status:
                                      type: integer
                                      minimum: 100
                                      maximum: 599
                                    detail:
                                      type: string
                                    instance:
                                      type: string
                                      format: uri-reference
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    traceId:
                                      type: string
                                      pattern: ^[0-9a-f]{16,32}$
                                    errors:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  allOf:
                                    - if:
                                        properties:
                                          code:
                                            const: validation-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: not-found
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 404
                                    - if:
                                        properties:
                                          code:
                                            const: conflict
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 412
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-required
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 428
                                    - if:
                                        properties:
                                          code:
                                            const: unauthenticated
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: forbidden
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: rate-limited
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 429
                                    - if:
                                        properties:
                                          code:
                                            const: payload-too-large
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 413
                                    - if:
                                        properties:
                                          code:
                                            const: unsupported-format
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 415
                                    - if:
                                        properties:
                                          code:
                                            const: engine-unavailable
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: engine-incompatible
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: degraded
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: upload-checksum-mismatch
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: legacy-unsupported
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 501
                                    - if:
                                        properties:
                                          code:
                                            const: internal
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 500
                                    - if:
                                        properties:
                                          code:
                                            const: clock-unlocked
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: not-configured
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: authorization-pending
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: slow-down
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: access-denied
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: expired-token
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: token-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-key-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-in-progress
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                  additionalProperties: true
                                  examples:
                                    - type: >-
                                        https://freedome.nativemind.us/problems/engine-unavailable
                                      title: Visual engine unavailable
                                      status: 503
                                      detail: >-
                                        freedome-engined not reachable at
                                        unix:/run/freedome/engine.sock
                                      instance: /api/v1/venues/default/players/main/play
                                      code: engine-unavailable
                                      traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                  $defs:
                                    knownCode:
                                      enum:
                                        - validation-failed
                                        - not-found
                                        - conflict
                                        - precondition-failed
                                        - precondition-required
                                        - unauthenticated
                                        - forbidden
                                        - rate-limited
                                        - payload-too-large
                                        - unsupported-format
                                        - engine-unavailable
                                        - engine-incompatible
                                        - degraded
                                        - job-failed
                                        - upload-checksum-mismatch
                                        - legacy-unsupported
                                        - internal
                                        - clock-unlocked
                                        - not-configured
                                        - authorization-pending
                                        - slow-down
                                        - access-denied
                                        - expired-token
                                        - token-reused
                                        - idempotency-key-reused
                                        - idempotency-in-progress
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    fieldError:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                - type: 'null'
                            revision:
                              description: >-
                                Monotonic resource revision; the strong ETag is
                                derived from it.
                              type: integer
                              minimum: 0
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        status:
                          anyOf:
                            - enum:
                                - idle
                                - loading
                                - playing
                                - paused
                                - stopped
                                - error
                            - type: string
                              pattern: ^[a-z][a-z_-]{0,31}$
                        rate:
                          type: number
                          exclusiveMinimum: 0
                          maximum: 16
                          description: playback rate, 1 = normal
                        matrixCell:
                          type: object
                          required:
                            - row
                            - column
                          properties:
                            matrixId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            row:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            column:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                          additionalProperties: false
                        page:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                type: object
                                required:
                                  - id
                                  - venueId
                                  - status
                                  - position
                                  - revision
                                properties:
                                  id:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  venueId:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  name:
                                    type: string
                                  status:
                                    anyOf:
                                      - enum:
                                          - idle
                                          - loading
                                          - playing
                                          - paused
                                          - stopped
                                          - error
                                      - type: string
                                        pattern: ^[a-z][a-z_-]{0,31}$
                                  showId:
                                    anyOf:
                                      - description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      - type: 'null'
                                  playlistId:
                                    anyOf:
                                      - description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      - type: 'null'
                                  timelineId:
                                    anyOf:
                                      - description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      - type: 'null'
                                  matrixCell:
                                    anyOf:
                                      - type: object
                                        required:
                                          - row
                                          - column
                                        properties:
                                          matrixId:
                                            description: >-
                                              Document-scoped id (.dome displays[].id,
                                              assets[].id, playlist / cue ids); unique
                                              within its parent.
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          row:
                                            description: >-
                                              Document-scoped id (.dome displays[].id,
                                              assets[].id, playlist / cue ids); unique
                                              within its parent.
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          column:
                                            description: >-
                                              Document-scoped id (.dome displays[].id,
                                              assets[].id, playlist / cue ids); unique
                                              within its parent.
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                        additionalProperties: false
                                      - type: 'null'
                                  itemIndex:
                                    anyOf:
                                      - type: integer
                                        minimum: 0
                                      - type: 'null'
                                  assetId:
                                    anyOf:
                                      - description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      - type: 'null'
                                  position:
                                    description: Media position in seconds from the start.
                                    type: number
                                    minimum: 0
                                  duration:
                                    anyOf:
                                      - description: Duration in seconds.
                                        type: number
                                        minimum: 0
                                      - type: 'null'
                                  rate:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 16
                                    description: playback rate, 1 = normal
                                  loop:
                                    type: boolean
                                  volume:
                                    description: >-
                                      0..1 (brightness, linear volume gain,
                                      progress).
                                    type: number
                                    minimum: 0
                                    maximum: 1
                                  opacity:
                                    description: >-
                                      0..1 (brightness, linear volume gain,
                                      progress).
                                    type: number
                                    minimum: 0
                                    maximum: 1
                                  brightness:
                                    description: >-
                                      0..1 (brightness, linear volume gain,
                                      progress).
                                    type: number
                                    minimum: 0
                                    maximum: 1
                                  rotation:
                                    type: number
                                    minimum: -360
                                    maximum: 360
                                  target:
                                    type: object
                                    properties:
                                      displays:
                                        type: array
                                        items:
                                          description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                      layer:
                                        type: integer
                                        minimum: 0
                                    additionalProperties: false
                                  pending:
                                    type: boolean
                                    description: >-
                                      last command not yet acknowledged by the
                                      engine (2 s timeout); a later player.state
                                      resolves it
                                  scheduledAt:
                                    anyOf:
                                      - description: >-
                                          RFC 3339 UTC with milliseconds, e.g.
                                          2026-10-19T12:00:00.000Z.
                                        type: string
                                        format: date-time
                                        pattern: >-
                                          ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                      - type: 'null'
                                    description: pending scheduled start (play.at)
                                  error:
                                    anyOf:
                                      - $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). RFC 9457 problem details with
                                          the Freedome `code` catalogue, 02e §3.3.
                                          Also the `data` of WS `error`, the
                                          socket.io ack error and GraphQL
                                          errors[].extensions.problem. The
                                          catalogue is open: unknown codes are
                                          allowed; known codes are bound to their
                                          HTTP status.
                                        title: Problem details
                                        type: object
                                        required:
                                          - type
                                          - title
                                          - code
                                        properties:
                                          type:
                                            type: string
                                            format: uri
                                            description: >-
                                              https://freedome.nativemind.us/problems/<code>
                                              for catalogue codes.
                                          title:
                                            type: string
                                            minLength: 1
                                          status:
                                            type: integer
                                            minimum: 100
                                            maximum: 599
                                          detail:
                                            type: string
                                          instance:
                                            type: string
                                            format: uri-reference
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          traceId:
                                            type: string
                                            pattern: ^[0-9a-f]{16,32}$
                                          errors:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - pointer
                                                - detail
                                              properties:
                                                pointer:
                                                  type: string
                                                  format: json-pointer
                                                detail:
                                                  type: string
                                                code:
                                                  description: >-
                                                    Stable machine key; also the last path
                                                    segment of `type`. Open set: see
                                                    knownCode.
                                                  type: string
                                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                              additionalProperties: true
                                        allOf:
                                          - if:
                                              properties:
                                                code:
                                                  const: validation-failed
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 422
                                          - if:
                                              properties:
                                                code:
                                                  const: not-found
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 404
                                          - if:
                                              properties:
                                                code:
                                                  const: conflict
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: precondition-failed
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 412
                                          - if:
                                              properties:
                                                code:
                                                  const: precondition-required
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 428
                                          - if:
                                              properties:
                                                code:
                                                  const: unauthenticated
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 401
                                          - if:
                                              properties:
                                                code:
                                                  const: forbidden
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 403
                                          - if:
                                              properties:
                                                code:
                                                  const: rate-limited
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 429
                                          - if:
                                              properties:
                                                code:
                                                  const: payload-too-large
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 413
                                          - if:
                                              properties:
                                                code:
                                                  const: unsupported-format
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 415
                                          - if:
                                              properties:
                                                code:
                                                  const: engine-unavailable
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: engine-incompatible
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: degraded
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: upload-checksum-mismatch
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 422
                                          - if:
                                              properties:
                                                code:
                                                  const: legacy-unsupported
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 501
                                          - if:
                                              properties:
                                                code:
                                                  const: internal
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 500
                                          - if:
                                              properties:
                                                code:
                                                  const: clock-unlocked
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: not-configured
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 503
                                          - if:
                                              properties:
                                                code:
                                                  const: authorization-pending
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: slow-down
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: access-denied
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 403
                                          - if:
                                              properties:
                                                code:
                                                  const: expired-token
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 400
                                          - if:
                                              properties:
                                                code:
                                                  const: token-reused
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 401
                                          - if:
                                              properties:
                                                code:
                                                  const: idempotency-key-reused
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                          - if:
                                              properties:
                                                code:
                                                  const: idempotency-in-progress
                                              required:
                                                - code
                                            then:
                                              properties:
                                                status:
                                                  const: 409
                                        additionalProperties: true
                                        examples:
                                          - type: >-
                                              https://freedome.nativemind.us/problems/engine-unavailable
                                            title: Visual engine unavailable
                                            status: 503
                                            detail: >-
                                              freedome-engined not reachable at
                                              unix:/run/freedome/engine.sock
                                            instance: /api/v1/venues/default/players/main/play
                                            code: engine-unavailable
                                            traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                        $defs:
                                          knownCode:
                                            enum:
                                              - validation-failed
                                              - not-found
                                              - conflict
                                              - precondition-failed
                                              - precondition-required
                                              - unauthenticated
                                              - forbidden
                                              - rate-limited
                                              - payload-too-large
                                              - unsupported-format
                                              - engine-unavailable
                                              - engine-incompatible
                                              - degraded
                                              - job-failed
                                              - upload-checksum-mismatch
                                              - legacy-unsupported
                                              - internal
                                              - clock-unlocked
                                              - not-configured
                                              - authorization-pending
                                              - slow-down
                                              - access-denied
                                              - expired-token
                                              - token-reused
                                              - idempotency-key-reused
                                              - idempotency-in-progress
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          fieldError:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                      - type: 'null'
                                  revision:
                                    description: >-
                                      Monotonic resource revision; the strong
                                      ETag is derived from it.
                                    type: integer
                                    minimum: 0
                                  updatedAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                          additionalProperties: false
                        patch:
                          description: >-
                            PATCH /venues/{venueId}/players/{playerId}
                            (merge-patch; playback is last-writer-wins, no
                            If-Match).
                          type: object
                          minProperties: 1
                          properties:
                            rate:
                              type: number
                              exclusiveMinimum: 0
                              maximum: 16
                              description: playback rate, 1 = normal
                            loop:
                              type: boolean
                            volume:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            opacity:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            brightness:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            rotation:
                              type: number
                              minimum: -360
                              maximum: 360
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        play:
                          description: >-
                            POST …/play: what to play (absent = resume the
                            loaded source / startup) and when. `at` = scheduled
                            start on the server clock (multi-node sync, 02d
                            UC-K5).
                          type: object
                          properties:
                            showId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            playlistId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            itemIndex:
                              type: integer
                              minimum: 0
                            timelineId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            matrixCell:
                              type: object
                              required:
                                - row
                                - column
                              properties:
                                matrixId:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                row:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                column:
                                  description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                              additionalProperties: false
                            assetId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            position:
                              description: Media position in seconds from the start.
                              type: number
                              minimum: 0
                            at:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            loop:
                              type: boolean
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                          not:
                            anyOf:
                              - required:
                                  - playlistId
                                  - timelineId
                              - required:
                                  - playlistId
                                  - assetId
                              - required:
                                  - timelineId
                                  - assetId
                              - required:
                                  - matrixCell
                                  - playlistId
                              - required:
                                  - matrixCell
                                  - timelineId
                              - required:
                                  - matrixCell
                                  - assetId
                        seek:
                          description: >-
                            POST …/seek: exactly one of position (s), marker
                            (timeline marker id) or normalized (0..1).
                          type: object
                          properties:
                            position:
                              description: Media position in seconds from the start.
                              type: number
                              minimum: 0
                            marker:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            normalized:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            at:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          additionalProperties: false
                          oneOf:
                            - required:
                                - position
                            - required:
                                - marker
                            - required:
                                - normalized
                        activeShow:
                          description: >-
                            PUT /venues/{venueId}/active-show: load a show onto
                            the venue (mapped onto its geometry); showId null
                            unloads.
                          type: object
                          required:
                            - showId
                          properties:
                            showId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            autoplay:
                              type: boolean
                              default: false
                              description: start `show.startup` on player main
                          additionalProperties: false
                        activeShowState:
                          type: object
                          required:
                            - venueId
                            - showId
                          properties:
                            venueId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            showId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                            warnings:
                              type: array
                              items:
                                type: object
                                required:
                                  - code
                                  - detail
                                properties:
                                  code:
                                    type: string
                                    pattern: ^[a-z][a-z0-9-]{0,63}$
                                  detail:
                                    type: string
                                  pointer:
                                    type: string
                                additionalProperties: false
                          additionalProperties: false
                        fireCue:
                          type: object
                          properties:
                            showId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                          additionalProperties: false
                        cueFired:
                          type: object
                          required:
                            - cueId
                            - showId
                            - firedAt
                          properties:
                            cueId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            showId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            firedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            actions:
                              type: array
                              items:
                                type: object
                                required:
                                  - do
                                  - status
                                properties:
                                  do:
                                    type: string
                                  status:
                                    enum:
                                      - ok
                                      - failed
                                      - skipped
                                  problem:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                additionalProperties: false
                          additionalProperties: false
                        parameterValue:
                          description: PUT /venues/{venueId}/parameters/{path} body.
                          type: object
                          required:
                            - value
                          properties:
                            value:
                              anyOf:
                                - type: number
                                - type: boolean
                                - type: string
                            fadeSec:
                              type: number
                              minimum: 0
                              maximum: 3600
                          additionalProperties: false
                        parameter:
                          description: >-
                            A node / layer parameter (02d ParameterService
                            UC-N1–N3; Screenberry-compatible surface).
                          type: object
                          required:
                            - path
                            - type
                            - value
                          properties:
                            path:
                              type: string
                              pattern: ^[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+){0,15}$
                            type:
                              enum:
                                - float
                                - int
                                - bool
                                - string
                                - enum
                                - colour
                            value:
                              anyOf:
                                - type: number
                                - type: boolean
                                - type: string
                            min:
                              type: number
                            max:
                              type: number
                            unit:
                              type: string
                            values:
                              type: array
                              items:
                                type: string
                              description: allowed values of an enum parameter
                            readOnly:
                              type: boolean
                            description:
                              type: string
                          additionalProperties: false
                        parameterPage:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                description: >-
                                  A node / layer parameter (02d ParameterService
                                  UC-N1–N3; Screenberry-compatible surface).
                                type: object
                                required:
                                  - path
                                  - type
                                  - value
                                properties:
                                  path:
                                    type: string
                                    pattern: ^[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+){0,15}$
                                  type:
                                    enum:
                                      - float
                                      - int
                                      - bool
                                      - string
                                      - enum
                                      - colour
                                  value:
                                    anyOf:
                                      - type: number
                                      - type: boolean
                                      - type: string
                                  min:
                                    type: number
                                  max:
                                    type: number
                                  unit:
                                    type: string
                                  values:
                                    type: array
                                    items:
                                      type: string
                                    description: allowed values of an enum parameter
                                  readOnly:
                                    type: boolean
                                  description:
                                    type: string
                                additionalProperties: false
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                          additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: player.error
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). RFC
                        9457 problem details with the Freedome `code` catalogue,
                        02e §3.3. Also the `data` of WS `error`, the socket.io
                        ack error and GraphQL errors[].extensions.problem. The
                        catalogue is open: unknown codes are allowed; known
                        codes are bound to their HTTP status.
                      title: Problem details
                      type: object
                      required:
                        - type
                        - title
                        - code
                      properties:
                        type:
                          type: string
                          format: uri
                          description: >-
                            https://freedome.nativemind.us/problems/<code> for
                            catalogue codes.
                        title:
                          type: string
                          minLength: 1
                        status:
                          type: integer
                          minimum: 100
                          maximum: 599
                        detail:
                          type: string
                        instance:
                          type: string
                          format: uri-reference
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        traceId:
                          type: string
                          pattern: ^[0-9a-f]{16,32}$
                        errors:
                          type: array
                          items:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                      allOf:
                        - if:
                            properties:
                              code:
                                const: validation-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: not-found
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 404
                        - if:
                            properties:
                              code:
                                const: conflict
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: precondition-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 412
                        - if:
                            properties:
                              code:
                                const: precondition-required
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 428
                        - if:
                            properties:
                              code:
                                const: unauthenticated
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: forbidden
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: rate-limited
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 429
                        - if:
                            properties:
                              code:
                                const: payload-too-large
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 413
                        - if:
                            properties:
                              code:
                                const: unsupported-format
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 415
                        - if:
                            properties:
                              code:
                                const: engine-unavailable
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: engine-incompatible
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: degraded
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: upload-checksum-mismatch
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: legacy-unsupported
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 501
                        - if:
                            properties:
                              code:
                                const: internal
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 500
                        - if:
                            properties:
                              code:
                                const: clock-unlocked
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: not-configured
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: authorization-pending
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: slow-down
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: access-denied
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: expired-token
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: token-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: idempotency-key-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: idempotency-in-progress
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                      additionalProperties: true
                      examples:
                        - type: >-
                            https://freedome.nativemind.us/problems/engine-unavailable
                          title: Visual engine unavailable
                          status: 503
                          detail: >-
                            freedome-engined not reachable at
                            unix:/run/freedome/engine.sock
                          instance: /api/v1/venues/default/players/main/play
                          code: engine-unavailable
                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                      $defs:
                        knownCode:
                          enum:
                            - validation-failed
                            - not-found
                            - conflict
                            - precondition-failed
                            - precondition-required
                            - unauthenticated
                            - forbidden
                            - rate-limited
                            - payload-too-large
                            - unsupported-format
                            - engine-unavailable
                            - engine-incompatible
                            - degraded
                            - job-failed
                            - upload-checksum-mismatch
                            - legacy-unsupported
                            - internal
                            - clock-unlocked
                            - not-configured
                            - authorization-pending
                            - slow-down
                            - access-denied
                            - expired-token
                            - token-reused
                            - idempotency-key-reused
                            - idempotency-in-progress
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        fieldError:
                          type: object
                          required:
                            - pointer
                            - detail
                          properties:
                            pointer:
                              type: string
                              format: json-pointer
                            detail:
                              type: string
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          additionalProperties: true
              - if:
                  properties:
                    kind:
                      const: cue.fired
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      type: object
                      required:
                        - cueId
                        - showId
                        - firedAt
                      properties:
                        cueId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        showId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        firedAt:
                          description: >-
                            RFC 3339 UTC with milliseconds, e.g.
                            2026-10-19T12:00:00.000Z.
                          type: string
                          format: date-time
                          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                        actions:
                          type: array
                          items:
                            type: object
                            required:
                              - do
                              - status
                            properties:
                              do:
                                type: string
                              status:
                                enum:
                                  - ok
                                  - failed
                                  - skipped
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                            additionalProperties: false
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: cue.failed
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      type: object
                      required:
                        - cueId
                        - showId
                        - firedAt
                      properties:
                        cueId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        showId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        firedAt:
                          description: >-
                            RFC 3339 UTC with milliseconds, e.g.
                            2026-10-19T12:00:00.000Z.
                          type: string
                          format: date-time
                          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                        actions:
                          type: array
                          items:
                            type: object
                            required:
                              - do
                              - status
                            properties:
                              do:
                                type: string
                              status:
                                enum:
                                  - ok
                                  - failed
                                  - skipped
                              problem:
                                $schema: https://json-schema.org/draft/2020-12/schema
                                $id: >-
                                  https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                $comment: >-
                                  NativeMindNONC — freedome_contract (see
                                  LICENSE). RFC 9457 problem details with the
                                  Freedome `code` catalogue, 02e §3.3. Also the
                                  `data` of WS `error`, the socket.io ack error
                                  and GraphQL errors[].extensions.problem. The
                                  catalogue is open: unknown codes are allowed;
                                  known codes are bound to their HTTP status.
                                title: Problem details
                                type: object
                                required:
                                  - type
                                  - title
                                  - code
                                properties:
                                  type:
                                    type: string
                                    format: uri
                                    description: >-
                                      https://freedome.nativemind.us/problems/<code>
                                      for catalogue codes.
                                  title:
                                    type: string
                                    minLength: 1
                                  status:
                                    type: integer
                                    minimum: 100
                                    maximum: 599
                                  detail:
                                    type: string
                                  instance:
                                    type: string
                                    format: uri-reference
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  traceId:
                                    type: string
                                    pattern: ^[0-9a-f]{16,32}$
                                  errors:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                                allOf:
                                  - if:
                                      properties:
                                        code:
                                          const: validation-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: not-found
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 404
                                  - if:
                                      properties:
                                        code:
                                          const: conflict
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-failed
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 412
                                  - if:
                                      properties:
                                        code:
                                          const: precondition-required
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 428
                                  - if:
                                      properties:
                                        code:
                                          const: unauthenticated
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: forbidden
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: rate-limited
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 429
                                  - if:
                                      properties:
                                        code:
                                          const: payload-too-large
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 413
                                  - if:
                                      properties:
                                        code:
                                          const: unsupported-format
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 415
                                  - if:
                                      properties:
                                        code:
                                          const: engine-unavailable
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: engine-incompatible
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: degraded
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: upload-checksum-mismatch
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 422
                                  - if:
                                      properties:
                                        code:
                                          const: legacy-unsupported
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 501
                                  - if:
                                      properties:
                                        code:
                                          const: internal
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 500
                                  - if:
                                      properties:
                                        code:
                                          const: clock-unlocked
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: not-configured
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 503
                                  - if:
                                      properties:
                                        code:
                                          const: authorization-pending
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: slow-down
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: access-denied
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 403
                                  - if:
                                      properties:
                                        code:
                                          const: expired-token
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 400
                                  - if:
                                      properties:
                                        code:
                                          const: token-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 401
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-key-reused
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                  - if:
                                      properties:
                                        code:
                                          const: idempotency-in-progress
                                      required:
                                        - code
                                    then:
                                      properties:
                                        status:
                                          const: 409
                                additionalProperties: true
                                examples:
                                  - type: >-
                                      https://freedome.nativemind.us/problems/engine-unavailable
                                    title: Visual engine unavailable
                                    status: 503
                                    detail: >-
                                      freedome-engined not reachable at
                                      unix:/run/freedome/engine.sock
                                    instance: /api/v1/venues/default/players/main/play
                                    code: engine-unavailable
                                    traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                $defs:
                                  knownCode:
                                    enum:
                                      - validation-failed
                                      - not-found
                                      - conflict
                                      - precondition-failed
                                      - precondition-required
                                      - unauthenticated
                                      - forbidden
                                      - rate-limited
                                      - payload-too-large
                                      - unsupported-format
                                      - engine-unavailable
                                      - engine-incompatible
                                      - degraded
                                      - job-failed
                                      - upload-checksum-mismatch
                                      - legacy-unsupported
                                      - internal
                                      - clock-unlocked
                                      - not-configured
                                      - authorization-pending
                                      - slow-down
                                      - access-denied
                                      - expired-token
                                      - token-reused
                                      - idempotency-key-reused
                                      - idempotency-in-progress
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  fieldError:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                            additionalProperties: false
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: parameter.changed
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: >-
                        A node / layer parameter (02d ParameterService UC-N1–N3;
                        Screenberry-compatible surface).
                      type: object
                      required:
                        - path
                        - type
                        - value
                      properties:
                        path:
                          type: string
                          pattern: ^[A-Za-z0-9_-]+(\.[A-Za-z0-9_-]+){0,15}$
                        type:
                          enum:
                            - float
                            - int
                            - bool
                            - string
                            - enum
                            - colour
                        value:
                          anyOf:
                            - type: number
                            - type: boolean
                            - type: string
                        min:
                          type: number
                        max:
                          type: number
                        unit:
                          type: string
                        values:
                          type: array
                          items:
                            type: string
                          description: allowed values of an enum parameter
                        readOnly:
                          type: boolean
                        description:
                          type: string
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: audio.state
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/api/1.0/audio.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). Audio
                        through the media server (02e §5.5, 02c A8): venue audio
                        state + patch, zones, devices (+ test), presets (02c
                        ananta/1.0 programme / pattern / session, RC2),
                        sessions, generator, source position. Root = GET
                        /venues/{venueId}/audio.
                      title: Audio state
                      type: object
                      required:
                        - venueId
                        - mode
                        - masterGainDb
                        - mute
                        - revision
                      properties:
                        venueId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        mode:
                          description: >-
                            A8: digital = anAntaDigital only; hybrid =
                            anAntaSound (mechanical devices); combined = both.
                          anyOf:
                            - enum:
                                - digital
                                - hybrid
                                - combined
                            - type: string
                              pattern: ^[a-z][a-z0-9_-]{0,31}$
                        masterGainDb:
                          description: >-
                            Gain in dB (C5: optional companion of linear
                            `volume`).
                          type: number
                          minimum: -144
                          maximum: 24
                        mute:
                          type: boolean
                        engines:
                          type: object
                          properties:
                            anantasound:
                              type: object
                              required:
                                - status
                              properties:
                                status:
                                  anyOf:
                                    - enum:
                                        - up
                                        - degraded
                                        - down
                                        - incompatible
                                        - disabled
                                    - type: string
                                version:
                                  type: string
                              additionalProperties: false
                            anantadigital:
                              type: object
                              required:
                                - status
                              properties:
                                status:
                                  anyOf:
                                    - enum:
                                        - up
                                        - degraded
                                        - down
                                        - incompatible
                                        - disabled
                                    - type: string
                                version:
                                  type: string
                              additionalProperties: false
                          additionalProperties:
                            type: object
                            required:
                              - status
                            properties:
                              status:
                                anyOf:
                                  - enum:
                                      - up
                                      - degraded
                                      - down
                                      - incompatible
                                      - disabled
                                  - type: string
                              version:
                                type: string
                            additionalProperties: false
                        layoutRevision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                      patternProperties:
                        ^x-: true
                      additionalProperties: false
                      $defs:
                        mode:
                          description: >-
                            A8: digital = anAntaDigital only; hybrid =
                            anAntaSound (mechanical devices); combined = both.
                          anyOf:
                            - enum:
                                - digital
                                - hybrid
                                - combined
                            - type: string
                              pattern: ^[a-z][a-z0-9_-]{0,31}$
                        engineRef:
                          type: object
                          required:
                            - status
                          properties:
                            status:
                              anyOf:
                                - enum:
                                    - up
                                    - degraded
                                    - down
                                    - incompatible
                                    - disabled
                                - type: string
                            version:
                              type: string
                          additionalProperties: false
                        patch:
                          type: object
                          minProperties: 1
                          properties:
                            mode:
                              description: >-
                                A8: digital = anAntaDigital only; hybrid =
                                anAntaSound (mechanical devices); combined =
                                both.
                              anyOf:
                                - enum:
                                    - digital
                                    - hybrid
                                    - combined
                                - type: string
                                  pattern: ^[a-z][a-z0-9_-]{0,31}$
                            masterGainDb:
                              description: >-
                                Gain in dB (C5: optional companion of linear
                                `volume`).
                              type: number
                              minimum: -144
                              maximum: 24
                            mute:
                              type: boolean
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        eqBand:
                          type: object
                          required:
                            - type
                            - frequencyHz
                          properties:
                            type:
                              anyOf:
                                - enum:
                                    - peak
                                    - lowShelf
                                    - highShelf
                                    - lowPass
                                    - highPass
                                    - notch
                                    - allPass
                                - type: string
                            frequencyHz:
                              type: number
                              exclusiveMinimum: 0
                            gainDb:
                              type: number
                              minimum: -48
                              maximum: 24
                            q:
                              type: number
                              exclusiveMinimum: 0
                              maximum: 100
                            enabled:
                              type: boolean
                              default: true
                          additionalProperties: false
                        zoneBody:
                          type: object
                          properties:
                            name:
                              type: string
                              maxLength: 128
                            speakers:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              uniqueItems: true
                            gainDb:
                              description: >-
                                Gain in dB (C5: optional companion of linear
                                `volume`).
                              type: number
                              minimum: -144
                              maximum: 24
                            delayMs:
                              type: number
                              minimum: 0
                              maximum: 2000
                            eq:
                              type: array
                              items:
                                type: object
                                required:
                                  - type
                                  - frequencyHz
                                properties:
                                  type:
                                    anyOf:
                                      - enum:
                                          - peak
                                          - lowShelf
                                          - highShelf
                                          - lowPass
                                          - highPass
                                          - notch
                                          - allPass
                                      - type: string
                                  frequencyHz:
                                    type: number
                                    exclusiveMinimum: 0
                                  gainDb:
                                    type: number
                                    minimum: -48
                                    maximum: 24
                                  q:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 100
                                  enabled:
                                    type: boolean
                                    default: true
                                additionalProperties: false
                              maxItems: 32
                            mute:
                              type: boolean
                          patternProperties:
                            ^x-: true
                        zone:
                          description: >-
                            anAntaDigital zone: a subset of speakers with gain,
                            delay, EQ.
                          type: object
                          allOf:
                            - type: object
                              properties:
                                name:
                                  type: string
                                  maxLength: 128
                                speakers:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  uniqueItems: true
                                gainDb:
                                  description: >-
                                    Gain in dB (C5: optional companion of linear
                                    `volume`).
                                  type: number
                                  minimum: -144
                                  maximum: 24
                                delayMs:
                                  type: number
                                  minimum: 0
                                  maximum: 2000
                                eq:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - type
                                      - frequencyHz
                                    properties:
                                      type:
                                        anyOf:
                                          - enum:
                                              - peak
                                              - lowShelf
                                              - highShelf
                                              - lowPass
                                              - highPass
                                              - notch
                                              - allPass
                                          - type: string
                                      frequencyHz:
                                        type: number
                                        exclusiveMinimum: 0
                                      gainDb:
                                        type: number
                                        minimum: -48
                                        maximum: 24
                                      q:
                                        type: number
                                        exclusiveMinimum: 0
                                        maximum: 100
                                      enabled:
                                        type: boolean
                                        default: true
                                    additionalProperties: false
                                  maxItems: 32
                                mute:
                                  type: boolean
                              patternProperties:
                                ^x-: true
                          required:
                            - id
                            - speakers
                            - gainDb
                            - mute
                            - revision
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            revision:
                              description: >-
                                Monotonic resource revision; the strong ETag is
                                derived from it.
                              type: integer
                              minimum: 0
                          unevaluatedProperties: false
                        zoneInput:
                          type: object
                          allOf:
                            - type: object
                              properties:
                                name:
                                  type: string
                                  maxLength: 128
                                speakers:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  uniqueItems: true
                                gainDb:
                                  description: >-
                                    Gain in dB (C5: optional companion of linear
                                    `volume`).
                                  type: number
                                  minimum: -144
                                  maximum: 24
                                delayMs:
                                  type: number
                                  minimum: 0
                                  maximum: 2000
                                eq:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - type
                                      - frequencyHz
                                    properties:
                                      type:
                                        anyOf:
                                          - enum:
                                              - peak
                                              - lowShelf
                                              - highShelf
                                              - lowPass
                                              - highPass
                                              - notch
                                              - allPass
                                          - type: string
                                      frequencyHz:
                                        type: number
                                        exclusiveMinimum: 0
                                      gainDb:
                                        type: number
                                        minimum: -48
                                        maximum: 24
                                      q:
                                        type: number
                                        exclusiveMinimum: 0
                                        maximum: 100
                                      enabled:
                                        type: boolean
                                        default: true
                                    additionalProperties: false
                                  maxItems: 32
                                mute:
                                  type: boolean
                              patternProperties:
                                ^x-: true
                          required:
                            - speakers
                          unevaluatedProperties: false
                        zonePatch:
                          type: object
                          allOf:
                            - type: object
                              properties:
                                name:
                                  type: string
                                  maxLength: 128
                                speakers:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  uniqueItems: true
                                gainDb:
                                  description: >-
                                    Gain in dB (C5: optional companion of linear
                                    `volume`).
                                  type: number
                                  minimum: -144
                                  maximum: 24
                                delayMs:
                                  type: number
                                  minimum: 0
                                  maximum: 2000
                                eq:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - type
                                      - frequencyHz
                                    properties:
                                      type:
                                        anyOf:
                                          - enum:
                                              - peak
                                              - lowShelf
                                              - highShelf
                                              - lowPass
                                              - highPass
                                              - notch
                                              - allPass
                                          - type: string
                                      frequencyHz:
                                        type: number
                                        exclusiveMinimum: 0
                                      gainDb:
                                        type: number
                                        minimum: -48
                                        maximum: 24
                                      q:
                                        type: number
                                        exclusiveMinimum: 0
                                        maximum: 100
                                      enabled:
                                        type: boolean
                                        default: true
                                    additionalProperties: false
                                  maxItems: 32
                                mute:
                                  type: boolean
                              patternProperties:
                                ^x-: true
                          minProperties: 1
                          unevaluatedProperties: false
                        zonePage:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                description: >-
                                  anAntaDigital zone: a subset of speakers with
                                  gain, delay, EQ.
                                type: object
                                allOf:
                                  - type: object
                                    properties:
                                      name:
                                        type: string
                                        maxLength: 128
                                      speakers:
                                        type: array
                                        items:
                                          description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        uniqueItems: true
                                      gainDb:
                                        description: >-
                                          Gain in dB (C5: optional companion of
                                          linear `volume`).
                                        type: number
                                        minimum: -144
                                        maximum: 24
                                      delayMs:
                                        type: number
                                        minimum: 0
                                        maximum: 2000
                                      eq:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - type
                                            - frequencyHz
                                          properties:
                                            type:
                                              anyOf:
                                                - enum:
                                                    - peak
                                                    - lowShelf
                                                    - highShelf
                                                    - lowPass
                                                    - highPass
                                                    - notch
                                                    - allPass
                                                - type: string
                                            frequencyHz:
                                              type: number
                                              exclusiveMinimum: 0
                                            gainDb:
                                              type: number
                                              minimum: -48
                                              maximum: 24
                                            q:
                                              type: number
                                              exclusiveMinimum: 0
                                              maximum: 100
                                            enabled:
                                              type: boolean
                                              default: true
                                          additionalProperties: false
                                        maxItems: 32
                                      mute:
                                        type: boolean
                                    patternProperties:
                                      ^x-: true
                                required:
                                  - id
                                  - speakers
                                  - gainDb
                                  - mute
                                  - revision
                                properties:
                                  id:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  revision:
                                    description: >-
                                      Monotonic resource revision; the strong
                                      ETag is derived from it.
                                    type: integer
                                    minimum: 0
                                unevaluatedProperties: false
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                          additionalProperties: false
                        deviceKind:
                          anyOf:
                            - enum:
                                - speaker
                                - speaker_amp
                                - microphone
                                - qrd
                                - patefon
                                - karmic_cluster
                                - resonator
                            - type: string
                              pattern: ^[a-z][a-z0-9_-]{0,31}$
                        device:
                          description: >-
                            Audio device = .dome audio.devices[] / speakers[]
                            entry + live state (02c §6).
                          type: object
                          required:
                            - id
                            - kind
                            - state
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            kind:
                              anyOf:
                                - enum:
                                    - speaker
                                    - speaker_amp
                                    - microphone
                                    - qrd
                                    - patefon
                                    - karmic_cluster
                                    - resonator
                                - type: string
                                  pattern: ^[a-z][a-z0-9_-]{0,31}$
                            name:
                              type: string
                            config:
                              type: object
                              description: the .dome audio device / speaker entry
                              additionalProperties: true
                            state:
                              type: object
                              required:
                                - online
                              properties:
                                online:
                                  type: boolean
                                engine:
                                  anyOf:
                                    - enum:
                                        - anantasound
                                        - anantadigital
                                    - type: string
                                gainDb:
                                  description: >-
                                    Gain in dB (C5: optional companion of linear
                                    `volume`).
                                  type: number
                                  minimum: -144
                                  maximum: 24
                                mute:
                                  type: boolean
                                levelDb:
                                  type: number
                                  maximum: 24
                                  description: last meter value (dBFS)
                                temperatureC:
                                  type: number
                                firmware:
                                  type: string
                                faults:
                                  type: array
                                  items:
                                    type: string
                                lastSeen:
                                  description: >-
                                    RFC 3339 UTC with milliseconds, e.g.
                                    2026-10-19T12:00:00.000Z.
                                  type: string
                                  format: date-time
                                  pattern: >-
                                    ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              additionalProperties: true
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        devicePatch:
                          type: object
                          minProperties: 1
                          properties:
                            name:
                              type: string
                            gainDb:
                              description: >-
                                Gain in dB (C5: optional companion of linear
                                `volume`).
                              type: number
                              minimum: -144
                              maximum: 24
                            mute:
                              type: boolean
                            config:
                              type: object
                              additionalProperties: true
                          additionalProperties: false
                        devicePage:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                description: >-
                                  Audio device = .dome audio.devices[] /
                                  speakers[] entry + live state (02c §6).
                                type: object
                                required:
                                  - id
                                  - kind
                                  - state
                                properties:
                                  id:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  kind:
                                    anyOf:
                                      - enum:
                                          - speaker
                                          - speaker_amp
                                          - microphone
                                          - qrd
                                          - patefon
                                          - karmic_cluster
                                          - resonator
                                      - type: string
                                        pattern: ^[a-z][a-z0-9_-]{0,31}$
                                  name:
                                    type: string
                                  config:
                                    type: object
                                    description: the .dome audio device / speaker entry
                                    additionalProperties: true
                                  state:
                                    type: object
                                    required:
                                      - online
                                    properties:
                                      online:
                                        type: boolean
                                      engine:
                                        anyOf:
                                          - enum:
                                              - anantasound
                                              - anantadigital
                                          - type: string
                                      gainDb:
                                        description: >-
                                          Gain in dB (C5: optional companion of
                                          linear `volume`).
                                        type: number
                                        minimum: -144
                                        maximum: 24
                                      mute:
                                        type: boolean
                                      levelDb:
                                        type: number
                                        maximum: 24
                                        description: last meter value (dBFS)
                                      temperatureC:
                                        type: number
                                      firmware:
                                        type: string
                                      faults:
                                        type: array
                                        items:
                                          type: string
                                      lastSeen:
                                        description: >-
                                          RFC 3339 UTC with milliseconds, e.g.
                                          2026-10-19T12:00:00.000Z.
                                        type: string
                                        format: date-time
                                        pattern: >-
                                          ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    additionalProperties: true
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                          additionalProperties: false
                        deviceTest:
                          type: object
                          properties:
                            kind:
                              anyOf:
                                - enum:
                                    - ping
                                    - tone
                                    - selftest
                                    - strike
                                - type: string
                              default: ping
                            frequencyHz:
                              type: number
                              exclusiveMinimum: 0
                            gainDb:
                              type: number
                              minimum: -96
                              maximum: 0
                            durationS:
                              type: number
                              exclusiveMinimum: 0
                              maximum: 30
                          additionalProperties: false
                        deviceTestResult:
                          type: object
                          required:
                            - deviceId
                            - ok
                          properties:
                            deviceId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            ok:
                              type: boolean
                            latencyMs:
                              type: number
                              minimum: 0
                            detail:
                              type: string
                            problem:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). RFC 9457 problem details with the
                                Freedome `code` catalogue, 02e §3.3. Also the
                                `data` of WS `error`, the socket.io ack error
                                and GraphQL errors[].extensions.problem. The
                                catalogue is open: unknown codes are allowed;
                                known codes are bound to their HTTP status.
                              title: Problem details
                              type: object
                              required:
                                - type
                                - title
                                - code
                              properties:
                                type:
                                  type: string
                                  format: uri
                                  description: >-
                                    https://freedome.nativemind.us/problems/<code>
                                    for catalogue codes.
                                title:
                                  type: string
                                  minLength: 1
                                status:
                                  type: integer
                                  minimum: 100
                                  maximum: 599
                                detail:
                                  type: string
                                instance:
                                  type: string
                                  format: uri-reference
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                traceId:
                                  type: string
                                  pattern: ^[0-9a-f]{16,32}$
                                errors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              allOf:
                                - if:
                                    properties:
                                      code:
                                        const: validation-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: not-found
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 404
                                - if:
                                    properties:
                                      code:
                                        const: conflict
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: precondition-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 412
                                - if:
                                    properties:
                                      code:
                                        const: precondition-required
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 428
                                - if:
                                    properties:
                                      code:
                                        const: unauthenticated
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: forbidden
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: rate-limited
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 429
                                - if:
                                    properties:
                                      code:
                                        const: payload-too-large
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 413
                                - if:
                                    properties:
                                      code:
                                        const: unsupported-format
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 415
                                - if:
                                    properties:
                                      code:
                                        const: engine-unavailable
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: engine-incompatible
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: degraded
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: upload-checksum-mismatch
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: legacy-unsupported
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 501
                                - if:
                                    properties:
                                      code:
                                        const: internal
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 500
                                - if:
                                    properties:
                                      code:
                                        const: clock-unlocked
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: not-configured
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: authorization-pending
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: slow-down
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: access-denied
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: expired-token
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: token-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-key-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-in-progress
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                              additionalProperties: true
                              examples:
                                - type: >-
                                    https://freedome.nativemind.us/problems/engine-unavailable
                                  title: Visual engine unavailable
                                  status: 503
                                  detail: >-
                                    freedome-engined not reachable at
                                    unix:/run/freedome/engine.sock
                                  instance: /api/v1/venues/default/players/main/play
                                  code: engine-unavailable
                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                              $defs:
                                knownCode:
                                  enum:
                                    - validation-failed
                                    - not-found
                                    - conflict
                                    - precondition-failed
                                    - precondition-required
                                    - unauthenticated
                                    - forbidden
                                    - rate-limited
                                    - payload-too-large
                                    - unsupported-format
                                    - engine-unavailable
                                    - engine-incompatible
                                    - degraded
                                    - job-failed
                                    - upload-checksum-mismatch
                                    - legacy-unsupported
                                    - internal
                                    - clock-unlocked
                                    - not-configured
                                    - authorization-pending
                                    - slow-down
                                    - access-denied
                                    - expired-token
                                    - token-reused
                                    - idempotency-key-reused
                                    - idempotency-in-progress
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                fieldError:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                          additionalProperties: false
                        presetKind:
                          enum:
                            - programme
                            - pattern
                            - session
                        preset:
                          description: >-
                            Installed L6 preset: an ananta/1.0 programme,
                            pattern or session document (02c, RC2).
                          type: object
                          required:
                            - id
                            - kind
                            - revision
                            - document
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            kind:
                              enum:
                                - programme
                                - pattern
                                - session
                            title:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). Localised text map {"en":…,"ru":…},
                                02e §3.1 (as .dome meta.title).
                              title: Localised text
                              type: object
                              minProperties: 1
                              propertyNames:
                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                              additionalProperties:
                                type: string
                              examples:
                                - en: Intro
                                  ru: Вступление
                              $defs:
                                textOrI18n:
                                  description: >-
                                    Plain string (treated as `en`) or a
                                    localised map. (map branch = the root
                                    schema, inlined for tools that mis-handle
                                    self references)
                                  anyOf:
                                    - type: string
                                    - type: object
                                      minProperties: 1
                                      propertyNames:
                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                      additionalProperties:
                                        type: string
                                      examples:
                                        - en: Intro
                                          ru: Вступление
                            revision:
                              description: >-
                                Monotonic resource revision; the strong ETag is
                                derived from it.
                              type: integer
                              minimum: 0
                            document:
                              type: object
                            sha256:
                              description: Lowercase hex SHA-256 digest.
                              type: string
                              pattern: ^[0-9a-f]{64}$
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          additionalProperties: false
                          allOf:
                            - if:
                                properties:
                                  kind:
                                    const: programme
                                required:
                                  - kind
                              then:
                                properties:
                                  document:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/ananta/1.0/programme.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). Content owned by 02c (AU,
                                      ananta_core 2.AU.2); mirrored here per PR5
                                      / RC2 (CR-AU-2), contract copy is the
                                      published one.
                                    title: Ananta programme
                                    description: >-
                                      L6 programme preset (*.ananta.json), 02c
                                      §10. Played by generic L1 players; claims
                                      only in x-meta.
                                    type: object
                                    required:
                                      - format
                                      - formatVersion
                                      - id
                                      - title
                                      - tracks
                                    properties:
                                      $schema:
                                        type: string
                                      format:
                                        const: ananta-programme
                                      formatVersion:
                                        type: string
                                        pattern: ^1\.\d+\.\d+$
                                      id:
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                      title:
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                      description:
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                      tags:
                                        type: array
                                        items:
                                          type: string
                                      license:
                                        type: string
                                        default: NativeMindNONC
                                      durationS:
                                        type: number
                                        minimum: 0
                                      modes:
                                        type: array
                                        items:
                                          enum:
                                            - digital
                                            - hybrid
                                            - combined
                                        uniqueItems: true
                                      roles:
                                        type: object
                                        description: >-
                                          role name → required device class /
                                          capabilities
                                        propertyNames:
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                        additionalProperties:
                                          type: object
                                          required:
                                            - class
                                          properties:
                                            class:
                                              enum:
                                                - striker_array
                                                - resonator
                                                - phonograph
                                                - initiator
                                                - signal_generator
                                                - tactile
                                                - speakers
                                            min:
                                              type: integer
                                              minimum: 1
                                              default: 1
                                            optional:
                                              type: boolean
                                              default: false
                                            description:
                                              type: string
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      tracks:
                                        type: array
                                        minItems: 1
                                        items:
                                          oneOf:
                                            - type: object
                                              required:
                                                - kind
                                                - role
                                                - segments
                                              properties:
                                                kind:
                                                  const: tone
                                                id:
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                role:
                                                  type: string
                                                direction:
                                                  type: object
                                                  description: >-
                                                    .dome convention: azimuth 0 = front,
                                                    clockwise; elevation 0 = spring line
                                                  properties:
                                                    azimuthDeg:
                                                      type: number
                                                      minimum: -360
                                                      maximum: 360
                                                    elevationDeg:
                                                      type: number
                                                      minimum: -90
                                                      maximum: 90
                                                    distanceM:
                                                      type: number
                                                      minimum: 0
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                                transition:
                                                  enum:
                                                    - linear
                                                    - exponential
                                                    - stepped
                                                    - smooth
                                                gainDb:
                                                  type: number
                                                  maximum: 12
                                                segments:
                                                  type: array
                                                  minItems: 1
                                                  items:
                                                    type: object
                                                    required:
                                                      - startS
                                                      - durationS
                                                    properties:
                                                      id:
                                                        type: string
                                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                      startS:
                                                        type: number
                                                        minimum: 0
                                                      durationS:
                                                        type: number
                                                        exclusiveMinimum: 0
                                                      carrierHz:
                                                        type: number
                                                        minimum: 20
                                                        maximum: 20000
                                                      harmonicsHz:
                                                        type: array
                                                        items:
                                                          type: number
                                                          minimum: 20
                                                          maximum: 20000
                                                      amplitude:
                                                        type: number
                                                        minimum: 0
                                                        maximum: 1
                                                      attackS:
                                                        type: number
                                                        minimum: 0
                                                      releaseS:
                                                        type: number
                                                        minimum: 0
                                                      modulation:
                                                        type: object
                                                        required:
                                                          - kind
                                                          - rateHz
                                                        properties:
                                                          kind:
                                                            enum:
                                                              - am
                                                              - fm
                                                              - pm
                                                              - binaural_beat
                                                          rateHz:
                                                            type: number
                                                            minimum: 0.01
                                                            maximum: 100
                                                          depth:
                                                            type: number
                                                            minimum: 0
                                                            maximum: 1
                                                        patternProperties:
                                                          ^x-: true
                                                        additionalProperties: false
                                                      multi:
                                                        type: object
                                                        description: >-
                                                          MULTI generator parameters
                                                          (NmSoundParams names, 02c §5.6)
                                                        properties:
                                                          program:
                                                            type: string
                                                            description: >-
                                                              MULTI programme JSON text
                                                              {"target":"f1,f2,…","autonext":s}
                                                              (NmSoundParams.program); empty = single
                                                              target
                                                          target:
                                                            type: number
                                                            minimum: 0
                                                            maximum: 20000
                                                          enviroment:
                                                            type: number
                                                            minimum: 0
                                                          modulation:
                                                            type: number
                                                          multi:
                                                            type: number
                                                          channel:
                                                            type: number
                                                            description: >-
                                                              stereo phase angle code: 0, 1, 2, 60,
                                                              90, 120, 137, 180
                                                          audio:
                                                            type: number
                                                          compatJava:
                                                            type: boolean
                                                            default: false
                                                        patternProperties:
                                                          ^x-: true
                                                        additionalProperties: false
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            - type: object
                                              required:
                                                - kind
                                                - role
                                                - pattern
                                              properties:
                                                kind:
                                                  const: strike
                                                id:
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                role:
                                                  type: string
                                                startS:
                                                  type: number
                                                  minimum: 0
                                                pattern:
                                                  type: object
                                                  required:
                                                    - tempoBpm
                                                    - strikes
                                                  properties:
                                                    tempoBpm:
                                                      type: number
                                                      exclusiveMinimum: 0
                                                      maximum: 600
                                                    beatsPerLoop:
                                                      type: number
                                                      exclusiveMinimum: 0
                                                    loops:
                                                      type:
                                                        - integer
                                                        - 'null'
                                                      minimum: 1
                                                      description: null = until stopped
                                                    velocityCurve:
                                                      enum:
                                                        - linear
                                                        - exponential
                                                        - logarithmic
                                                        - sigmoid
                                                    strikes:
                                                      type: array
                                                      minItems: 1
                                                      items:
                                                        type: object
                                                        required:
                                                          - striker
                                                          - target
                                                          - beat
                                                          - velocity
                                                        properties:
                                                          striker:
                                                            type: string
                                                            minLength: 1
                                                          target:
                                                            type: string
                                                            minLength: 1
                                                          beat:
                                                            type: number
                                                            minimum: 0
                                                          velocity:
                                                            type: number
                                                            minimum: 0
                                                            maximum: 1
                                                          durationMs:
                                                            type: integer
                                                            minimum: 1
                                                            maximum: 200
                                                          accent:
                                                            enum:
                                                              - none
                                                              - soft
                                                              - medium
                                                              - strong
                                                              - crescendo
                                                              - decrescendo
                                                        patternProperties:
                                                          ^x-: true
                                                        additionalProperties: false
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            - type: object
                                              required:
                                                - kind
                                                - src
                                              properties:
                                                kind:
                                                  const: media
                                                id:
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                role:
                                                  type: string
                                                  default: speakers
                                                src:
                                                  type: string
                                                  minLength: 1
                                                startS:
                                                  type: number
                                                  minimum: 0
                                                gainDb:
                                                  type: number
                                                  maximum: 12
                                                loop:
                                                  type: boolean
                                                sha256:
                                                  type: string
                                                  pattern: ^[0-9a-f]{64}$
                                                direction:
                                                  type: object
                                                  description: >-
                                                    .dome convention: azimuth 0 = front,
                                                    clockwise; elevation 0 = spring line
                                                  properties:
                                                    azimuthDeg:
                                                      type: number
                                                      minimum: -360
                                                      maximum: 360
                                                    elevationDeg:
                                                      type: number
                                                      minimum: -90
                                                      maximum: 90
                                                    distanceM:
                                                      type: number
                                                      minimum: 0
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            - type: object
                                              required:
                                                - kind
                                                - role
                                                - events
                                              properties:
                                                kind:
                                                  const: motor
                                                id:
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                role:
                                                  type: string
                                                events:
                                                  type: array
                                                  minItems: 1
                                                  items:
                                                    type: object
                                                    required:
                                                      - atS
                                                      - 'on'
                                                    properties:
                                                      atS:
                                                        type: number
                                                        minimum: 0
                                                      'on':
                                                        type: boolean
                                                      rpm:
                                                        enum:
                                                          - 33.333
                                                          - 45
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                      x-meta:
                                        type: object
                                        description: >-
                                          app-specific (e.g. intended effect
                                          labels); ignored by engines
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                    $defs:
                                      i18n:
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                      id:
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                      formatVersion:
                                        type: string
                                        pattern: ^1\.\d+\.\d+$
                                      direction:
                                        type: object
                                        description: >-
                                          .dome convention: azimuth 0 = front,
                                          clockwise; elevation 0 = spring line
                                        properties:
                                          azimuthDeg:
                                            type: number
                                            minimum: -360
                                            maximum: 360
                                          elevationDeg:
                                            type: number
                                            minimum: -90
                                            maximum: 90
                                          distanceM:
                                            type: number
                                            minimum: 0
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      multi:
                                        type: object
                                        description: >-
                                          MULTI generator parameters
                                          (NmSoundParams names, 02c §5.6)
                                        properties:
                                          program:
                                            type: string
                                            description: >-
                                              MULTI programme JSON text
                                              {"target":"f1,f2,…","autonext":s}
                                              (NmSoundParams.program); empty = single
                                              target
                                          target:
                                            type: number
                                            minimum: 0
                                            maximum: 20000
                                          enviroment:
                                            type: number
                                            minimum: 0
                                          modulation:
                                            type: number
                                          multi:
                                            type: number
                                          channel:
                                            type: number
                                            description: >-
                                              stereo phase angle code: 0, 1, 2, 60,
                                              90, 120, 137, 180
                                          audio:
                                            type: number
                                          compatJava:
                                            type: boolean
                                            default: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      modulation:
                                        type: object
                                        required:
                                          - kind
                                          - rateHz
                                        properties:
                                          kind:
                                            enum:
                                              - am
                                              - fm
                                              - pm
                                              - binaural_beat
                                          rateHz:
                                            type: number
                                            minimum: 0.01
                                            maximum: 100
                                          depth:
                                            type: number
                                            minimum: 0
                                            maximum: 1
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      segment:
                                        type: object
                                        required:
                                          - startS
                                          - durationS
                                        properties:
                                          id:
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                          startS:
                                            type: number
                                            minimum: 0
                                          durationS:
                                            type: number
                                            exclusiveMinimum: 0
                                          carrierHz:
                                            type: number
                                            minimum: 20
                                            maximum: 20000
                                          harmonicsHz:
                                            type: array
                                            items:
                                              type: number
                                              minimum: 20
                                              maximum: 20000
                                          amplitude:
                                            type: number
                                            minimum: 0
                                            maximum: 1
                                          attackS:
                                            type: number
                                            minimum: 0
                                          releaseS:
                                            type: number
                                            minimum: 0
                                          modulation:
                                            type: object
                                            required:
                                              - kind
                                              - rateHz
                                            properties:
                                              kind:
                                                enum:
                                                  - am
                                                  - fm
                                                  - pm
                                                  - binaural_beat
                                              rateHz:
                                                type: number
                                                minimum: 0.01
                                                maximum: 100
                                              depth:
                                                type: number
                                                minimum: 0
                                                maximum: 1
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          multi:
                                            type: object
                                            description: >-
                                              MULTI generator parameters
                                              (NmSoundParams names, 02c §5.6)
                                            properties:
                                              program:
                                                type: string
                                                description: >-
                                                  MULTI programme JSON text
                                                  {"target":"f1,f2,…","autonext":s}
                                                  (NmSoundParams.program); empty = single
                                                  target
                                              target:
                                                type: number
                                                minimum: 0
                                                maximum: 20000
                                              enviroment:
                                                type: number
                                                minimum: 0
                                              modulation:
                                                type: number
                                              multi:
                                                type: number
                                              channel:
                                                type: number
                                                description: >-
                                                  stereo phase angle code: 0, 1, 2, 60,
                                                  90, 120, 137, 180
                                              audio:
                                                type: number
                                              compatJava:
                                                type: boolean
                                                default: false
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      role:
                                        type: object
                                        required:
                                          - class
                                        properties:
                                          class:
                                            enum:
                                              - striker_array
                                              - resonator
                                              - phonograph
                                              - initiator
                                              - signal_generator
                                              - tactile
                                              - speakers
                                          min:
                                            type: integer
                                            minimum: 1
                                            default: 1
                                          optional:
                                            type: boolean
                                            default: false
                                          description:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      toneTrack:
                                        type: object
                                        required:
                                          - kind
                                          - role
                                          - segments
                                        properties:
                                          kind:
                                            const: tone
                                          id:
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                          role:
                                            type: string
                                          direction:
                                            type: object
                                            description: >-
                                              .dome convention: azimuth 0 = front,
                                              clockwise; elevation 0 = spring line
                                            properties:
                                              azimuthDeg:
                                                type: number
                                                minimum: -360
                                                maximum: 360
                                              elevationDeg:
                                                type: number
                                                minimum: -90
                                                maximum: 90
                                              distanceM:
                                                type: number
                                                minimum: 0
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          transition:
                                            enum:
                                              - linear
                                              - exponential
                                              - stepped
                                              - smooth
                                          gainDb:
                                            type: number
                                            maximum: 12
                                          segments:
                                            type: array
                                            minItems: 1
                                            items:
                                              type: object
                                              required:
                                                - startS
                                                - durationS
                                              properties:
                                                id:
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                startS:
                                                  type: number
                                                  minimum: 0
                                                durationS:
                                                  type: number
                                                  exclusiveMinimum: 0
                                                carrierHz:
                                                  type: number
                                                  minimum: 20
                                                  maximum: 20000
                                                harmonicsHz:
                                                  type: array
                                                  items:
                                                    type: number
                                                    minimum: 20
                                                    maximum: 20000
                                                amplitude:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 1
                                                attackS:
                                                  type: number
                                                  minimum: 0
                                                releaseS:
                                                  type: number
                                                  minimum: 0
                                                modulation:
                                                  type: object
                                                  required:
                                                    - kind
                                                    - rateHz
                                                  properties:
                                                    kind:
                                                      enum:
                                                        - am
                                                        - fm
                                                        - pm
                                                        - binaural_beat
                                                    rateHz:
                                                      type: number
                                                      minimum: 0.01
                                                      maximum: 100
                                                    depth:
                                                      type: number
                                                      minimum: 0
                                                      maximum: 1
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                                multi:
                                                  type: object
                                                  description: >-
                                                    MULTI generator parameters
                                                    (NmSoundParams names, 02c §5.6)
                                                  properties:
                                                    program:
                                                      type: string
                                                      description: >-
                                                        MULTI programme JSON text
                                                        {"target":"f1,f2,…","autonext":s}
                                                        (NmSoundParams.program); empty = single
                                                        target
                                                    target:
                                                      type: number
                                                      minimum: 0
                                                      maximum: 20000
                                                    enviroment:
                                                      type: number
                                                      minimum: 0
                                                    modulation:
                                                      type: number
                                                    multi:
                                                      type: number
                                                    channel:
                                                      type: number
                                                      description: >-
                                                        stereo phase angle code: 0, 1, 2, 60,
                                                        90, 120, 137, 180
                                                    audio:
                                                      type: number
                                                    compatJava:
                                                      type: boolean
                                                      default: false
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      strikeTrack:
                                        type: object
                                        required:
                                          - kind
                                          - role
                                          - pattern
                                        properties:
                                          kind:
                                            const: strike
                                          id:
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                          role:
                                            type: string
                                          startS:
                                            type: number
                                            minimum: 0
                                          pattern:
                                            type: object
                                            required:
                                              - tempoBpm
                                              - strikes
                                            properties:
                                              tempoBpm:
                                                type: number
                                                exclusiveMinimum: 0
                                                maximum: 600
                                              beatsPerLoop:
                                                type: number
                                                exclusiveMinimum: 0
                                              loops:
                                                type:
                                                  - integer
                                                  - 'null'
                                                minimum: 1
                                                description: null = until stopped
                                              velocityCurve:
                                                enum:
                                                  - linear
                                                  - exponential
                                                  - logarithmic
                                                  - sigmoid
                                              strikes:
                                                type: array
                                                minItems: 1
                                                items:
                                                  type: object
                                                  required:
                                                    - striker
                                                    - target
                                                    - beat
                                                    - velocity
                                                  properties:
                                                    striker:
                                                      type: string
                                                      minLength: 1
                                                    target:
                                                      type: string
                                                      minLength: 1
                                                    beat:
                                                      type: number
                                                      minimum: 0
                                                    velocity:
                                                      type: number
                                                      minimum: 0
                                                      maximum: 1
                                                    durationMs:
                                                      type: integer
                                                      minimum: 1
                                                      maximum: 200
                                                    accent:
                                                      enum:
                                                        - none
                                                        - soft
                                                        - medium
                                                        - strong
                                                        - crescendo
                                                        - decrescendo
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      mediaTrack:
                                        type: object
                                        required:
                                          - kind
                                          - src
                                        properties:
                                          kind:
                                            const: media
                                          id:
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                          role:
                                            type: string
                                            default: speakers
                                          src:
                                            type: string
                                            minLength: 1
                                          startS:
                                            type: number
                                            minimum: 0
                                          gainDb:
                                            type: number
                                            maximum: 12
                                          loop:
                                            type: boolean
                                          sha256:
                                            type: string
                                            pattern: ^[0-9a-f]{64}$
                                          direction:
                                            type: object
                                            description: >-
                                              .dome convention: azimuth 0 = front,
                                              clockwise; elevation 0 = spring line
                                            properties:
                                              azimuthDeg:
                                                type: number
                                                minimum: -360
                                                maximum: 360
                                              elevationDeg:
                                                type: number
                                                minimum: -90
                                                maximum: 90
                                              distanceM:
                                                type: number
                                                minimum: 0
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      motorTrack:
                                        type: object
                                        required:
                                          - kind
                                          - role
                                          - events
                                        properties:
                                          kind:
                                            const: motor
                                          id:
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                          role:
                                            type: string
                                          events:
                                            type: array
                                            minItems: 1
                                            items:
                                              type: object
                                              required:
                                                - atS
                                                - 'on'
                                              properties:
                                                atS:
                                                  type: number
                                                  minimum: 0
                                                'on':
                                                  type: boolean
                                                rpm:
                                                  enum:
                                                    - 33.333
                                                    - 45
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                            - if:
                                properties:
                                  kind:
                                    const: pattern
                                required:
                                  - kind
                              then:
                                properties:
                                  document:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/ananta/1.0/pattern.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). Content owned by 02c (AU,
                                      ananta_core 2.AU.2); mirrored here per PR5
                                      / RC2 (CR-AU-2), contract copy is the
                                      published one.
                                    title: Ananta strike pattern
                                    description: >-
                                      Reusable strike pattern for striker arrays
                                      (ananta-pattern), 02c §10.
                                    type: object
                                    required:
                                      - format
                                      - formatVersion
                                      - id
                                      - title
                                      - pattern
                                    properties:
                                      $schema:
                                        type: string
                                      format:
                                        const: ananta-pattern
                                      formatVersion:
                                        type: string
                                        pattern: ^1\.\d+\.\d+$
                                      id:
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                      title:
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                      description:
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                      tags:
                                        type: array
                                        items:
                                          type: string
                                      license:
                                        type: string
                                        default: NativeMindNONC
                                      pattern:
                                        type: object
                                        required:
                                          - tempoBpm
                                          - strikes
                                        properties:
                                          tempoBpm:
                                            type: number
                                            exclusiveMinimum: 0
                                            maximum: 600
                                          beatsPerLoop:
                                            type: number
                                            exclusiveMinimum: 0
                                          loops:
                                            type:
                                              - integer
                                              - 'null'
                                            minimum: 1
                                            description: null = until stopped
                                          velocityCurve:
                                            enum:
                                              - linear
                                              - exponential
                                              - logarithmic
                                              - sigmoid
                                          strikes:
                                            type: array
                                            minItems: 1
                                            items:
                                              type: object
                                              required:
                                                - striker
                                                - target
                                                - beat
                                                - velocity
                                              properties:
                                                striker:
                                                  type: string
                                                  minLength: 1
                                                target:
                                                  type: string
                                                  minLength: 1
                                                beat:
                                                  type: number
                                                  minimum: 0
                                                velocity:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 1
                                                durationMs:
                                                  type: integer
                                                  minimum: 1
                                                  maximum: 200
                                                accent:
                                                  enum:
                                                    - none
                                                    - soft
                                                    - medium
                                                    - strong
                                                    - crescendo
                                                    - decrescendo
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      x-meta:
                                        type: object
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                    $defs:
                                      i18n:
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                      id:
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                      formatVersion:
                                        type: string
                                        pattern: ^1\.\d+\.\d+$
                                      strike:
                                        type: object
                                        required:
                                          - striker
                                          - target
                                          - beat
                                          - velocity
                                        properties:
                                          striker:
                                            type: string
                                            minLength: 1
                                          target:
                                            type: string
                                            minLength: 1
                                          beat:
                                            type: number
                                            minimum: 0
                                          velocity:
                                            type: number
                                            minimum: 0
                                            maximum: 1
                                          durationMs:
                                            type: integer
                                            minimum: 1
                                            maximum: 200
                                          accent:
                                            enum:
                                              - none
                                              - soft
                                              - medium
                                              - strong
                                              - crescendo
                                              - decrescendo
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      pattern:
                                        type: object
                                        required:
                                          - tempoBpm
                                          - strikes
                                        properties:
                                          tempoBpm:
                                            type: number
                                            exclusiveMinimum: 0
                                            maximum: 600
                                          beatsPerLoop:
                                            type: number
                                            exclusiveMinimum: 0
                                          loops:
                                            type:
                                              - integer
                                              - 'null'
                                            minimum: 1
                                            description: null = until stopped
                                          velocityCurve:
                                            enum:
                                              - linear
                                              - exponential
                                              - logarithmic
                                              - sigmoid
                                          strikes:
                                            type: array
                                            minItems: 1
                                            items:
                                              type: object
                                              required:
                                                - striker
                                                - target
                                                - beat
                                                - velocity
                                              properties:
                                                striker:
                                                  type: string
                                                  minLength: 1
                                                target:
                                                  type: string
                                                  minLength: 1
                                                beat:
                                                  type: number
                                                  minimum: 0
                                                velocity:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 1
                                                durationMs:
                                                  type: integer
                                                  minimum: 1
                                                  maximum: 200
                                                accent:
                                                  enum:
                                                    - none
                                                    - soft
                                                    - medium
                                                    - strong
                                                    - crescendo
                                                    - decrescendo
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                            - if:
                                properties:
                                  kind:
                                    const: session
                                required:
                                  - kind
                              then:
                                properties:
                                  document:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/ananta/1.0/session.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). Content owned by 02c (AU,
                                      ananta_core 2.AU.2); mirrored here per PR5
                                      / RC2 (CR-AU-2), contract copy is the
                                      published one.
                                    title: Ananta session
                                    description: >-
                                      Ordered list of programme references +
                                      gaps + loop, global gain, default mode
                                      (ananta-session), 02c §10.
                                    type: object
                                    required:
                                      - format
                                      - formatVersion
                                      - id
                                      - title
                                      - items
                                    properties:
                                      $schema:
                                        type: string
                                      format:
                                        const: ananta-session
                                      formatVersion:
                                        type: string
                                        pattern: ^1\.\d+\.\d+$
                                      id:
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                      title:
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                      description:
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                      tags:
                                        type: array
                                        items:
                                          type: string
                                      license:
                                        type: string
                                        default: NativeMindNONC
                                      mode:
                                        enum:
                                          - digital
                                          - hybrid
                                          - combined
                                      gainDb:
                                        type: number
                                        maximum: 12
                                      loop:
                                        type: boolean
                                        default: false
                                      items:
                                        type: array
                                        minItems: 1
                                        items:
                                          type: object
                                          required:
                                            - programme
                                          properties:
                                            programme:
                                              type: object
                                              description: >-
                                                reference by content URI or by programme
                                                id
                                              properties:
                                                uri:
                                                  type: string
                                                  minLength: 1
                                                id:
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                sha256:
                                                  type: string
                                                  pattern: ^[0-9a-f]{64}$
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                              anyOf:
                                                - required:
                                                    - uri
                                                - required:
                                                    - id
                                            gapS:
                                              type: number
                                              minimum: 0
                                              default: 0
                                            repeat:
                                              type: integer
                                              minimum: 1
                                              default: 1
                                            gainDb:
                                              type: number
                                              maximum: 12
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      x-meta:
                                        type: object
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                    $defs:
                                      i18n:
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                      id:
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                      formatVersion:
                                        type: string
                                        pattern: ^1\.\d+\.\d+$
                                      item:
                                        type: object
                                        required:
                                          - programme
                                        properties:
                                          programme:
                                            type: object
                                            description: >-
                                              reference by content URI or by programme
                                              id
                                            properties:
                                              uri:
                                                type: string
                                                minLength: 1
                                              id:
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                              sha256:
                                                type: string
                                                pattern: ^[0-9a-f]{64}$
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                            anyOf:
                                              - required:
                                                  - uri
                                              - required:
                                                  - id
                                          gapS:
                                            type: number
                                            minimum: 0
                                            default: 0
                                          repeat:
                                            type: integer
                                            minimum: 1
                                            default: 1
                                          gainDb:
                                            type: number
                                            maximum: 12
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                        presetInput:
                          description: PUT /venues/{venueId}/audio/presets/{presetId} body.
                          type: object
                          required:
                            - kind
                            - document
                          properties:
                            kind:
                              enum:
                                - programme
                                - pattern
                                - session
                            document:
                              type: object
                          additionalProperties: false
                          allOf:
                            - if:
                                properties:
                                  kind:
                                    const: programme
                                required:
                                  - kind
                              then:
                                properties:
                                  document:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/ananta/1.0/programme.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). Content owned by 02c (AU,
                                      ananta_core 2.AU.2); mirrored here per PR5
                                      / RC2 (CR-AU-2), contract copy is the
                                      published one.
                                    title: Ananta programme
                                    description: >-
                                      L6 programme preset (*.ananta.json), 02c
                                      §10. Played by generic L1 players; claims
                                      only in x-meta.
                                    type: object
                                    required:
                                      - format
                                      - formatVersion
                                      - id
                                      - title
                                      - tracks
                                    properties:
                                      $schema:
                                        type: string
                                      format:
                                        const: ananta-programme
                                      formatVersion:
                                        type: string
                                        pattern: ^1\.\d+\.\d+$
                                      id:
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                      title:
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                      description:
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                      tags:
                                        type: array
                                        items:
                                          type: string
                                      license:
                                        type: string
                                        default: NativeMindNONC
                                      durationS:
                                        type: number
                                        minimum: 0
                                      modes:
                                        type: array
                                        items:
                                          enum:
                                            - digital
                                            - hybrid
                                            - combined
                                        uniqueItems: true
                                      roles:
                                        type: object
                                        description: >-
                                          role name → required device class /
                                          capabilities
                                        propertyNames:
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                        additionalProperties:
                                          type: object
                                          required:
                                            - class
                                          properties:
                                            class:
                                              enum:
                                                - striker_array
                                                - resonator
                                                - phonograph
                                                - initiator
                                                - signal_generator
                                                - tactile
                                                - speakers
                                            min:
                                              type: integer
                                              minimum: 1
                                              default: 1
                                            optional:
                                              type: boolean
                                              default: false
                                            description:
                                              type: string
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      tracks:
                                        type: array
                                        minItems: 1
                                        items:
                                          oneOf:
                                            - type: object
                                              required:
                                                - kind
                                                - role
                                                - segments
                                              properties:
                                                kind:
                                                  const: tone
                                                id:
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                role:
                                                  type: string
                                                direction:
                                                  type: object
                                                  description: >-
                                                    .dome convention: azimuth 0 = front,
                                                    clockwise; elevation 0 = spring line
                                                  properties:
                                                    azimuthDeg:
                                                      type: number
                                                      minimum: -360
                                                      maximum: 360
                                                    elevationDeg:
                                                      type: number
                                                      minimum: -90
                                                      maximum: 90
                                                    distanceM:
                                                      type: number
                                                      minimum: 0
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                                transition:
                                                  enum:
                                                    - linear
                                                    - exponential
                                                    - stepped
                                                    - smooth
                                                gainDb:
                                                  type: number
                                                  maximum: 12
                                                segments:
                                                  type: array
                                                  minItems: 1
                                                  items:
                                                    type: object
                                                    required:
                                                      - startS
                                                      - durationS
                                                    properties:
                                                      id:
                                                        type: string
                                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                      startS:
                                                        type: number
                                                        minimum: 0
                                                      durationS:
                                                        type: number
                                                        exclusiveMinimum: 0
                                                      carrierHz:
                                                        type: number
                                                        minimum: 20
                                                        maximum: 20000
                                                      harmonicsHz:
                                                        type: array
                                                        items:
                                                          type: number
                                                          minimum: 20
                                                          maximum: 20000
                                                      amplitude:
                                                        type: number
                                                        minimum: 0
                                                        maximum: 1
                                                      attackS:
                                                        type: number
                                                        minimum: 0
                                                      releaseS:
                                                        type: number
                                                        minimum: 0
                                                      modulation:
                                                        type: object
                                                        required:
                                                          - kind
                                                          - rateHz
                                                        properties:
                                                          kind:
                                                            enum:
                                                              - am
                                                              - fm
                                                              - pm
                                                              - binaural_beat
                                                          rateHz:
                                                            type: number
                                                            minimum: 0.01
                                                            maximum: 100
                                                          depth:
                                                            type: number
                                                            minimum: 0
                                                            maximum: 1
                                                        patternProperties:
                                                          ^x-: true
                                                        additionalProperties: false
                                                      multi:
                                                        type: object
                                                        description: >-
                                                          MULTI generator parameters
                                                          (NmSoundParams names, 02c §5.6)
                                                        properties:
                                                          program:
                                                            type: string
                                                            description: >-
                                                              MULTI programme JSON text
                                                              {"target":"f1,f2,…","autonext":s}
                                                              (NmSoundParams.program); empty = single
                                                              target
                                                          target:
                                                            type: number
                                                            minimum: 0
                                                            maximum: 20000
                                                          enviroment:
                                                            type: number
                                                            minimum: 0
                                                          modulation:
                                                            type: number
                                                          multi:
                                                            type: number
                                                          channel:
                                                            type: number
                                                            description: >-
                                                              stereo phase angle code: 0, 1, 2, 60,
                                                              90, 120, 137, 180
                                                          audio:
                                                            type: number
                                                          compatJava:
                                                            type: boolean
                                                            default: false
                                                        patternProperties:
                                                          ^x-: true
                                                        additionalProperties: false
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            - type: object
                                              required:
                                                - kind
                                                - role
                                                - pattern
                                              properties:
                                                kind:
                                                  const: strike
                                                id:
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                role:
                                                  type: string
                                                startS:
                                                  type: number
                                                  minimum: 0
                                                pattern:
                                                  type: object
                                                  required:
                                                    - tempoBpm
                                                    - strikes
                                                  properties:
                                                    tempoBpm:
                                                      type: number
                                                      exclusiveMinimum: 0
                                                      maximum: 600
                                                    beatsPerLoop:
                                                      type: number
                                                      exclusiveMinimum: 0
                                                    loops:
                                                      type:
                                                        - integer
                                                        - 'null'
                                                      minimum: 1
                                                      description: null = until stopped
                                                    velocityCurve:
                                                      enum:
                                                        - linear
                                                        - exponential
                                                        - logarithmic
                                                        - sigmoid
                                                    strikes:
                                                      type: array
                                                      minItems: 1
                                                      items:
                                                        type: object
                                                        required:
                                                          - striker
                                                          - target
                                                          - beat
                                                          - velocity
                                                        properties:
                                                          striker:
                                                            type: string
                                                            minLength: 1
                                                          target:
                                                            type: string
                                                            minLength: 1
                                                          beat:
                                                            type: number
                                                            minimum: 0
                                                          velocity:
                                                            type: number
                                                            minimum: 0
                                                            maximum: 1
                                                          durationMs:
                                                            type: integer
                                                            minimum: 1
                                                            maximum: 200
                                                          accent:
                                                            enum:
                                                              - none
                                                              - soft
                                                              - medium
                                                              - strong
                                                              - crescendo
                                                              - decrescendo
                                                        patternProperties:
                                                          ^x-: true
                                                        additionalProperties: false
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            - type: object
                                              required:
                                                - kind
                                                - src
                                              properties:
                                                kind:
                                                  const: media
                                                id:
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                role:
                                                  type: string
                                                  default: speakers
                                                src:
                                                  type: string
                                                  minLength: 1
                                                startS:
                                                  type: number
                                                  minimum: 0
                                                gainDb:
                                                  type: number
                                                  maximum: 12
                                                loop:
                                                  type: boolean
                                                sha256:
                                                  type: string
                                                  pattern: ^[0-9a-f]{64}$
                                                direction:
                                                  type: object
                                                  description: >-
                                                    .dome convention: azimuth 0 = front,
                                                    clockwise; elevation 0 = spring line
                                                  properties:
                                                    azimuthDeg:
                                                      type: number
                                                      minimum: -360
                                                      maximum: 360
                                                    elevationDeg:
                                                      type: number
                                                      minimum: -90
                                                      maximum: 90
                                                    distanceM:
                                                      type: number
                                                      minimum: 0
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                            - type: object
                                              required:
                                                - kind
                                                - role
                                                - events
                                              properties:
                                                kind:
                                                  const: motor
                                                id:
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                role:
                                                  type: string
                                                events:
                                                  type: array
                                                  minItems: 1
                                                  items:
                                                    type: object
                                                    required:
                                                      - atS
                                                      - 'on'
                                                    properties:
                                                      atS:
                                                        type: number
                                                        minimum: 0
                                                      'on':
                                                        type: boolean
                                                      rpm:
                                                        enum:
                                                          - 33.333
                                                          - 45
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                      x-meta:
                                        type: object
                                        description: >-
                                          app-specific (e.g. intended effect
                                          labels); ignored by engines
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                    $defs:
                                      i18n:
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                      id:
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                      formatVersion:
                                        type: string
                                        pattern: ^1\.\d+\.\d+$
                                      direction:
                                        type: object
                                        description: >-
                                          .dome convention: azimuth 0 = front,
                                          clockwise; elevation 0 = spring line
                                        properties:
                                          azimuthDeg:
                                            type: number
                                            minimum: -360
                                            maximum: 360
                                          elevationDeg:
                                            type: number
                                            minimum: -90
                                            maximum: 90
                                          distanceM:
                                            type: number
                                            minimum: 0
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      multi:
                                        type: object
                                        description: >-
                                          MULTI generator parameters
                                          (NmSoundParams names, 02c §5.6)
                                        properties:
                                          program:
                                            type: string
                                            description: >-
                                              MULTI programme JSON text
                                              {"target":"f1,f2,…","autonext":s}
                                              (NmSoundParams.program); empty = single
                                              target
                                          target:
                                            type: number
                                            minimum: 0
                                            maximum: 20000
                                          enviroment:
                                            type: number
                                            minimum: 0
                                          modulation:
                                            type: number
                                          multi:
                                            type: number
                                          channel:
                                            type: number
                                            description: >-
                                              stereo phase angle code: 0, 1, 2, 60,
                                              90, 120, 137, 180
                                          audio:
                                            type: number
                                          compatJava:
                                            type: boolean
                                            default: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      modulation:
                                        type: object
                                        required:
                                          - kind
                                          - rateHz
                                        properties:
                                          kind:
                                            enum:
                                              - am
                                              - fm
                                              - pm
                                              - binaural_beat
                                          rateHz:
                                            type: number
                                            minimum: 0.01
                                            maximum: 100
                                          depth:
                                            type: number
                                            minimum: 0
                                            maximum: 1
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      segment:
                                        type: object
                                        required:
                                          - startS
                                          - durationS
                                        properties:
                                          id:
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                          startS:
                                            type: number
                                            minimum: 0
                                          durationS:
                                            type: number
                                            exclusiveMinimum: 0
                                          carrierHz:
                                            type: number
                                            minimum: 20
                                            maximum: 20000
                                          harmonicsHz:
                                            type: array
                                            items:
                                              type: number
                                              minimum: 20
                                              maximum: 20000
                                          amplitude:
                                            type: number
                                            minimum: 0
                                            maximum: 1
                                          attackS:
                                            type: number
                                            minimum: 0
                                          releaseS:
                                            type: number
                                            minimum: 0
                                          modulation:
                                            type: object
                                            required:
                                              - kind
                                              - rateHz
                                            properties:
                                              kind:
                                                enum:
                                                  - am
                                                  - fm
                                                  - pm
                                                  - binaural_beat
                                              rateHz:
                                                type: number
                                                minimum: 0.01
                                                maximum: 100
                                              depth:
                                                type: number
                                                minimum: 0
                                                maximum: 1
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          multi:
                                            type: object
                                            description: >-
                                              MULTI generator parameters
                                              (NmSoundParams names, 02c §5.6)
                                            properties:
                                              program:
                                                type: string
                                                description: >-
                                                  MULTI programme JSON text
                                                  {"target":"f1,f2,…","autonext":s}
                                                  (NmSoundParams.program); empty = single
                                                  target
                                              target:
                                                type: number
                                                minimum: 0
                                                maximum: 20000
                                              enviroment:
                                                type: number
                                                minimum: 0
                                              modulation:
                                                type: number
                                              multi:
                                                type: number
                                              channel:
                                                type: number
                                                description: >-
                                                  stereo phase angle code: 0, 1, 2, 60,
                                                  90, 120, 137, 180
                                              audio:
                                                type: number
                                              compatJava:
                                                type: boolean
                                                default: false
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      role:
                                        type: object
                                        required:
                                          - class
                                        properties:
                                          class:
                                            enum:
                                              - striker_array
                                              - resonator
                                              - phonograph
                                              - initiator
                                              - signal_generator
                                              - tactile
                                              - speakers
                                          min:
                                            type: integer
                                            minimum: 1
                                            default: 1
                                          optional:
                                            type: boolean
                                            default: false
                                          description:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      toneTrack:
                                        type: object
                                        required:
                                          - kind
                                          - role
                                          - segments
                                        properties:
                                          kind:
                                            const: tone
                                          id:
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                          role:
                                            type: string
                                          direction:
                                            type: object
                                            description: >-
                                              .dome convention: azimuth 0 = front,
                                              clockwise; elevation 0 = spring line
                                            properties:
                                              azimuthDeg:
                                                type: number
                                                minimum: -360
                                                maximum: 360
                                              elevationDeg:
                                                type: number
                                                minimum: -90
                                                maximum: 90
                                              distanceM:
                                                type: number
                                                minimum: 0
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          transition:
                                            enum:
                                              - linear
                                              - exponential
                                              - stepped
                                              - smooth
                                          gainDb:
                                            type: number
                                            maximum: 12
                                          segments:
                                            type: array
                                            minItems: 1
                                            items:
                                              type: object
                                              required:
                                                - startS
                                                - durationS
                                              properties:
                                                id:
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                startS:
                                                  type: number
                                                  minimum: 0
                                                durationS:
                                                  type: number
                                                  exclusiveMinimum: 0
                                                carrierHz:
                                                  type: number
                                                  minimum: 20
                                                  maximum: 20000
                                                harmonicsHz:
                                                  type: array
                                                  items:
                                                    type: number
                                                    minimum: 20
                                                    maximum: 20000
                                                amplitude:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 1
                                                attackS:
                                                  type: number
                                                  minimum: 0
                                                releaseS:
                                                  type: number
                                                  minimum: 0
                                                modulation:
                                                  type: object
                                                  required:
                                                    - kind
                                                    - rateHz
                                                  properties:
                                                    kind:
                                                      enum:
                                                        - am
                                                        - fm
                                                        - pm
                                                        - binaural_beat
                                                    rateHz:
                                                      type: number
                                                      minimum: 0.01
                                                      maximum: 100
                                                    depth:
                                                      type: number
                                                      minimum: 0
                                                      maximum: 1
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                                multi:
                                                  type: object
                                                  description: >-
                                                    MULTI generator parameters
                                                    (NmSoundParams names, 02c §5.6)
                                                  properties:
                                                    program:
                                                      type: string
                                                      description: >-
                                                        MULTI programme JSON text
                                                        {"target":"f1,f2,…","autonext":s}
                                                        (NmSoundParams.program); empty = single
                                                        target
                                                    target:
                                                      type: number
                                                      minimum: 0
                                                      maximum: 20000
                                                    enviroment:
                                                      type: number
                                                      minimum: 0
                                                    modulation:
                                                      type: number
                                                    multi:
                                                      type: number
                                                    channel:
                                                      type: number
                                                      description: >-
                                                        stereo phase angle code: 0, 1, 2, 60,
                                                        90, 120, 137, 180
                                                    audio:
                                                      type: number
                                                    compatJava:
                                                      type: boolean
                                                      default: false
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      strikeTrack:
                                        type: object
                                        required:
                                          - kind
                                          - role
                                          - pattern
                                        properties:
                                          kind:
                                            const: strike
                                          id:
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                          role:
                                            type: string
                                          startS:
                                            type: number
                                            minimum: 0
                                          pattern:
                                            type: object
                                            required:
                                              - tempoBpm
                                              - strikes
                                            properties:
                                              tempoBpm:
                                                type: number
                                                exclusiveMinimum: 0
                                                maximum: 600
                                              beatsPerLoop:
                                                type: number
                                                exclusiveMinimum: 0
                                              loops:
                                                type:
                                                  - integer
                                                  - 'null'
                                                minimum: 1
                                                description: null = until stopped
                                              velocityCurve:
                                                enum:
                                                  - linear
                                                  - exponential
                                                  - logarithmic
                                                  - sigmoid
                                              strikes:
                                                type: array
                                                minItems: 1
                                                items:
                                                  type: object
                                                  required:
                                                    - striker
                                                    - target
                                                    - beat
                                                    - velocity
                                                  properties:
                                                    striker:
                                                      type: string
                                                      minLength: 1
                                                    target:
                                                      type: string
                                                      minLength: 1
                                                    beat:
                                                      type: number
                                                      minimum: 0
                                                    velocity:
                                                      type: number
                                                      minimum: 0
                                                      maximum: 1
                                                    durationMs:
                                                      type: integer
                                                      minimum: 1
                                                      maximum: 200
                                                    accent:
                                                      enum:
                                                        - none
                                                        - soft
                                                        - medium
                                                        - strong
                                                        - crescendo
                                                        - decrescendo
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      mediaTrack:
                                        type: object
                                        required:
                                          - kind
                                          - src
                                        properties:
                                          kind:
                                            const: media
                                          id:
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                          role:
                                            type: string
                                            default: speakers
                                          src:
                                            type: string
                                            minLength: 1
                                          startS:
                                            type: number
                                            minimum: 0
                                          gainDb:
                                            type: number
                                            maximum: 12
                                          loop:
                                            type: boolean
                                          sha256:
                                            type: string
                                            pattern: ^[0-9a-f]{64}$
                                          direction:
                                            type: object
                                            description: >-
                                              .dome convention: azimuth 0 = front,
                                              clockwise; elevation 0 = spring line
                                            properties:
                                              azimuthDeg:
                                                type: number
                                                minimum: -360
                                                maximum: 360
                                              elevationDeg:
                                                type: number
                                                minimum: -90
                                                maximum: 90
                                              distanceM:
                                                type: number
                                                minimum: 0
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      motorTrack:
                                        type: object
                                        required:
                                          - kind
                                          - role
                                          - events
                                        properties:
                                          kind:
                                            const: motor
                                          id:
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                          role:
                                            type: string
                                          events:
                                            type: array
                                            minItems: 1
                                            items:
                                              type: object
                                              required:
                                                - atS
                                                - 'on'
                                              properties:
                                                atS:
                                                  type: number
                                                  minimum: 0
                                                'on':
                                                  type: boolean
                                                rpm:
                                                  enum:
                                                    - 33.333
                                                    - 45
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                            - if:
                                properties:
                                  kind:
                                    const: pattern
                                required:
                                  - kind
                              then:
                                properties:
                                  document:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/ananta/1.0/pattern.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). Content owned by 02c (AU,
                                      ananta_core 2.AU.2); mirrored here per PR5
                                      / RC2 (CR-AU-2), contract copy is the
                                      published one.
                                    title: Ananta strike pattern
                                    description: >-
                                      Reusable strike pattern for striker arrays
                                      (ananta-pattern), 02c §10.
                                    type: object
                                    required:
                                      - format
                                      - formatVersion
                                      - id
                                      - title
                                      - pattern
                                    properties:
                                      $schema:
                                        type: string
                                      format:
                                        const: ananta-pattern
                                      formatVersion:
                                        type: string
                                        pattern: ^1\.\d+\.\d+$
                                      id:
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                      title:
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                      description:
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                      tags:
                                        type: array
                                        items:
                                          type: string
                                      license:
                                        type: string
                                        default: NativeMindNONC
                                      pattern:
                                        type: object
                                        required:
                                          - tempoBpm
                                          - strikes
                                        properties:
                                          tempoBpm:
                                            type: number
                                            exclusiveMinimum: 0
                                            maximum: 600
                                          beatsPerLoop:
                                            type: number
                                            exclusiveMinimum: 0
                                          loops:
                                            type:
                                              - integer
                                              - 'null'
                                            minimum: 1
                                            description: null = until stopped
                                          velocityCurve:
                                            enum:
                                              - linear
                                              - exponential
                                              - logarithmic
                                              - sigmoid
                                          strikes:
                                            type: array
                                            minItems: 1
                                            items:
                                              type: object
                                              required:
                                                - striker
                                                - target
                                                - beat
                                                - velocity
                                              properties:
                                                striker:
                                                  type: string
                                                  minLength: 1
                                                target:
                                                  type: string
                                                  minLength: 1
                                                beat:
                                                  type: number
                                                  minimum: 0
                                                velocity:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 1
                                                durationMs:
                                                  type: integer
                                                  minimum: 1
                                                  maximum: 200
                                                accent:
                                                  enum:
                                                    - none
                                                    - soft
                                                    - medium
                                                    - strong
                                                    - crescendo
                                                    - decrescendo
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      x-meta:
                                        type: object
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                    $defs:
                                      i18n:
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                      id:
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                      formatVersion:
                                        type: string
                                        pattern: ^1\.\d+\.\d+$
                                      strike:
                                        type: object
                                        required:
                                          - striker
                                          - target
                                          - beat
                                          - velocity
                                        properties:
                                          striker:
                                            type: string
                                            minLength: 1
                                          target:
                                            type: string
                                            minLength: 1
                                          beat:
                                            type: number
                                            minimum: 0
                                          velocity:
                                            type: number
                                            minimum: 0
                                            maximum: 1
                                          durationMs:
                                            type: integer
                                            minimum: 1
                                            maximum: 200
                                          accent:
                                            enum:
                                              - none
                                              - soft
                                              - medium
                                              - strong
                                              - crescendo
                                              - decrescendo
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      pattern:
                                        type: object
                                        required:
                                          - tempoBpm
                                          - strikes
                                        properties:
                                          tempoBpm:
                                            type: number
                                            exclusiveMinimum: 0
                                            maximum: 600
                                          beatsPerLoop:
                                            type: number
                                            exclusiveMinimum: 0
                                          loops:
                                            type:
                                              - integer
                                              - 'null'
                                            minimum: 1
                                            description: null = until stopped
                                          velocityCurve:
                                            enum:
                                              - linear
                                              - exponential
                                              - logarithmic
                                              - sigmoid
                                          strikes:
                                            type: array
                                            minItems: 1
                                            items:
                                              type: object
                                              required:
                                                - striker
                                                - target
                                                - beat
                                                - velocity
                                              properties:
                                                striker:
                                                  type: string
                                                  minLength: 1
                                                target:
                                                  type: string
                                                  minLength: 1
                                                beat:
                                                  type: number
                                                  minimum: 0
                                                velocity:
                                                  type: number
                                                  minimum: 0
                                                  maximum: 1
                                                durationMs:
                                                  type: integer
                                                  minimum: 1
                                                  maximum: 200
                                                accent:
                                                  enum:
                                                    - none
                                                    - soft
                                                    - medium
                                                    - strong
                                                    - crescendo
                                                    - decrescendo
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                            - if:
                                properties:
                                  kind:
                                    const: session
                                required:
                                  - kind
                              then:
                                properties:
                                  document:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/ananta/1.0/session.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). Content owned by 02c (AU,
                                      ananta_core 2.AU.2); mirrored here per PR5
                                      / RC2 (CR-AU-2), contract copy is the
                                      published one.
                                    title: Ananta session
                                    description: >-
                                      Ordered list of programme references +
                                      gaps + loop, global gain, default mode
                                      (ananta-session), 02c §10.
                                    type: object
                                    required:
                                      - format
                                      - formatVersion
                                      - id
                                      - title
                                      - items
                                    properties:
                                      $schema:
                                        type: string
                                      format:
                                        const: ananta-session
                                      formatVersion:
                                        type: string
                                        pattern: ^1\.\d+\.\d+$
                                      id:
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                      title:
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                      description:
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                      tags:
                                        type: array
                                        items:
                                          type: string
                                      license:
                                        type: string
                                        default: NativeMindNONC
                                      mode:
                                        enum:
                                          - digital
                                          - hybrid
                                          - combined
                                      gainDb:
                                        type: number
                                        maximum: 12
                                      loop:
                                        type: boolean
                                        default: false
                                      items:
                                        type: array
                                        minItems: 1
                                        items:
                                          type: object
                                          required:
                                            - programme
                                          properties:
                                            programme:
                                              type: object
                                              description: >-
                                                reference by content URI or by programme
                                                id
                                              properties:
                                                uri:
                                                  type: string
                                                  minLength: 1
                                                id:
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                                sha256:
                                                  type: string
                                                  pattern: ^[0-9a-f]{64}$
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                              anyOf:
                                                - required:
                                                    - uri
                                                - required:
                                                    - id
                                            gapS:
                                              type: number
                                              minimum: 0
                                              default: 0
                                            repeat:
                                              type: integer
                                              minimum: 1
                                              default: 1
                                            gainDb:
                                              type: number
                                              maximum: 12
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      x-meta:
                                        type: object
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                    $defs:
                                      i18n:
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                      id:
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                      formatVersion:
                                        type: string
                                        pattern: ^1\.\d+\.\d+$
                                      item:
                                        type: object
                                        required:
                                          - programme
                                        properties:
                                          programme:
                                            type: object
                                            description: >-
                                              reference by content URI or by programme
                                              id
                                            properties:
                                              uri:
                                                type: string
                                                minLength: 1
                                              id:
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$
                                              sha256:
                                                type: string
                                                pattern: ^[0-9a-f]{64}$
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                            anyOf:
                                              - required:
                                                  - uri
                                              - required:
                                                  - id
                                          gapS:
                                            type: number
                                            minimum: 0
                                            default: 0
                                          repeat:
                                            type: integer
                                            minimum: 1
                                            default: 1
                                          gainDb:
                                            type: number
                                            maximum: 12
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                        presetPage:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                type: object
                                required:
                                  - id
                                  - kind
                                  - revision
                                properties:
                                  id:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  kind:
                                    enum:
                                      - programme
                                      - pattern
                                      - session
                                  title:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). Localised text map
                                      {"en":…,"ru":…}, 02e §3.1 (as .dome
                                      meta.title).
                                    title: Localised text
                                    type: object
                                    minProperties: 1
                                    propertyNames:
                                      pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                    additionalProperties:
                                      type: string
                                    examples:
                                      - en: Intro
                                        ru: Вступление
                                    $defs:
                                      textOrI18n:
                                        description: >-
                                          Plain string (treated as `en`) or a
                                          localised map. (map branch = the root
                                          schema, inlined for tools that
                                          mis-handle self references)
                                        anyOf:
                                          - type: string
                                          - type: object
                                            minProperties: 1
                                            propertyNames:
                                              pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                            additionalProperties:
                                              type: string
                                            examples:
                                              - en: Intro
                                                ru: Вступление
                                  revision:
                                    description: >-
                                      Monotonic resource revision; the strong
                                      ETag is derived from it.
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                          additionalProperties: false
                        targets:
                          type: object
                          properties:
                            devices:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              uniqueItems: true
                            zones:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              uniqueItems: true
                            speakers:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              uniqueItems: true
                          additionalProperties: false
                        sessionStart:
                          description: >-
                            POST /venues/{venueId}/audio/sessions: run an
                            installed preset (programme or session).
                          type: object
                          required:
                            - presetId
                          properties:
                            presetId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            gainDb:
                              type: number
                              minimum: -96
                              maximum: 12
                            targets:
                              type: object
                              properties:
                                devices:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  uniqueItems: true
                                zones:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  uniqueItems: true
                                speakers:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  uniqueItems: true
                              additionalProperties: false
                            at:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            loop:
                              type: boolean
                          additionalProperties: false
                        session:
                          type: object
                          required:
                            - id
                            - venueId
                            - presetId
                            - status
                            - startedAt
                          properties:
                            id:
                              description: >-
                                Server-owned resource id: UUIDv7, lowercase,
                                sortable by creation time.
                              type: string
                              pattern: >-
                                ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                              examples:
                                - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                            venueId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            presetId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            status:
                              anyOf:
                                - enum:
                                    - starting
                                    - running
                                    - paused
                                    - finished
                                    - stopped
                                    - failed
                                - type: string
                            engines:
                              type: array
                              items:
                                type: string
                            position:
                              description: Media position in seconds from the start.
                              type: number
                              minimum: 0
                            duration:
                              description: Duration in seconds.
                              type: number
                              minimum: 0
                            itemIndex:
                              type: integer
                              minimum: 0
                            targets:
                              type: object
                              properties:
                                devices:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  uniqueItems: true
                                zones:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  uniqueItems: true
                                speakers:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  uniqueItems: true
                              additionalProperties: false
                            problem:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). RFC 9457 problem details with the
                                Freedome `code` catalogue, 02e §3.3. Also the
                                `data` of WS `error`, the socket.io ack error
                                and GraphQL errors[].extensions.problem. The
                                catalogue is open: unknown codes are allowed;
                                known codes are bound to their HTTP status.
                              title: Problem details
                              type: object
                              required:
                                - type
                                - title
                                - code
                              properties:
                                type:
                                  type: string
                                  format: uri
                                  description: >-
                                    https://freedome.nativemind.us/problems/<code>
                                    for catalogue codes.
                                title:
                                  type: string
                                  minLength: 1
                                status:
                                  type: integer
                                  minimum: 100
                                  maximum: 599
                                detail:
                                  type: string
                                instance:
                                  type: string
                                  format: uri-reference
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                traceId:
                                  type: string
                                  pattern: ^[0-9a-f]{16,32}$
                                errors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              allOf:
                                - if:
                                    properties:
                                      code:
                                        const: validation-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: not-found
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 404
                                - if:
                                    properties:
                                      code:
                                        const: conflict
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: precondition-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 412
                                - if:
                                    properties:
                                      code:
                                        const: precondition-required
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 428
                                - if:
                                    properties:
                                      code:
                                        const: unauthenticated
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: forbidden
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: rate-limited
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 429
                                - if:
                                    properties:
                                      code:
                                        const: payload-too-large
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 413
                                - if:
                                    properties:
                                      code:
                                        const: unsupported-format
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 415
                                - if:
                                    properties:
                                      code:
                                        const: engine-unavailable
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: engine-incompatible
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: degraded
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: upload-checksum-mismatch
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: legacy-unsupported
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 501
                                - if:
                                    properties:
                                      code:
                                        const: internal
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 500
                                - if:
                                    properties:
                                      code:
                                        const: clock-unlocked
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: not-configured
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: authorization-pending
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: slow-down
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: access-denied
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: expired-token
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: token-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-key-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-in-progress
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                              additionalProperties: true
                              examples:
                                - type: >-
                                    https://freedome.nativemind.us/problems/engine-unavailable
                                  title: Visual engine unavailable
                                  status: 503
                                  detail: >-
                                    freedome-engined not reachable at
                                    unix:/run/freedome/engine.sock
                                  instance: /api/v1/venues/default/players/main/play
                                  code: engine-unavailable
                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                              $defs:
                                knownCode:
                                  enum:
                                    - validation-failed
                                    - not-found
                                    - conflict
                                    - precondition-failed
                                    - precondition-required
                                    - unauthenticated
                                    - forbidden
                                    - rate-limited
                                    - payload-too-large
                                    - unsupported-format
                                    - engine-unavailable
                                    - engine-incompatible
                                    - degraded
                                    - job-failed
                                    - upload-checksum-mismatch
                                    - legacy-unsupported
                                    - internal
                                    - clock-unlocked
                                    - not-configured
                                    - authorization-pending
                                    - slow-down
                                    - access-denied
                                    - expired-token
                                    - token-reused
                                    - idempotency-key-reused
                                    - idempotency-in-progress
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                fieldError:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                            startedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            endedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          additionalProperties: false
                        sessionPage:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                type: object
                                required:
                                  - id
                                  - venueId
                                  - presetId
                                  - status
                                  - startedAt
                                properties:
                                  id:
                                    description: >-
                                      Server-owned resource id: UUIDv7,
                                      lowercase, sortable by creation time.
                                    type: string
                                    pattern: >-
                                      ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                    examples:
                                      - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                                  venueId:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  presetId:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  status:
                                    anyOf:
                                      - enum:
                                          - starting
                                          - running
                                          - paused
                                          - finished
                                          - stopped
                                          - failed
                                      - type: string
                                  engines:
                                    type: array
                                    items:
                                      type: string
                                  position:
                                    description: Media position in seconds from the start.
                                    type: number
                                    minimum: 0
                                  duration:
                                    description: Duration in seconds.
                                    type: number
                                    minimum: 0
                                  itemIndex:
                                    type: integer
                                    minimum: 0
                                  targets:
                                    type: object
                                    properties:
                                      devices:
                                        type: array
                                        items:
                                          description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        uniqueItems: true
                                      zones:
                                        type: array
                                        items:
                                          description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        uniqueItems: true
                                      speakers:
                                        type: array
                                        items:
                                          description: >-
                                            Document-scoped id (.dome displays[].id,
                                            assets[].id, playlist / cue ids); unique
                                            within its parent.
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        uniqueItems: true
                                    additionalProperties: false
                                  problem:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  startedAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  endedAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                additionalProperties: false
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                          additionalProperties: false
                        generator:
                          description: >-
                            Test / MULTI generator (iScillator semantics;
                            replaces generate_test_signal).
                          type: object
                          required:
                            - signal
                          properties:
                            signal:
                              anyOf:
                                - enum:
                                    - sine
                                    - pink
                                    - white
                                    - sweep
                                    - multi
                                - type: string
                            frequencies:
                              type: array
                              items:
                                type: number
                                exclusiveMinimum: 0
                              maxItems: 64
                              description: >-
                                sine: [f]; sweep: [from, to]; multi: up to 64
                                partials
                            gainDb:
                              type: number
                              minimum: -96
                              maximum: 0
                            durationS:
                              type: number
                              exclusiveMinimum: 0
                            targets:
                              type: object
                              properties:
                                devices:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  uniqueItems: true
                                zones:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  uniqueItems: true
                                speakers:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  uniqueItems: true
                              additionalProperties: false
                          additionalProperties: false
                        generatorState:
                          type: object
                          required:
                            - running
                          properties:
                            running:
                              type: boolean
                            settings:
                              description: >-
                                Test / MULTI generator (iScillator semantics;
                                replaces generate_test_signal).
                              type: object
                              required:
                                - signal
                              properties:
                                signal:
                                  anyOf:
                                    - enum:
                                        - sine
                                        - pink
                                        - white
                                        - sweep
                                        - multi
                                    - type: string
                                frequencies:
                                  type: array
                                  items:
                                    type: number
                                    exclusiveMinimum: 0
                                  maxItems: 64
                                  description: >-
                                    sine: [f]; sweep: [from, to]; multi: up to
                                    64 partials
                                gainDb:
                                  type: number
                                  minimum: -96
                                  maximum: 0
                                durationS:
                                  type: number
                                  exclusiveMinimum: 0
                                targets:
                                  type: object
                                  properties:
                                    devices:
                                      type: array
                                      items:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      uniqueItems: true
                                    zones:
                                      type: array
                                      items:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      uniqueItems: true
                                    speakers:
                                      type: array
                                      items:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      uniqueItems: true
                                  additionalProperties: false
                              additionalProperties: false
                            startedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          additionalProperties: false
                        sourcePosition:
                          description: >-
                            Interactive / realtime source position (spherical,
                            listener at the dome centre).
                          type: object
                          required:
                            - azimuth
                            - elevation
                          properties:
                            azimuth:
                              type: number
                              minimum: -360
                              maximum: 360
                              description: >-
                                degrees, 0 = front, positive = left (ambisonic
                                convention)
                            elevation:
                              type: number
                              minimum: -90
                              maximum: 90
                            distance:
                              type: number
                              exclusiveMinimum: 0
                              description: metres
                            rampMs:
                              type: number
                              minimum: 0
                              maximum: 10000
                          additionalProperties: false
                    patch:
                      type: object
                      minProperties: 1
                      properties:
                        mode:
                          description: >-
                            A8: digital = anAntaDigital only; hybrid =
                            anAntaSound (mechanical devices); combined = both.
                          anyOf:
                            - enum:
                                - digital
                                - hybrid
                                - combined
                            - type: string
                              pattern: ^[a-z][a-z0-9_-]{0,31}$
                        masterGainDb:
                          description: >-
                            Gain in dB (C5: optional companion of linear
                            `volume`).
                          type: number
                          minimum: -144
                          maximum: 24
                        mute:
                          type: boolean
                      patternProperties:
                        ^x-: true
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: audio.layout
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: AnantaSound layout (01b §4.4).
                      type: object
                      properties:
                        ambisonics:
                          type: object
                          properties:
                            order:
                              type: integer
                              minimum: 0
                              maximum: 7
                            normalisation:
                              anyOf:
                                - enum:
                                    - SN3D
                                    - N3D
                                    - FuMa
                                - description: >-
                                    Value of an open enum: one of the listed
                                    values or any other token (clients tolerate
                                    unknown values).
                                  type: string
                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                            channelOrder:
                              anyOf:
                                - enum:
                                    - ACN
                                    - FuMa
                                - description: >-
                                    Value of an open enum: one of the listed
                                    values or any other token (clients tolerate
                                    unknown values).
                                  type: string
                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        decoder:
                          type: object
                          properties:
                            kind:
                              anyOf:
                                - enum:
                                    - allrad
                                    - sad
                                    - mmd
                                    - epad
                                - description: >-
                                    Value of an open enum: one of the listed
                                    values or any other token (clients tolerate
                                    unknown values).
                                  type: string
                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                            dualBand:
                              type: boolean
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        speakers:
                          type: array
                          items:
                            type: object
                            required:
                              - id
                              - azimuth
                              - elevation
                            properties:
                              id:
                                description: Document-scoped id (02e §3.2).
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              azimuth:
                                type: number
                                minimum: -360
                                maximum: 360
                                description: ° (0 = front, clockwise from above)
                              elevation:
                                type: number
                                minimum: -90
                                maximum: 90
                                description: ° (0 = spring line)
                              distance:
                                type: number
                                exclusiveMinimum: 0
                                description: m
                              channel:
                                type: integer
                                minimum: 1
                              delayMs:
                                type: number
                                minimum: 0
                              gainDb:
                                type: number
                                minimum: -144
                                maximum: 24
                              kind:
                                anyOf:
                                  - enum:
                                      - fullrange
                                      - subwoofer
                                      - satellite
                                  - description: >-
                                      Value of an open enum: one of the listed
                                      values or any other token (clients
                                      tolerate unknown values).
                                    type: string
                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                              lfe:
                                type: boolean
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                        roomCorrection:
                          type: object
                          required:
                            - file
                          properties:
                            file:
                              description: >-
                                Entry path inside the container: relative,
                                `/`-separated, no `..` segment, no backslash, no
                                NUL.
                              type: string
                              minLength: 1
                              maxLength: 1024
                              pattern: >-
                                ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                            kind:
                              anyOf:
                                - enum:
                                    - fir
                                    - iir
                                    - peq
                                - description: >-
                                    Value of an open enum: one of the listed
                                    values or any other token (clients tolerate
                                    unknown values).
                                  type: string
                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        devices:
                          type: array
                          items:
                            type: object
                            required:
                              - id
                              - kind
                            properties:
                              id:
                                description: Document-scoped id (02e §3.2).
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              name:
                                type: string
                              kind:
                                anyOf:
                                  - enum:
                                      - qrd
                                      - patefon
                                      - karmic_cluster
                                      - speaker_amp
                                      - microphone
                                  - description: >-
                                      Value of an open enum: one of the listed
                                      values or any other token (clients
                                      tolerate unknown values).
                                    type: string
                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                              address:
                                type: string
                                minLength: 1
                                description: e.g. osc://10.0.0.20:9000
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                      patternProperties:
                        ^x-: true
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: audio.levels
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: >-
                        audio.levels meters (≤ 10 Hz): id (speaker / zone /
                        device / master) → dBFS.
                      type: object
                      required:
                        - levels
                      properties:
                        levels:
                          type: object
                          additionalProperties:
                            type: number
                            maximum: 24
                        peak:
                          type: object
                          additionalProperties:
                            type: number
                            maximum: 24
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: zone.state
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: >-
                        anAntaDigital zone: a subset of speakers with gain,
                        delay, EQ.
                      type: object
                      allOf:
                        - type: object
                          properties:
                            name:
                              type: string
                              maxLength: 128
                            speakers:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              uniqueItems: true
                            gainDb:
                              description: >-
                                Gain in dB (C5: optional companion of linear
                                `volume`).
                              type: number
                              minimum: -144
                              maximum: 24
                            delayMs:
                              type: number
                              minimum: 0
                              maximum: 2000
                            eq:
                              type: array
                              items:
                                type: object
                                required:
                                  - type
                                  - frequencyHz
                                properties:
                                  type:
                                    anyOf:
                                      - enum:
                                          - peak
                                          - lowShelf
                                          - highShelf
                                          - lowPass
                                          - highPass
                                          - notch
                                          - allPass
                                      - type: string
                                  frequencyHz:
                                    type: number
                                    exclusiveMinimum: 0
                                  gainDb:
                                    type: number
                                    minimum: -48
                                    maximum: 24
                                  q:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 100
                                  enabled:
                                    type: boolean
                                    default: true
                                additionalProperties: false
                              maxItems: 32
                            mute:
                              type: boolean
                          patternProperties:
                            ^x-: true
                      required:
                        - id
                        - speakers
                        - gainDb
                        - mute
                        - revision
                      properties:
                        id:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                      unevaluatedProperties: false
                    patch:
                      description: Merge patch of the resource (high-rate kinds).
                      type: object
                      minProperties: 1
              - if:
                  properties:
                    kind:
                      const: zone.deleted
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      type: object
                      required:
                        - id
                      properties:
                        id:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: audioDevice.state
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: >-
                        Audio device = .dome audio.devices[] / speakers[] entry
                        + live state (02c §6).
                      type: object
                      required:
                        - id
                        - kind
                        - state
                      properties:
                        id:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        kind:
                          anyOf:
                            - enum:
                                - speaker
                                - speaker_amp
                                - microphone
                                - qrd
                                - patefon
                                - karmic_cluster
                                - resonator
                            - type: string
                              pattern: ^[a-z][a-z0-9_-]{0,31}$
                        name:
                          type: string
                        config:
                          type: object
                          description: the .dome audio device / speaker entry
                          additionalProperties: true
                        state:
                          type: object
                          required:
                            - online
                          properties:
                            online:
                              type: boolean
                            engine:
                              anyOf:
                                - enum:
                                    - anantasound
                                    - anantadigital
                                - type: string
                            gainDb:
                              description: >-
                                Gain in dB (C5: optional companion of linear
                                `volume`).
                              type: number
                              minimum: -144
                              maximum: 24
                            mute:
                              type: boolean
                            levelDb:
                              type: number
                              maximum: 24
                              description: last meter value (dBFS)
                            temperatureC:
                              type: number
                            firmware:
                              type: string
                            faults:
                              type: array
                              items:
                                type: string
                            lastSeen:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          additionalProperties: true
                      patternProperties:
                        ^x-: true
                      additionalProperties: false
                    patch:
                      description: Merge patch of the resource (high-rate kinds).
                      type: object
                      minProperties: 1
              - if:
                  properties:
                    kind:
                      const: audioSession.state
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      type: object
                      required:
                        - id
                        - venueId
                        - presetId
                        - status
                        - startedAt
                      properties:
                        id:
                          description: >-
                            Server-owned resource id: UUIDv7, lowercase,
                            sortable by creation time.
                          type: string
                          pattern: >-
                            ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                          examples:
                            - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                        venueId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        presetId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        status:
                          anyOf:
                            - enum:
                                - starting
                                - running
                                - paused
                                - finished
                                - stopped
                                - failed
                            - type: string
                        engines:
                          type: array
                          items:
                            type: string
                        position:
                          description: Media position in seconds from the start.
                          type: number
                          minimum: 0
                        duration:
                          description: Duration in seconds.
                          type: number
                          minimum: 0
                        itemIndex:
                          type: integer
                          minimum: 0
                        targets:
                          type: object
                          properties:
                            devices:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              uniqueItems: true
                            zones:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              uniqueItems: true
                            speakers:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              uniqueItems: true
                          additionalProperties: false
                        problem:
                          $schema: https://json-schema.org/draft/2020-12/schema
                          $id: >-
                            https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                          $comment: >-
                            NativeMindNONC — freedome_contract (see LICENSE).
                            RFC 9457 problem details with the Freedome `code`
                            catalogue, 02e §3.3. Also the `data` of WS `error`,
                            the socket.io ack error and GraphQL
                            errors[].extensions.problem. The catalogue is open:
                            unknown codes are allowed; known codes are bound to
                            their HTTP status.
                          title: Problem details
                          type: object
                          required:
                            - type
                            - title
                            - code
                          properties:
                            type:
                              type: string
                              format: uri
                              description: >-
                                https://freedome.nativemind.us/problems/<code>
                                for catalogue codes.
                            title:
                              type: string
                              minLength: 1
                            status:
                              type: integer
                              minimum: 100
                              maximum: 599
                            detail:
                              type: string
                            instance:
                              type: string
                              format: uri-reference
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            traceId:
                              type: string
                              pattern: ^[0-9a-f]{16,32}$
                            errors:
                              type: array
                              items:
                                type: object
                                required:
                                  - pointer
                                  - detail
                                properties:
                                  pointer:
                                    type: string
                                    format: json-pointer
                                  detail:
                                    type: string
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                additionalProperties: true
                          allOf:
                            - if:
                                properties:
                                  code:
                                    const: validation-failed
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 422
                            - if:
                                properties:
                                  code:
                                    const: not-found
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 404
                            - if:
                                properties:
                                  code:
                                    const: conflict
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 409
                            - if:
                                properties:
                                  code:
                                    const: precondition-failed
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 412
                            - if:
                                properties:
                                  code:
                                    const: precondition-required
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 428
                            - if:
                                properties:
                                  code:
                                    const: unauthenticated
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 401
                            - if:
                                properties:
                                  code:
                                    const: forbidden
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 403
                            - if:
                                properties:
                                  code:
                                    const: rate-limited
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 429
                            - if:
                                properties:
                                  code:
                                    const: payload-too-large
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 413
                            - if:
                                properties:
                                  code:
                                    const: unsupported-format
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 415
                            - if:
                                properties:
                                  code:
                                    const: engine-unavailable
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 503
                            - if:
                                properties:
                                  code:
                                    const: engine-incompatible
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 503
                            - if:
                                properties:
                                  code:
                                    const: degraded
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 503
                            - if:
                                properties:
                                  code:
                                    const: upload-checksum-mismatch
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 422
                            - if:
                                properties:
                                  code:
                                    const: legacy-unsupported
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 501
                            - if:
                                properties:
                                  code:
                                    const: internal
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 500
                            - if:
                                properties:
                                  code:
                                    const: clock-unlocked
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 409
                            - if:
                                properties:
                                  code:
                                    const: not-configured
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 503
                            - if:
                                properties:
                                  code:
                                    const: authorization-pending
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 400
                            - if:
                                properties:
                                  code:
                                    const: slow-down
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 400
                            - if:
                                properties:
                                  code:
                                    const: access-denied
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 403
                            - if:
                                properties:
                                  code:
                                    const: expired-token
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 400
                            - if:
                                properties:
                                  code:
                                    const: token-reused
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 401
                            - if:
                                properties:
                                  code:
                                    const: idempotency-key-reused
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 409
                            - if:
                                properties:
                                  code:
                                    const: idempotency-in-progress
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 409
                          additionalProperties: true
                          examples:
                            - type: >-
                                https://freedome.nativemind.us/problems/engine-unavailable
                              title: Visual engine unavailable
                              status: 503
                              detail: >-
                                freedome-engined not reachable at
                                unix:/run/freedome/engine.sock
                              instance: /api/v1/venues/default/players/main/play
                              code: engine-unavailable
                              traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                          $defs:
                            knownCode:
                              enum:
                                - validation-failed
                                - not-found
                                - conflict
                                - precondition-failed
                                - precondition-required
                                - unauthenticated
                                - forbidden
                                - rate-limited
                                - payload-too-large
                                - unsupported-format
                                - engine-unavailable
                                - engine-incompatible
                                - degraded
                                - job-failed
                                - upload-checksum-mismatch
                                - legacy-unsupported
                                - internal
                                - clock-unlocked
                                - not-configured
                                - authorization-pending
                                - slow-down
                                - access-denied
                                - expired-token
                                - token-reused
                                - idempotency-key-reused
                                - idempotency-in-progress
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            fieldError:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        startedAt:
                          description: >-
                            RFC 3339 UTC with milliseconds, e.g.
                            2026-10-19T12:00:00.000Z.
                          type: string
                          format: date-time
                          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                        endedAt:
                          description: >-
                            RFC 3339 UTC with milliseconds, e.g.
                            2026-10-19T12:00:00.000Z.
                          type: string
                          format: date-time
                          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                      additionalProperties: false
                    patch:
                      description: Merge patch of the resource (high-rate kinds).
                      type: object
                      minProperties: 1
              - if:
                  properties:
                    kind:
                      const: generator.state
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      type: object
                      required:
                        - running
                      properties:
                        running:
                          type: boolean
                        settings:
                          description: >-
                            Test / MULTI generator (iScillator semantics;
                            replaces generate_test_signal).
                          type: object
                          required:
                            - signal
                          properties:
                            signal:
                              anyOf:
                                - enum:
                                    - sine
                                    - pink
                                    - white
                                    - sweep
                                    - multi
                                - type: string
                            frequencies:
                              type: array
                              items:
                                type: number
                                exclusiveMinimum: 0
                              maxItems: 64
                              description: >-
                                sine: [f]; sweep: [from, to]; multi: up to 64
                                partials
                            gainDb:
                              type: number
                              minimum: -96
                              maximum: 0
                            durationS:
                              type: number
                              exclusiveMinimum: 0
                            targets:
                              type: object
                              properties:
                                devices:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  uniqueItems: true
                                zones:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  uniqueItems: true
                                speakers:
                                  type: array
                                  items:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  uniqueItems: true
                              additionalProperties: false
                          additionalProperties: false
                        startedAt:
                          description: >-
                            RFC 3339 UTC with milliseconds, e.g.
                            2026-10-19T12:00:00.000Z.
                          type: string
                          format: date-time
                          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: show.updated
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/api/1.0/show.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). Show
                        resource (02e §4, §5.3) = .dome 1.1 show manifest
                        without format / kind ($defs reused from dome/1.1, never
                        duplicated) + server fields. Root = GET representation.
                      title: Show
                      allOf:
                        - type: object
                          allOf:
                            - description: >-
                                Show content shared by GET / PUT / POST: the
                                .dome show sections.
                              type: object
                              properties:
                                meta:
                                  type: object
                                  required:
                                    - id
                                    - title
                                  properties:
                                    id:
                                      description: >-
                                        Stable document id (UUID, lowercase);
                                        the venue / show id on import (02e
                                        §3.2).
                                      type: string
                                      pattern: >-
                                        ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                    title:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Localised text map
                                        {"en":…,"ru":…}, 02e §3.1 (as .dome
                                        meta.title).
                                      title: Localised text
                                      type: object
                                      minProperties: 1
                                      propertyNames:
                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                      additionalProperties:
                                        type: string
                                      examples:
                                        - en: Intro
                                          ru: Вступление
                                      $defs:
                                        textOrI18n:
                                          description: >-
                                            Plain string (treated as `en`) or a
                                            localised map. (map branch = the root
                                            schema, inlined for tools that
                                            mis-handle self references)
                                          anyOf:
                                            - type: string
                                            - type: object
                                              minProperties: 1
                                              propertyNames:
                                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                              additionalProperties:
                                                type: string
                                              examples:
                                                - en: Intro
                                                  ru: Вступление
                                    description:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Localised text map
                                        {"en":…,"ru":…}, 02e §3.1 (as .dome
                                        meta.title).
                                      title: Localised text
                                      type: object
                                      minProperties: 1
                                      propertyNames:
                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                      additionalProperties:
                                        type: string
                                      examples:
                                        - en: Intro
                                          ru: Вступление
                                      $defs:
                                        textOrI18n:
                                          description: >-
                                            Plain string (treated as `en`) or a
                                            localised map. (map branch = the root
                                            schema, inlined for tools that
                                            mis-handle self references)
                                          anyOf:
                                            - type: string
                                            - type: object
                                              minProperties: 1
                                              propertyNames:
                                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                              additionalProperties:
                                                type: string
                                              examples:
                                                - en: Intro
                                                  ru: Вступление
                                    authors:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - name
                                        properties:
                                          name:
                                            type: string
                                            minLength: 1
                                          email:
                                            type: string
                                            format: email
                                          url:
                                            type: string
                                            format: uri
                                          role:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    created:
                                      type: string
                                      format: date-time
                                    modified:
                                      type: string
                                      format: date-time
                                    generator:
                                      type: object
                                      required:
                                        - name
                                      properties:
                                        name:
                                          type: string
                                          minLength: 1
                                        version:
                                          type: string
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    license:
                                      type: string
                                      minLength: 1
                                      default: NativeMindNONC
                                    tags:
                                      type: array
                                      items:
                                        type: string
                                        minLength: 1
                                        maxLength: 64
                                      uniqueItems: true
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                assets:
                                  type: array
                                  items:
                                    description: >-
                                      Media / scene (01b §4.5). External assets
                                      (absolute URI) carry sha256 + size.
                                    type: object
                                    required:
                                      - id
                                      - src
                                      - type
                                    properties:
                                      id:
                                        description: Document-scoped id (02e §3.2).
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      name:
                                        type: string
                                      src:
                                        description: >-
                                          An entry path (see path) or an absolute
                                          URI (`https:`, `http:`, `file:`, `ndi:`,
                                          `srt:` …).
                                        anyOf:
                                          - description: >-
                                              Entry path inside the container:
                                              relative, `/`-separated, no `..`
                                              segment, no backslash, no NUL.
                                            type: string
                                            minLength: 1
                                            maxLength: 1024
                                            pattern: >-
                                              ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                          - type: string
                                            format: uri
                                            pattern: '^[A-Za-z][A-Za-z0-9+.-]*:'
                                      sha256:
                                        description: Lowercase hex SHA-256 digest.
                                        type: string
                                        pattern: ^[0-9a-f]{64}$
                                      size:
                                        type: integer
                                        minimum: 0
                                      type:
                                        anyOf:
                                          - enum:
                                              - video
                                              - image
                                              - audio
                                              - zelim
                                              - boranko
                                              - comics
                                              - realtime
                                              - stream
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      mapping:
                                        description: >-
                                          Content mapping onto the dome (01b §4.5,
                                          02b §4.4).
                                        type: object
                                        required:
                                          - projection
                                        properties:
                                          projection:
                                            anyOf:
                                              - enum:
                                                  - domemaster
                                                  - equirect
                                                  - cubemap
                                                  - flat
                                                  - pyramid_views
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          fov:
                                            type: number
                                            exclusiveMinimum: 0
                                            maximum: 360
                                            description: ° (domemaster 180–230)
                                          tilt:
                                            type: number
                                            minimum: -90
                                            maximum: 90
                                          azimuth:
                                            type: number
                                            minimum: -360
                                            maximum: 360
                                            description: 'flat: ° centre azimuth'
                                          elevation:
                                            type: number
                                            minimum: -90
                                            maximum: 90
                                            description: 'flat: ° centre elevation'
                                          width:
                                            type: number
                                            exclusiveMinimum: 0
                                            maximum: 360
                                            description: 'flat: ° angular width'
                                          faces:
                                            enum:
                                              - 3
                                              - 4
                                              - 6
                                            description: '1.1 pyramid_views: number of views'
                                          layout:
                                            description: >-
                                              1.1: cubemap 3x2 | 6x1 | cross;
                                              pyramid_views cross | row | grid
                                            anyOf:
                                              - enum:
                                                  - 3x2
                                                  - 6x1
                                                  - cross
                                                  - row
                                                  - grid
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                        if:
                                          properties:
                                            projection:
                                              const: pyramid_views
                                          required:
                                            - projection
                                        then:
                                          required:
                                            - faces
                                      video:
                                        type: object
                                        properties:
                                          resolution:
                                            type: array
                                            items:
                                              type: integer
                                              minimum: 1
                                            minItems: 2
                                            maxItems: 2
                                            description: '[width, height] or [cols, rows].'
                                          fps:
                                            type: number
                                            exclusiveMinimum: 0
                                          codec:
                                            anyOf:
                                              - enum:
                                                  - hap
                                                  - hap-q
                                                  - hap-alpha
                                                  - h264
                                                  - h265
                                                  - av1
                                                  - vp9
                                                  - prores
                                                  - png-sequence
                                                  - exr-sequence
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          stereo:
                                            oneOf:
                                              - type: 'null'
                                              - enum:
                                                  - top-bottom
                                                  - side-by-side
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      audio:
                                        type: object
                                        required:
                                          - kind
                                        properties:
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - ambisonic
                                                  - channels
                                                  - stereo
                                                  - mono
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          order:
                                            type: integer
                                            minimum: 0
                                            maximum: 7
                                          layout:
                                            type: string
                                            minLength: 1
                                            description: 'channels: e.g. 5.1, 7.1, 7.1.4'
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      duration:
                                        type: number
                                        minimum: 0
                                      thumbnail:
                                        description: >-
                                          Entry path inside the container:
                                          relative, `/`-separated, no `..`
                                          segment, no backslash, no NUL.
                                        type: string
                                        minLength: 1
                                        maxLength: 1024
                                        pattern: >-
                                          ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                      zelim:
                                        description: >-
                                          1.1: hint for type zelim (project = JSON
                                          variant J, binary = variant B); content
                                          sniffing wins. A J project may carry
                                          quantum.scene (02e §9.3).
                                        type: object
                                        properties:
                                          variant:
                                            anyOf:
                                              - enum:
                                                  - project
                                                  - binary
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                    if:
                                      properties:
                                        src:
                                          type: string
                                          pattern: '^(?!asset:)[A-Za-z][A-Za-z0-9+.-]*:'
                                          description: >-
                                            absolute URI other than `asset:<id>` (an
                                            asset stored on the server: sha256 /
                                            size known there)
                                      required:
                                        - src
                                    then:
                                      if:
                                        properties:
                                          type:
                                            const: stream
                                        required:
                                          - type
                                      else:
                                        required:
                                          - sha256
                                          - size
                                show:
                                  description: >-
                                    Playlists, timelines, matrix, cues,
                                    triggers, startup (01b §4.6).
                                  type: object
                                  properties:
                                    playlists:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - items
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          name:
                                            type: string
                                          loop:
                                            type: boolean
                                          items:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - asset
                                              properties:
                                                asset:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                in:
                                                  type: number
                                                  minimum: 0
                                                out:
                                                  type: number
                                                  minimum: 0
                                                loop:
                                                  type: boolean
                                                transition:
                                                  type: object
                                                  required:
                                                    - kind
                                                  properties:
                                                    kind:
                                                      anyOf:
                                                        - enum:
                                                            - cut
                                                            - fade
                                                            - dissolve
                                                            - wipe
                                                        - description: >-
                                                            Value of an open enum: one of the listed
                                                            values or any other token (clients
                                                            tolerate unknown values).
                                                          type: string
                                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                    duration:
                                                      type: number
                                                      minimum: 0
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                              description: >-
                                                x-screenberry: Screenberry item fields
                                                without a .dome equivalent, round-trip
                                                only (02d MD8).
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    timelines:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - tracks
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          name:
                                            type: string
                                          duration:
                                            type: number
                                            minimum: 0
                                          tracks:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - kind
                                                - clips
                                              properties:
                                                id:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                kind:
                                                  anyOf:
                                                    - enum:
                                                        - video
                                                        - audio
                                                        - control
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                clips:
                                                  type: array
                                                  items:
                                                    type: object
                                                    required:
                                                      - asset
                                                      - start
                                                    properties:
                                                      asset:
                                                        description: Document-scoped id (02e §3.2).
                                                        type: string
                                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                                        examples:
                                                          - p1
                                                          - intro.mp4
                                                          - cue-01
                                                      start:
                                                        type: number
                                                        minimum: 0
                                                      in:
                                                        type: number
                                                        minimum: 0
                                                      out:
                                                        type: number
                                                        minimum: 0
                                                      gainDb:
                                                        type: number
                                                        minimum: -144
                                                        maximum: 24
                                                      opacity:
                                                        type: number
                                                        minimum: 0
                                                        maximum: 1
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                    description: >-
                                                      x-screenberry: Screenberry item fields
                                                      without a .dome equivalent, round-trip
                                                      only (02d MD8).
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          markers:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - time
                                              properties:
                                                time:
                                                  type: number
                                                  minimum: 0
                                                name:
                                                  type: string
                                                id:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                kind:
                                                  anyOf:
                                                    - enum:
                                                        - marker
                                                        - pause
                                                        - jump
                                                        - timecode
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          fps:
                                            type: number
                                            exclusiveMinimum: 0
                                            description: 1.1 (02d)
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    matrix:
                                      description: >-
                                        Screenberry-style matrix
                                        (compatibility); cells reference row /
                                        column ids.
                                      type: object
                                      required:
                                        - rows
                                        - columns
                                        - cells
                                      properties:
                                        id:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        rows:
                                          type: array
                                          items:
                                            anyOf:
                                              - description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              - type: object
                                                required:
                                                  - id
                                                properties:
                                                  id:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  name:
                                                    type: string
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                        columns:
                                          type: array
                                          items:
                                            anyOf:
                                              - description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              - type: object
                                                required:
                                                  - id
                                                properties:
                                                  id:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  name:
                                                    type: string
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                        cells:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - row
                                              - column
                                              - asset
                                            properties:
                                              row:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              column:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              asset:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    cues:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - actions
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          name:
                                            type: string
                                          at:
                                            oneOf:
                                              - type: object
                                                required:
                                                  - timeline
                                                  - time
                                                properties:
                                                  timeline:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  time:
                                                    type: number
                                                    minimum: 0
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                              - type: object
                                                required:
                                                  - trigger
                                                properties:
                                                  trigger:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                          actions:
                                            type: array
                                            minItems: 1
                                            items:
                                              type: object
                                              required:
                                                - do
                                              properties:
                                                do:
                                                  anyOf:
                                                    - enum:
                                                        - play
                                                        - pause
                                                        - stop
                                                        - seek
                                                        - setVolume
                                                        - setBrightness
                                                        - setParameter
                                                        - osc
                                                        - http
                                                        - scenario
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                target:
                                                  type: string
                                                  minLength: 1
                                                  description: >-
                                                    e.g. player id, playlist:<id>, param
                                                    path, osc://host:port/address, URL
                                                args:
                                                  description: >-
                                                    Action arguments (object or positional
                                                    array).
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                              if:
                                                properties:
                                                  do:
                                                    const: scenario
                                                required:
                                                  - do
                                              then:
                                                required:
                                                  - target
                                                properties:
                                                  target:
                                                    description: scenario id (02d §4a)
                                                  args:
                                                    type: object
                                                    description: scenario parameters
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    triggers:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - source
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          source:
                                            anyOf:
                                              - enum:
                                                  - osc
                                                  - midi
                                                  - time
                                                  - api
                                                  - dmx
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          match:
                                            description: >-
                                              Source-specific match (OSC address
                                              pattern, MIDI note, cron / time, DMX
                                              channel …).
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    mediaPlayers:
                                      type: array
                                      items:
                                        description: >-
                                          1.1 (02d MD8): named media player.
                                          Player `main` always exists (implicit:
                                          all displays, source = startup).
                                        type: object
                                        required:
                                          - id
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          name:
                                            type: string
                                          target:
                                            description: absent = all displays
                                            type: object
                                            properties:
                                              displays:
                                                type: array
                                                items:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                uniqueItems: true
                                                minItems: 1
                                              layer:
                                                type: integer
                                                minimum: 0
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          source:
                                            description: >-
                                              Exactly one of playlist / timeline /
                                              matrix / asset id.
                                            type: object
                                            properties:
                                              playlist:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              timeline:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              matrix:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              asset:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                            minProperties: 1
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                            oneOf:
                                              - required:
                                                  - playlist
                                              - required:
                                                  - timeline
                                              - required:
                                                  - matrix
                                              - required:
                                                  - asset
                                          volume:
                                            type: number
                                            minimum: 0
                                            maximum: 1
                                          brightness:
                                            type: number
                                            minimum: 0
                                            maximum: 1
                                          rotation:
                                            type: number
                                            minimum: -360
                                            maximum: 360
                                            description: ° content rotation about the dome axis
                                          speed:
                                            type: number
                                            exclusiveMinimum: 0
                                            maximum: 16
                                            description: playback rate, 1 = normal
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    startup:
                                      description: >-
                                        Exactly one of playlist / timeline /
                                        matrix / asset id.
                                      type: object
                                      properties:
                                        playlist:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        timeline:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        matrix:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        asset:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                      minProperties: 1
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                      oneOf:
                                        - required:
                                            - playlist
                                        - required:
                                            - timeline
                                        - required:
                                            - matrix
                                        - required:
                                            - asset
                                    audioMode:
                                      description: >-
                                        1.1 (02c AQ4, replaces x-ananta.mode):
                                        audio engines used by the show; absent =
                                        digital.
                                      anyOf:
                                        - enum:
                                            - digital
                                            - hybrid
                                            - combined
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                compat:
                                  description: >-
                                    Declarative mappings for the A6 gateways
                                    (01b §4.7); never required for playback.
                                  type: object
                                  propertyNames:
                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
                                  additionalProperties:
                                    type: object
                              patternProperties:
                                ^x-: true
                          required:
                            - id
                            - revision
                            - meta
                            - assets
                            - show
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            revision:
                              description: >-
                                Monotonic resource revision; the strong ETag is
                                derived from it.
                              type: integer
                              minimum: 0
                            status:
                              anyOf:
                                - enum:
                                    - ready
                                    - incomplete
                                    - invalid
                                - type: string
                                  pattern: ^[a-z][a-z_-]{0,31}$
                              description: incomplete = referenced assets not ready yet
                            warnings:
                              type: array
                              items:
                                type: object
                                required:
                                  - code
                                  - detail
                                properties:
                                  code:
                                    type: string
                                    pattern: ^[a-z][a-z0-9-]{0,63}$
                                  detail:
                                    type: string
                                  pointer:
                                    type: string
                                additionalProperties: false
                              description: >-
                                UC-S6 validation against the active venue
                                (remapping, missing assets)
                            createdAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          unevaluatedProperties: false
                      $defs:
                        show:
                          type: object
                          allOf:
                            - description: >-
                                Show content shared by GET / PUT / POST: the
                                .dome show sections.
                              type: object
                              properties:
                                meta:
                                  type: object
                                  required:
                                    - id
                                    - title
                                  properties:
                                    id:
                                      description: >-
                                        Stable document id (UUID, lowercase);
                                        the venue / show id on import (02e
                                        §3.2).
                                      type: string
                                      pattern: >-
                                        ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                    title:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Localised text map
                                        {"en":…,"ru":…}, 02e §3.1 (as .dome
                                        meta.title).
                                      title: Localised text
                                      type: object
                                      minProperties: 1
                                      propertyNames:
                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                      additionalProperties:
                                        type: string
                                      examples:
                                        - en: Intro
                                          ru: Вступление
                                      $defs:
                                        textOrI18n:
                                          description: >-
                                            Plain string (treated as `en`) or a
                                            localised map. (map branch = the root
                                            schema, inlined for tools that
                                            mis-handle self references)
                                          anyOf:
                                            - type: string
                                            - type: object
                                              minProperties: 1
                                              propertyNames:
                                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                              additionalProperties:
                                                type: string
                                              examples:
                                                - en: Intro
                                                  ru: Вступление
                                    description:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Localised text map
                                        {"en":…,"ru":…}, 02e §3.1 (as .dome
                                        meta.title).
                                      title: Localised text
                                      type: object
                                      minProperties: 1
                                      propertyNames:
                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                      additionalProperties:
                                        type: string
                                      examples:
                                        - en: Intro
                                          ru: Вступление
                                      $defs:
                                        textOrI18n:
                                          description: >-
                                            Plain string (treated as `en`) or a
                                            localised map. (map branch = the root
                                            schema, inlined for tools that
                                            mis-handle self references)
                                          anyOf:
                                            - type: string
                                            - type: object
                                              minProperties: 1
                                              propertyNames:
                                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                              additionalProperties:
                                                type: string
                                              examples:
                                                - en: Intro
                                                  ru: Вступление
                                    authors:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - name
                                        properties:
                                          name:
                                            type: string
                                            minLength: 1
                                          email:
                                            type: string
                                            format: email
                                          url:
                                            type: string
                                            format: uri
                                          role:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    created:
                                      type: string
                                      format: date-time
                                    modified:
                                      type: string
                                      format: date-time
                                    generator:
                                      type: object
                                      required:
                                        - name
                                      properties:
                                        name:
                                          type: string
                                          minLength: 1
                                        version:
                                          type: string
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    license:
                                      type: string
                                      minLength: 1
                                      default: NativeMindNONC
                                    tags:
                                      type: array
                                      items:
                                        type: string
                                        minLength: 1
                                        maxLength: 64
                                      uniqueItems: true
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                assets:
                                  type: array
                                  items:
                                    description: >-
                                      Media / scene (01b §4.5). External assets
                                      (absolute URI) carry sha256 + size.
                                    type: object
                                    required:
                                      - id
                                      - src
                                      - type
                                    properties:
                                      id:
                                        description: Document-scoped id (02e §3.2).
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      name:
                                        type: string
                                      src:
                                        description: >-
                                          An entry path (see path) or an absolute
                                          URI (`https:`, `http:`, `file:`, `ndi:`,
                                          `srt:` …).
                                        anyOf:
                                          - description: >-
                                              Entry path inside the container:
                                              relative, `/`-separated, no `..`
                                              segment, no backslash, no NUL.
                                            type: string
                                            minLength: 1
                                            maxLength: 1024
                                            pattern: >-
                                              ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                          - type: string
                                            format: uri
                                            pattern: '^[A-Za-z][A-Za-z0-9+.-]*:'
                                      sha256:
                                        description: Lowercase hex SHA-256 digest.
                                        type: string
                                        pattern: ^[0-9a-f]{64}$
                                      size:
                                        type: integer
                                        minimum: 0
                                      type:
                                        anyOf:
                                          - enum:
                                              - video
                                              - image
                                              - audio
                                              - zelim
                                              - boranko
                                              - comics
                                              - realtime
                                              - stream
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      mapping:
                                        description: >-
                                          Content mapping onto the dome (01b §4.5,
                                          02b §4.4).
                                        type: object
                                        required:
                                          - projection
                                        properties:
                                          projection:
                                            anyOf:
                                              - enum:
                                                  - domemaster
                                                  - equirect
                                                  - cubemap
                                                  - flat
                                                  - pyramid_views
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          fov:
                                            type: number
                                            exclusiveMinimum: 0
                                            maximum: 360
                                            description: ° (domemaster 180–230)
                                          tilt:
                                            type: number
                                            minimum: -90
                                            maximum: 90
                                          azimuth:
                                            type: number
                                            minimum: -360
                                            maximum: 360
                                            description: 'flat: ° centre azimuth'
                                          elevation:
                                            type: number
                                            minimum: -90
                                            maximum: 90
                                            description: 'flat: ° centre elevation'
                                          width:
                                            type: number
                                            exclusiveMinimum: 0
                                            maximum: 360
                                            description: 'flat: ° angular width'
                                          faces:
                                            enum:
                                              - 3
                                              - 4
                                              - 6
                                            description: '1.1 pyramid_views: number of views'
                                          layout:
                                            description: >-
                                              1.1: cubemap 3x2 | 6x1 | cross;
                                              pyramid_views cross | row | grid
                                            anyOf:
                                              - enum:
                                                  - 3x2
                                                  - 6x1
                                                  - cross
                                                  - row
                                                  - grid
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                        if:
                                          properties:
                                            projection:
                                              const: pyramid_views
                                          required:
                                            - projection
                                        then:
                                          required:
                                            - faces
                                      video:
                                        type: object
                                        properties:
                                          resolution:
                                            type: array
                                            items:
                                              type: integer
                                              minimum: 1
                                            minItems: 2
                                            maxItems: 2
                                            description: '[width, height] or [cols, rows].'
                                          fps:
                                            type: number
                                            exclusiveMinimum: 0
                                          codec:
                                            anyOf:
                                              - enum:
                                                  - hap
                                                  - hap-q
                                                  - hap-alpha
                                                  - h264
                                                  - h265
                                                  - av1
                                                  - vp9
                                                  - prores
                                                  - png-sequence
                                                  - exr-sequence
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          stereo:
                                            oneOf:
                                              - type: 'null'
                                              - enum:
                                                  - top-bottom
                                                  - side-by-side
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      audio:
                                        type: object
                                        required:
                                          - kind
                                        properties:
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - ambisonic
                                                  - channels
                                                  - stereo
                                                  - mono
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          order:
                                            type: integer
                                            minimum: 0
                                            maximum: 7
                                          layout:
                                            type: string
                                            minLength: 1
                                            description: 'channels: e.g. 5.1, 7.1, 7.1.4'
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      duration:
                                        type: number
                                        minimum: 0
                                      thumbnail:
                                        description: >-
                                          Entry path inside the container:
                                          relative, `/`-separated, no `..`
                                          segment, no backslash, no NUL.
                                        type: string
                                        minLength: 1
                                        maxLength: 1024
                                        pattern: >-
                                          ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                      zelim:
                                        description: >-
                                          1.1: hint for type zelim (project = JSON
                                          variant J, binary = variant B); content
                                          sniffing wins. A J project may carry
                                          quantum.scene (02e §9.3).
                                        type: object
                                        properties:
                                          variant:
                                            anyOf:
                                              - enum:
                                                  - project
                                                  - binary
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                    if:
                                      properties:
                                        src:
                                          type: string
                                          pattern: '^(?!asset:)[A-Za-z][A-Za-z0-9+.-]*:'
                                          description: >-
                                            absolute URI other than `asset:<id>` (an
                                            asset stored on the server: sha256 /
                                            size known there)
                                      required:
                                        - src
                                    then:
                                      if:
                                        properties:
                                          type:
                                            const: stream
                                        required:
                                          - type
                                      else:
                                        required:
                                          - sha256
                                          - size
                                show:
                                  description: >-
                                    Playlists, timelines, matrix, cues,
                                    triggers, startup (01b §4.6).
                                  type: object
                                  properties:
                                    playlists:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - items
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          name:
                                            type: string
                                          loop:
                                            type: boolean
                                          items:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - asset
                                              properties:
                                                asset:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                in:
                                                  type: number
                                                  minimum: 0
                                                out:
                                                  type: number
                                                  minimum: 0
                                                loop:
                                                  type: boolean
                                                transition:
                                                  type: object
                                                  required:
                                                    - kind
                                                  properties:
                                                    kind:
                                                      anyOf:
                                                        - enum:
                                                            - cut
                                                            - fade
                                                            - dissolve
                                                            - wipe
                                                        - description: >-
                                                            Value of an open enum: one of the listed
                                                            values or any other token (clients
                                                            tolerate unknown values).
                                                          type: string
                                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                    duration:
                                                      type: number
                                                      minimum: 0
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                              description: >-
                                                x-screenberry: Screenberry item fields
                                                without a .dome equivalent, round-trip
                                                only (02d MD8).
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    timelines:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - tracks
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          name:
                                            type: string
                                          duration:
                                            type: number
                                            minimum: 0
                                          tracks:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - kind
                                                - clips
                                              properties:
                                                id:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                kind:
                                                  anyOf:
                                                    - enum:
                                                        - video
                                                        - audio
                                                        - control
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                clips:
                                                  type: array
                                                  items:
                                                    type: object
                                                    required:
                                                      - asset
                                                      - start
                                                    properties:
                                                      asset:
                                                        description: Document-scoped id (02e §3.2).
                                                        type: string
                                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                                        examples:
                                                          - p1
                                                          - intro.mp4
                                                          - cue-01
                                                      start:
                                                        type: number
                                                        minimum: 0
                                                      in:
                                                        type: number
                                                        minimum: 0
                                                      out:
                                                        type: number
                                                        minimum: 0
                                                      gainDb:
                                                        type: number
                                                        minimum: -144
                                                        maximum: 24
                                                      opacity:
                                                        type: number
                                                        minimum: 0
                                                        maximum: 1
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                    description: >-
                                                      x-screenberry: Screenberry item fields
                                                      without a .dome equivalent, round-trip
                                                      only (02d MD8).
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          markers:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - time
                                              properties:
                                                time:
                                                  type: number
                                                  minimum: 0
                                                name:
                                                  type: string
                                                id:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                kind:
                                                  anyOf:
                                                    - enum:
                                                        - marker
                                                        - pause
                                                        - jump
                                                        - timecode
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          fps:
                                            type: number
                                            exclusiveMinimum: 0
                                            description: 1.1 (02d)
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    matrix:
                                      description: >-
                                        Screenberry-style matrix
                                        (compatibility); cells reference row /
                                        column ids.
                                      type: object
                                      required:
                                        - rows
                                        - columns
                                        - cells
                                      properties:
                                        id:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        rows:
                                          type: array
                                          items:
                                            anyOf:
                                              - description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              - type: object
                                                required:
                                                  - id
                                                properties:
                                                  id:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  name:
                                                    type: string
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                        columns:
                                          type: array
                                          items:
                                            anyOf:
                                              - description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              - type: object
                                                required:
                                                  - id
                                                properties:
                                                  id:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  name:
                                                    type: string
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                        cells:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - row
                                              - column
                                              - asset
                                            properties:
                                              row:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              column:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              asset:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    cues:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - actions
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          name:
                                            type: string
                                          at:
                                            oneOf:
                                              - type: object
                                                required:
                                                  - timeline
                                                  - time
                                                properties:
                                                  timeline:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  time:
                                                    type: number
                                                    minimum: 0
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                              - type: object
                                                required:
                                                  - trigger
                                                properties:
                                                  trigger:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                          actions:
                                            type: array
                                            minItems: 1
                                            items:
                                              type: object
                                              required:
                                                - do
                                              properties:
                                                do:
                                                  anyOf:
                                                    - enum:
                                                        - play
                                                        - pause
                                                        - stop
                                                        - seek
                                                        - setVolume
                                                        - setBrightness
                                                        - setParameter
                                                        - osc
                                                        - http
                                                        - scenario
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                target:
                                                  type: string
                                                  minLength: 1
                                                  description: >-
                                                    e.g. player id, playlist:<id>, param
                                                    path, osc://host:port/address, URL
                                                args:
                                                  description: >-
                                                    Action arguments (object or positional
                                                    array).
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                              if:
                                                properties:
                                                  do:
                                                    const: scenario
                                                required:
                                                  - do
                                              then:
                                                required:
                                                  - target
                                                properties:
                                                  target:
                                                    description: scenario id (02d §4a)
                                                  args:
                                                    type: object
                                                    description: scenario parameters
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    triggers:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - source
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          source:
                                            anyOf:
                                              - enum:
                                                  - osc
                                                  - midi
                                                  - time
                                                  - api
                                                  - dmx
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          match:
                                            description: >-
                                              Source-specific match (OSC address
                                              pattern, MIDI note, cron / time, DMX
                                              channel …).
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    mediaPlayers:
                                      type: array
                                      items:
                                        description: >-
                                          1.1 (02d MD8): named media player.
                                          Player `main` always exists (implicit:
                                          all displays, source = startup).
                                        type: object
                                        required:
                                          - id
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          name:
                                            type: string
                                          target:
                                            description: absent = all displays
                                            type: object
                                            properties:
                                              displays:
                                                type: array
                                                items:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                uniqueItems: true
                                                minItems: 1
                                              layer:
                                                type: integer
                                                minimum: 0
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          source:
                                            description: >-
                                              Exactly one of playlist / timeline /
                                              matrix / asset id.
                                            type: object
                                            properties:
                                              playlist:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              timeline:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              matrix:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              asset:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                            minProperties: 1
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                            oneOf:
                                              - required:
                                                  - playlist
                                              - required:
                                                  - timeline
                                              - required:
                                                  - matrix
                                              - required:
                                                  - asset
                                          volume:
                                            type: number
                                            minimum: 0
                                            maximum: 1
                                          brightness:
                                            type: number
                                            minimum: 0
                                            maximum: 1
                                          rotation:
                                            type: number
                                            minimum: -360
                                            maximum: 360
                                            description: ° content rotation about the dome axis
                                          speed:
                                            type: number
                                            exclusiveMinimum: 0
                                            maximum: 16
                                            description: playback rate, 1 = normal
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    startup:
                                      description: >-
                                        Exactly one of playlist / timeline /
                                        matrix / asset id.
                                      type: object
                                      properties:
                                        playlist:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        timeline:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        matrix:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        asset:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                      minProperties: 1
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                      oneOf:
                                        - required:
                                            - playlist
                                        - required:
                                            - timeline
                                        - required:
                                            - matrix
                                        - required:
                                            - asset
                                    audioMode:
                                      description: >-
                                        1.1 (02c AQ4, replaces x-ananta.mode):
                                        audio engines used by the show; absent =
                                        digital.
                                      anyOf:
                                        - enum:
                                            - digital
                                            - hybrid
                                            - combined
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                compat:
                                  description: >-
                                    Declarative mappings for the A6 gateways
                                    (01b §4.7); never required for playback.
                                  type: object
                                  propertyNames:
                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
                                  additionalProperties:
                                    type: object
                              patternProperties:
                                ^x-: true
                          required:
                            - id
                            - revision
                            - meta
                            - assets
                            - show
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            revision:
                              description: >-
                                Monotonic resource revision; the strong ETag is
                                derived from it.
                              type: integer
                              minimum: 0
                            status:
                              anyOf:
                                - enum:
                                    - ready
                                    - incomplete
                                    - invalid
                                - type: string
                                  pattern: ^[a-z][a-z_-]{0,31}$
                              description: incomplete = referenced assets not ready yet
                            warnings:
                              type: array
                              items:
                                type: object
                                required:
                                  - code
                                  - detail
                                properties:
                                  code:
                                    type: string
                                    pattern: ^[a-z][a-z0-9-]{0,63}$
                                  detail:
                                    type: string
                                  pointer:
                                    type: string
                                additionalProperties: false
                              description: >-
                                UC-S6 validation against the active venue
                                (remapping, missing assets)
                            createdAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          unevaluatedProperties: false
                        body:
                          description: >-
                            Show content shared by GET / PUT / POST: the .dome
                            show sections.
                          type: object
                          properties:
                            meta:
                              type: object
                              required:
                                - id
                                - title
                              properties:
                                id:
                                  description: >-
                                    Stable document id (UUID, lowercase); the
                                    venue / show id on import (02e §3.2).
                                  type: string
                                  pattern: >-
                                    ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                title:
                                  $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). Localised text map
                                    {"en":…,"ru":…}, 02e §3.1 (as .dome
                                    meta.title).
                                  title: Localised text
                                  type: object
                                  minProperties: 1
                                  propertyNames:
                                    pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                  additionalProperties:
                                    type: string
                                  examples:
                                    - en: Intro
                                      ru: Вступление
                                  $defs:
                                    textOrI18n:
                                      description: >-
                                        Plain string (treated as `en`) or a
                                        localised map. (map branch = the root
                                        schema, inlined for tools that
                                        mis-handle self references)
                                      anyOf:
                                        - type: string
                                        - type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                          examples:
                                            - en: Intro
                                              ru: Вступление
                                description:
                                  $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). Localised text map
                                    {"en":…,"ru":…}, 02e §3.1 (as .dome
                                    meta.title).
                                  title: Localised text
                                  type: object
                                  minProperties: 1
                                  propertyNames:
                                    pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                  additionalProperties:
                                    type: string
                                  examples:
                                    - en: Intro
                                      ru: Вступление
                                  $defs:
                                    textOrI18n:
                                      description: >-
                                        Plain string (treated as `en`) or a
                                        localised map. (map branch = the root
                                        schema, inlined for tools that
                                        mis-handle self references)
                                      anyOf:
                                        - type: string
                                        - type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                          examples:
                                            - en: Intro
                                              ru: Вступление
                                authors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - name
                                    properties:
                                      name:
                                        type: string
                                        minLength: 1
                                      email:
                                        type: string
                                        format: email
                                      url:
                                        type: string
                                        format: uri
                                      role:
                                        type: string
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                created:
                                  type: string
                                  format: date-time
                                modified:
                                  type: string
                                  format: date-time
                                generator:
                                  type: object
                                  required:
                                    - name
                                  properties:
                                    name:
                                      type: string
                                      minLength: 1
                                    version:
                                      type: string
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                license:
                                  type: string
                                  minLength: 1
                                  default: NativeMindNONC
                                tags:
                                  type: array
                                  items:
                                    type: string
                                    minLength: 1
                                    maxLength: 64
                                  uniqueItems: true
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                            assets:
                              type: array
                              items:
                                description: >-
                                  Media / scene (01b §4.5). External assets
                                  (absolute URI) carry sha256 + size.
                                type: object
                                required:
                                  - id
                                  - src
                                  - type
                                properties:
                                  id:
                                    description: Document-scoped id (02e §3.2).
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  name:
                                    type: string
                                  src:
                                    description: >-
                                      An entry path (see path) or an absolute
                                      URI (`https:`, `http:`, `file:`, `ndi:`,
                                      `srt:` …).
                                    anyOf:
                                      - description: >-
                                          Entry path inside the container:
                                          relative, `/`-separated, no `..`
                                          segment, no backslash, no NUL.
                                        type: string
                                        minLength: 1
                                        maxLength: 1024
                                        pattern: >-
                                          ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                      - type: string
                                        format: uri
                                        pattern: '^[A-Za-z][A-Za-z0-9+.-]*:'
                                  sha256:
                                    description: Lowercase hex SHA-256 digest.
                                    type: string
                                    pattern: ^[0-9a-f]{64}$
                                  size:
                                    type: integer
                                    minimum: 0
                                  type:
                                    anyOf:
                                      - enum:
                                          - video
                                          - image
                                          - audio
                                          - zelim
                                          - boranko
                                          - comics
                                          - realtime
                                          - stream
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  mapping:
                                    description: >-
                                      Content mapping onto the dome (01b §4.5,
                                      02b §4.4).
                                    type: object
                                    required:
                                      - projection
                                    properties:
                                      projection:
                                        anyOf:
                                          - enum:
                                              - domemaster
                                              - equirect
                                              - cubemap
                                              - flat
                                              - pyramid_views
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      fov:
                                        type: number
                                        exclusiveMinimum: 0
                                        maximum: 360
                                        description: ° (domemaster 180–230)
                                      tilt:
                                        type: number
                                        minimum: -90
                                        maximum: 90
                                      azimuth:
                                        type: number
                                        minimum: -360
                                        maximum: 360
                                        description: 'flat: ° centre azimuth'
                                      elevation:
                                        type: number
                                        minimum: -90
                                        maximum: 90
                                        description: 'flat: ° centre elevation'
                                      width:
                                        type: number
                                        exclusiveMinimum: 0
                                        maximum: 360
                                        description: 'flat: ° angular width'
                                      faces:
                                        enum:
                                          - 3
                                          - 4
                                          - 6
                                        description: '1.1 pyramid_views: number of views'
                                      layout:
                                        description: >-
                                          1.1: cubemap 3x2 | 6x1 | cross;
                                          pyramid_views cross | row | grid
                                        anyOf:
                                          - enum:
                                              - 3x2
                                              - 6x1
                                              - cross
                                              - row
                                              - grid
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                    if:
                                      properties:
                                        projection:
                                          const: pyramid_views
                                      required:
                                        - projection
                                    then:
                                      required:
                                        - faces
                                  video:
                                    type: object
                                    properties:
                                      resolution:
                                        type: array
                                        items:
                                          type: integer
                                          minimum: 1
                                        minItems: 2
                                        maxItems: 2
                                        description: '[width, height] or [cols, rows].'
                                      fps:
                                        type: number
                                        exclusiveMinimum: 0
                                      codec:
                                        anyOf:
                                          - enum:
                                              - hap
                                              - hap-q
                                              - hap-alpha
                                              - h264
                                              - h265
                                              - av1
                                              - vp9
                                              - prores
                                              - png-sequence
                                              - exr-sequence
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      stereo:
                                        oneOf:
                                          - type: 'null'
                                          - enum:
                                              - top-bottom
                                              - side-by-side
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  audio:
                                    type: object
                                    required:
                                      - kind
                                    properties:
                                      kind:
                                        anyOf:
                                          - enum:
                                              - ambisonic
                                              - channels
                                              - stereo
                                              - mono
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      order:
                                        type: integer
                                        minimum: 0
                                        maximum: 7
                                      layout:
                                        type: string
                                        minLength: 1
                                        description: 'channels: e.g. 5.1, 7.1, 7.1.4'
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  duration:
                                    type: number
                                    minimum: 0
                                  thumbnail:
                                    description: >-
                                      Entry path inside the container: relative,
                                      `/`-separated, no `..` segment, no
                                      backslash, no NUL.
                                    type: string
                                    minLength: 1
                                    maxLength: 1024
                                    pattern: >-
                                      ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                  zelim:
                                    description: >-
                                      1.1: hint for type zelim (project = JSON
                                      variant J, binary = variant B); content
                                      sniffing wins. A J project may carry
                                      quantum.scene (02e §9.3).
                                    type: object
                                    properties:
                                      variant:
                                        anyOf:
                                          - enum:
                                              - project
                                              - binary
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                if:
                                  properties:
                                    src:
                                      type: string
                                      pattern: '^(?!asset:)[A-Za-z][A-Za-z0-9+.-]*:'
                                      description: >-
                                        absolute URI other than `asset:<id>` (an
                                        asset stored on the server: sha256 /
                                        size known there)
                                  required:
                                    - src
                                then:
                                  if:
                                    properties:
                                      type:
                                        const: stream
                                    required:
                                      - type
                                  else:
                                    required:
                                      - sha256
                                      - size
                            show:
                              description: >-
                                Playlists, timelines, matrix, cues, triggers,
                                startup (01b §4.6).
                              type: object
                              properties:
                                playlists:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - id
                                      - items
                                    properties:
                                      id:
                                        description: Document-scoped id (02e §3.2).
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      name:
                                        type: string
                                      loop:
                                        type: boolean
                                      items:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - asset
                                          properties:
                                            asset:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            in:
                                              type: number
                                              minimum: 0
                                            out:
                                              type: number
                                              minimum: 0
                                            loop:
                                              type: boolean
                                            transition:
                                              type: object
                                              required:
                                                - kind
                                              properties:
                                                kind:
                                                  anyOf:
                                                    - enum:
                                                        - cut
                                                        - fade
                                                        - dissolve
                                                        - wipe
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                duration:
                                                  type: number
                                                  minimum: 0
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                          description: >-
                                            x-screenberry: Screenberry item fields
                                            without a .dome equivalent, round-trip
                                            only (02d MD8).
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                timelines:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - id
                                      - tracks
                                    properties:
                                      id:
                                        description: Document-scoped id (02e §3.2).
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      name:
                                        type: string
                                      duration:
                                        type: number
                                        minimum: 0
                                      tracks:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - kind
                                            - clips
                                          properties:
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            kind:
                                              anyOf:
                                                - enum:
                                                    - video
                                                    - audio
                                                    - control
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            clips:
                                              type: array
                                              items:
                                                type: object
                                                required:
                                                  - asset
                                                  - start
                                                properties:
                                                  asset:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  start:
                                                    type: number
                                                    minimum: 0
                                                  in:
                                                    type: number
                                                    minimum: 0
                                                  out:
                                                    type: number
                                                    minimum: 0
                                                  gainDb:
                                                    type: number
                                                    minimum: -144
                                                    maximum: 24
                                                  opacity:
                                                    type: number
                                                    minimum: 0
                                                    maximum: 1
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                                description: >-
                                                  x-screenberry: Screenberry item fields
                                                  without a .dome equivalent, round-trip
                                                  only (02d MD8).
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      markers:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - time
                                          properties:
                                            time:
                                              type: number
                                              minimum: 0
                                            name:
                                              type: string
                                            id:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            kind:
                                              anyOf:
                                                - enum:
                                                    - marker
                                                    - pause
                                                    - jump
                                                    - timecode
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      fps:
                                        type: number
                                        exclusiveMinimum: 0
                                        description: 1.1 (02d)
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                matrix:
                                  description: >-
                                    Screenberry-style matrix (compatibility);
                                    cells reference row / column ids.
                                  type: object
                                  required:
                                    - rows
                                    - columns
                                    - cells
                                  properties:
                                    id:
                                      description: Document-scoped id (02e §3.2).
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    rows:
                                      type: array
                                      items:
                                        anyOf:
                                          - description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          - type: object
                                            required:
                                              - id
                                            properties:
                                              id:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              name:
                                                type: string
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                    columns:
                                      type: array
                                      items:
                                        anyOf:
                                          - description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          - type: object
                                            required:
                                              - id
                                            properties:
                                              id:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              name:
                                                type: string
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                    cells:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - row
                                          - column
                                          - asset
                                        properties:
                                          row:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          column:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          asset:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                cues:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - id
                                      - actions
                                    properties:
                                      id:
                                        description: Document-scoped id (02e §3.2).
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      name:
                                        type: string
                                      at:
                                        oneOf:
                                          - type: object
                                            required:
                                              - timeline
                                              - time
                                            properties:
                                              timeline:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              time:
                                                type: number
                                                minimum: 0
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          - type: object
                                            required:
                                              - trigger
                                            properties:
                                              trigger:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                      actions:
                                        type: array
                                        minItems: 1
                                        items:
                                          type: object
                                          required:
                                            - do
                                          properties:
                                            do:
                                              anyOf:
                                                - enum:
                                                    - play
                                                    - pause
                                                    - stop
                                                    - seek
                                                    - setVolume
                                                    - setBrightness
                                                    - setParameter
                                                    - osc
                                                    - http
                                                    - scenario
                                                - description: >-
                                                    Value of an open enum: one of the listed
                                                    values or any other token (clients
                                                    tolerate unknown values).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                            target:
                                              type: string
                                              minLength: 1
                                              description: >-
                                                e.g. player id, playlist:<id>, param
                                                path, osc://host:port/address, URL
                                            args:
                                              description: >-
                                                Action arguments (object or positional
                                                array).
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                          if:
                                            properties:
                                              do:
                                                const: scenario
                                            required:
                                              - do
                                          then:
                                            required:
                                              - target
                                            properties:
                                              target:
                                                description: scenario id (02d §4a)
                                              args:
                                                type: object
                                                description: scenario parameters
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                triggers:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - id
                                      - source
                                    properties:
                                      id:
                                        description: Document-scoped id (02e §3.2).
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      source:
                                        anyOf:
                                          - enum:
                                              - osc
                                              - midi
                                              - time
                                              - api
                                              - dmx
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      match:
                                        description: >-
                                          Source-specific match (OSC address
                                          pattern, MIDI note, cron / time, DMX
                                          channel …).
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                mediaPlayers:
                                  type: array
                                  items:
                                    description: >-
                                      1.1 (02d MD8): named media player. Player
                                      `main` always exists (implicit: all
                                      displays, source = startup).
                                    type: object
                                    required:
                                      - id
                                    properties:
                                      id:
                                        description: Document-scoped id (02e §3.2).
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      name:
                                        type: string
                                      target:
                                        description: absent = all displays
                                        type: object
                                        properties:
                                          displays:
                                            type: array
                                            items:
                                              description: Document-scoped id (02e §3.2).
                                              type: string
                                              pattern: ^[A-Za-z0-9._-]{1,64}$
                                              examples:
                                                - p1
                                                - intro.mp4
                                                - cue-01
                                            uniqueItems: true
                                            minItems: 1
                                          layer:
                                            type: integer
                                            minimum: 0
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      source:
                                        description: >-
                                          Exactly one of playlist / timeline /
                                          matrix / asset id.
                                        type: object
                                        properties:
                                          playlist:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          timeline:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          matrix:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          asset:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                        minProperties: 1
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                        oneOf:
                                          - required:
                                              - playlist
                                          - required:
                                              - timeline
                                          - required:
                                              - matrix
                                          - required:
                                              - asset
                                      volume:
                                        type: number
                                        minimum: 0
                                        maximum: 1
                                      brightness:
                                        type: number
                                        minimum: 0
                                        maximum: 1
                                      rotation:
                                        type: number
                                        minimum: -360
                                        maximum: 360
                                        description: ° content rotation about the dome axis
                                      speed:
                                        type: number
                                        exclusiveMinimum: 0
                                        maximum: 16
                                        description: playback rate, 1 = normal
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                startup:
                                  description: >-
                                    Exactly one of playlist / timeline / matrix
                                    / asset id.
                                  type: object
                                  properties:
                                    playlist:
                                      description: Document-scoped id (02e §3.2).
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    timeline:
                                      description: Document-scoped id (02e §3.2).
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    matrix:
                                      description: Document-scoped id (02e §3.2).
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    asset:
                                      description: Document-scoped id (02e §3.2).
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                  minProperties: 1
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                  oneOf:
                                    - required:
                                        - playlist
                                    - required:
                                        - timeline
                                    - required:
                                        - matrix
                                    - required:
                                        - asset
                                audioMode:
                                  description: >-
                                    1.1 (02c AQ4, replaces x-ananta.mode): audio
                                    engines used by the show; absent = digital.
                                  anyOf:
                                    - enum:
                                        - digital
                                        - hybrid
                                        - combined
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                            compat:
                              description: >-
                                Declarative mappings for the A6 gateways (01b
                                §4.7); never required for playback.
                              type: object
                              propertyNames:
                                pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
                              additionalProperties:
                                type: object
                          patternProperties:
                            ^x-: true
                        input:
                          description: >-
                            POST /shows and PUT /shows/{showId} body. Assets are
                            referenced by .dome asset entries; an entry whose
                            `src` is `asset:<assetId>` points to an asset
                            already stored on the server.
                          type: object
                          allOf:
                            - description: >-
                                Show content shared by GET / PUT / POST: the
                                .dome show sections.
                              type: object
                              properties:
                                meta:
                                  type: object
                                  required:
                                    - id
                                    - title
                                  properties:
                                    id:
                                      description: >-
                                        Stable document id (UUID, lowercase);
                                        the venue / show id on import (02e
                                        §3.2).
                                      type: string
                                      pattern: >-
                                        ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                    title:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Localised text map
                                        {"en":…,"ru":…}, 02e §3.1 (as .dome
                                        meta.title).
                                      title: Localised text
                                      type: object
                                      minProperties: 1
                                      propertyNames:
                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                      additionalProperties:
                                        type: string
                                      examples:
                                        - en: Intro
                                          ru: Вступление
                                      $defs:
                                        textOrI18n:
                                          description: >-
                                            Plain string (treated as `en`) or a
                                            localised map. (map branch = the root
                                            schema, inlined for tools that
                                            mis-handle self references)
                                          anyOf:
                                            - type: string
                                            - type: object
                                              minProperties: 1
                                              propertyNames:
                                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                              additionalProperties:
                                                type: string
                                              examples:
                                                - en: Intro
                                                  ru: Вступление
                                    description:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). Localised text map
                                        {"en":…,"ru":…}, 02e §3.1 (as .dome
                                        meta.title).
                                      title: Localised text
                                      type: object
                                      minProperties: 1
                                      propertyNames:
                                        pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                      additionalProperties:
                                        type: string
                                      examples:
                                        - en: Intro
                                          ru: Вступление
                                      $defs:
                                        textOrI18n:
                                          description: >-
                                            Plain string (treated as `en`) or a
                                            localised map. (map branch = the root
                                            schema, inlined for tools that
                                            mis-handle self references)
                                          anyOf:
                                            - type: string
                                            - type: object
                                              minProperties: 1
                                              propertyNames:
                                                pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                              additionalProperties:
                                                type: string
                                              examples:
                                                - en: Intro
                                                  ru: Вступление
                                    authors:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - name
                                        properties:
                                          name:
                                            type: string
                                            minLength: 1
                                          email:
                                            type: string
                                            format: email
                                          url:
                                            type: string
                                            format: uri
                                          role:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    created:
                                      type: string
                                      format: date-time
                                    modified:
                                      type: string
                                      format: date-time
                                    generator:
                                      type: object
                                      required:
                                        - name
                                      properties:
                                        name:
                                          type: string
                                          minLength: 1
                                        version:
                                          type: string
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    license:
                                      type: string
                                      minLength: 1
                                      default: NativeMindNONC
                                    tags:
                                      type: array
                                      items:
                                        type: string
                                        minLength: 1
                                        maxLength: 64
                                      uniqueItems: true
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                assets:
                                  type: array
                                  items:
                                    description: >-
                                      Media / scene (01b §4.5). External assets
                                      (absolute URI) carry sha256 + size.
                                    type: object
                                    required:
                                      - id
                                      - src
                                      - type
                                    properties:
                                      id:
                                        description: Document-scoped id (02e §3.2).
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      name:
                                        type: string
                                      src:
                                        description: >-
                                          An entry path (see path) or an absolute
                                          URI (`https:`, `http:`, `file:`, `ndi:`,
                                          `srt:` …).
                                        anyOf:
                                          - description: >-
                                              Entry path inside the container:
                                              relative, `/`-separated, no `..`
                                              segment, no backslash, no NUL.
                                            type: string
                                            minLength: 1
                                            maxLength: 1024
                                            pattern: >-
                                              ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                          - type: string
                                            format: uri
                                            pattern: '^[A-Za-z][A-Za-z0-9+.-]*:'
                                      sha256:
                                        description: Lowercase hex SHA-256 digest.
                                        type: string
                                        pattern: ^[0-9a-f]{64}$
                                      size:
                                        type: integer
                                        minimum: 0
                                      type:
                                        anyOf:
                                          - enum:
                                              - video
                                              - image
                                              - audio
                                              - zelim
                                              - boranko
                                              - comics
                                              - realtime
                                              - stream
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      mapping:
                                        description: >-
                                          Content mapping onto the dome (01b §4.5,
                                          02b §4.4).
                                        type: object
                                        required:
                                          - projection
                                        properties:
                                          projection:
                                            anyOf:
                                              - enum:
                                                  - domemaster
                                                  - equirect
                                                  - cubemap
                                                  - flat
                                                  - pyramid_views
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          fov:
                                            type: number
                                            exclusiveMinimum: 0
                                            maximum: 360
                                            description: ° (domemaster 180–230)
                                          tilt:
                                            type: number
                                            minimum: -90
                                            maximum: 90
                                          azimuth:
                                            type: number
                                            minimum: -360
                                            maximum: 360
                                            description: 'flat: ° centre azimuth'
                                          elevation:
                                            type: number
                                            minimum: -90
                                            maximum: 90
                                            description: 'flat: ° centre elevation'
                                          width:
                                            type: number
                                            exclusiveMinimum: 0
                                            maximum: 360
                                            description: 'flat: ° angular width'
                                          faces:
                                            enum:
                                              - 3
                                              - 4
                                              - 6
                                            description: '1.1 pyramid_views: number of views'
                                          layout:
                                            description: >-
                                              1.1: cubemap 3x2 | 6x1 | cross;
                                              pyramid_views cross | row | grid
                                            anyOf:
                                              - enum:
                                                  - 3x2
                                                  - 6x1
                                                  - cross
                                                  - row
                                                  - grid
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                        if:
                                          properties:
                                            projection:
                                              const: pyramid_views
                                          required:
                                            - projection
                                        then:
                                          required:
                                            - faces
                                      video:
                                        type: object
                                        properties:
                                          resolution:
                                            type: array
                                            items:
                                              type: integer
                                              minimum: 1
                                            minItems: 2
                                            maxItems: 2
                                            description: '[width, height] or [cols, rows].'
                                          fps:
                                            type: number
                                            exclusiveMinimum: 0
                                          codec:
                                            anyOf:
                                              - enum:
                                                  - hap
                                                  - hap-q
                                                  - hap-alpha
                                                  - h264
                                                  - h265
                                                  - av1
                                                  - vp9
                                                  - prores
                                                  - png-sequence
                                                  - exr-sequence
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          stereo:
                                            oneOf:
                                              - type: 'null'
                                              - enum:
                                                  - top-bottom
                                                  - side-by-side
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      audio:
                                        type: object
                                        required:
                                          - kind
                                        properties:
                                          kind:
                                            anyOf:
                                              - enum:
                                                  - ambisonic
                                                  - channels
                                                  - stereo
                                                  - mono
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          order:
                                            type: integer
                                            minimum: 0
                                            maximum: 7
                                          layout:
                                            type: string
                                            minLength: 1
                                            description: 'channels: e.g. 5.1, 7.1, 7.1.4'
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      duration:
                                        type: number
                                        minimum: 0
                                      thumbnail:
                                        description: >-
                                          Entry path inside the container:
                                          relative, `/`-separated, no `..`
                                          segment, no backslash, no NUL.
                                        type: string
                                        minLength: 1
                                        maxLength: 1024
                                        pattern: >-
                                          ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                      zelim:
                                        description: >-
                                          1.1: hint for type zelim (project = JSON
                                          variant J, binary = variant B); content
                                          sniffing wins. A J project may carry
                                          quantum.scene (02e §9.3).
                                        type: object
                                        properties:
                                          variant:
                                            anyOf:
                                              - enum:
                                                  - project
                                                  - binary
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                    if:
                                      properties:
                                        src:
                                          type: string
                                          pattern: '^(?!asset:)[A-Za-z][A-Za-z0-9+.-]*:'
                                          description: >-
                                            absolute URI other than `asset:<id>` (an
                                            asset stored on the server: sha256 /
                                            size known there)
                                      required:
                                        - src
                                    then:
                                      if:
                                        properties:
                                          type:
                                            const: stream
                                        required:
                                          - type
                                      else:
                                        required:
                                          - sha256
                                          - size
                                show:
                                  description: >-
                                    Playlists, timelines, matrix, cues,
                                    triggers, startup (01b §4.6).
                                  type: object
                                  properties:
                                    playlists:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - items
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          name:
                                            type: string
                                          loop:
                                            type: boolean
                                          items:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - asset
                                              properties:
                                                asset:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                in:
                                                  type: number
                                                  minimum: 0
                                                out:
                                                  type: number
                                                  minimum: 0
                                                loop:
                                                  type: boolean
                                                transition:
                                                  type: object
                                                  required:
                                                    - kind
                                                  properties:
                                                    kind:
                                                      anyOf:
                                                        - enum:
                                                            - cut
                                                            - fade
                                                            - dissolve
                                                            - wipe
                                                        - description: >-
                                                            Value of an open enum: one of the listed
                                                            values or any other token (clients
                                                            tolerate unknown values).
                                                          type: string
                                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                    duration:
                                                      type: number
                                                      minimum: 0
                                                  patternProperties:
                                                    ^x-: true
                                                  additionalProperties: false
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                              description: >-
                                                x-screenberry: Screenberry item fields
                                                without a .dome equivalent, round-trip
                                                only (02d MD8).
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    timelines:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - tracks
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          name:
                                            type: string
                                          duration:
                                            type: number
                                            minimum: 0
                                          tracks:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - kind
                                                - clips
                                              properties:
                                                id:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                kind:
                                                  anyOf:
                                                    - enum:
                                                        - video
                                                        - audio
                                                        - control
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                clips:
                                                  type: array
                                                  items:
                                                    type: object
                                                    required:
                                                      - asset
                                                      - start
                                                    properties:
                                                      asset:
                                                        description: Document-scoped id (02e §3.2).
                                                        type: string
                                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                                        examples:
                                                          - p1
                                                          - intro.mp4
                                                          - cue-01
                                                      start:
                                                        type: number
                                                        minimum: 0
                                                      in:
                                                        type: number
                                                        minimum: 0
                                                      out:
                                                        type: number
                                                        minimum: 0
                                                      gainDb:
                                                        type: number
                                                        minimum: -144
                                                        maximum: 24
                                                      opacity:
                                                        type: number
                                                        minimum: 0
                                                        maximum: 1
                                                    patternProperties:
                                                      ^x-: true
                                                    additionalProperties: false
                                                    description: >-
                                                      x-screenberry: Screenberry item fields
                                                      without a .dome equivalent, round-trip
                                                      only (02d MD8).
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          markers:
                                            type: array
                                            items:
                                              type: object
                                              required:
                                                - time
                                              properties:
                                                time:
                                                  type: number
                                                  minimum: 0
                                                name:
                                                  type: string
                                                id:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                kind:
                                                  anyOf:
                                                    - enum:
                                                        - marker
                                                        - pause
                                                        - jump
                                                        - timecode
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                          fps:
                                            type: number
                                            exclusiveMinimum: 0
                                            description: 1.1 (02d)
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    matrix:
                                      description: >-
                                        Screenberry-style matrix
                                        (compatibility); cells reference row /
                                        column ids.
                                      type: object
                                      required:
                                        - rows
                                        - columns
                                        - cells
                                      properties:
                                        id:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        rows:
                                          type: array
                                          items:
                                            anyOf:
                                              - description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              - type: object
                                                required:
                                                  - id
                                                properties:
                                                  id:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  name:
                                                    type: string
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                        columns:
                                          type: array
                                          items:
                                            anyOf:
                                              - description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              - type: object
                                                required:
                                                  - id
                                                properties:
                                                  id:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  name:
                                                    type: string
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                        cells:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - row
                                              - column
                                              - asset
                                            properties:
                                              row:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              column:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              asset:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                    cues:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - actions
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          name:
                                            type: string
                                          at:
                                            oneOf:
                                              - type: object
                                                required:
                                                  - timeline
                                                  - time
                                                properties:
                                                  timeline:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                  time:
                                                    type: number
                                                    minimum: 0
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                              - type: object
                                                required:
                                                  - trigger
                                                properties:
                                                  trigger:
                                                    description: Document-scoped id (02e §3.2).
                                                    type: string
                                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                                    examples:
                                                      - p1
                                                      - intro.mp4
                                                      - cue-01
                                                patternProperties:
                                                  ^x-: true
                                                additionalProperties: false
                                          actions:
                                            type: array
                                            minItems: 1
                                            items:
                                              type: object
                                              required:
                                                - do
                                              properties:
                                                do:
                                                  anyOf:
                                                    - enum:
                                                        - play
                                                        - pause
                                                        - stop
                                                        - seek
                                                        - setVolume
                                                        - setBrightness
                                                        - setParameter
                                                        - osc
                                                        - http
                                                        - scenario
                                                    - description: >-
                                                        Value of an open enum: one of the listed
                                                        values or any other token (clients
                                                        tolerate unknown values).
                                                      type: string
                                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                                target:
                                                  type: string
                                                  minLength: 1
                                                  description: >-
                                                    e.g. player id, playlist:<id>, param
                                                    path, osc://host:port/address, URL
                                                args:
                                                  description: >-
                                                    Action arguments (object or positional
                                                    array).
                                              patternProperties:
                                                ^x-: true
                                              additionalProperties: false
                                              if:
                                                properties:
                                                  do:
                                                    const: scenario
                                                required:
                                                  - do
                                              then:
                                                required:
                                                  - target
                                                properties:
                                                  target:
                                                    description: scenario id (02d §4a)
                                                  args:
                                                    type: object
                                                    description: scenario parameters
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    triggers:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - id
                                          - source
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          source:
                                            anyOf:
                                              - enum:
                                                  - osc
                                                  - midi
                                                  - time
                                                  - api
                                                  - dmx
                                              - description: >-
                                                  Value of an open enum: one of the listed
                                                  values or any other token (clients
                                                  tolerate unknown values).
                                                type: string
                                                pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                          match:
                                            description: >-
                                              Source-specific match (OSC address
                                              pattern, MIDI note, cron / time, DMX
                                              channel …).
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    mediaPlayers:
                                      type: array
                                      items:
                                        description: >-
                                          1.1 (02d MD8): named media player.
                                          Player `main` always exists (implicit:
                                          all displays, source = startup).
                                        type: object
                                        required:
                                          - id
                                        properties:
                                          id:
                                            description: Document-scoped id (02e §3.2).
                                            type: string
                                            pattern: ^[A-Za-z0-9._-]{1,64}$
                                            examples:
                                              - p1
                                              - intro.mp4
                                              - cue-01
                                          name:
                                            type: string
                                          target:
                                            description: absent = all displays
                                            type: object
                                            properties:
                                              displays:
                                                type: array
                                                items:
                                                  description: Document-scoped id (02e §3.2).
                                                  type: string
                                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                                  examples:
                                                    - p1
                                                    - intro.mp4
                                                    - cue-01
                                                uniqueItems: true
                                                minItems: 1
                                              layer:
                                                type: integer
                                                minimum: 0
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                          source:
                                            description: >-
                                              Exactly one of playlist / timeline /
                                              matrix / asset id.
                                            type: object
                                            properties:
                                              playlist:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              timeline:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              matrix:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                              asset:
                                                description: Document-scoped id (02e §3.2).
                                                type: string
                                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                                examples:
                                                  - p1
                                                  - intro.mp4
                                                  - cue-01
                                            minProperties: 1
                                            patternProperties:
                                              ^x-: true
                                            additionalProperties: false
                                            oneOf:
                                              - required:
                                                  - playlist
                                              - required:
                                                  - timeline
                                              - required:
                                                  - matrix
                                              - required:
                                                  - asset
                                          volume:
                                            type: number
                                            minimum: 0
                                            maximum: 1
                                          brightness:
                                            type: number
                                            minimum: 0
                                            maximum: 1
                                          rotation:
                                            type: number
                                            minimum: -360
                                            maximum: 360
                                            description: ° content rotation about the dome axis
                                          speed:
                                            type: number
                                            exclusiveMinimum: 0
                                            maximum: 16
                                            description: playback rate, 1 = normal
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                    startup:
                                      description: >-
                                        Exactly one of playlist / timeline /
                                        matrix / asset id.
                                      type: object
                                      properties:
                                        playlist:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        timeline:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        matrix:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                        asset:
                                          description: Document-scoped id (02e §3.2).
                                          type: string
                                          pattern: ^[A-Za-z0-9._-]{1,64}$
                                          examples:
                                            - p1
                                            - intro.mp4
                                            - cue-01
                                      minProperties: 1
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                      oneOf:
                                        - required:
                                            - playlist
                                        - required:
                                            - timeline
                                        - required:
                                            - matrix
                                        - required:
                                            - asset
                                    audioMode:
                                      description: >-
                                        1.1 (02c AQ4, replaces x-ananta.mode):
                                        audio engines used by the show; absent =
                                        digital.
                                      anyOf:
                                        - enum:
                                            - digital
                                            - hybrid
                                            - combined
                                        - description: >-
                                            Value of an open enum: one of the listed
                                            values or any other token (clients
                                            tolerate unknown values).
                                          type: string
                                          pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                compat:
                                  description: >-
                                    Declarative mappings for the A6 gateways
                                    (01b §4.7); never required for playback.
                                  type: object
                                  propertyNames:
                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$
                                  additionalProperties:
                                    type: object
                              patternProperties:
                                ^x-: true
                          required:
                            - meta
                            - assets
                            - show
                          unevaluatedProperties: false
                        patch:
                          description: >-
                            PATCH /shows/{showId}
                            (application/merge-patch+json): any subset of the
                            sections; arrays are replaced whole (RFC 7396).
                          type: object
                          minProperties: 1
                          properties:
                            meta:
                              type: object
                            assets:
                              type: array
                              items:
                                description: >-
                                  Media / scene (01b §4.5). External assets
                                  (absolute URI) carry sha256 + size.
                                type: object
                                required:
                                  - id
                                  - src
                                  - type
                                properties:
                                  id:
                                    description: Document-scoped id (02e §3.2).
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  name:
                                    type: string
                                  src:
                                    description: >-
                                      An entry path (see path) or an absolute
                                      URI (`https:`, `http:`, `file:`, `ndi:`,
                                      `srt:` …).
                                    anyOf:
                                      - description: >-
                                          Entry path inside the container:
                                          relative, `/`-separated, no `..`
                                          segment, no backslash, no NUL.
                                        type: string
                                        minLength: 1
                                        maxLength: 1024
                                        pattern: >-
                                          ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                      - type: string
                                        format: uri
                                        pattern: '^[A-Za-z][A-Za-z0-9+.-]*:'
                                  sha256:
                                    description: Lowercase hex SHA-256 digest.
                                    type: string
                                    pattern: ^[0-9a-f]{64}$
                                  size:
                                    type: integer
                                    minimum: 0
                                  type:
                                    anyOf:
                                      - enum:
                                          - video
                                          - image
                                          - audio
                                          - zelim
                                          - boranko
                                          - comics
                                          - realtime
                                          - stream
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  mapping:
                                    description: >-
                                      Content mapping onto the dome (01b §4.5,
                                      02b §4.4).
                                    type: object
                                    required:
                                      - projection
                                    properties:
                                      projection:
                                        anyOf:
                                          - enum:
                                              - domemaster
                                              - equirect
                                              - cubemap
                                              - flat
                                              - pyramid_views
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      fov:
                                        type: number
                                        exclusiveMinimum: 0
                                        maximum: 360
                                        description: ° (domemaster 180–230)
                                      tilt:
                                        type: number
                                        minimum: -90
                                        maximum: 90
                                      azimuth:
                                        type: number
                                        minimum: -360
                                        maximum: 360
                                        description: 'flat: ° centre azimuth'
                                      elevation:
                                        type: number
                                        minimum: -90
                                        maximum: 90
                                        description: 'flat: ° centre elevation'
                                      width:
                                        type: number
                                        exclusiveMinimum: 0
                                        maximum: 360
                                        description: 'flat: ° angular width'
                                      faces:
                                        enum:
                                          - 3
                                          - 4
                                          - 6
                                        description: '1.1 pyramid_views: number of views'
                                      layout:
                                        description: >-
                                          1.1: cubemap 3x2 | 6x1 | cross;
                                          pyramid_views cross | row | grid
                                        anyOf:
                                          - enum:
                                              - 3x2
                                              - 6x1
                                              - cross
                                              - row
                                              - grid
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                    if:
                                      properties:
                                        projection:
                                          const: pyramid_views
                                      required:
                                        - projection
                                    then:
                                      required:
                                        - faces
                                  video:
                                    type: object
                                    properties:
                                      resolution:
                                        type: array
                                        items:
                                          type: integer
                                          minimum: 1
                                        minItems: 2
                                        maxItems: 2
                                        description: '[width, height] or [cols, rows].'
                                      fps:
                                        type: number
                                        exclusiveMinimum: 0
                                      codec:
                                        anyOf:
                                          - enum:
                                              - hap
                                              - hap-q
                                              - hap-alpha
                                              - h264
                                              - h265
                                              - av1
                                              - vp9
                                              - prores
                                              - png-sequence
                                              - exr-sequence
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      stereo:
                                        oneOf:
                                          - type: 'null'
                                          - enum:
                                              - top-bottom
                                              - side-by-side
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  audio:
                                    type: object
                                    required:
                                      - kind
                                    properties:
                                      kind:
                                        anyOf:
                                          - enum:
                                              - ambisonic
                                              - channels
                                              - stereo
                                              - mono
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      order:
                                        type: integer
                                        minimum: 0
                                        maximum: 7
                                      layout:
                                        type: string
                                        minLength: 1
                                        description: 'channels: e.g. 5.1, 7.1, 7.1.4'
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  duration:
                                    type: number
                                    minimum: 0
                                  thumbnail:
                                    description: >-
                                      Entry path inside the container: relative,
                                      `/`-separated, no `..` segment, no
                                      backslash, no NUL.
                                    type: string
                                    minLength: 1
                                    maxLength: 1024
                                    pattern: >-
                                      ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                  zelim:
                                    description: >-
                                      1.1: hint for type zelim (project = JSON
                                      variant J, binary = variant B); content
                                      sniffing wins. A J project may carry
                                      quantum.scene (02e §9.3).
                                    type: object
                                    properties:
                                      variant:
                                        anyOf:
                                          - enum:
                                              - project
                                              - binary
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                if:
                                  properties:
                                    src:
                                      type: string
                                      pattern: '^(?!asset:)[A-Za-z][A-Za-z0-9+.-]*:'
                                      description: >-
                                        absolute URI other than `asset:<id>` (an
                                        asset stored on the server: sha256 /
                                        size known there)
                                  required:
                                    - src
                                then:
                                  if:
                                    properties:
                                      type:
                                        const: stream
                                    required:
                                      - type
                                  else:
                                    required:
                                      - sha256
                                      - size
                            show:
                              type: object
                            compat:
                              anyOf:
                                - type: object
                                - type: 'null'
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        warning:
                          type: object
                          required:
                            - code
                            - detail
                          properties:
                            code:
                              type: string
                              pattern: ^[a-z][a-z0-9-]{0,63}$
                            detail:
                              type: string
                            pointer:
                              type: string
                          additionalProperties: false
                        page:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                description: 'Collection item: no assets / show body.'
                                type: object
                                required:
                                  - id
                                  - revision
                                  - meta
                                properties:
                                  id:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  revision:
                                    description: >-
                                      Monotonic resource revision; the strong
                                      ETag is derived from it.
                                    type: integer
                                    minimum: 0
                                  meta:
                                    type: object
                                    required:
                                      - id
                                      - title
                                    properties:
                                      id:
                                        description: >-
                                          Stable document id (UUID, lowercase);
                                          the venue / show id on import (02e
                                          §3.2).
                                        type: string
                                        pattern: >-
                                          ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                      title:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). Localised text map
                                          {"en":…,"ru":…}, 02e §3.1 (as .dome
                                          meta.title).
                                        title: Localised text
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                                        $defs:
                                          textOrI18n:
                                            description: >-
                                              Plain string (treated as `en`) or a
                                              localised map. (map branch = the root
                                              schema, inlined for tools that
                                              mis-handle self references)
                                            anyOf:
                                              - type: string
                                              - type: object
                                                minProperties: 1
                                                propertyNames:
                                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                additionalProperties:
                                                  type: string
                                                examples:
                                                  - en: Intro
                                                    ru: Вступление
                                      description:
                                        $schema: >-
                                          https://json-schema.org/draft/2020-12/schema
                                        $id: >-
                                          https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                        $comment: >-
                                          NativeMindNONC — freedome_contract (see
                                          LICENSE). Localised text map
                                          {"en":…,"ru":…}, 02e §3.1 (as .dome
                                          meta.title).
                                        title: Localised text
                                        type: object
                                        minProperties: 1
                                        propertyNames:
                                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                        additionalProperties:
                                          type: string
                                        examples:
                                          - en: Intro
                                            ru: Вступление
                                        $defs:
                                          textOrI18n:
                                            description: >-
                                              Plain string (treated as `en`) or a
                                              localised map. (map branch = the root
                                              schema, inlined for tools that
                                              mis-handle self references)
                                            anyOf:
                                              - type: string
                                              - type: object
                                                minProperties: 1
                                                propertyNames:
                                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                                additionalProperties:
                                                  type: string
                                                examples:
                                                  - en: Intro
                                                    ru: Вступление
                                      authors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - name
                                          properties:
                                            name:
                                              type: string
                                              minLength: 1
                                            email:
                                              type: string
                                              format: email
                                            url:
                                              type: string
                                              format: uri
                                            role:
                                              type: string
                                          patternProperties:
                                            ^x-: true
                                          additionalProperties: false
                                      created:
                                        type: string
                                        format: date-time
                                      modified:
                                        type: string
                                        format: date-time
                                      generator:
                                        type: object
                                        required:
                                          - name
                                        properties:
                                          name:
                                            type: string
                                            minLength: 1
                                          version:
                                            type: string
                                        patternProperties:
                                          ^x-: true
                                        additionalProperties: false
                                      license:
                                        type: string
                                        minLength: 1
                                        default: NativeMindNONC
                                      tags:
                                        type: array
                                        items:
                                          type: string
                                          minLength: 1
                                          maxLength: 64
                                        uniqueItems: true
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                  status:
                                    type: string
                                  assetCount:
                                    type: integer
                                    minimum: 0
                                  duration:
                                    description: Duration in seconds.
                                    type: number
                                    minimum: 0
                                  updatedAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                            count:
                              type: integer
                              minimum: 0
                          additionalProperties: false
                        summary:
                          description: 'Collection item: no assets / show body.'
                          type: object
                          required:
                            - id
                            - revision
                            - meta
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            revision:
                              description: >-
                                Monotonic resource revision; the strong ETag is
                                derived from it.
                              type: integer
                              minimum: 0
                            meta:
                              type: object
                              required:
                                - id
                                - title
                              properties:
                                id:
                                  description: >-
                                    Stable document id (UUID, lowercase); the
                                    venue / show id on import (02e §3.2).
                                  type: string
                                  pattern: >-
                                    ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
                                title:
                                  $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). Localised text map
                                    {"en":…,"ru":…}, 02e §3.1 (as .dome
                                    meta.title).
                                  title: Localised text
                                  type: object
                                  minProperties: 1
                                  propertyNames:
                                    pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                  additionalProperties:
                                    type: string
                                  examples:
                                    - en: Intro
                                      ru: Вступление
                                  $defs:
                                    textOrI18n:
                                      description: >-
                                        Plain string (treated as `en`) or a
                                        localised map. (map branch = the root
                                        schema, inlined for tools that
                                        mis-handle self references)
                                      anyOf:
                                        - type: string
                                        - type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                          examples:
                                            - en: Intro
                                              ru: Вступление
                                description:
                                  $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). Localised text map
                                    {"en":…,"ru":…}, 02e §3.1 (as .dome
                                    meta.title).
                                  title: Localised text
                                  type: object
                                  minProperties: 1
                                  propertyNames:
                                    pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                  additionalProperties:
                                    type: string
                                  examples:
                                    - en: Intro
                                      ru: Вступление
                                  $defs:
                                    textOrI18n:
                                      description: >-
                                        Plain string (treated as `en`) or a
                                        localised map. (map branch = the root
                                        schema, inlined for tools that
                                        mis-handle self references)
                                      anyOf:
                                        - type: string
                                        - type: object
                                          minProperties: 1
                                          propertyNames:
                                            pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                          additionalProperties:
                                            type: string
                                          examples:
                                            - en: Intro
                                              ru: Вступление
                                authors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - name
                                    properties:
                                      name:
                                        type: string
                                        minLength: 1
                                      email:
                                        type: string
                                        format: email
                                      url:
                                        type: string
                                        format: uri
                                      role:
                                        type: string
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                created:
                                  type: string
                                  format: date-time
                                modified:
                                  type: string
                                  format: date-time
                                generator:
                                  type: object
                                  required:
                                    - name
                                  properties:
                                    name:
                                      type: string
                                      minLength: 1
                                    version:
                                      type: string
                                  patternProperties:
                                    ^x-: true
                                  additionalProperties: false
                                license:
                                  type: string
                                  minLength: 1
                                  default: NativeMindNONC
                                tags:
                                  type: array
                                  items:
                                    type: string
                                    minLength: 1
                                    maxLength: 64
                                  uniqueItems: true
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                            status:
                              type: string
                            assetCount:
                              type: integer
                              minimum: 0
                            duration:
                              description: Duration in seconds.
                              type: number
                              minimum: 0
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                    patch:
                      description: >-
                        PATCH /shows/{showId} (application/merge-patch+json):
                        any subset of the sections; arrays are replaced whole
                        (RFC 7396).
                      type: object
                      minProperties: 1
                      properties:
                        meta:
                          type: object
                        assets:
                          type: array
                          items:
                            description: >-
                              Media / scene (01b §4.5). External assets
                              (absolute URI) carry sha256 + size.
                            type: object
                            required:
                              - id
                              - src
                              - type
                            properties:
                              id:
                                description: Document-scoped id (02e §3.2).
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              name:
                                type: string
                              src:
                                description: >-
                                  An entry path (see path) or an absolute URI
                                  (`https:`, `http:`, `file:`, `ndi:`, `srt:`
                                  …).
                                anyOf:
                                  - description: >-
                                      Entry path inside the container: relative,
                                      `/`-separated, no `..` segment, no
                                      backslash, no NUL.
                                    type: string
                                    minLength: 1
                                    maxLength: 1024
                                    pattern: >-
                                      ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                                  - type: string
                                    format: uri
                                    pattern: '^[A-Za-z][A-Za-z0-9+.-]*:'
                              sha256:
                                description: Lowercase hex SHA-256 digest.
                                type: string
                                pattern: ^[0-9a-f]{64}$
                              size:
                                type: integer
                                minimum: 0
                              type:
                                anyOf:
                                  - enum:
                                      - video
                                      - image
                                      - audio
                                      - zelim
                                      - boranko
                                      - comics
                                      - realtime
                                      - stream
                                  - description: >-
                                      Value of an open enum: one of the listed
                                      values or any other token (clients
                                      tolerate unknown values).
                                    type: string
                                    pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                              mapping:
                                description: >-
                                  Content mapping onto the dome (01b §4.5, 02b
                                  §4.4).
                                type: object
                                required:
                                  - projection
                                properties:
                                  projection:
                                    anyOf:
                                      - enum:
                                          - domemaster
                                          - equirect
                                          - cubemap
                                          - flat
                                          - pyramid_views
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  fov:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: ° (domemaster 180–230)
                                  tilt:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                  azimuth:
                                    type: number
                                    minimum: -360
                                    maximum: 360
                                    description: 'flat: ° centre azimuth'
                                  elevation:
                                    type: number
                                    minimum: -90
                                    maximum: 90
                                    description: 'flat: ° centre elevation'
                                  width:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 360
                                    description: 'flat: ° angular width'
                                  faces:
                                    enum:
                                      - 3
                                      - 4
                                      - 6
                                    description: '1.1 pyramid_views: number of views'
                                  layout:
                                    description: >-
                                      1.1: cubemap 3x2 | 6x1 | cross;
                                      pyramid_views cross | row | grid
                                    anyOf:
                                      - enum:
                                          - 3x2
                                          - 6x1
                                          - cross
                                          - row
                                          - grid
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                if:
                                  properties:
                                    projection:
                                      const: pyramid_views
                                  required:
                                    - projection
                                then:
                                  required:
                                    - faces
                              video:
                                type: object
                                properties:
                                  resolution:
                                    type: array
                                    items:
                                      type: integer
                                      minimum: 1
                                    minItems: 2
                                    maxItems: 2
                                    description: '[width, height] or [cols, rows].'
                                  fps:
                                    type: number
                                    exclusiveMinimum: 0
                                  codec:
                                    anyOf:
                                      - enum:
                                          - hap
                                          - hap-q
                                          - hap-alpha
                                          - h264
                                          - h265
                                          - av1
                                          - vp9
                                          - prores
                                          - png-sequence
                                          - exr-sequence
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  stereo:
                                    oneOf:
                                      - type: 'null'
                                      - enum:
                                          - top-bottom
                                          - side-by-side
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                              audio:
                                type: object
                                required:
                                  - kind
                                properties:
                                  kind:
                                    anyOf:
                                      - enum:
                                          - ambisonic
                                          - channels
                                          - stereo
                                          - mono
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                  order:
                                    type: integer
                                    minimum: 0
                                    maximum: 7
                                  layout:
                                    type: string
                                    minLength: 1
                                    description: 'channels: e.g. 5.1, 7.1, 7.1.4'
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                              duration:
                                type: number
                                minimum: 0
                              thumbnail:
                                description: >-
                                  Entry path inside the container: relative,
                                  `/`-separated, no `..` segment, no backslash,
                                  no NUL.
                                type: string
                                minLength: 1
                                maxLength: 1024
                                pattern: >-
                                  ^(?![/.]/?$)(?!/)(?!.*(?:^|/)\.\.(?:/|$))[^\\\u0000:]+$
                              zelim:
                                description: >-
                                  1.1: hint for type zelim (project = JSON
                                  variant J, binary = variant B); content
                                  sniffing wins. A J project may carry
                                  quantum.scene (02e §9.3).
                                type: object
                                properties:
                                  variant:
                                    anyOf:
                                      - enum:
                                          - project
                                          - binary
                                      - description: >-
                                          Value of an open enum: one of the listed
                                          values or any other token (clients
                                          tolerate unknown values).
                                        type: string
                                        pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                            if:
                              properties:
                                src:
                                  type: string
                                  pattern: '^(?!asset:)[A-Za-z][A-Za-z0-9+.-]*:'
                                  description: >-
                                    absolute URI other than `asset:<id>` (an
                                    asset stored on the server: sha256 / size
                                    known there)
                              required:
                                - src
                            then:
                              if:
                                properties:
                                  type:
                                    const: stream
                                required:
                                  - type
                              else:
                                required:
                                  - sha256
                                  - size
                        show:
                          type: object
                        compat:
                          anyOf:
                            - type: object
                            - type: 'null'
                      patternProperties:
                        ^x-: true
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: show.deleted
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      type: object
                      required:
                        - id
                      properties:
                        id:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: playlist.updated
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: Fine-grained show edit (sub-kind of show.updated).
                      type: object
                      required:
                        - showId
                        - itemId
                        - revision
                      properties:
                        showId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        itemId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                        item:
                          type: object
                          description: the stored .dome entry (absent on delete)
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: playlist.deleted
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: Fine-grained show edit (sub-kind of show.updated).
                      type: object
                      required:
                        - showId
                        - itemId
                        - revision
                      properties:
                        showId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        itemId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                        item:
                          type: object
                          description: the stored .dome entry (absent on delete)
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: timeline.updated
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: Fine-grained show edit (sub-kind of show.updated).
                      type: object
                      required:
                        - showId
                        - itemId
                        - revision
                      properties:
                        showId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        itemId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                        item:
                          type: object
                          description: the stored .dome entry (absent on delete)
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: timeline.deleted
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: Fine-grained show edit (sub-kind of show.updated).
                      type: object
                      required:
                        - showId
                        - itemId
                        - revision
                      properties:
                        showId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        itemId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                        item:
                          type: object
                          description: the stored .dome entry (absent on delete)
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: cue.updated
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: Fine-grained show edit (sub-kind of show.updated).
                      type: object
                      required:
                        - showId
                        - itemId
                        - revision
                      properties:
                        showId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        itemId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                        item:
                          type: object
                          description: the stored .dome entry (absent on delete)
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: cue.deleted
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: Fine-grained show edit (sub-kind of show.updated).
                      type: object
                      required:
                        - showId
                        - itemId
                        - revision
                      properties:
                        showId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        itemId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                        item:
                          type: object
                          description: the stored .dome entry (absent on delete)
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: trigger.updated
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: Fine-grained show edit (sub-kind of show.updated).
                      type: object
                      required:
                        - showId
                        - itemId
                        - revision
                      properties:
                        showId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        itemId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                        item:
                          type: object
                          description: the stored .dome entry (absent on delete)
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: trigger.deleted
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: Fine-grained show edit (sub-kind of show.updated).
                      type: object
                      required:
                        - showId
                        - itemId
                        - revision
                      properties:
                        showId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        itemId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                        item:
                          type: object
                          description: the stored .dome entry (absent on delete)
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: matrix.updated
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: Fine-grained show edit (sub-kind of show.updated).
                      type: object
                      required:
                        - showId
                        - itemId
                        - revision
                      properties:
                        showId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        itemId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                        item:
                          type: object
                          description: the stored .dome entry (absent on delete)
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: asset.created
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/api/1.0/asset.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). Stored
                        asset (02e §4, §5.4) = .dome asset fields + storage
                        (sha256, size, status, probe data, thumbnails). Root =
                        GET /assets/{assetId}.
                      title: Asset
                      allOf:
                        - type: object
                          required:
                            - id
                            - name
                            - type
                            - status
                            - revision
                            - createdAt
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            name:
                              type: string
                              minLength: 1
                              maxLength: 512
                              description: original file name (with extension) or a title
                            type:
                              anyOf:
                                - enum:
                                    - video
                                    - image
                                    - audio
                                    - zelim
                                    - boranko
                                    - comics
                                    - realtime
                                    - stream
                                    - dome
                                    - other
                                - type: string
                                  pattern: ^[a-z][a-z0-9._-]{0,63}$
                            src:
                              type: string
                              description: >-
                                external URI for registered (not stored) assets;
                                absent for stored blobs. Type stream: also
                                spout://<sender>, syphon://<app>/<server>,
                                dmabuf://<pipewire-node>, v4l2:///dev/<device>,
                                ndi://<source> (percent-encoded,
                                docs/audio-reactive.md)
                            texture:
                              description: >-
                                Stream asset fed by another application on the
                                engine's machine (derived by the server from
                                `src`, read-only).
                              type: object
                              required:
                                - transport
                                - sender
                              properties:
                                transport:
                                  description: >-
                                    Shared GPU texture or spare network
                                    transport of a live source. Open list.
                                  anyOf:
                                    - enum:
                                        - spout
                                        - syphon
                                        - dmabuf
                                        - capture
                                        - ndi
                                    - type: string
                                      pattern: ^[a-z][a-z0-9_-]{0,31}$
                                sender:
                                  type: string
                                  minLength: 1
                                  maxLength: 256
                                  description: >-
                                    Spout sender, Syphon server, PipeWire node,
                                    capture device or NDI source name
                                application:
                                  type: string
                                  maxLength: 256
                                  description: Syphon application name
                                fallbackUrl:
                                  type: string
                                  format: uri
                              additionalProperties: false
                            mediaType:
                              description: IANA media type.
                              type: string
                              pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                            sha256:
                              description: Lowercase hex SHA-256 digest.
                              type: string
                              pattern: ^[0-9a-f]{64}$
                            size:
                              type: integer
                              minimum: 0
                            status:
                              anyOf:
                                - enum:
                                    - uploading
                                    - processing
                                    - ready
                                    - failed
                                - type: string
                                  pattern: ^[a-z_]{1,32}$
                            problem:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). RFC 9457 problem details with the
                                Freedome `code` catalogue, 02e §3.3. Also the
                                `data` of WS `error`, the socket.io ack error
                                and GraphQL errors[].extensions.problem. The
                                catalogue is open: unknown codes are allowed;
                                known codes are bound to their HTTP status.
                              title: Problem details
                              type: object
                              required:
                                - type
                                - title
                                - code
                              properties:
                                type:
                                  type: string
                                  format: uri
                                  description: >-
                                    https://freedome.nativemind.us/problems/<code>
                                    for catalogue codes.
                                title:
                                  type: string
                                  minLength: 1
                                status:
                                  type: integer
                                  minimum: 100
                                  maximum: 599
                                detail:
                                  type: string
                                instance:
                                  type: string
                                  format: uri-reference
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                traceId:
                                  type: string
                                  pattern: ^[0-9a-f]{16,32}$
                                errors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              allOf:
                                - if:
                                    properties:
                                      code:
                                        const: validation-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: not-found
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 404
                                - if:
                                    properties:
                                      code:
                                        const: conflict
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: precondition-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 412
                                - if:
                                    properties:
                                      code:
                                        const: precondition-required
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 428
                                - if:
                                    properties:
                                      code:
                                        const: unauthenticated
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: forbidden
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: rate-limited
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 429
                                - if:
                                    properties:
                                      code:
                                        const: payload-too-large
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 413
                                - if:
                                    properties:
                                      code:
                                        const: unsupported-format
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 415
                                - if:
                                    properties:
                                      code:
                                        const: engine-unavailable
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: engine-incompatible
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: degraded
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: upload-checksum-mismatch
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: legacy-unsupported
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 501
                                - if:
                                    properties:
                                      code:
                                        const: internal
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 500
                                - if:
                                    properties:
                                      code:
                                        const: clock-unlocked
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: not-configured
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: authorization-pending
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: slow-down
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: access-denied
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: expired-token
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: token-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-key-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-in-progress
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                              additionalProperties: true
                              examples:
                                - type: >-
                                    https://freedome.nativemind.us/problems/engine-unavailable
                                  title: Visual engine unavailable
                                  status: 503
                                  detail: >-
                                    freedome-engined not reachable at
                                    unix:/run/freedome/engine.sock
                                  instance: /api/v1/venues/default/players/main/play
                                  code: engine-unavailable
                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                              $defs:
                                knownCode:
                                  enum:
                                    - validation-failed
                                    - not-found
                                    - conflict
                                    - precondition-failed
                                    - precondition-required
                                    - unauthenticated
                                    - forbidden
                                    - rate-limited
                                    - payload-too-large
                                    - unsupported-format
                                    - engine-unavailable
                                    - engine-incompatible
                                    - degraded
                                    - job-failed
                                    - upload-checksum-mismatch
                                    - legacy-unsupported
                                    - internal
                                    - clock-unlocked
                                    - not-configured
                                    - authorization-pending
                                    - slow-down
                                    - access-denied
                                    - expired-token
                                    - token-reused
                                    - idempotency-key-reused
                                    - idempotency-in-progress
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                fieldError:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                              description: >-
                                why the asset failed (e.g.
                                upload-checksum-mismatch)
                            progress:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            mapping:
                              description: >-
                                Content mapping onto the dome (01b §4.5, 02b
                                §4.4).
                              type: object
                              required:
                                - projection
                              properties:
                                projection:
                                  anyOf:
                                    - enum:
                                        - domemaster
                                        - equirect
                                        - cubemap
                                        - flat
                                        - pyramid_views
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                fov:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: ° (domemaster 180–230)
                                tilt:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                azimuth:
                                  type: number
                                  minimum: -360
                                  maximum: 360
                                  description: 'flat: ° centre azimuth'
                                elevation:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                  description: 'flat: ° centre elevation'
                                width:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: 'flat: ° angular width'
                                faces:
                                  enum:
                                    - 3
                                    - 4
                                    - 6
                                  description: '1.1 pyramid_views: number of views'
                                layout:
                                  description: >-
                                    1.1: cubemap 3x2 | 6x1 | cross;
                                    pyramid_views cross | row | grid
                                  anyOf:
                                    - enum:
                                        - 3x2
                                        - 6x1
                                        - cross
                                        - row
                                        - grid
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                              if:
                                properties:
                                  projection:
                                    const: pyramid_views
                                required:
                                  - projection
                              then:
                                required:
                                  - faces
                            media:
                              description: >-
                                Probe result (ffprobe): container, streams,
                                duration. `probeUnavailable` when the server has
                                no prober (asset still ready).
                              type: object
                              properties:
                                container:
                                  type: string
                                duration:
                                  description: Duration in seconds.
                                  type: number
                                  minimum: 0
                                video:
                                  type: object
                                  properties:
                                    codec:
                                      type: string
                                    resolution:
                                      type: array
                                      items:
                                        type: integer
                                        minimum: 1
                                      minItems: 2
                                      maxItems: 2
                                    fps:
                                      type: number
                                      exclusiveMinimum: 0
                                    bitDepth:
                                      type: integer
                                      minimum: 1
                                    pixelFormat:
                                      type: string
                                  additionalProperties: true
                                audio:
                                  type: object
                                  properties:
                                    codec:
                                      type: string
                                    channels:
                                      type: integer
                                      minimum: 1
                                    layout:
                                      type: string
                                    sampleRate:
                                      type: integer
                                      minimum: 1
                                    ambisonicOrder:
                                      type: integer
                                      minimum: 0
                                      maximum: 7
                                  additionalProperties: true
                                probeUnavailable:
                                  type: boolean
                              additionalProperties: true
                            thumbnails:
                              type: array
                              items:
                                type: object
                                required:
                                  - size
                                  - url
                                properties:
                                  size:
                                    type: integer
                                    minimum: 16
                                  url:
                                    type: string
                                    format: uri-reference
                                additionalProperties: false
                            tags:
                              type: array
                              items:
                                type: string
                                minLength: 1
                                maxLength: 64
                              uniqueItems: true
                            usedBy:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              description: ids of shows referencing the asset
                            revision:
                              description: >-
                                Monotonic resource revision; the strong ETag is
                                derived from it.
                              type: integer
                              minimum: 0
                            createdAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                          allOf:
                            - if:
                                properties:
                                  status:
                                    const: failed
                                required:
                                  - status
                              then:
                                required:
                                  - problem
                      $defs:
                        asset:
                          type: object
                          required:
                            - id
                            - name
                            - type
                            - status
                            - revision
                            - createdAt
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            name:
                              type: string
                              minLength: 1
                              maxLength: 512
                              description: original file name (with extension) or a title
                            type:
                              anyOf:
                                - enum:
                                    - video
                                    - image
                                    - audio
                                    - zelim
                                    - boranko
                                    - comics
                                    - realtime
                                    - stream
                                    - dome
                                    - other
                                - type: string
                                  pattern: ^[a-z][a-z0-9._-]{0,63}$
                            src:
                              type: string
                              description: >-
                                external URI for registered (not stored) assets;
                                absent for stored blobs. Type stream: also
                                spout://<sender>, syphon://<app>/<server>,
                                dmabuf://<pipewire-node>, v4l2:///dev/<device>,
                                ndi://<source> (percent-encoded,
                                docs/audio-reactive.md)
                            texture:
                              description: >-
                                Stream asset fed by another application on the
                                engine's machine (derived by the server from
                                `src`, read-only).
                              type: object
                              required:
                                - transport
                                - sender
                              properties:
                                transport:
                                  description: >-
                                    Shared GPU texture or spare network
                                    transport of a live source. Open list.
                                  anyOf:
                                    - enum:
                                        - spout
                                        - syphon
                                        - dmabuf
                                        - capture
                                        - ndi
                                    - type: string
                                      pattern: ^[a-z][a-z0-9_-]{0,31}$
                                sender:
                                  type: string
                                  minLength: 1
                                  maxLength: 256
                                  description: >-
                                    Spout sender, Syphon server, PipeWire node,
                                    capture device or NDI source name
                                application:
                                  type: string
                                  maxLength: 256
                                  description: Syphon application name
                                fallbackUrl:
                                  type: string
                                  format: uri
                              additionalProperties: false
                            mediaType:
                              description: IANA media type.
                              type: string
                              pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                            sha256:
                              description: Lowercase hex SHA-256 digest.
                              type: string
                              pattern: ^[0-9a-f]{64}$
                            size:
                              type: integer
                              minimum: 0
                            status:
                              anyOf:
                                - enum:
                                    - uploading
                                    - processing
                                    - ready
                                    - failed
                                - type: string
                                  pattern: ^[a-z_]{1,32}$
                            problem:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). RFC 9457 problem details with the
                                Freedome `code` catalogue, 02e §3.3. Also the
                                `data` of WS `error`, the socket.io ack error
                                and GraphQL errors[].extensions.problem. The
                                catalogue is open: unknown codes are allowed;
                                known codes are bound to their HTTP status.
                              title: Problem details
                              type: object
                              required:
                                - type
                                - title
                                - code
                              properties:
                                type:
                                  type: string
                                  format: uri
                                  description: >-
                                    https://freedome.nativemind.us/problems/<code>
                                    for catalogue codes.
                                title:
                                  type: string
                                  minLength: 1
                                status:
                                  type: integer
                                  minimum: 100
                                  maximum: 599
                                detail:
                                  type: string
                                instance:
                                  type: string
                                  format: uri-reference
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                traceId:
                                  type: string
                                  pattern: ^[0-9a-f]{16,32}$
                                errors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              allOf:
                                - if:
                                    properties:
                                      code:
                                        const: validation-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: not-found
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 404
                                - if:
                                    properties:
                                      code:
                                        const: conflict
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: precondition-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 412
                                - if:
                                    properties:
                                      code:
                                        const: precondition-required
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 428
                                - if:
                                    properties:
                                      code:
                                        const: unauthenticated
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: forbidden
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: rate-limited
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 429
                                - if:
                                    properties:
                                      code:
                                        const: payload-too-large
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 413
                                - if:
                                    properties:
                                      code:
                                        const: unsupported-format
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 415
                                - if:
                                    properties:
                                      code:
                                        const: engine-unavailable
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: engine-incompatible
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: degraded
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: upload-checksum-mismatch
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: legacy-unsupported
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 501
                                - if:
                                    properties:
                                      code:
                                        const: internal
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 500
                                - if:
                                    properties:
                                      code:
                                        const: clock-unlocked
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: not-configured
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: authorization-pending
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: slow-down
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: access-denied
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: expired-token
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: token-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-key-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-in-progress
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                              additionalProperties: true
                              examples:
                                - type: >-
                                    https://freedome.nativemind.us/problems/engine-unavailable
                                  title: Visual engine unavailable
                                  status: 503
                                  detail: >-
                                    freedome-engined not reachable at
                                    unix:/run/freedome/engine.sock
                                  instance: /api/v1/venues/default/players/main/play
                                  code: engine-unavailable
                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                              $defs:
                                knownCode:
                                  enum:
                                    - validation-failed
                                    - not-found
                                    - conflict
                                    - precondition-failed
                                    - precondition-required
                                    - unauthenticated
                                    - forbidden
                                    - rate-limited
                                    - payload-too-large
                                    - unsupported-format
                                    - engine-unavailable
                                    - engine-incompatible
                                    - degraded
                                    - job-failed
                                    - upload-checksum-mismatch
                                    - legacy-unsupported
                                    - internal
                                    - clock-unlocked
                                    - not-configured
                                    - authorization-pending
                                    - slow-down
                                    - access-denied
                                    - expired-token
                                    - token-reused
                                    - idempotency-key-reused
                                    - idempotency-in-progress
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                fieldError:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                              description: >-
                                why the asset failed (e.g.
                                upload-checksum-mismatch)
                            progress:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            mapping:
                              description: >-
                                Content mapping onto the dome (01b §4.5, 02b
                                §4.4).
                              type: object
                              required:
                                - projection
                              properties:
                                projection:
                                  anyOf:
                                    - enum:
                                        - domemaster
                                        - equirect
                                        - cubemap
                                        - flat
                                        - pyramid_views
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                fov:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: ° (domemaster 180–230)
                                tilt:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                azimuth:
                                  type: number
                                  minimum: -360
                                  maximum: 360
                                  description: 'flat: ° centre azimuth'
                                elevation:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                  description: 'flat: ° centre elevation'
                                width:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: 'flat: ° angular width'
                                faces:
                                  enum:
                                    - 3
                                    - 4
                                    - 6
                                  description: '1.1 pyramid_views: number of views'
                                layout:
                                  description: >-
                                    1.1: cubemap 3x2 | 6x1 | cross;
                                    pyramid_views cross | row | grid
                                  anyOf:
                                    - enum:
                                        - 3x2
                                        - 6x1
                                        - cross
                                        - row
                                        - grid
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                              if:
                                properties:
                                  projection:
                                    const: pyramid_views
                                required:
                                  - projection
                              then:
                                required:
                                  - faces
                            media:
                              description: >-
                                Probe result (ffprobe): container, streams,
                                duration. `probeUnavailable` when the server has
                                no prober (asset still ready).
                              type: object
                              properties:
                                container:
                                  type: string
                                duration:
                                  description: Duration in seconds.
                                  type: number
                                  minimum: 0
                                video:
                                  type: object
                                  properties:
                                    codec:
                                      type: string
                                    resolution:
                                      type: array
                                      items:
                                        type: integer
                                        minimum: 1
                                      minItems: 2
                                      maxItems: 2
                                    fps:
                                      type: number
                                      exclusiveMinimum: 0
                                    bitDepth:
                                      type: integer
                                      minimum: 1
                                    pixelFormat:
                                      type: string
                                  additionalProperties: true
                                audio:
                                  type: object
                                  properties:
                                    codec:
                                      type: string
                                    channels:
                                      type: integer
                                      minimum: 1
                                    layout:
                                      type: string
                                    sampleRate:
                                      type: integer
                                      minimum: 1
                                    ambisonicOrder:
                                      type: integer
                                      minimum: 0
                                      maximum: 7
                                  additionalProperties: true
                                probeUnavailable:
                                  type: boolean
                              additionalProperties: true
                            thumbnails:
                              type: array
                              items:
                                type: object
                                required:
                                  - size
                                  - url
                                properties:
                                  size:
                                    type: integer
                                    minimum: 16
                                  url:
                                    type: string
                                    format: uri-reference
                                additionalProperties: false
                            tags:
                              type: array
                              items:
                                type: string
                                minLength: 1
                                maxLength: 64
                              uniqueItems: true
                            usedBy:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              description: ids of shows referencing the asset
                            revision:
                              description: >-
                                Monotonic resource revision; the strong ETag is
                                derived from it.
                              type: integer
                              minimum: 0
                            createdAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                          allOf:
                            - if:
                                properties:
                                  status:
                                    const: failed
                                required:
                                  - status
                              then:
                                required:
                                  - problem
                        textureTransport:
                          description: >-
                            Shared GPU texture or spare network transport of a
                            live source. Open list.
                          anyOf:
                            - enum:
                                - spout
                                - syphon
                                - dmabuf
                                - capture
                                - ndi
                            - type: string
                              pattern: ^[a-z][a-z0-9_-]{0,31}$
                        texture:
                          description: >-
                            Stream asset fed by another application on the
                            engine's machine (derived by the server from `src`,
                            read-only).
                          type: object
                          required:
                            - transport
                            - sender
                          properties:
                            transport:
                              description: >-
                                Shared GPU texture or spare network transport of
                                a live source. Open list.
                              anyOf:
                                - enum:
                                    - spout
                                    - syphon
                                    - dmabuf
                                    - capture
                                    - ndi
                                - type: string
                                  pattern: ^[a-z][a-z0-9_-]{0,31}$
                            sender:
                              type: string
                              minLength: 1
                              maxLength: 256
                              description: >-
                                Spout sender, Syphon server, PipeWire node,
                                capture device or NDI source name
                            application:
                              type: string
                              maxLength: 256
                              description: Syphon application name
                            fallbackUrl:
                              type: string
                              format: uri
                          additionalProperties: false
                        textureSource:
                          description: >-
                            A live source seen by the engine (GET
                            /venues/{venueId}/texture-sources, event
                            textureSource.state).
                          type: object
                          required:
                            - id
                            - transport
                            - sender
                            - status
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            transport:
                              description: >-
                                Shared GPU texture or spare network transport of
                                a live source. Open list.
                              anyOf:
                                - enum:
                                    - spout
                                    - syphon
                                    - dmabuf
                                    - capture
                                    - ndi
                                - type: string
                                  pattern: ^[a-z][a-z0-9_-]{0,31}$
                            sender:
                              type: string
                              minLength: 1
                              maxLength: 256
                            application:
                              type: string
                              maxLength: 256
                            status:
                              anyOf:
                                - enum:
                                    - online
                                    - offline
                                - type: string
                                  pattern: ^[a-z][a-z_-]{0,31}$
                            width:
                              type: integer
                              minimum: 1
                            height:
                              type: integer
                              minimum: 1
                            fps:
                              type: number
                              minimum: 0
                              description: frames per second measured by the engine
                            pixelFormat:
                              type: string
                              maxLength: 32
                            assetId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            node:
                              type: string
                              maxLength: 64
                              description: node whose engine sees the source
                            lastSeen:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        textureSourcePage:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                description: >-
                                  A live source seen by the engine (GET
                                  /venues/{venueId}/texture-sources, event
                                  textureSource.state).
                                type: object
                                required:
                                  - id
                                  - transport
                                  - sender
                                  - status
                                properties:
                                  id:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  transport:
                                    description: >-
                                      Shared GPU texture or spare network
                                      transport of a live source. Open list.
                                    anyOf:
                                      - enum:
                                          - spout
                                          - syphon
                                          - dmabuf
                                          - capture
                                          - ndi
                                      - type: string
                                        pattern: ^[a-z][a-z0-9_-]{0,31}$
                                  sender:
                                    type: string
                                    minLength: 1
                                    maxLength: 256
                                  application:
                                    type: string
                                    maxLength: 256
                                  status:
                                    anyOf:
                                      - enum:
                                          - online
                                          - offline
                                      - type: string
                                        pattern: ^[a-z][a-z_-]{0,31}$
                                  width:
                                    type: integer
                                    minimum: 1
                                  height:
                                    type: integer
                                    minimum: 1
                                  fps:
                                    type: number
                                    minimum: 0
                                    description: frames per second measured by the engine
                                  pixelFormat:
                                    type: string
                                    maxLength: 32
                                  assetId:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  node:
                                    type: string
                                    maxLength: 64
                                    description: node whose engine sees the source
                                  lastSeen:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                          additionalProperties: false
                        type:
                          anyOf:
                            - enum:
                                - video
                                - image
                                - audio
                                - zelim
                                - boranko
                                - comics
                                - realtime
                                - stream
                                - dome
                                - other
                            - type: string
                              pattern: ^[a-z][a-z0-9._-]{0,63}$
                        status:
                          anyOf:
                            - enum:
                                - uploading
                                - processing
                                - ready
                                - failed
                            - type: string
                              pattern: ^[a-z_]{1,32}$
                        media:
                          description: >-
                            Probe result (ffprobe): container, streams,
                            duration. `probeUnavailable` when the server has no
                            prober (asset still ready).
                          type: object
                          properties:
                            container:
                              type: string
                            duration:
                              description: Duration in seconds.
                              type: number
                              minimum: 0
                            video:
                              type: object
                              properties:
                                codec:
                                  type: string
                                resolution:
                                  type: array
                                  items:
                                    type: integer
                                    minimum: 1
                                  minItems: 2
                                  maxItems: 2
                                fps:
                                  type: number
                                  exclusiveMinimum: 0
                                bitDepth:
                                  type: integer
                                  minimum: 1
                                pixelFormat:
                                  type: string
                              additionalProperties: true
                            audio:
                              type: object
                              properties:
                                codec:
                                  type: string
                                channels:
                                  type: integer
                                  minimum: 1
                                layout:
                                  type: string
                                sampleRate:
                                  type: integer
                                  minimum: 1
                                ambisonicOrder:
                                  type: integer
                                  minimum: 0
                                  maximum: 7
                              additionalProperties: true
                            probeUnavailable:
                              type: boolean
                          additionalProperties: true
                        input:
                          description: >-
                            POST /assets JSON body: register a finished tus
                            upload or an external URL (streams, CDN).
                          type: object
                          properties:
                            uploadId:
                              description: >-
                                Server-owned resource id: UUIDv7, lowercase,
                                sortable by creation time.
                              type: string
                              pattern: >-
                                ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                              examples:
                                - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                            url:
                              type: string
                              format: uri
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            name:
                              type: string
                              minLength: 1
                              maxLength: 512
                            type:
                              anyOf:
                                - enum:
                                    - video
                                    - image
                                    - audio
                                    - zelim
                                    - boranko
                                    - comics
                                    - realtime
                                    - stream
                                    - dome
                                    - other
                                - type: string
                                  pattern: ^[a-z][a-z0-9._-]{0,63}$
                            mapping:
                              description: >-
                                Content mapping onto the dome (01b §4.5, 02b
                                §4.4).
                              type: object
                              required:
                                - projection
                              properties:
                                projection:
                                  anyOf:
                                    - enum:
                                        - domemaster
                                        - equirect
                                        - cubemap
                                        - flat
                                        - pyramid_views
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                fov:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: ° (domemaster 180–230)
                                tilt:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                azimuth:
                                  type: number
                                  minimum: -360
                                  maximum: 360
                                  description: 'flat: ° centre azimuth'
                                elevation:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                  description: 'flat: ° centre elevation'
                                width:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: 'flat: ° angular width'
                                faces:
                                  enum:
                                    - 3
                                    - 4
                                    - 6
                                  description: '1.1 pyramid_views: number of views'
                                layout:
                                  description: >-
                                    1.1: cubemap 3x2 | 6x1 | cross;
                                    pyramid_views cross | row | grid
                                  anyOf:
                                    - enum:
                                        - 3x2
                                        - 6x1
                                        - cross
                                        - row
                                        - grid
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                              if:
                                properties:
                                  projection:
                                    const: pyramid_views
                                required:
                                  - projection
                              then:
                                required:
                                  - faces
                            tags:
                              type: array
                              items:
                                type: string
                                minLength: 1
                                maxLength: 64
                              uniqueItems: true
                            sha256:
                              description: Lowercase hex SHA-256 digest.
                              type: string
                              pattern: ^[0-9a-f]{64}$
                            fallbackUrl:
                              type: string
                              format: uri
                              description: >-
                                stream assets: source to use while `url` is
                                unavailable, e.g. ndi://…
                          additionalProperties: false
                          oneOf:
                            - required:
                                - uploadId
                            - required:
                                - url
                        multipart:
                          description: >-
                            POST /assets multipart/form-data body (simple upload
                            ≤ 100 MB): part `file` + optional JSON fields.
                          type: object
                          required:
                            - file
                          properties:
                            file:
                              type: string
                              contentMediaType: application/octet-stream
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            type:
                              anyOf:
                                - enum:
                                    - video
                                    - image
                                    - audio
                                    - zelim
                                    - boranko
                                    - comics
                                    - realtime
                                    - stream
                                    - dome
                                    - other
                                - type: string
                                  pattern: ^[a-z][a-z0-9._-]{0,63}$
                            tags:
                              type: string
                              description: comma-separated
                        patch:
                          type: object
                          minProperties: 1
                          properties:
                            name:
                              type: string
                              minLength: 1
                              maxLength: 512
                            type:
                              anyOf:
                                - enum:
                                    - video
                                    - image
                                    - audio
                                    - zelim
                                    - boranko
                                    - comics
                                    - realtime
                                    - stream
                                    - dome
                                    - other
                                - type: string
                                  pattern: ^[a-z][a-z0-9._-]{0,63}$
                            mapping:
                              description: >-
                                Content mapping onto the dome (01b §4.5, 02b
                                §4.4).
                              type: object
                              required:
                                - projection
                              properties:
                                projection:
                                  anyOf:
                                    - enum:
                                        - domemaster
                                        - equirect
                                        - cubemap
                                        - flat
                                        - pyramid_views
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                fov:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: ° (domemaster 180–230)
                                tilt:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                azimuth:
                                  type: number
                                  minimum: -360
                                  maximum: 360
                                  description: 'flat: ° centre azimuth'
                                elevation:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                  description: 'flat: ° centre elevation'
                                width:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: 'flat: ° angular width'
                                faces:
                                  enum:
                                    - 3
                                    - 4
                                    - 6
                                  description: '1.1 pyramid_views: number of views'
                                layout:
                                  description: >-
                                    1.1: cubemap 3x2 | 6x1 | cross;
                                    pyramid_views cross | row | grid
                                  anyOf:
                                    - enum:
                                        - 3x2
                                        - 6x1
                                        - cross
                                        - row
                                        - grid
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                              if:
                                properties:
                                  projection:
                                    const: pyramid_views
                                required:
                                  - projection
                              then:
                                required:
                                  - faces
                            tags:
                              type: array
                              items:
                                type: string
                                minLength: 1
                                maxLength: 64
                              uniqueItems: true
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        page:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                type: object
                                required:
                                  - id
                                  - name
                                  - type
                                  - status
                                  - revision
                                  - createdAt
                                properties:
                                  id:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  name:
                                    type: string
                                    minLength: 1
                                    maxLength: 512
                                    description: >-
                                      original file name (with extension) or a
                                      title
                                  type:
                                    anyOf:
                                      - enum:
                                          - video
                                          - image
                                          - audio
                                          - zelim
                                          - boranko
                                          - comics
                                          - realtime
                                          - stream
                                          - dome
                                          - other
                                      - type: string
                                        pattern: ^[a-z][a-z0-9._-]{0,63}$
                                  src:
                                    type: string
                                    description: >-
                                      external URI for registered (not stored)
                                      assets; absent for stored blobs. Type
                                      stream: also spout://<sender>,
                                      syphon://<app>/<server>,
                                      dmabuf://<pipewire-node>,
                                      v4l2:///dev/<device>, ndi://<source>
                                      (percent-encoded, docs/audio-reactive.md)
                                  texture:
                                    description: >-
                                      Stream asset fed by another application on
                                      the engine's machine (derived by the
                                      server from `src`, read-only).
                                    type: object
                                    required:
                                      - transport
                                      - sender
                                    properties:
                                      transport:
                                        description: >-
                                          Shared GPU texture or spare network
                                          transport of a live source. Open list.
                                        anyOf:
                                          - enum:
                                              - spout
                                              - syphon
                                              - dmabuf
                                              - capture
                                              - ndi
                                          - type: string
                                            pattern: ^[a-z][a-z0-9_-]{0,31}$
                                      sender:
                                        type: string
                                        minLength: 1
                                        maxLength: 256
                                        description: >-
                                          Spout sender, Syphon server, PipeWire
                                          node, capture device or NDI source name
                                      application:
                                        type: string
                                        maxLength: 256
                                        description: Syphon application name
                                      fallbackUrl:
                                        type: string
                                        format: uri
                                    additionalProperties: false
                                  mediaType:
                                    description: IANA media type.
                                    type: string
                                    pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                                  sha256:
                                    description: Lowercase hex SHA-256 digest.
                                    type: string
                                    pattern: ^[0-9a-f]{64}$
                                  size:
                                    type: integer
                                    minimum: 0
                                  status:
                                    anyOf:
                                      - enum:
                                          - uploading
                                          - processing
                                          - ready
                                          - failed
                                      - type: string
                                        pattern: ^[a-z_]{1,32}$
                                  problem:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                    description: >-
                                      why the asset failed (e.g.
                                      upload-checksum-mismatch)
                                  progress:
                                    description: >-
                                      0..1 (brightness, linear volume gain,
                                      progress).
                                    type: number
                                    minimum: 0
                                    maximum: 1
                                  mapping:
                                    description: >-
                                      Content mapping onto the dome (01b §4.5,
                                      02b §4.4).
                                    type: object
                                    required:
                                      - projection
                                    properties:
                                      projection:
                                        anyOf:
                                          - enum:
                                              - domemaster
                                              - equirect
                                              - cubemap
                                              - flat
                                              - pyramid_views
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      fov:
                                        type: number
                                        exclusiveMinimum: 0
                                        maximum: 360
                                        description: ° (domemaster 180–230)
                                      tilt:
                                        type: number
                                        minimum: -90
                                        maximum: 90
                                      azimuth:
                                        type: number
                                        minimum: -360
                                        maximum: 360
                                        description: 'flat: ° centre azimuth'
                                      elevation:
                                        type: number
                                        minimum: -90
                                        maximum: 90
                                        description: 'flat: ° centre elevation'
                                      width:
                                        type: number
                                        exclusiveMinimum: 0
                                        maximum: 360
                                        description: 'flat: ° angular width'
                                      faces:
                                        enum:
                                          - 3
                                          - 4
                                          - 6
                                        description: '1.1 pyramid_views: number of views'
                                      layout:
                                        description: >-
                                          1.1: cubemap 3x2 | 6x1 | cross;
                                          pyramid_views cross | row | grid
                                        anyOf:
                                          - enum:
                                              - 3x2
                                              - 6x1
                                              - cross
                                              - row
                                              - grid
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                    if:
                                      properties:
                                        projection:
                                          const: pyramid_views
                                      required:
                                        - projection
                                    then:
                                      required:
                                        - faces
                                  media:
                                    description: >-
                                      Probe result (ffprobe): container,
                                      streams, duration. `probeUnavailable` when
                                      the server has no prober (asset still
                                      ready).
                                    type: object
                                    properties:
                                      container:
                                        type: string
                                      duration:
                                        description: Duration in seconds.
                                        type: number
                                        minimum: 0
                                      video:
                                        type: object
                                        properties:
                                          codec:
                                            type: string
                                          resolution:
                                            type: array
                                            items:
                                              type: integer
                                              minimum: 1
                                            minItems: 2
                                            maxItems: 2
                                          fps:
                                            type: number
                                            exclusiveMinimum: 0
                                          bitDepth:
                                            type: integer
                                            minimum: 1
                                          pixelFormat:
                                            type: string
                                        additionalProperties: true
                                      audio:
                                        type: object
                                        properties:
                                          codec:
                                            type: string
                                          channels:
                                            type: integer
                                            minimum: 1
                                          layout:
                                            type: string
                                          sampleRate:
                                            type: integer
                                            minimum: 1
                                          ambisonicOrder:
                                            type: integer
                                            minimum: 0
                                            maximum: 7
                                        additionalProperties: true
                                      probeUnavailable:
                                        type: boolean
                                    additionalProperties: true
                                  thumbnails:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - size
                                        - url
                                      properties:
                                        size:
                                          type: integer
                                          minimum: 16
                                        url:
                                          type: string
                                          format: uri-reference
                                      additionalProperties: false
                                  tags:
                                    type: array
                                    items:
                                      type: string
                                      minLength: 1
                                      maxLength: 64
                                    uniqueItems: true
                                  usedBy:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    description: ids of shows referencing the asset
                                  revision:
                                    description: >-
                                      Monotonic resource revision; the strong
                                      ETag is derived from it.
                                    type: integer
                                    minimum: 0
                                  createdAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  updatedAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                allOf:
                                  - if:
                                      properties:
                                        status:
                                          const: failed
                                      required:
                                        - status
                                    then:
                                      required:
                                        - problem
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                            count:
                              type: integer
                              minimum: 0
                          additionalProperties: false
                        storage:
                          description: GET /storage (replaces /api/v1/content/stats).
                          type: object
                          required:
                            - totalBytes
                            - usedBytes
                            - freeBytes
                          properties:
                            totalBytes:
                              type: integer
                              minimum: 0
                            usedBytes:
                              type: integer
                              minimum: 0
                            freeBytes:
                              type: integer
                              minimum: 0
                            quotaBytes:
                              anyOf:
                                - type: integer
                                  minimum: 0
                                - type: 'null'
                            assets:
                              type: object
                              required:
                                - count
                                - bytes
                              properties:
                                count:
                                  type: integer
                                  minimum: 0
                                bytes:
                                  type: integer
                                  minimum: 0
                              additionalProperties: false
                            uploads:
                              type: object
                              required:
                                - count
                                - bytes
                              properties:
                                count:
                                  type: integer
                                  minimum: 0
                                bytes:
                                  type: integer
                                  minimum: 0
                              additionalProperties: false
                            byType:
                              type: object
                              additionalProperties:
                                type: object
                                required:
                                  - count
                                  - bytes
                                properties:
                                  count:
                                    type: integer
                                    minimum: 0
                                  bytes:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                          additionalProperties: false
                        countBytes:
                          type: object
                          required:
                            - count
                            - bytes
                          properties:
                            count:
                              type: integer
                              minimum: 0
                            bytes:
                              type: integer
                              minimum: 0
                          additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: asset.progress
                  required:
                    - kind
                then:
                  properties:
                    patch:
                      type: object
                      minProperties: 1
                      properties:
                        progress:
                          type: number
                          minimum: 0
                          maximum: 1
                        currentStep:
                          anyOf:
                            - description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            - type: 'null'
                        message:
                          type: string
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: asset.ready
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/api/1.0/asset.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). Stored
                        asset (02e §4, §5.4) = .dome asset fields + storage
                        (sha256, size, status, probe data, thumbnails). Root =
                        GET /assets/{assetId}.
                      title: Asset
                      allOf:
                        - type: object
                          required:
                            - id
                            - name
                            - type
                            - status
                            - revision
                            - createdAt
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            name:
                              type: string
                              minLength: 1
                              maxLength: 512
                              description: original file name (with extension) or a title
                            type:
                              anyOf:
                                - enum:
                                    - video
                                    - image
                                    - audio
                                    - zelim
                                    - boranko
                                    - comics
                                    - realtime
                                    - stream
                                    - dome
                                    - other
                                - type: string
                                  pattern: ^[a-z][a-z0-9._-]{0,63}$
                            src:
                              type: string
                              description: >-
                                external URI for registered (not stored) assets;
                                absent for stored blobs. Type stream: also
                                spout://<sender>, syphon://<app>/<server>,
                                dmabuf://<pipewire-node>, v4l2:///dev/<device>,
                                ndi://<source> (percent-encoded,
                                docs/audio-reactive.md)
                            texture:
                              description: >-
                                Stream asset fed by another application on the
                                engine's machine (derived by the server from
                                `src`, read-only).
                              type: object
                              required:
                                - transport
                                - sender
                              properties:
                                transport:
                                  description: >-
                                    Shared GPU texture or spare network
                                    transport of a live source. Open list.
                                  anyOf:
                                    - enum:
                                        - spout
                                        - syphon
                                        - dmabuf
                                        - capture
                                        - ndi
                                    - type: string
                                      pattern: ^[a-z][a-z0-9_-]{0,31}$
                                sender:
                                  type: string
                                  minLength: 1
                                  maxLength: 256
                                  description: >-
                                    Spout sender, Syphon server, PipeWire node,
                                    capture device or NDI source name
                                application:
                                  type: string
                                  maxLength: 256
                                  description: Syphon application name
                                fallbackUrl:
                                  type: string
                                  format: uri
                              additionalProperties: false
                            mediaType:
                              description: IANA media type.
                              type: string
                              pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                            sha256:
                              description: Lowercase hex SHA-256 digest.
                              type: string
                              pattern: ^[0-9a-f]{64}$
                            size:
                              type: integer
                              minimum: 0
                            status:
                              anyOf:
                                - enum:
                                    - uploading
                                    - processing
                                    - ready
                                    - failed
                                - type: string
                                  pattern: ^[a-z_]{1,32}$
                            problem:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). RFC 9457 problem details with the
                                Freedome `code` catalogue, 02e §3.3. Also the
                                `data` of WS `error`, the socket.io ack error
                                and GraphQL errors[].extensions.problem. The
                                catalogue is open: unknown codes are allowed;
                                known codes are bound to their HTTP status.
                              title: Problem details
                              type: object
                              required:
                                - type
                                - title
                                - code
                              properties:
                                type:
                                  type: string
                                  format: uri
                                  description: >-
                                    https://freedome.nativemind.us/problems/<code>
                                    for catalogue codes.
                                title:
                                  type: string
                                  minLength: 1
                                status:
                                  type: integer
                                  minimum: 100
                                  maximum: 599
                                detail:
                                  type: string
                                instance:
                                  type: string
                                  format: uri-reference
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                traceId:
                                  type: string
                                  pattern: ^[0-9a-f]{16,32}$
                                errors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              allOf:
                                - if:
                                    properties:
                                      code:
                                        const: validation-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: not-found
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 404
                                - if:
                                    properties:
                                      code:
                                        const: conflict
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: precondition-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 412
                                - if:
                                    properties:
                                      code:
                                        const: precondition-required
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 428
                                - if:
                                    properties:
                                      code:
                                        const: unauthenticated
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: forbidden
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: rate-limited
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 429
                                - if:
                                    properties:
                                      code:
                                        const: payload-too-large
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 413
                                - if:
                                    properties:
                                      code:
                                        const: unsupported-format
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 415
                                - if:
                                    properties:
                                      code:
                                        const: engine-unavailable
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: engine-incompatible
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: degraded
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: upload-checksum-mismatch
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: legacy-unsupported
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 501
                                - if:
                                    properties:
                                      code:
                                        const: internal
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 500
                                - if:
                                    properties:
                                      code:
                                        const: clock-unlocked
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: not-configured
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: authorization-pending
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: slow-down
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: access-denied
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: expired-token
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: token-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-key-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-in-progress
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                              additionalProperties: true
                              examples:
                                - type: >-
                                    https://freedome.nativemind.us/problems/engine-unavailable
                                  title: Visual engine unavailable
                                  status: 503
                                  detail: >-
                                    freedome-engined not reachable at
                                    unix:/run/freedome/engine.sock
                                  instance: /api/v1/venues/default/players/main/play
                                  code: engine-unavailable
                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                              $defs:
                                knownCode:
                                  enum:
                                    - validation-failed
                                    - not-found
                                    - conflict
                                    - precondition-failed
                                    - precondition-required
                                    - unauthenticated
                                    - forbidden
                                    - rate-limited
                                    - payload-too-large
                                    - unsupported-format
                                    - engine-unavailable
                                    - engine-incompatible
                                    - degraded
                                    - job-failed
                                    - upload-checksum-mismatch
                                    - legacy-unsupported
                                    - internal
                                    - clock-unlocked
                                    - not-configured
                                    - authorization-pending
                                    - slow-down
                                    - access-denied
                                    - expired-token
                                    - token-reused
                                    - idempotency-key-reused
                                    - idempotency-in-progress
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                fieldError:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                              description: >-
                                why the asset failed (e.g.
                                upload-checksum-mismatch)
                            progress:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            mapping:
                              description: >-
                                Content mapping onto the dome (01b §4.5, 02b
                                §4.4).
                              type: object
                              required:
                                - projection
                              properties:
                                projection:
                                  anyOf:
                                    - enum:
                                        - domemaster
                                        - equirect
                                        - cubemap
                                        - flat
                                        - pyramid_views
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                fov:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: ° (domemaster 180–230)
                                tilt:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                azimuth:
                                  type: number
                                  minimum: -360
                                  maximum: 360
                                  description: 'flat: ° centre azimuth'
                                elevation:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                  description: 'flat: ° centre elevation'
                                width:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: 'flat: ° angular width'
                                faces:
                                  enum:
                                    - 3
                                    - 4
                                    - 6
                                  description: '1.1 pyramid_views: number of views'
                                layout:
                                  description: >-
                                    1.1: cubemap 3x2 | 6x1 | cross;
                                    pyramid_views cross | row | grid
                                  anyOf:
                                    - enum:
                                        - 3x2
                                        - 6x1
                                        - cross
                                        - row
                                        - grid
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                              if:
                                properties:
                                  projection:
                                    const: pyramid_views
                                required:
                                  - projection
                              then:
                                required:
                                  - faces
                            media:
                              description: >-
                                Probe result (ffprobe): container, streams,
                                duration. `probeUnavailable` when the server has
                                no prober (asset still ready).
                              type: object
                              properties:
                                container:
                                  type: string
                                duration:
                                  description: Duration in seconds.
                                  type: number
                                  minimum: 0
                                video:
                                  type: object
                                  properties:
                                    codec:
                                      type: string
                                    resolution:
                                      type: array
                                      items:
                                        type: integer
                                        minimum: 1
                                      minItems: 2
                                      maxItems: 2
                                    fps:
                                      type: number
                                      exclusiveMinimum: 0
                                    bitDepth:
                                      type: integer
                                      minimum: 1
                                    pixelFormat:
                                      type: string
                                  additionalProperties: true
                                audio:
                                  type: object
                                  properties:
                                    codec:
                                      type: string
                                    channels:
                                      type: integer
                                      minimum: 1
                                    layout:
                                      type: string
                                    sampleRate:
                                      type: integer
                                      minimum: 1
                                    ambisonicOrder:
                                      type: integer
                                      minimum: 0
                                      maximum: 7
                                  additionalProperties: true
                                probeUnavailable:
                                  type: boolean
                              additionalProperties: true
                            thumbnails:
                              type: array
                              items:
                                type: object
                                required:
                                  - size
                                  - url
                                properties:
                                  size:
                                    type: integer
                                    minimum: 16
                                  url:
                                    type: string
                                    format: uri-reference
                                additionalProperties: false
                            tags:
                              type: array
                              items:
                                type: string
                                minLength: 1
                                maxLength: 64
                              uniqueItems: true
                            usedBy:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              description: ids of shows referencing the asset
                            revision:
                              description: >-
                                Monotonic resource revision; the strong ETag is
                                derived from it.
                              type: integer
                              minimum: 0
                            createdAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                          allOf:
                            - if:
                                properties:
                                  status:
                                    const: failed
                                required:
                                  - status
                              then:
                                required:
                                  - problem
                      $defs:
                        asset:
                          type: object
                          required:
                            - id
                            - name
                            - type
                            - status
                            - revision
                            - createdAt
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            name:
                              type: string
                              minLength: 1
                              maxLength: 512
                              description: original file name (with extension) or a title
                            type:
                              anyOf:
                                - enum:
                                    - video
                                    - image
                                    - audio
                                    - zelim
                                    - boranko
                                    - comics
                                    - realtime
                                    - stream
                                    - dome
                                    - other
                                - type: string
                                  pattern: ^[a-z][a-z0-9._-]{0,63}$
                            src:
                              type: string
                              description: >-
                                external URI for registered (not stored) assets;
                                absent for stored blobs. Type stream: also
                                spout://<sender>, syphon://<app>/<server>,
                                dmabuf://<pipewire-node>, v4l2:///dev/<device>,
                                ndi://<source> (percent-encoded,
                                docs/audio-reactive.md)
                            texture:
                              description: >-
                                Stream asset fed by another application on the
                                engine's machine (derived by the server from
                                `src`, read-only).
                              type: object
                              required:
                                - transport
                                - sender
                              properties:
                                transport:
                                  description: >-
                                    Shared GPU texture or spare network
                                    transport of a live source. Open list.
                                  anyOf:
                                    - enum:
                                        - spout
                                        - syphon
                                        - dmabuf
                                        - capture
                                        - ndi
                                    - type: string
                                      pattern: ^[a-z][a-z0-9_-]{0,31}$
                                sender:
                                  type: string
                                  minLength: 1
                                  maxLength: 256
                                  description: >-
                                    Spout sender, Syphon server, PipeWire node,
                                    capture device or NDI source name
                                application:
                                  type: string
                                  maxLength: 256
                                  description: Syphon application name
                                fallbackUrl:
                                  type: string
                                  format: uri
                              additionalProperties: false
                            mediaType:
                              description: IANA media type.
                              type: string
                              pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                            sha256:
                              description: Lowercase hex SHA-256 digest.
                              type: string
                              pattern: ^[0-9a-f]{64}$
                            size:
                              type: integer
                              minimum: 0
                            status:
                              anyOf:
                                - enum:
                                    - uploading
                                    - processing
                                    - ready
                                    - failed
                                - type: string
                                  pattern: ^[a-z_]{1,32}$
                            problem:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). RFC 9457 problem details with the
                                Freedome `code` catalogue, 02e §3.3. Also the
                                `data` of WS `error`, the socket.io ack error
                                and GraphQL errors[].extensions.problem. The
                                catalogue is open: unknown codes are allowed;
                                known codes are bound to their HTTP status.
                              title: Problem details
                              type: object
                              required:
                                - type
                                - title
                                - code
                              properties:
                                type:
                                  type: string
                                  format: uri
                                  description: >-
                                    https://freedome.nativemind.us/problems/<code>
                                    for catalogue codes.
                                title:
                                  type: string
                                  minLength: 1
                                status:
                                  type: integer
                                  minimum: 100
                                  maximum: 599
                                detail:
                                  type: string
                                instance:
                                  type: string
                                  format: uri-reference
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                traceId:
                                  type: string
                                  pattern: ^[0-9a-f]{16,32}$
                                errors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              allOf:
                                - if:
                                    properties:
                                      code:
                                        const: validation-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: not-found
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 404
                                - if:
                                    properties:
                                      code:
                                        const: conflict
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: precondition-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 412
                                - if:
                                    properties:
                                      code:
                                        const: precondition-required
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 428
                                - if:
                                    properties:
                                      code:
                                        const: unauthenticated
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: forbidden
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: rate-limited
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 429
                                - if:
                                    properties:
                                      code:
                                        const: payload-too-large
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 413
                                - if:
                                    properties:
                                      code:
                                        const: unsupported-format
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 415
                                - if:
                                    properties:
                                      code:
                                        const: engine-unavailable
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: engine-incompatible
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: degraded
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: upload-checksum-mismatch
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: legacy-unsupported
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 501
                                - if:
                                    properties:
                                      code:
                                        const: internal
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 500
                                - if:
                                    properties:
                                      code:
                                        const: clock-unlocked
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: not-configured
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: authorization-pending
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: slow-down
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: access-denied
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: expired-token
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: token-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-key-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-in-progress
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                              additionalProperties: true
                              examples:
                                - type: >-
                                    https://freedome.nativemind.us/problems/engine-unavailable
                                  title: Visual engine unavailable
                                  status: 503
                                  detail: >-
                                    freedome-engined not reachable at
                                    unix:/run/freedome/engine.sock
                                  instance: /api/v1/venues/default/players/main/play
                                  code: engine-unavailable
                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                              $defs:
                                knownCode:
                                  enum:
                                    - validation-failed
                                    - not-found
                                    - conflict
                                    - precondition-failed
                                    - precondition-required
                                    - unauthenticated
                                    - forbidden
                                    - rate-limited
                                    - payload-too-large
                                    - unsupported-format
                                    - engine-unavailable
                                    - engine-incompatible
                                    - degraded
                                    - job-failed
                                    - upload-checksum-mismatch
                                    - legacy-unsupported
                                    - internal
                                    - clock-unlocked
                                    - not-configured
                                    - authorization-pending
                                    - slow-down
                                    - access-denied
                                    - expired-token
                                    - token-reused
                                    - idempotency-key-reused
                                    - idempotency-in-progress
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                fieldError:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                              description: >-
                                why the asset failed (e.g.
                                upload-checksum-mismatch)
                            progress:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            mapping:
                              description: >-
                                Content mapping onto the dome (01b §4.5, 02b
                                §4.4).
                              type: object
                              required:
                                - projection
                              properties:
                                projection:
                                  anyOf:
                                    - enum:
                                        - domemaster
                                        - equirect
                                        - cubemap
                                        - flat
                                        - pyramid_views
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                fov:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: ° (domemaster 180–230)
                                tilt:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                azimuth:
                                  type: number
                                  minimum: -360
                                  maximum: 360
                                  description: 'flat: ° centre azimuth'
                                elevation:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                  description: 'flat: ° centre elevation'
                                width:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: 'flat: ° angular width'
                                faces:
                                  enum:
                                    - 3
                                    - 4
                                    - 6
                                  description: '1.1 pyramid_views: number of views'
                                layout:
                                  description: >-
                                    1.1: cubemap 3x2 | 6x1 | cross;
                                    pyramid_views cross | row | grid
                                  anyOf:
                                    - enum:
                                        - 3x2
                                        - 6x1
                                        - cross
                                        - row
                                        - grid
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                              if:
                                properties:
                                  projection:
                                    const: pyramid_views
                                required:
                                  - projection
                              then:
                                required:
                                  - faces
                            media:
                              description: >-
                                Probe result (ffprobe): container, streams,
                                duration. `probeUnavailable` when the server has
                                no prober (asset still ready).
                              type: object
                              properties:
                                container:
                                  type: string
                                duration:
                                  description: Duration in seconds.
                                  type: number
                                  minimum: 0
                                video:
                                  type: object
                                  properties:
                                    codec:
                                      type: string
                                    resolution:
                                      type: array
                                      items:
                                        type: integer
                                        minimum: 1
                                      minItems: 2
                                      maxItems: 2
                                    fps:
                                      type: number
                                      exclusiveMinimum: 0
                                    bitDepth:
                                      type: integer
                                      minimum: 1
                                    pixelFormat:
                                      type: string
                                  additionalProperties: true
                                audio:
                                  type: object
                                  properties:
                                    codec:
                                      type: string
                                    channels:
                                      type: integer
                                      minimum: 1
                                    layout:
                                      type: string
                                    sampleRate:
                                      type: integer
                                      minimum: 1
                                    ambisonicOrder:
                                      type: integer
                                      minimum: 0
                                      maximum: 7
                                  additionalProperties: true
                                probeUnavailable:
                                  type: boolean
                              additionalProperties: true
                            thumbnails:
                              type: array
                              items:
                                type: object
                                required:
                                  - size
                                  - url
                                properties:
                                  size:
                                    type: integer
                                    minimum: 16
                                  url:
                                    type: string
                                    format: uri-reference
                                additionalProperties: false
                            tags:
                              type: array
                              items:
                                type: string
                                minLength: 1
                                maxLength: 64
                              uniqueItems: true
                            usedBy:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              description: ids of shows referencing the asset
                            revision:
                              description: >-
                                Monotonic resource revision; the strong ETag is
                                derived from it.
                              type: integer
                              minimum: 0
                            createdAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                          allOf:
                            - if:
                                properties:
                                  status:
                                    const: failed
                                required:
                                  - status
                              then:
                                required:
                                  - problem
                        textureTransport:
                          description: >-
                            Shared GPU texture or spare network transport of a
                            live source. Open list.
                          anyOf:
                            - enum:
                                - spout
                                - syphon
                                - dmabuf
                                - capture
                                - ndi
                            - type: string
                              pattern: ^[a-z][a-z0-9_-]{0,31}$
                        texture:
                          description: >-
                            Stream asset fed by another application on the
                            engine's machine (derived by the server from `src`,
                            read-only).
                          type: object
                          required:
                            - transport
                            - sender
                          properties:
                            transport:
                              description: >-
                                Shared GPU texture or spare network transport of
                                a live source. Open list.
                              anyOf:
                                - enum:
                                    - spout
                                    - syphon
                                    - dmabuf
                                    - capture
                                    - ndi
                                - type: string
                                  pattern: ^[a-z][a-z0-9_-]{0,31}$
                            sender:
                              type: string
                              minLength: 1
                              maxLength: 256
                              description: >-
                                Spout sender, Syphon server, PipeWire node,
                                capture device or NDI source name
                            application:
                              type: string
                              maxLength: 256
                              description: Syphon application name
                            fallbackUrl:
                              type: string
                              format: uri
                          additionalProperties: false
                        textureSource:
                          description: >-
                            A live source seen by the engine (GET
                            /venues/{venueId}/texture-sources, event
                            textureSource.state).
                          type: object
                          required:
                            - id
                            - transport
                            - sender
                            - status
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            transport:
                              description: >-
                                Shared GPU texture or spare network transport of
                                a live source. Open list.
                              anyOf:
                                - enum:
                                    - spout
                                    - syphon
                                    - dmabuf
                                    - capture
                                    - ndi
                                - type: string
                                  pattern: ^[a-z][a-z0-9_-]{0,31}$
                            sender:
                              type: string
                              minLength: 1
                              maxLength: 256
                            application:
                              type: string
                              maxLength: 256
                            status:
                              anyOf:
                                - enum:
                                    - online
                                    - offline
                                - type: string
                                  pattern: ^[a-z][a-z_-]{0,31}$
                            width:
                              type: integer
                              minimum: 1
                            height:
                              type: integer
                              minimum: 1
                            fps:
                              type: number
                              minimum: 0
                              description: frames per second measured by the engine
                            pixelFormat:
                              type: string
                              maxLength: 32
                            assetId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            node:
                              type: string
                              maxLength: 64
                              description: node whose engine sees the source
                            lastSeen:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        textureSourcePage:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                description: >-
                                  A live source seen by the engine (GET
                                  /venues/{venueId}/texture-sources, event
                                  textureSource.state).
                                type: object
                                required:
                                  - id
                                  - transport
                                  - sender
                                  - status
                                properties:
                                  id:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  transport:
                                    description: >-
                                      Shared GPU texture or spare network
                                      transport of a live source. Open list.
                                    anyOf:
                                      - enum:
                                          - spout
                                          - syphon
                                          - dmabuf
                                          - capture
                                          - ndi
                                      - type: string
                                        pattern: ^[a-z][a-z0-9_-]{0,31}$
                                  sender:
                                    type: string
                                    minLength: 1
                                    maxLength: 256
                                  application:
                                    type: string
                                    maxLength: 256
                                  status:
                                    anyOf:
                                      - enum:
                                          - online
                                          - offline
                                      - type: string
                                        pattern: ^[a-z][a-z_-]{0,31}$
                                  width:
                                    type: integer
                                    minimum: 1
                                  height:
                                    type: integer
                                    minimum: 1
                                  fps:
                                    type: number
                                    minimum: 0
                                    description: frames per second measured by the engine
                                  pixelFormat:
                                    type: string
                                    maxLength: 32
                                  assetId:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  node:
                                    type: string
                                    maxLength: 64
                                    description: node whose engine sees the source
                                  lastSeen:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                          additionalProperties: false
                        type:
                          anyOf:
                            - enum:
                                - video
                                - image
                                - audio
                                - zelim
                                - boranko
                                - comics
                                - realtime
                                - stream
                                - dome
                                - other
                            - type: string
                              pattern: ^[a-z][a-z0-9._-]{0,63}$
                        status:
                          anyOf:
                            - enum:
                                - uploading
                                - processing
                                - ready
                                - failed
                            - type: string
                              pattern: ^[a-z_]{1,32}$
                        media:
                          description: >-
                            Probe result (ffprobe): container, streams,
                            duration. `probeUnavailable` when the server has no
                            prober (asset still ready).
                          type: object
                          properties:
                            container:
                              type: string
                            duration:
                              description: Duration in seconds.
                              type: number
                              minimum: 0
                            video:
                              type: object
                              properties:
                                codec:
                                  type: string
                                resolution:
                                  type: array
                                  items:
                                    type: integer
                                    minimum: 1
                                  minItems: 2
                                  maxItems: 2
                                fps:
                                  type: number
                                  exclusiveMinimum: 0
                                bitDepth:
                                  type: integer
                                  minimum: 1
                                pixelFormat:
                                  type: string
                              additionalProperties: true
                            audio:
                              type: object
                              properties:
                                codec:
                                  type: string
                                channels:
                                  type: integer
                                  minimum: 1
                                layout:
                                  type: string
                                sampleRate:
                                  type: integer
                                  minimum: 1
                                ambisonicOrder:
                                  type: integer
                                  minimum: 0
                                  maximum: 7
                              additionalProperties: true
                            probeUnavailable:
                              type: boolean
                          additionalProperties: true
                        input:
                          description: >-
                            POST /assets JSON body: register a finished tus
                            upload or an external URL (streams, CDN).
                          type: object
                          properties:
                            uploadId:
                              description: >-
                                Server-owned resource id: UUIDv7, lowercase,
                                sortable by creation time.
                              type: string
                              pattern: >-
                                ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                              examples:
                                - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                            url:
                              type: string
                              format: uri
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            name:
                              type: string
                              minLength: 1
                              maxLength: 512
                            type:
                              anyOf:
                                - enum:
                                    - video
                                    - image
                                    - audio
                                    - zelim
                                    - boranko
                                    - comics
                                    - realtime
                                    - stream
                                    - dome
                                    - other
                                - type: string
                                  pattern: ^[a-z][a-z0-9._-]{0,63}$
                            mapping:
                              description: >-
                                Content mapping onto the dome (01b §4.5, 02b
                                §4.4).
                              type: object
                              required:
                                - projection
                              properties:
                                projection:
                                  anyOf:
                                    - enum:
                                        - domemaster
                                        - equirect
                                        - cubemap
                                        - flat
                                        - pyramid_views
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                fov:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: ° (domemaster 180–230)
                                tilt:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                azimuth:
                                  type: number
                                  minimum: -360
                                  maximum: 360
                                  description: 'flat: ° centre azimuth'
                                elevation:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                  description: 'flat: ° centre elevation'
                                width:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: 'flat: ° angular width'
                                faces:
                                  enum:
                                    - 3
                                    - 4
                                    - 6
                                  description: '1.1 pyramid_views: number of views'
                                layout:
                                  description: >-
                                    1.1: cubemap 3x2 | 6x1 | cross;
                                    pyramid_views cross | row | grid
                                  anyOf:
                                    - enum:
                                        - 3x2
                                        - 6x1
                                        - cross
                                        - row
                                        - grid
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                              if:
                                properties:
                                  projection:
                                    const: pyramid_views
                                required:
                                  - projection
                              then:
                                required:
                                  - faces
                            tags:
                              type: array
                              items:
                                type: string
                                minLength: 1
                                maxLength: 64
                              uniqueItems: true
                            sha256:
                              description: Lowercase hex SHA-256 digest.
                              type: string
                              pattern: ^[0-9a-f]{64}$
                            fallbackUrl:
                              type: string
                              format: uri
                              description: >-
                                stream assets: source to use while `url` is
                                unavailable, e.g. ndi://…
                          additionalProperties: false
                          oneOf:
                            - required:
                                - uploadId
                            - required:
                                - url
                        multipart:
                          description: >-
                            POST /assets multipart/form-data body (simple upload
                            ≤ 100 MB): part `file` + optional JSON fields.
                          type: object
                          required:
                            - file
                          properties:
                            file:
                              type: string
                              contentMediaType: application/octet-stream
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            type:
                              anyOf:
                                - enum:
                                    - video
                                    - image
                                    - audio
                                    - zelim
                                    - boranko
                                    - comics
                                    - realtime
                                    - stream
                                    - dome
                                    - other
                                - type: string
                                  pattern: ^[a-z][a-z0-9._-]{0,63}$
                            tags:
                              type: string
                              description: comma-separated
                        patch:
                          type: object
                          minProperties: 1
                          properties:
                            name:
                              type: string
                              minLength: 1
                              maxLength: 512
                            type:
                              anyOf:
                                - enum:
                                    - video
                                    - image
                                    - audio
                                    - zelim
                                    - boranko
                                    - comics
                                    - realtime
                                    - stream
                                    - dome
                                    - other
                                - type: string
                                  pattern: ^[a-z][a-z0-9._-]{0,63}$
                            mapping:
                              description: >-
                                Content mapping onto the dome (01b §4.5, 02b
                                §4.4).
                              type: object
                              required:
                                - projection
                              properties:
                                projection:
                                  anyOf:
                                    - enum:
                                        - domemaster
                                        - equirect
                                        - cubemap
                                        - flat
                                        - pyramid_views
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                fov:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: ° (domemaster 180–230)
                                tilt:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                azimuth:
                                  type: number
                                  minimum: -360
                                  maximum: 360
                                  description: 'flat: ° centre azimuth'
                                elevation:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                  description: 'flat: ° centre elevation'
                                width:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: 'flat: ° angular width'
                                faces:
                                  enum:
                                    - 3
                                    - 4
                                    - 6
                                  description: '1.1 pyramid_views: number of views'
                                layout:
                                  description: >-
                                    1.1: cubemap 3x2 | 6x1 | cross;
                                    pyramid_views cross | row | grid
                                  anyOf:
                                    - enum:
                                        - 3x2
                                        - 6x1
                                        - cross
                                        - row
                                        - grid
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                              if:
                                properties:
                                  projection:
                                    const: pyramid_views
                                required:
                                  - projection
                              then:
                                required:
                                  - faces
                            tags:
                              type: array
                              items:
                                type: string
                                minLength: 1
                                maxLength: 64
                              uniqueItems: true
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        page:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                type: object
                                required:
                                  - id
                                  - name
                                  - type
                                  - status
                                  - revision
                                  - createdAt
                                properties:
                                  id:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  name:
                                    type: string
                                    minLength: 1
                                    maxLength: 512
                                    description: >-
                                      original file name (with extension) or a
                                      title
                                  type:
                                    anyOf:
                                      - enum:
                                          - video
                                          - image
                                          - audio
                                          - zelim
                                          - boranko
                                          - comics
                                          - realtime
                                          - stream
                                          - dome
                                          - other
                                      - type: string
                                        pattern: ^[a-z][a-z0-9._-]{0,63}$
                                  src:
                                    type: string
                                    description: >-
                                      external URI for registered (not stored)
                                      assets; absent for stored blobs. Type
                                      stream: also spout://<sender>,
                                      syphon://<app>/<server>,
                                      dmabuf://<pipewire-node>,
                                      v4l2:///dev/<device>, ndi://<source>
                                      (percent-encoded, docs/audio-reactive.md)
                                  texture:
                                    description: >-
                                      Stream asset fed by another application on
                                      the engine's machine (derived by the
                                      server from `src`, read-only).
                                    type: object
                                    required:
                                      - transport
                                      - sender
                                    properties:
                                      transport:
                                        description: >-
                                          Shared GPU texture or spare network
                                          transport of a live source. Open list.
                                        anyOf:
                                          - enum:
                                              - spout
                                              - syphon
                                              - dmabuf
                                              - capture
                                              - ndi
                                          - type: string
                                            pattern: ^[a-z][a-z0-9_-]{0,31}$
                                      sender:
                                        type: string
                                        minLength: 1
                                        maxLength: 256
                                        description: >-
                                          Spout sender, Syphon server, PipeWire
                                          node, capture device or NDI source name
                                      application:
                                        type: string
                                        maxLength: 256
                                        description: Syphon application name
                                      fallbackUrl:
                                        type: string
                                        format: uri
                                    additionalProperties: false
                                  mediaType:
                                    description: IANA media type.
                                    type: string
                                    pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                                  sha256:
                                    description: Lowercase hex SHA-256 digest.
                                    type: string
                                    pattern: ^[0-9a-f]{64}$
                                  size:
                                    type: integer
                                    minimum: 0
                                  status:
                                    anyOf:
                                      - enum:
                                          - uploading
                                          - processing
                                          - ready
                                          - failed
                                      - type: string
                                        pattern: ^[a-z_]{1,32}$
                                  problem:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                    description: >-
                                      why the asset failed (e.g.
                                      upload-checksum-mismatch)
                                  progress:
                                    description: >-
                                      0..1 (brightness, linear volume gain,
                                      progress).
                                    type: number
                                    minimum: 0
                                    maximum: 1
                                  mapping:
                                    description: >-
                                      Content mapping onto the dome (01b §4.5,
                                      02b §4.4).
                                    type: object
                                    required:
                                      - projection
                                    properties:
                                      projection:
                                        anyOf:
                                          - enum:
                                              - domemaster
                                              - equirect
                                              - cubemap
                                              - flat
                                              - pyramid_views
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      fov:
                                        type: number
                                        exclusiveMinimum: 0
                                        maximum: 360
                                        description: ° (domemaster 180–230)
                                      tilt:
                                        type: number
                                        minimum: -90
                                        maximum: 90
                                      azimuth:
                                        type: number
                                        minimum: -360
                                        maximum: 360
                                        description: 'flat: ° centre azimuth'
                                      elevation:
                                        type: number
                                        minimum: -90
                                        maximum: 90
                                        description: 'flat: ° centre elevation'
                                      width:
                                        type: number
                                        exclusiveMinimum: 0
                                        maximum: 360
                                        description: 'flat: ° angular width'
                                      faces:
                                        enum:
                                          - 3
                                          - 4
                                          - 6
                                        description: '1.1 pyramid_views: number of views'
                                      layout:
                                        description: >-
                                          1.1: cubemap 3x2 | 6x1 | cross;
                                          pyramid_views cross | row | grid
                                        anyOf:
                                          - enum:
                                              - 3x2
                                              - 6x1
                                              - cross
                                              - row
                                              - grid
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                    if:
                                      properties:
                                        projection:
                                          const: pyramid_views
                                      required:
                                        - projection
                                    then:
                                      required:
                                        - faces
                                  media:
                                    description: >-
                                      Probe result (ffprobe): container,
                                      streams, duration. `probeUnavailable` when
                                      the server has no prober (asset still
                                      ready).
                                    type: object
                                    properties:
                                      container:
                                        type: string
                                      duration:
                                        description: Duration in seconds.
                                        type: number
                                        minimum: 0
                                      video:
                                        type: object
                                        properties:
                                          codec:
                                            type: string
                                          resolution:
                                            type: array
                                            items:
                                              type: integer
                                              minimum: 1
                                            minItems: 2
                                            maxItems: 2
                                          fps:
                                            type: number
                                            exclusiveMinimum: 0
                                          bitDepth:
                                            type: integer
                                            minimum: 1
                                          pixelFormat:
                                            type: string
                                        additionalProperties: true
                                      audio:
                                        type: object
                                        properties:
                                          codec:
                                            type: string
                                          channels:
                                            type: integer
                                            minimum: 1
                                          layout:
                                            type: string
                                          sampleRate:
                                            type: integer
                                            minimum: 1
                                          ambisonicOrder:
                                            type: integer
                                            minimum: 0
                                            maximum: 7
                                        additionalProperties: true
                                      probeUnavailable:
                                        type: boolean
                                    additionalProperties: true
                                  thumbnails:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - size
                                        - url
                                      properties:
                                        size:
                                          type: integer
                                          minimum: 16
                                        url:
                                          type: string
                                          format: uri-reference
                                      additionalProperties: false
                                  tags:
                                    type: array
                                    items:
                                      type: string
                                      minLength: 1
                                      maxLength: 64
                                    uniqueItems: true
                                  usedBy:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    description: ids of shows referencing the asset
                                  revision:
                                    description: >-
                                      Monotonic resource revision; the strong
                                      ETag is derived from it.
                                    type: integer
                                    minimum: 0
                                  createdAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  updatedAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                allOf:
                                  - if:
                                      properties:
                                        status:
                                          const: failed
                                      required:
                                        - status
                                    then:
                                      required:
                                        - problem
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                            count:
                              type: integer
                              minimum: 0
                          additionalProperties: false
                        storage:
                          description: GET /storage (replaces /api/v1/content/stats).
                          type: object
                          required:
                            - totalBytes
                            - usedBytes
                            - freeBytes
                          properties:
                            totalBytes:
                              type: integer
                              minimum: 0
                            usedBytes:
                              type: integer
                              minimum: 0
                            freeBytes:
                              type: integer
                              minimum: 0
                            quotaBytes:
                              anyOf:
                                - type: integer
                                  minimum: 0
                                - type: 'null'
                            assets:
                              type: object
                              required:
                                - count
                                - bytes
                              properties:
                                count:
                                  type: integer
                                  minimum: 0
                                bytes:
                                  type: integer
                                  minimum: 0
                              additionalProperties: false
                            uploads:
                              type: object
                              required:
                                - count
                                - bytes
                              properties:
                                count:
                                  type: integer
                                  minimum: 0
                                bytes:
                                  type: integer
                                  minimum: 0
                              additionalProperties: false
                            byType:
                              type: object
                              additionalProperties:
                                type: object
                                required:
                                  - count
                                  - bytes
                                properties:
                                  count:
                                    type: integer
                                    minimum: 0
                                  bytes:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                          additionalProperties: false
                        countBytes:
                          type: object
                          required:
                            - count
                            - bytes
                          properties:
                            count:
                              type: integer
                              minimum: 0
                            bytes:
                              type: integer
                              minimum: 0
                          additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: asset.failed
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/api/1.0/asset.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). Stored
                        asset (02e §4, §5.4) = .dome asset fields + storage
                        (sha256, size, status, probe data, thumbnails). Root =
                        GET /assets/{assetId}.
                      title: Asset
                      allOf:
                        - type: object
                          required:
                            - id
                            - name
                            - type
                            - status
                            - revision
                            - createdAt
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            name:
                              type: string
                              minLength: 1
                              maxLength: 512
                              description: original file name (with extension) or a title
                            type:
                              anyOf:
                                - enum:
                                    - video
                                    - image
                                    - audio
                                    - zelim
                                    - boranko
                                    - comics
                                    - realtime
                                    - stream
                                    - dome
                                    - other
                                - type: string
                                  pattern: ^[a-z][a-z0-9._-]{0,63}$
                            src:
                              type: string
                              description: >-
                                external URI for registered (not stored) assets;
                                absent for stored blobs. Type stream: also
                                spout://<sender>, syphon://<app>/<server>,
                                dmabuf://<pipewire-node>, v4l2:///dev/<device>,
                                ndi://<source> (percent-encoded,
                                docs/audio-reactive.md)
                            texture:
                              description: >-
                                Stream asset fed by another application on the
                                engine's machine (derived by the server from
                                `src`, read-only).
                              type: object
                              required:
                                - transport
                                - sender
                              properties:
                                transport:
                                  description: >-
                                    Shared GPU texture or spare network
                                    transport of a live source. Open list.
                                  anyOf:
                                    - enum:
                                        - spout
                                        - syphon
                                        - dmabuf
                                        - capture
                                        - ndi
                                    - type: string
                                      pattern: ^[a-z][a-z0-9_-]{0,31}$
                                sender:
                                  type: string
                                  minLength: 1
                                  maxLength: 256
                                  description: >-
                                    Spout sender, Syphon server, PipeWire node,
                                    capture device or NDI source name
                                application:
                                  type: string
                                  maxLength: 256
                                  description: Syphon application name
                                fallbackUrl:
                                  type: string
                                  format: uri
                              additionalProperties: false
                            mediaType:
                              description: IANA media type.
                              type: string
                              pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                            sha256:
                              description: Lowercase hex SHA-256 digest.
                              type: string
                              pattern: ^[0-9a-f]{64}$
                            size:
                              type: integer
                              minimum: 0
                            status:
                              anyOf:
                                - enum:
                                    - uploading
                                    - processing
                                    - ready
                                    - failed
                                - type: string
                                  pattern: ^[a-z_]{1,32}$
                            problem:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). RFC 9457 problem details with the
                                Freedome `code` catalogue, 02e §3.3. Also the
                                `data` of WS `error`, the socket.io ack error
                                and GraphQL errors[].extensions.problem. The
                                catalogue is open: unknown codes are allowed;
                                known codes are bound to their HTTP status.
                              title: Problem details
                              type: object
                              required:
                                - type
                                - title
                                - code
                              properties:
                                type:
                                  type: string
                                  format: uri
                                  description: >-
                                    https://freedome.nativemind.us/problems/<code>
                                    for catalogue codes.
                                title:
                                  type: string
                                  minLength: 1
                                status:
                                  type: integer
                                  minimum: 100
                                  maximum: 599
                                detail:
                                  type: string
                                instance:
                                  type: string
                                  format: uri-reference
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                traceId:
                                  type: string
                                  pattern: ^[0-9a-f]{16,32}$
                                errors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              allOf:
                                - if:
                                    properties:
                                      code:
                                        const: validation-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: not-found
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 404
                                - if:
                                    properties:
                                      code:
                                        const: conflict
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: precondition-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 412
                                - if:
                                    properties:
                                      code:
                                        const: precondition-required
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 428
                                - if:
                                    properties:
                                      code:
                                        const: unauthenticated
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: forbidden
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: rate-limited
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 429
                                - if:
                                    properties:
                                      code:
                                        const: payload-too-large
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 413
                                - if:
                                    properties:
                                      code:
                                        const: unsupported-format
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 415
                                - if:
                                    properties:
                                      code:
                                        const: engine-unavailable
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: engine-incompatible
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: degraded
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: upload-checksum-mismatch
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: legacy-unsupported
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 501
                                - if:
                                    properties:
                                      code:
                                        const: internal
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 500
                                - if:
                                    properties:
                                      code:
                                        const: clock-unlocked
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: not-configured
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: authorization-pending
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: slow-down
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: access-denied
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: expired-token
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: token-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-key-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-in-progress
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                              additionalProperties: true
                              examples:
                                - type: >-
                                    https://freedome.nativemind.us/problems/engine-unavailable
                                  title: Visual engine unavailable
                                  status: 503
                                  detail: >-
                                    freedome-engined not reachable at
                                    unix:/run/freedome/engine.sock
                                  instance: /api/v1/venues/default/players/main/play
                                  code: engine-unavailable
                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                              $defs:
                                knownCode:
                                  enum:
                                    - validation-failed
                                    - not-found
                                    - conflict
                                    - precondition-failed
                                    - precondition-required
                                    - unauthenticated
                                    - forbidden
                                    - rate-limited
                                    - payload-too-large
                                    - unsupported-format
                                    - engine-unavailable
                                    - engine-incompatible
                                    - degraded
                                    - job-failed
                                    - upload-checksum-mismatch
                                    - legacy-unsupported
                                    - internal
                                    - clock-unlocked
                                    - not-configured
                                    - authorization-pending
                                    - slow-down
                                    - access-denied
                                    - expired-token
                                    - token-reused
                                    - idempotency-key-reused
                                    - idempotency-in-progress
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                fieldError:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                              description: >-
                                why the asset failed (e.g.
                                upload-checksum-mismatch)
                            progress:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            mapping:
                              description: >-
                                Content mapping onto the dome (01b §4.5, 02b
                                §4.4).
                              type: object
                              required:
                                - projection
                              properties:
                                projection:
                                  anyOf:
                                    - enum:
                                        - domemaster
                                        - equirect
                                        - cubemap
                                        - flat
                                        - pyramid_views
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                fov:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: ° (domemaster 180–230)
                                tilt:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                azimuth:
                                  type: number
                                  minimum: -360
                                  maximum: 360
                                  description: 'flat: ° centre azimuth'
                                elevation:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                  description: 'flat: ° centre elevation'
                                width:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: 'flat: ° angular width'
                                faces:
                                  enum:
                                    - 3
                                    - 4
                                    - 6
                                  description: '1.1 pyramid_views: number of views'
                                layout:
                                  description: >-
                                    1.1: cubemap 3x2 | 6x1 | cross;
                                    pyramid_views cross | row | grid
                                  anyOf:
                                    - enum:
                                        - 3x2
                                        - 6x1
                                        - cross
                                        - row
                                        - grid
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                              if:
                                properties:
                                  projection:
                                    const: pyramid_views
                                required:
                                  - projection
                              then:
                                required:
                                  - faces
                            media:
                              description: >-
                                Probe result (ffprobe): container, streams,
                                duration. `probeUnavailable` when the server has
                                no prober (asset still ready).
                              type: object
                              properties:
                                container:
                                  type: string
                                duration:
                                  description: Duration in seconds.
                                  type: number
                                  minimum: 0
                                video:
                                  type: object
                                  properties:
                                    codec:
                                      type: string
                                    resolution:
                                      type: array
                                      items:
                                        type: integer
                                        minimum: 1
                                      minItems: 2
                                      maxItems: 2
                                    fps:
                                      type: number
                                      exclusiveMinimum: 0
                                    bitDepth:
                                      type: integer
                                      minimum: 1
                                    pixelFormat:
                                      type: string
                                  additionalProperties: true
                                audio:
                                  type: object
                                  properties:
                                    codec:
                                      type: string
                                    channels:
                                      type: integer
                                      minimum: 1
                                    layout:
                                      type: string
                                    sampleRate:
                                      type: integer
                                      minimum: 1
                                    ambisonicOrder:
                                      type: integer
                                      minimum: 0
                                      maximum: 7
                                  additionalProperties: true
                                probeUnavailable:
                                  type: boolean
                              additionalProperties: true
                            thumbnails:
                              type: array
                              items:
                                type: object
                                required:
                                  - size
                                  - url
                                properties:
                                  size:
                                    type: integer
                                    minimum: 16
                                  url:
                                    type: string
                                    format: uri-reference
                                additionalProperties: false
                            tags:
                              type: array
                              items:
                                type: string
                                minLength: 1
                                maxLength: 64
                              uniqueItems: true
                            usedBy:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              description: ids of shows referencing the asset
                            revision:
                              description: >-
                                Monotonic resource revision; the strong ETag is
                                derived from it.
                              type: integer
                              minimum: 0
                            createdAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                          allOf:
                            - if:
                                properties:
                                  status:
                                    const: failed
                                required:
                                  - status
                              then:
                                required:
                                  - problem
                      $defs:
                        asset:
                          type: object
                          required:
                            - id
                            - name
                            - type
                            - status
                            - revision
                            - createdAt
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            name:
                              type: string
                              minLength: 1
                              maxLength: 512
                              description: original file name (with extension) or a title
                            type:
                              anyOf:
                                - enum:
                                    - video
                                    - image
                                    - audio
                                    - zelim
                                    - boranko
                                    - comics
                                    - realtime
                                    - stream
                                    - dome
                                    - other
                                - type: string
                                  pattern: ^[a-z][a-z0-9._-]{0,63}$
                            src:
                              type: string
                              description: >-
                                external URI for registered (not stored) assets;
                                absent for stored blobs. Type stream: also
                                spout://<sender>, syphon://<app>/<server>,
                                dmabuf://<pipewire-node>, v4l2:///dev/<device>,
                                ndi://<source> (percent-encoded,
                                docs/audio-reactive.md)
                            texture:
                              description: >-
                                Stream asset fed by another application on the
                                engine's machine (derived by the server from
                                `src`, read-only).
                              type: object
                              required:
                                - transport
                                - sender
                              properties:
                                transport:
                                  description: >-
                                    Shared GPU texture or spare network
                                    transport of a live source. Open list.
                                  anyOf:
                                    - enum:
                                        - spout
                                        - syphon
                                        - dmabuf
                                        - capture
                                        - ndi
                                    - type: string
                                      pattern: ^[a-z][a-z0-9_-]{0,31}$
                                sender:
                                  type: string
                                  minLength: 1
                                  maxLength: 256
                                  description: >-
                                    Spout sender, Syphon server, PipeWire node,
                                    capture device or NDI source name
                                application:
                                  type: string
                                  maxLength: 256
                                  description: Syphon application name
                                fallbackUrl:
                                  type: string
                                  format: uri
                              additionalProperties: false
                            mediaType:
                              description: IANA media type.
                              type: string
                              pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                            sha256:
                              description: Lowercase hex SHA-256 digest.
                              type: string
                              pattern: ^[0-9a-f]{64}$
                            size:
                              type: integer
                              minimum: 0
                            status:
                              anyOf:
                                - enum:
                                    - uploading
                                    - processing
                                    - ready
                                    - failed
                                - type: string
                                  pattern: ^[a-z_]{1,32}$
                            problem:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). RFC 9457 problem details with the
                                Freedome `code` catalogue, 02e §3.3. Also the
                                `data` of WS `error`, the socket.io ack error
                                and GraphQL errors[].extensions.problem. The
                                catalogue is open: unknown codes are allowed;
                                known codes are bound to their HTTP status.
                              title: Problem details
                              type: object
                              required:
                                - type
                                - title
                                - code
                              properties:
                                type:
                                  type: string
                                  format: uri
                                  description: >-
                                    https://freedome.nativemind.us/problems/<code>
                                    for catalogue codes.
                                title:
                                  type: string
                                  minLength: 1
                                status:
                                  type: integer
                                  minimum: 100
                                  maximum: 599
                                detail:
                                  type: string
                                instance:
                                  type: string
                                  format: uri-reference
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                traceId:
                                  type: string
                                  pattern: ^[0-9a-f]{16,32}$
                                errors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              allOf:
                                - if:
                                    properties:
                                      code:
                                        const: validation-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: not-found
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 404
                                - if:
                                    properties:
                                      code:
                                        const: conflict
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: precondition-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 412
                                - if:
                                    properties:
                                      code:
                                        const: precondition-required
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 428
                                - if:
                                    properties:
                                      code:
                                        const: unauthenticated
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: forbidden
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: rate-limited
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 429
                                - if:
                                    properties:
                                      code:
                                        const: payload-too-large
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 413
                                - if:
                                    properties:
                                      code:
                                        const: unsupported-format
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 415
                                - if:
                                    properties:
                                      code:
                                        const: engine-unavailable
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: engine-incompatible
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: degraded
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: upload-checksum-mismatch
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: legacy-unsupported
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 501
                                - if:
                                    properties:
                                      code:
                                        const: internal
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 500
                                - if:
                                    properties:
                                      code:
                                        const: clock-unlocked
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: not-configured
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: authorization-pending
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: slow-down
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: access-denied
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: expired-token
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: token-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-key-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-in-progress
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                              additionalProperties: true
                              examples:
                                - type: >-
                                    https://freedome.nativemind.us/problems/engine-unavailable
                                  title: Visual engine unavailable
                                  status: 503
                                  detail: >-
                                    freedome-engined not reachable at
                                    unix:/run/freedome/engine.sock
                                  instance: /api/v1/venues/default/players/main/play
                                  code: engine-unavailable
                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                              $defs:
                                knownCode:
                                  enum:
                                    - validation-failed
                                    - not-found
                                    - conflict
                                    - precondition-failed
                                    - precondition-required
                                    - unauthenticated
                                    - forbidden
                                    - rate-limited
                                    - payload-too-large
                                    - unsupported-format
                                    - engine-unavailable
                                    - engine-incompatible
                                    - degraded
                                    - job-failed
                                    - upload-checksum-mismatch
                                    - legacy-unsupported
                                    - internal
                                    - clock-unlocked
                                    - not-configured
                                    - authorization-pending
                                    - slow-down
                                    - access-denied
                                    - expired-token
                                    - token-reused
                                    - idempotency-key-reused
                                    - idempotency-in-progress
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                fieldError:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                              description: >-
                                why the asset failed (e.g.
                                upload-checksum-mismatch)
                            progress:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            mapping:
                              description: >-
                                Content mapping onto the dome (01b §4.5, 02b
                                §4.4).
                              type: object
                              required:
                                - projection
                              properties:
                                projection:
                                  anyOf:
                                    - enum:
                                        - domemaster
                                        - equirect
                                        - cubemap
                                        - flat
                                        - pyramid_views
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                fov:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: ° (domemaster 180–230)
                                tilt:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                azimuth:
                                  type: number
                                  minimum: -360
                                  maximum: 360
                                  description: 'flat: ° centre azimuth'
                                elevation:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                  description: 'flat: ° centre elevation'
                                width:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: 'flat: ° angular width'
                                faces:
                                  enum:
                                    - 3
                                    - 4
                                    - 6
                                  description: '1.1 pyramid_views: number of views'
                                layout:
                                  description: >-
                                    1.1: cubemap 3x2 | 6x1 | cross;
                                    pyramid_views cross | row | grid
                                  anyOf:
                                    - enum:
                                        - 3x2
                                        - 6x1
                                        - cross
                                        - row
                                        - grid
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                              if:
                                properties:
                                  projection:
                                    const: pyramid_views
                                required:
                                  - projection
                              then:
                                required:
                                  - faces
                            media:
                              description: >-
                                Probe result (ffprobe): container, streams,
                                duration. `probeUnavailable` when the server has
                                no prober (asset still ready).
                              type: object
                              properties:
                                container:
                                  type: string
                                duration:
                                  description: Duration in seconds.
                                  type: number
                                  minimum: 0
                                video:
                                  type: object
                                  properties:
                                    codec:
                                      type: string
                                    resolution:
                                      type: array
                                      items:
                                        type: integer
                                        minimum: 1
                                      minItems: 2
                                      maxItems: 2
                                    fps:
                                      type: number
                                      exclusiveMinimum: 0
                                    bitDepth:
                                      type: integer
                                      minimum: 1
                                    pixelFormat:
                                      type: string
                                  additionalProperties: true
                                audio:
                                  type: object
                                  properties:
                                    codec:
                                      type: string
                                    channels:
                                      type: integer
                                      minimum: 1
                                    layout:
                                      type: string
                                    sampleRate:
                                      type: integer
                                      minimum: 1
                                    ambisonicOrder:
                                      type: integer
                                      minimum: 0
                                      maximum: 7
                                  additionalProperties: true
                                probeUnavailable:
                                  type: boolean
                              additionalProperties: true
                            thumbnails:
                              type: array
                              items:
                                type: object
                                required:
                                  - size
                                  - url
                                properties:
                                  size:
                                    type: integer
                                    minimum: 16
                                  url:
                                    type: string
                                    format: uri-reference
                                additionalProperties: false
                            tags:
                              type: array
                              items:
                                type: string
                                minLength: 1
                                maxLength: 64
                              uniqueItems: true
                            usedBy:
                              type: array
                              items:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              description: ids of shows referencing the asset
                            revision:
                              description: >-
                                Monotonic resource revision; the strong ETag is
                                derived from it.
                              type: integer
                              minimum: 0
                            createdAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            updatedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                          allOf:
                            - if:
                                properties:
                                  status:
                                    const: failed
                                required:
                                  - status
                              then:
                                required:
                                  - problem
                        textureTransport:
                          description: >-
                            Shared GPU texture or spare network transport of a
                            live source. Open list.
                          anyOf:
                            - enum:
                                - spout
                                - syphon
                                - dmabuf
                                - capture
                                - ndi
                            - type: string
                              pattern: ^[a-z][a-z0-9_-]{0,31}$
                        texture:
                          description: >-
                            Stream asset fed by another application on the
                            engine's machine (derived by the server from `src`,
                            read-only).
                          type: object
                          required:
                            - transport
                            - sender
                          properties:
                            transport:
                              description: >-
                                Shared GPU texture or spare network transport of
                                a live source. Open list.
                              anyOf:
                                - enum:
                                    - spout
                                    - syphon
                                    - dmabuf
                                    - capture
                                    - ndi
                                - type: string
                                  pattern: ^[a-z][a-z0-9_-]{0,31}$
                            sender:
                              type: string
                              minLength: 1
                              maxLength: 256
                              description: >-
                                Spout sender, Syphon server, PipeWire node,
                                capture device or NDI source name
                            application:
                              type: string
                              maxLength: 256
                              description: Syphon application name
                            fallbackUrl:
                              type: string
                              format: uri
                          additionalProperties: false
                        textureSource:
                          description: >-
                            A live source seen by the engine (GET
                            /venues/{venueId}/texture-sources, event
                            textureSource.state).
                          type: object
                          required:
                            - id
                            - transport
                            - sender
                            - status
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            transport:
                              description: >-
                                Shared GPU texture or spare network transport of
                                a live source. Open list.
                              anyOf:
                                - enum:
                                    - spout
                                    - syphon
                                    - dmabuf
                                    - capture
                                    - ndi
                                - type: string
                                  pattern: ^[a-z][a-z0-9_-]{0,31}$
                            sender:
                              type: string
                              minLength: 1
                              maxLength: 256
                            application:
                              type: string
                              maxLength: 256
                            status:
                              anyOf:
                                - enum:
                                    - online
                                    - offline
                                - type: string
                                  pattern: ^[a-z][a-z_-]{0,31}$
                            width:
                              type: integer
                              minimum: 1
                            height:
                              type: integer
                              minimum: 1
                            fps:
                              type: number
                              minimum: 0
                              description: frames per second measured by the engine
                            pixelFormat:
                              type: string
                              maxLength: 32
                            assetId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            node:
                              type: string
                              maxLength: 64
                              description: node whose engine sees the source
                            lastSeen:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        textureSourcePage:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                description: >-
                                  A live source seen by the engine (GET
                                  /venues/{venueId}/texture-sources, event
                                  textureSource.state).
                                type: object
                                required:
                                  - id
                                  - transport
                                  - sender
                                  - status
                                properties:
                                  id:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  transport:
                                    description: >-
                                      Shared GPU texture or spare network
                                      transport of a live source. Open list.
                                    anyOf:
                                      - enum:
                                          - spout
                                          - syphon
                                          - dmabuf
                                          - capture
                                          - ndi
                                      - type: string
                                        pattern: ^[a-z][a-z0-9_-]{0,31}$
                                  sender:
                                    type: string
                                    minLength: 1
                                    maxLength: 256
                                  application:
                                    type: string
                                    maxLength: 256
                                  status:
                                    anyOf:
                                      - enum:
                                          - online
                                          - offline
                                      - type: string
                                        pattern: ^[a-z][a-z_-]{0,31}$
                                  width:
                                    type: integer
                                    minimum: 1
                                  height:
                                    type: integer
                                    minimum: 1
                                  fps:
                                    type: number
                                    minimum: 0
                                    description: frames per second measured by the engine
                                  pixelFormat:
                                    type: string
                                    maxLength: 32
                                  assetId:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  node:
                                    type: string
                                    maxLength: 64
                                    description: node whose engine sees the source
                                  lastSeen:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                          additionalProperties: false
                        type:
                          anyOf:
                            - enum:
                                - video
                                - image
                                - audio
                                - zelim
                                - boranko
                                - comics
                                - realtime
                                - stream
                                - dome
                                - other
                            - type: string
                              pattern: ^[a-z][a-z0-9._-]{0,63}$
                        status:
                          anyOf:
                            - enum:
                                - uploading
                                - processing
                                - ready
                                - failed
                            - type: string
                              pattern: ^[a-z_]{1,32}$
                        media:
                          description: >-
                            Probe result (ffprobe): container, streams,
                            duration. `probeUnavailable` when the server has no
                            prober (asset still ready).
                          type: object
                          properties:
                            container:
                              type: string
                            duration:
                              description: Duration in seconds.
                              type: number
                              minimum: 0
                            video:
                              type: object
                              properties:
                                codec:
                                  type: string
                                resolution:
                                  type: array
                                  items:
                                    type: integer
                                    minimum: 1
                                  minItems: 2
                                  maxItems: 2
                                fps:
                                  type: number
                                  exclusiveMinimum: 0
                                bitDepth:
                                  type: integer
                                  minimum: 1
                                pixelFormat:
                                  type: string
                              additionalProperties: true
                            audio:
                              type: object
                              properties:
                                codec:
                                  type: string
                                channels:
                                  type: integer
                                  minimum: 1
                                layout:
                                  type: string
                                sampleRate:
                                  type: integer
                                  minimum: 1
                                ambisonicOrder:
                                  type: integer
                                  minimum: 0
                                  maximum: 7
                              additionalProperties: true
                            probeUnavailable:
                              type: boolean
                          additionalProperties: true
                        input:
                          description: >-
                            POST /assets JSON body: register a finished tus
                            upload or an external URL (streams, CDN).
                          type: object
                          properties:
                            uploadId:
                              description: >-
                                Server-owned resource id: UUIDv7, lowercase,
                                sortable by creation time.
                              type: string
                              pattern: >-
                                ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                              examples:
                                - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                            url:
                              type: string
                              format: uri
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            name:
                              type: string
                              minLength: 1
                              maxLength: 512
                            type:
                              anyOf:
                                - enum:
                                    - video
                                    - image
                                    - audio
                                    - zelim
                                    - boranko
                                    - comics
                                    - realtime
                                    - stream
                                    - dome
                                    - other
                                - type: string
                                  pattern: ^[a-z][a-z0-9._-]{0,63}$
                            mapping:
                              description: >-
                                Content mapping onto the dome (01b §4.5, 02b
                                §4.4).
                              type: object
                              required:
                                - projection
                              properties:
                                projection:
                                  anyOf:
                                    - enum:
                                        - domemaster
                                        - equirect
                                        - cubemap
                                        - flat
                                        - pyramid_views
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                fov:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: ° (domemaster 180–230)
                                tilt:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                azimuth:
                                  type: number
                                  minimum: -360
                                  maximum: 360
                                  description: 'flat: ° centre azimuth'
                                elevation:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                  description: 'flat: ° centre elevation'
                                width:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: 'flat: ° angular width'
                                faces:
                                  enum:
                                    - 3
                                    - 4
                                    - 6
                                  description: '1.1 pyramid_views: number of views'
                                layout:
                                  description: >-
                                    1.1: cubemap 3x2 | 6x1 | cross;
                                    pyramid_views cross | row | grid
                                  anyOf:
                                    - enum:
                                        - 3x2
                                        - 6x1
                                        - cross
                                        - row
                                        - grid
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                              if:
                                properties:
                                  projection:
                                    const: pyramid_views
                                required:
                                  - projection
                              then:
                                required:
                                  - faces
                            tags:
                              type: array
                              items:
                                type: string
                                minLength: 1
                                maxLength: 64
                              uniqueItems: true
                            sha256:
                              description: Lowercase hex SHA-256 digest.
                              type: string
                              pattern: ^[0-9a-f]{64}$
                            fallbackUrl:
                              type: string
                              format: uri
                              description: >-
                                stream assets: source to use while `url` is
                                unavailable, e.g. ndi://…
                          additionalProperties: false
                          oneOf:
                            - required:
                                - uploadId
                            - required:
                                - url
                        multipart:
                          description: >-
                            POST /assets multipart/form-data body (simple upload
                            ≤ 100 MB): part `file` + optional JSON fields.
                          type: object
                          required:
                            - file
                          properties:
                            file:
                              type: string
                              contentMediaType: application/octet-stream
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            type:
                              anyOf:
                                - enum:
                                    - video
                                    - image
                                    - audio
                                    - zelim
                                    - boranko
                                    - comics
                                    - realtime
                                    - stream
                                    - dome
                                    - other
                                - type: string
                                  pattern: ^[a-z][a-z0-9._-]{0,63}$
                            tags:
                              type: string
                              description: comma-separated
                        patch:
                          type: object
                          minProperties: 1
                          properties:
                            name:
                              type: string
                              minLength: 1
                              maxLength: 512
                            type:
                              anyOf:
                                - enum:
                                    - video
                                    - image
                                    - audio
                                    - zelim
                                    - boranko
                                    - comics
                                    - realtime
                                    - stream
                                    - dome
                                    - other
                                - type: string
                                  pattern: ^[a-z][a-z0-9._-]{0,63}$
                            mapping:
                              description: >-
                                Content mapping onto the dome (01b §4.5, 02b
                                §4.4).
                              type: object
                              required:
                                - projection
                              properties:
                                projection:
                                  anyOf:
                                    - enum:
                                        - domemaster
                                        - equirect
                                        - cubemap
                                        - flat
                                        - pyramid_views
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                fov:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: ° (domemaster 180–230)
                                tilt:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                azimuth:
                                  type: number
                                  minimum: -360
                                  maximum: 360
                                  description: 'flat: ° centre azimuth'
                                elevation:
                                  type: number
                                  minimum: -90
                                  maximum: 90
                                  description: 'flat: ° centre elevation'
                                width:
                                  type: number
                                  exclusiveMinimum: 0
                                  maximum: 360
                                  description: 'flat: ° angular width'
                                faces:
                                  enum:
                                    - 3
                                    - 4
                                    - 6
                                  description: '1.1 pyramid_views: number of views'
                                layout:
                                  description: >-
                                    1.1: cubemap 3x2 | 6x1 | cross;
                                    pyramid_views cross | row | grid
                                  anyOf:
                                    - enum:
                                        - 3x2
                                        - 6x1
                                        - cross
                                        - row
                                        - grid
                                    - description: >-
                                        Value of an open enum: one of the listed
                                        values or any other token (clients
                                        tolerate unknown values).
                                      type: string
                                      pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                              patternProperties:
                                ^x-: true
                              additionalProperties: false
                              if:
                                properties:
                                  projection:
                                    const: pyramid_views
                                required:
                                  - projection
                              then:
                                required:
                                  - faces
                            tags:
                              type: array
                              items:
                                type: string
                                minLength: 1
                                maxLength: 64
                              uniqueItems: true
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        page:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                type: object
                                required:
                                  - id
                                  - name
                                  - type
                                  - status
                                  - revision
                                  - createdAt
                                properties:
                                  id:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  name:
                                    type: string
                                    minLength: 1
                                    maxLength: 512
                                    description: >-
                                      original file name (with extension) or a
                                      title
                                  type:
                                    anyOf:
                                      - enum:
                                          - video
                                          - image
                                          - audio
                                          - zelim
                                          - boranko
                                          - comics
                                          - realtime
                                          - stream
                                          - dome
                                          - other
                                      - type: string
                                        pattern: ^[a-z][a-z0-9._-]{0,63}$
                                  src:
                                    type: string
                                    description: >-
                                      external URI for registered (not stored)
                                      assets; absent for stored blobs. Type
                                      stream: also spout://<sender>,
                                      syphon://<app>/<server>,
                                      dmabuf://<pipewire-node>,
                                      v4l2:///dev/<device>, ndi://<source>
                                      (percent-encoded, docs/audio-reactive.md)
                                  texture:
                                    description: >-
                                      Stream asset fed by another application on
                                      the engine's machine (derived by the
                                      server from `src`, read-only).
                                    type: object
                                    required:
                                      - transport
                                      - sender
                                    properties:
                                      transport:
                                        description: >-
                                          Shared GPU texture or spare network
                                          transport of a live source. Open list.
                                        anyOf:
                                          - enum:
                                              - spout
                                              - syphon
                                              - dmabuf
                                              - capture
                                              - ndi
                                          - type: string
                                            pattern: ^[a-z][a-z0-9_-]{0,31}$
                                      sender:
                                        type: string
                                        minLength: 1
                                        maxLength: 256
                                        description: >-
                                          Spout sender, Syphon server, PipeWire
                                          node, capture device or NDI source name
                                      application:
                                        type: string
                                        maxLength: 256
                                        description: Syphon application name
                                      fallbackUrl:
                                        type: string
                                        format: uri
                                    additionalProperties: false
                                  mediaType:
                                    description: IANA media type.
                                    type: string
                                    pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                                  sha256:
                                    description: Lowercase hex SHA-256 digest.
                                    type: string
                                    pattern: ^[0-9a-f]{64}$
                                  size:
                                    type: integer
                                    minimum: 0
                                  status:
                                    anyOf:
                                      - enum:
                                          - uploading
                                          - processing
                                          - ready
                                          - failed
                                      - type: string
                                        pattern: ^[a-z_]{1,32}$
                                  problem:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                    description: >-
                                      why the asset failed (e.g.
                                      upload-checksum-mismatch)
                                  progress:
                                    description: >-
                                      0..1 (brightness, linear volume gain,
                                      progress).
                                    type: number
                                    minimum: 0
                                    maximum: 1
                                  mapping:
                                    description: >-
                                      Content mapping onto the dome (01b §4.5,
                                      02b §4.4).
                                    type: object
                                    required:
                                      - projection
                                    properties:
                                      projection:
                                        anyOf:
                                          - enum:
                                              - domemaster
                                              - equirect
                                              - cubemap
                                              - flat
                                              - pyramid_views
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                      fov:
                                        type: number
                                        exclusiveMinimum: 0
                                        maximum: 360
                                        description: ° (domemaster 180–230)
                                      tilt:
                                        type: number
                                        minimum: -90
                                        maximum: 90
                                      azimuth:
                                        type: number
                                        minimum: -360
                                        maximum: 360
                                        description: 'flat: ° centre azimuth'
                                      elevation:
                                        type: number
                                        minimum: -90
                                        maximum: 90
                                        description: 'flat: ° centre elevation'
                                      width:
                                        type: number
                                        exclusiveMinimum: 0
                                        maximum: 360
                                        description: 'flat: ° angular width'
                                      faces:
                                        enum:
                                          - 3
                                          - 4
                                          - 6
                                        description: '1.1 pyramid_views: number of views'
                                      layout:
                                        description: >-
                                          1.1: cubemap 3x2 | 6x1 | cross;
                                          pyramid_views cross | row | grid
                                        anyOf:
                                          - enum:
                                              - 3x2
                                              - 6x1
                                              - cross
                                              - row
                                              - grid
                                          - description: >-
                                              Value of an open enum: one of the listed
                                              values or any other token (clients
                                              tolerate unknown values).
                                            type: string
                                            pattern: ^[A-Za-z0-9][A-Za-z0-9._:+-]{0,63}$
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                    if:
                                      properties:
                                        projection:
                                          const: pyramid_views
                                      required:
                                        - projection
                                    then:
                                      required:
                                        - faces
                                  media:
                                    description: >-
                                      Probe result (ffprobe): container,
                                      streams, duration. `probeUnavailable` when
                                      the server has no prober (asset still
                                      ready).
                                    type: object
                                    properties:
                                      container:
                                        type: string
                                      duration:
                                        description: Duration in seconds.
                                        type: number
                                        minimum: 0
                                      video:
                                        type: object
                                        properties:
                                          codec:
                                            type: string
                                          resolution:
                                            type: array
                                            items:
                                              type: integer
                                              minimum: 1
                                            minItems: 2
                                            maxItems: 2
                                          fps:
                                            type: number
                                            exclusiveMinimum: 0
                                          bitDepth:
                                            type: integer
                                            minimum: 1
                                          pixelFormat:
                                            type: string
                                        additionalProperties: true
                                      audio:
                                        type: object
                                        properties:
                                          codec:
                                            type: string
                                          channels:
                                            type: integer
                                            minimum: 1
                                          layout:
                                            type: string
                                          sampleRate:
                                            type: integer
                                            minimum: 1
                                          ambisonicOrder:
                                            type: integer
                                            minimum: 0
                                            maximum: 7
                                        additionalProperties: true
                                      probeUnavailable:
                                        type: boolean
                                    additionalProperties: true
                                  thumbnails:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - size
                                        - url
                                      properties:
                                        size:
                                          type: integer
                                          minimum: 16
                                        url:
                                          type: string
                                          format: uri-reference
                                      additionalProperties: false
                                  tags:
                                    type: array
                                    items:
                                      type: string
                                      minLength: 1
                                      maxLength: 64
                                    uniqueItems: true
                                  usedBy:
                                    type: array
                                    items:
                                      description: >-
                                        Document-scoped id (.dome displays[].id,
                                        assets[].id, playlist / cue ids); unique
                                        within its parent.
                                      type: string
                                      pattern: ^[A-Za-z0-9._-]{1,64}$
                                      examples:
                                        - p1
                                        - intro.mp4
                                        - cue-01
                                    description: ids of shows referencing the asset
                                  revision:
                                    description: >-
                                      Monotonic resource revision; the strong
                                      ETag is derived from it.
                                    type: integer
                                    minimum: 0
                                  createdAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  updatedAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                allOf:
                                  - if:
                                      properties:
                                        status:
                                          const: failed
                                      required:
                                        - status
                                    then:
                                      required:
                                        - problem
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                            count:
                              type: integer
                              minimum: 0
                          additionalProperties: false
                        storage:
                          description: GET /storage (replaces /api/v1/content/stats).
                          type: object
                          required:
                            - totalBytes
                            - usedBytes
                            - freeBytes
                          properties:
                            totalBytes:
                              type: integer
                              minimum: 0
                            usedBytes:
                              type: integer
                              minimum: 0
                            freeBytes:
                              type: integer
                              minimum: 0
                            quotaBytes:
                              anyOf:
                                - type: integer
                                  minimum: 0
                                - type: 'null'
                            assets:
                              type: object
                              required:
                                - count
                                - bytes
                              properties:
                                count:
                                  type: integer
                                  minimum: 0
                                bytes:
                                  type: integer
                                  minimum: 0
                              additionalProperties: false
                            uploads:
                              type: object
                              required:
                                - count
                                - bytes
                              properties:
                                count:
                                  type: integer
                                  minimum: 0
                                bytes:
                                  type: integer
                                  minimum: 0
                              additionalProperties: false
                            byType:
                              type: object
                              additionalProperties:
                                type: object
                                required:
                                  - count
                                  - bytes
                                properties:
                                  count:
                                    type: integer
                                    minimum: 0
                                  bytes:
                                    type: integer
                                    minimum: 0
                                additionalProperties: false
                          additionalProperties: false
                        countBytes:
                          type: object
                          required:
                            - count
                            - bytes
                          properties:
                            count:
                              type: integer
                              minimum: 0
                            bytes:
                              type: integer
                              minimum: 0
                          additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: asset.deleted
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      type: object
                      required:
                        - id
                      properties:
                        id:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: upload.progress
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/api/1.0/upload.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). tus
                        1.0.0 upload (02e §5.4, C12): JSON status of GET
                        /uploads/{uploadId} for non-tus clients; the decoded
                        Upload-Metadata. Root = upload status.
                      title: Upload
                      type: object
                      required:
                        - id
                        - length
                        - offset
                        - status
                        - metadata
                        - createdAt
                      properties:
                        id:
                          description: >-
                            Server-owned resource id: UUIDv7, lowercase,
                            sortable by creation time.
                          type: string
                          pattern: >-
                            ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                          examples:
                            - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                        length:
                          type: integer
                          minimum: 0
                          description: Upload-Length
                        offset:
                          type: integer
                          minimum: 0
                          description: Upload-Offset (bytes received and persisted)
                        status:
                          anyOf:
                            - enum:
                                - uploading
                                - complete
                                - failed
                                - expired
                            - type: string
                              pattern: ^[a-z_]{1,32}$
                        metadata:
                          description: >-
                            Upload-Metadata (tus: comma-separated `key
                            base64(value)` pairs), decoded.
                          type: object
                          required:
                            - filename
                            - purpose
                          properties:
                            filename:
                              type: string
                              minLength: 1
                              maxLength: 512
                            contentType:
                              description: IANA media type.
                              type: string
                              pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                            sha256:
                              description: Lowercase hex SHA-256 digest.
                              type: string
                              pattern: ^[0-9a-f]{64}$
                            purpose:
                              anyOf:
                                - enum:
                                    - asset
                                    - import
                                    - restore
                                    - capture
                                    - update
                                - type: string
                                  pattern: ^[a-z][a-z0-9_-]{0,31}$
                            assetId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                          additionalProperties: true
                        assetId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        problem:
                          $schema: https://json-schema.org/draft/2020-12/schema
                          $id: >-
                            https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                          $comment: >-
                            NativeMindNONC — freedome_contract (see LICENSE).
                            RFC 9457 problem details with the Freedome `code`
                            catalogue, 02e §3.3. Also the `data` of WS `error`,
                            the socket.io ack error and GraphQL
                            errors[].extensions.problem. The catalogue is open:
                            unknown codes are allowed; known codes are bound to
                            their HTTP status.
                          title: Problem details
                          type: object
                          required:
                            - type
                            - title
                            - code
                          properties:
                            type:
                              type: string
                              format: uri
                              description: >-
                                https://freedome.nativemind.us/problems/<code>
                                for catalogue codes.
                            title:
                              type: string
                              minLength: 1
                            status:
                              type: integer
                              minimum: 100
                              maximum: 599
                            detail:
                              type: string
                            instance:
                              type: string
                              format: uri-reference
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            traceId:
                              type: string
                              pattern: ^[0-9a-f]{16,32}$
                            errors:
                              type: array
                              items:
                                type: object
                                required:
                                  - pointer
                                  - detail
                                properties:
                                  pointer:
                                    type: string
                                    format: json-pointer
                                  detail:
                                    type: string
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                additionalProperties: true
                          allOf:
                            - if:
                                properties:
                                  code:
                                    const: validation-failed
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 422
                            - if:
                                properties:
                                  code:
                                    const: not-found
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 404
                            - if:
                                properties:
                                  code:
                                    const: conflict
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 409
                            - if:
                                properties:
                                  code:
                                    const: precondition-failed
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 412
                            - if:
                                properties:
                                  code:
                                    const: precondition-required
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 428
                            - if:
                                properties:
                                  code:
                                    const: unauthenticated
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 401
                            - if:
                                properties:
                                  code:
                                    const: forbidden
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 403
                            - if:
                                properties:
                                  code:
                                    const: rate-limited
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 429
                            - if:
                                properties:
                                  code:
                                    const: payload-too-large
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 413
                            - if:
                                properties:
                                  code:
                                    const: unsupported-format
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 415
                            - if:
                                properties:
                                  code:
                                    const: engine-unavailable
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 503
                            - if:
                                properties:
                                  code:
                                    const: engine-incompatible
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 503
                            - if:
                                properties:
                                  code:
                                    const: degraded
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 503
                            - if:
                                properties:
                                  code:
                                    const: upload-checksum-mismatch
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 422
                            - if:
                                properties:
                                  code:
                                    const: legacy-unsupported
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 501
                            - if:
                                properties:
                                  code:
                                    const: internal
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 500
                            - if:
                                properties:
                                  code:
                                    const: clock-unlocked
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 409
                            - if:
                                properties:
                                  code:
                                    const: not-configured
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 503
                            - if:
                                properties:
                                  code:
                                    const: authorization-pending
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 400
                            - if:
                                properties:
                                  code:
                                    const: slow-down
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 400
                            - if:
                                properties:
                                  code:
                                    const: access-denied
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 403
                            - if:
                                properties:
                                  code:
                                    const: expired-token
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 400
                            - if:
                                properties:
                                  code:
                                    const: token-reused
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 401
                            - if:
                                properties:
                                  code:
                                    const: idempotency-key-reused
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 409
                            - if:
                                properties:
                                  code:
                                    const: idempotency-in-progress
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 409
                          additionalProperties: true
                          examples:
                            - type: >-
                                https://freedome.nativemind.us/problems/engine-unavailable
                              title: Visual engine unavailable
                              status: 503
                              detail: >-
                                freedome-engined not reachable at
                                unix:/run/freedome/engine.sock
                              instance: /api/v1/venues/default/players/main/play
                              code: engine-unavailable
                              traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                          $defs:
                            knownCode:
                              enum:
                                - validation-failed
                                - not-found
                                - conflict
                                - precondition-failed
                                - precondition-required
                                - unauthenticated
                                - forbidden
                                - rate-limited
                                - payload-too-large
                                - unsupported-format
                                - engine-unavailable
                                - engine-incompatible
                                - degraded
                                - job-failed
                                - upload-checksum-mismatch
                                - legacy-unsupported
                                - internal
                                - clock-unlocked
                                - not-configured
                                - authorization-pending
                                - slow-down
                                - access-denied
                                - expired-token
                                - token-reused
                                - idempotency-key-reused
                                - idempotency-in-progress
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            fieldError:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        expiresAt:
                          description: >-
                            RFC 3339 UTC with milliseconds, e.g.
                            2026-10-19T12:00:00.000Z.
                          type: string
                          format: date-time
                          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                        createdAt:
                          description: >-
                            RFC 3339 UTC with milliseconds, e.g.
                            2026-10-19T12:00:00.000Z.
                          type: string
                          format: date-time
                          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                        links:
                          type: object
                          properties:
                            self:
                              type: string
                              format: uri-reference
                            asset:
                              type: string
                              format: uri-reference
                          additionalProperties: false
                      additionalProperties: false
                      $defs:
                        metadata:
                          description: >-
                            Upload-Metadata (tus: comma-separated `key
                            base64(value)` pairs), decoded.
                          type: object
                          required:
                            - filename
                            - purpose
                          properties:
                            filename:
                              type: string
                              minLength: 1
                              maxLength: 512
                            contentType:
                              description: IANA media type.
                              type: string
                              pattern: ^[a-z]+/[A-Za-z0-9.+-]+$
                            sha256:
                              description: Lowercase hex SHA-256 digest.
                              type: string
                              pattern: ^[0-9a-f]{64}$
                            purpose:
                              anyOf:
                                - enum:
                                    - asset
                                    - import
                                    - restore
                                    - capture
                                    - update
                                - type: string
                                  pattern: ^[a-z][a-z0-9_-]{0,31}$
                            assetId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                          additionalProperties: true
                        capabilities:
                          description: >-
                            Informative mirror of the OPTIONS /uploads headers
                            (Tus-Version, Tus-Extension, Tus-Max-Size,
                            Tus-Checksum-Algorithm).
                          type: object
                          required:
                            - version
                            - extensions
                          properties:
                            version:
                              type: array
                              items:
                                type: string
                            extensions:
                              type: array
                              items:
                                anyOf:
                                  - enum:
                                      - creation
                                      - creation-with-upload
                                      - termination
                                      - checksum
                                      - expiration
                                  - type: string
                            maxSize:
                              type: integer
                              minimum: 0
                            checksumAlgorithms:
                              type: array
                              items:
                                type: string
                            maxChunkBytes:
                              type: integer
                              minimum: 1
                              description: >-
                                server-recommended PATCH size (≤ 95 MB behind
                                Cloudflare)
                          additionalProperties: false
                    patch:
                      type: object
                      required:
                        - offset
                      properties:
                        offset:
                          type: integer
                          minimum: 0
                        length:
                          type: integer
                          minimum: 0
                        status:
                          type: string
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: gateway.state
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/api/1.0/gateway.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE).
                        Compatibility gateways (inbound emulators, outbound
                        drivers, 02d) and the OSC send integration (02e §5.6).
                        Root = GET /gateways/{gatewayId}.
                      title: Gateway
                      allOf:
                        - type: object
                          required:
                            - id
                            - direction
                            - protocol
                            - enabled
                            - status
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            name:
                              type: string
                            direction:
                              enum:
                                - inbound
                                - outbound
                                - converter
                            protocol:
                              type: string
                              description: >-
                                e.g. screenberry-json, dome360-http, watchout,
                                resolume, osc, pjlink, artnet
                            vendor:
                              type: string
                            enabled:
                              type: boolean
                            status:
                              anyOf:
                                - enum:
                                    - disabled
                                    - starting
                                    - up
                                    - degraded
                                    - down
                                - type: string
                                  pattern: ^[a-z][a-z_-]{0,31}$
                            docsOnly:
                              type: boolean
                              description: >-
                                implemented from public docs, no recorded
                                fixtures from a real system yet
                            listeners:
                              type: array
                              items:
                                type: object
                                required:
                                  - transport
                                  - port
                                properties:
                                  transport:
                                    enum:
                                      - http
                                      - tcp
                                      - udp
                                      - osc
                                      - ws
                                      - socketio
                                      - serial
                                  port:
                                    type: integer
                                    minimum: 0
                                    maximum: 65535
                                  bind:
                                    type: string
                                additionalProperties: false
                            peers:
                              type: array
                              items:
                                type: object
                                properties:
                                  address:
                                    type: string
                                  lastSeen:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                additionalProperties: false
                            config:
                              type: object
                              additionalProperties: true
                              description: gateway-specific; secrets redacted as "***"
                            allowCidrs:
                              type: array
                              items:
                                type: string
                            problem:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). RFC 9457 problem details with the
                                Freedome `code` catalogue, 02e §3.3. Also the
                                `data` of WS `error`, the socket.io ack error
                                and GraphQL errors[].extensions.problem. The
                                catalogue is open: unknown codes are allowed;
                                known codes are bound to their HTTP status.
                              title: Problem details
                              type: object
                              required:
                                - type
                                - title
                                - code
                              properties:
                                type:
                                  type: string
                                  format: uri
                                  description: >-
                                    https://freedome.nativemind.us/problems/<code>
                                    for catalogue codes.
                                title:
                                  type: string
                                  minLength: 1
                                status:
                                  type: integer
                                  minimum: 100
                                  maximum: 599
                                detail:
                                  type: string
                                instance:
                                  type: string
                                  format: uri-reference
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                traceId:
                                  type: string
                                  pattern: ^[0-9a-f]{16,32}$
                                errors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              allOf:
                                - if:
                                    properties:
                                      code:
                                        const: validation-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: not-found
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 404
                                - if:
                                    properties:
                                      code:
                                        const: conflict
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: precondition-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 412
                                - if:
                                    properties:
                                      code:
                                        const: precondition-required
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 428
                                - if:
                                    properties:
                                      code:
                                        const: unauthenticated
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: forbidden
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: rate-limited
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 429
                                - if:
                                    properties:
                                      code:
                                        const: payload-too-large
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 413
                                - if:
                                    properties:
                                      code:
                                        const: unsupported-format
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 415
                                - if:
                                    properties:
                                      code:
                                        const: engine-unavailable
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: engine-incompatible
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: degraded
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: upload-checksum-mismatch
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: legacy-unsupported
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 501
                                - if:
                                    properties:
                                      code:
                                        const: internal
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 500
                                - if:
                                    properties:
                                      code:
                                        const: clock-unlocked
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: not-configured
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: authorization-pending
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: slow-down
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: access-denied
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: expired-token
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: token-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-key-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-in-progress
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                              additionalProperties: true
                              examples:
                                - type: >-
                                    https://freedome.nativemind.us/problems/engine-unavailable
                                  title: Visual engine unavailable
                                  status: 503
                                  detail: >-
                                    freedome-engined not reachable at
                                    unix:/run/freedome/engine.sock
                                  instance: /api/v1/venues/default/players/main/play
                                  code: engine-unavailable
                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                              $defs:
                                knownCode:
                                  enum:
                                    - validation-failed
                                    - not-found
                                    - conflict
                                    - precondition-failed
                                    - precondition-required
                                    - unauthenticated
                                    - forbidden
                                    - rate-limited
                                    - payload-too-large
                                    - unsupported-format
                                    - engine-unavailable
                                    - engine-incompatible
                                    - degraded
                                    - job-failed
                                    - upload-checksum-mismatch
                                    - legacy-unsupported
                                    - internal
                                    - clock-unlocked
                                    - not-configured
                                    - authorization-pending
                                    - slow-down
                                    - access-denied
                                    - expired-token
                                    - token-reused
                                    - idempotency-key-reused
                                    - idempotency-in-progress
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                fieldError:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                            stats:
                              type: object
                              additionalProperties:
                                type: number
                            resolume:
                              description: >-
                                live driver status; only on protocol resolume,
                                read-only
                              type: object
                              required:
                                - osc
                                - rest
                                - ws
                              properties:
                                osc:
                                  type: object
                                  required:
                                    - state
                                  properties:
                                    state:
                                      anyOf:
                                        - enum:
                                            - disabled
                                            - connecting
                                            - up
                                            - down
                                        - type: string
                                          pattern: ^[a-z][a-z_-]{0,31}$
                                      description: >-
                                        for OSC over UDP, up means sending:
                                        there is no acknowledgement
                                    lastOkAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    sent:
                                      type: integer
                                      minimum: 0
                                    dropped:
                                      type: integer
                                      minimum: 0
                                    problem:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). RFC 9457 problem details with
                                        the Freedome `code` catalogue, 02e §3.3.
                                        Also the `data` of WS `error`, the
                                        socket.io ack error and GraphQL
                                        errors[].extensions.problem. The
                                        catalogue is open: unknown codes are
                                        allowed; known codes are bound to their
                                        HTTP status.
                                      title: Problem details
                                      type: object
                                      required:
                                        - type
                                        - title
                                        - code
                                      properties:
                                        type:
                                          type: string
                                          format: uri
                                          description: >-
                                            https://freedome.nativemind.us/problems/<code>
                                            for catalogue codes.
                                        title:
                                          type: string
                                          minLength: 1
                                        status:
                                          type: integer
                                          minimum: 100
                                          maximum: 599
                                        detail:
                                          type: string
                                        instance:
                                          type: string
                                          format: uri-reference
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        traceId:
                                          type: string
                                          pattern: ^[0-9a-f]{16,32}$
                                        errors:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                      allOf:
                                        - if:
                                            properties:
                                              code:
                                                const: validation-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: not-found
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 404
                                        - if:
                                            properties:
                                              code:
                                                const: conflict
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 412
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-required
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 428
                                        - if:
                                            properties:
                                              code:
                                                const: unauthenticated
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: forbidden
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: rate-limited
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 429
                                        - if:
                                            properties:
                                              code:
                                                const: payload-too-large
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 413
                                        - if:
                                            properties:
                                              code:
                                                const: unsupported-format
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 415
                                        - if:
                                            properties:
                                              code:
                                                const: engine-unavailable
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: engine-incompatible
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: degraded
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: upload-checksum-mismatch
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: legacy-unsupported
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 501
                                        - if:
                                            properties:
                                              code:
                                                const: internal
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 500
                                        - if:
                                            properties:
                                              code:
                                                const: clock-unlocked
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: not-configured
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: authorization-pending
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: slow-down
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: access-denied
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: expired-token
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: token-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-key-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-in-progress
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                      additionalProperties: true
                                      examples:
                                        - type: >-
                                            https://freedome.nativemind.us/problems/engine-unavailable
                                          title: Visual engine unavailable
                                          status: 503
                                          detail: >-
                                            freedome-engined not reachable at
                                            unix:/run/freedome/engine.sock
                                          instance: /api/v1/venues/default/players/main/play
                                          code: engine-unavailable
                                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                      $defs:
                                        knownCode:
                                          enum:
                                            - validation-failed
                                            - not-found
                                            - conflict
                                            - precondition-failed
                                            - precondition-required
                                            - unauthenticated
                                            - forbidden
                                            - rate-limited
                                            - payload-too-large
                                            - unsupported-format
                                            - engine-unavailable
                                            - engine-incompatible
                                            - degraded
                                            - job-failed
                                            - upload-checksum-mismatch
                                            - legacy-unsupported
                                            - internal
                                            - clock-unlocked
                                            - not-configured
                                            - authorization-pending
                                            - slow-down
                                            - access-denied
                                            - expired-token
                                            - token-reused
                                            - idempotency-key-reused
                                            - idempotency-in-progress
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        fieldError:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                  additionalProperties: false
                                rest:
                                  type: object
                                  required:
                                    - state
                                  properties:
                                    state:
                                      anyOf:
                                        - enum:
                                            - disabled
                                            - connecting
                                            - up
                                            - down
                                        - type: string
                                          pattern: ^[a-z][a-z_-]{0,31}$
                                      description: >-
                                        for OSC over UDP, up means sending:
                                        there is no acknowledgement
                                    lastOkAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    sent:
                                      type: integer
                                      minimum: 0
                                    dropped:
                                      type: integer
                                      minimum: 0
                                    problem:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). RFC 9457 problem details with
                                        the Freedome `code` catalogue, 02e §3.3.
                                        Also the `data` of WS `error`, the
                                        socket.io ack error and GraphQL
                                        errors[].extensions.problem. The
                                        catalogue is open: unknown codes are
                                        allowed; known codes are bound to their
                                        HTTP status.
                                      title: Problem details
                                      type: object
                                      required:
                                        - type
                                        - title
                                        - code
                                      properties:
                                        type:
                                          type: string
                                          format: uri
                                          description: >-
                                            https://freedome.nativemind.us/problems/<code>
                                            for catalogue codes.
                                        title:
                                          type: string
                                          minLength: 1
                                        status:
                                          type: integer
                                          minimum: 100
                                          maximum: 599
                                        detail:
                                          type: string
                                        instance:
                                          type: string
                                          format: uri-reference
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        traceId:
                                          type: string
                                          pattern: ^[0-9a-f]{16,32}$
                                        errors:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                      allOf:
                                        - if:
                                            properties:
                                              code:
                                                const: validation-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: not-found
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 404
                                        - if:
                                            properties:
                                              code:
                                                const: conflict
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 412
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-required
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 428
                                        - if:
                                            properties:
                                              code:
                                                const: unauthenticated
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: forbidden
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: rate-limited
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 429
                                        - if:
                                            properties:
                                              code:
                                                const: payload-too-large
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 413
                                        - if:
                                            properties:
                                              code:
                                                const: unsupported-format
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 415
                                        - if:
                                            properties:
                                              code:
                                                const: engine-unavailable
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: engine-incompatible
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: degraded
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: upload-checksum-mismatch
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: legacy-unsupported
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 501
                                        - if:
                                            properties:
                                              code:
                                                const: internal
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 500
                                        - if:
                                            properties:
                                              code:
                                                const: clock-unlocked
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: not-configured
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: authorization-pending
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: slow-down
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: access-denied
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: expired-token
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: token-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-key-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-in-progress
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                      additionalProperties: true
                                      examples:
                                        - type: >-
                                            https://freedome.nativemind.us/problems/engine-unavailable
                                          title: Visual engine unavailable
                                          status: 503
                                          detail: >-
                                            freedome-engined not reachable at
                                            unix:/run/freedome/engine.sock
                                          instance: /api/v1/venues/default/players/main/play
                                          code: engine-unavailable
                                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                      $defs:
                                        knownCode:
                                          enum:
                                            - validation-failed
                                            - not-found
                                            - conflict
                                            - precondition-failed
                                            - precondition-required
                                            - unauthenticated
                                            - forbidden
                                            - rate-limited
                                            - payload-too-large
                                            - unsupported-format
                                            - engine-unavailable
                                            - engine-incompatible
                                            - degraded
                                            - job-failed
                                            - upload-checksum-mismatch
                                            - legacy-unsupported
                                            - internal
                                            - clock-unlocked
                                            - not-configured
                                            - authorization-pending
                                            - slow-down
                                            - access-denied
                                            - expired-token
                                            - token-reused
                                            - idempotency-key-reused
                                            - idempotency-in-progress
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        fieldError:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                  additionalProperties: false
                                ws:
                                  type: object
                                  required:
                                    - state
                                  properties:
                                    state:
                                      anyOf:
                                        - enum:
                                            - disabled
                                            - connecting
                                            - up
                                            - down
                                        - type: string
                                          pattern: ^[a-z][a-z_-]{0,31}$
                                      description: >-
                                        for OSC over UDP, up means sending:
                                        there is no acknowledgement
                                    lastOkAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    sent:
                                      type: integer
                                      minimum: 0
                                    dropped:
                                      type: integer
                                      minimum: 0
                                    problem:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). RFC 9457 problem details with
                                        the Freedome `code` catalogue, 02e §3.3.
                                        Also the `data` of WS `error`, the
                                        socket.io ack error and GraphQL
                                        errors[].extensions.problem. The
                                        catalogue is open: unknown codes are
                                        allowed; known codes are bound to their
                                        HTTP status.
                                      title: Problem details
                                      type: object
                                      required:
                                        - type
                                        - title
                                        - code
                                      properties:
                                        type:
                                          type: string
                                          format: uri
                                          description: >-
                                            https://freedome.nativemind.us/problems/<code>
                                            for catalogue codes.
                                        title:
                                          type: string
                                          minLength: 1
                                        status:
                                          type: integer
                                          minimum: 100
                                          maximum: 599
                                        detail:
                                          type: string
                                        instance:
                                          type: string
                                          format: uri-reference
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        traceId:
                                          type: string
                                          pattern: ^[0-9a-f]{16,32}$
                                        errors:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                      allOf:
                                        - if:
                                            properties:
                                              code:
                                                const: validation-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: not-found
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 404
                                        - if:
                                            properties:
                                              code:
                                                const: conflict
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 412
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-required
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 428
                                        - if:
                                            properties:
                                              code:
                                                const: unauthenticated
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: forbidden
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: rate-limited
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 429
                                        - if:
                                            properties:
                                              code:
                                                const: payload-too-large
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 413
                                        - if:
                                            properties:
                                              code:
                                                const: unsupported-format
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 415
                                        - if:
                                            properties:
                                              code:
                                                const: engine-unavailable
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: engine-incompatible
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: degraded
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: upload-checksum-mismatch
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: legacy-unsupported
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 501
                                        - if:
                                            properties:
                                              code:
                                                const: internal
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 500
                                        - if:
                                            properties:
                                              code:
                                                const: clock-unlocked
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: not-configured
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: authorization-pending
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: slow-down
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: access-denied
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: expired-token
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: token-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-key-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-in-progress
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                      additionalProperties: true
                                      examples:
                                        - type: >-
                                            https://freedome.nativemind.us/problems/engine-unavailable
                                          title: Visual engine unavailable
                                          status: 503
                                          detail: >-
                                            freedome-engined not reachable at
                                            unix:/run/freedome/engine.sock
                                          instance: /api/v1/venues/default/players/main/play
                                          code: engine-unavailable
                                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                      $defs:
                                        knownCode:
                                          enum:
                                            - validation-failed
                                            - not-found
                                            - conflict
                                            - precondition-failed
                                            - precondition-required
                                            - unauthenticated
                                            - forbidden
                                            - rate-limited
                                            - payload-too-large
                                            - unsupported-format
                                            - engine-unavailable
                                            - engine-incompatible
                                            - degraded
                                            - job-failed
                                            - upload-checksum-mismatch
                                            - legacy-unsupported
                                            - internal
                                            - clock-unlocked
                                            - not-configured
                                            - authorization-pending
                                            - slow-down
                                            - access-denied
                                            - expired-token
                                            - token-reused
                                            - idempotency-key-reused
                                            - idempotency-in-progress
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        fieldError:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                  additionalProperties: false
                                product:
                                  description: >-
                                    GET /api/v1/product of Resolume, when
                                    reachable.
                                  type: object
                                  properties:
                                    name:
                                      type: string
                                    major:
                                      type: integer
                                      minimum: 0
                                    minor:
                                      type: integer
                                      minimum: 0
                                    micro:
                                      type: integer
                                      minimum: 0
                                    revision:
                                      type: integer
                                      minimum: 0
                                  additionalProperties: false
                                composition:
                                  description: Summary of the open composition.
                                  type: object
                                  properties:
                                    name:
                                      type: string
                                    layers:
                                      type: integer
                                      minimum: 0
                                    columns:
                                      type: integer
                                      minimum: 0
                                    decks:
                                      type: integer
                                      minimum: 0
                                  additionalProperties: false
                                lastSyncAt:
                                  description: >-
                                    RFC 3339 UTC with milliseconds, e.g.
                                    2026-10-19T12:00:00.000Z.
                                  type: string
                                  format: date-time
                                  pattern: >-
                                    ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              additionalProperties: false
                          if:
                            properties:
                              protocol:
                                const: resolume
                            required:
                              - protocol
                          then:
                            properties:
                              config:
                                description: >-
                                  `config` of the outbound Resolume Arena /
                                  Avenue driver (protocol resolume). Defaults
                                  are Resolume's own ports; they equal the media
                                  server's defaults, so on one machine move the
                                  media server (docs/audio-reactive.md).
                                type: object
                                required:
                                  - host
                                properties:
                                  host:
                                    type: string
                                    minLength: 1
                                    maxLength: 253
                                    description: host name or IP of the Resolume machine
                                  oscPort:
                                    type: integer
                                    minimum: 1
                                    maximum: 65535
                                    default: 7000
                                  restPort:
                                    type: integer
                                    minimum: 1
                                    maximum: 65535
                                    default: 8080
                                  ws:
                                    type: boolean
                                    default: true
                                    description: >-
                                      keep the WebSocket API connection
                                      (ws://host:restPort/api/v1) for state
                                  oscMaxRateHz:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 1000
                                    description: >-
                                      highest send rate per OSC address; newer
                                      values replace unsent ones
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                      $defs:
                        gateway:
                          type: object
                          required:
                            - id
                            - direction
                            - protocol
                            - enabled
                            - status
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            name:
                              type: string
                            direction:
                              enum:
                                - inbound
                                - outbound
                                - converter
                            protocol:
                              type: string
                              description: >-
                                e.g. screenberry-json, dome360-http, watchout,
                                resolume, osc, pjlink, artnet
                            vendor:
                              type: string
                            enabled:
                              type: boolean
                            status:
                              anyOf:
                                - enum:
                                    - disabled
                                    - starting
                                    - up
                                    - degraded
                                    - down
                                - type: string
                                  pattern: ^[a-z][a-z_-]{0,31}$
                            docsOnly:
                              type: boolean
                              description: >-
                                implemented from public docs, no recorded
                                fixtures from a real system yet
                            listeners:
                              type: array
                              items:
                                type: object
                                required:
                                  - transport
                                  - port
                                properties:
                                  transport:
                                    enum:
                                      - http
                                      - tcp
                                      - udp
                                      - osc
                                      - ws
                                      - socketio
                                      - serial
                                  port:
                                    type: integer
                                    minimum: 0
                                    maximum: 65535
                                  bind:
                                    type: string
                                additionalProperties: false
                            peers:
                              type: array
                              items:
                                type: object
                                properties:
                                  address:
                                    type: string
                                  lastSeen:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                additionalProperties: false
                            config:
                              type: object
                              additionalProperties: true
                              description: gateway-specific; secrets redacted as "***"
                            allowCidrs:
                              type: array
                              items:
                                type: string
                            problem:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). RFC 9457 problem details with the
                                Freedome `code` catalogue, 02e §3.3. Also the
                                `data` of WS `error`, the socket.io ack error
                                and GraphQL errors[].extensions.problem. The
                                catalogue is open: unknown codes are allowed;
                                known codes are bound to their HTTP status.
                              title: Problem details
                              type: object
                              required:
                                - type
                                - title
                                - code
                              properties:
                                type:
                                  type: string
                                  format: uri
                                  description: >-
                                    https://freedome.nativemind.us/problems/<code>
                                    for catalogue codes.
                                title:
                                  type: string
                                  minLength: 1
                                status:
                                  type: integer
                                  minimum: 100
                                  maximum: 599
                                detail:
                                  type: string
                                instance:
                                  type: string
                                  format: uri-reference
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                traceId:
                                  type: string
                                  pattern: ^[0-9a-f]{16,32}$
                                errors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              allOf:
                                - if:
                                    properties:
                                      code:
                                        const: validation-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: not-found
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 404
                                - if:
                                    properties:
                                      code:
                                        const: conflict
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: precondition-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 412
                                - if:
                                    properties:
                                      code:
                                        const: precondition-required
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 428
                                - if:
                                    properties:
                                      code:
                                        const: unauthenticated
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: forbidden
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: rate-limited
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 429
                                - if:
                                    properties:
                                      code:
                                        const: payload-too-large
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 413
                                - if:
                                    properties:
                                      code:
                                        const: unsupported-format
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 415
                                - if:
                                    properties:
                                      code:
                                        const: engine-unavailable
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: engine-incompatible
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: degraded
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: upload-checksum-mismatch
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: legacy-unsupported
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 501
                                - if:
                                    properties:
                                      code:
                                        const: internal
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 500
                                - if:
                                    properties:
                                      code:
                                        const: clock-unlocked
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: not-configured
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: authorization-pending
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: slow-down
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: access-denied
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: expired-token
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: token-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-key-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-in-progress
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                              additionalProperties: true
                              examples:
                                - type: >-
                                    https://freedome.nativemind.us/problems/engine-unavailable
                                  title: Visual engine unavailable
                                  status: 503
                                  detail: >-
                                    freedome-engined not reachable at
                                    unix:/run/freedome/engine.sock
                                  instance: /api/v1/venues/default/players/main/play
                                  code: engine-unavailable
                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                              $defs:
                                knownCode:
                                  enum:
                                    - validation-failed
                                    - not-found
                                    - conflict
                                    - precondition-failed
                                    - precondition-required
                                    - unauthenticated
                                    - forbidden
                                    - rate-limited
                                    - payload-too-large
                                    - unsupported-format
                                    - engine-unavailable
                                    - engine-incompatible
                                    - degraded
                                    - job-failed
                                    - upload-checksum-mismatch
                                    - legacy-unsupported
                                    - internal
                                    - clock-unlocked
                                    - not-configured
                                    - authorization-pending
                                    - slow-down
                                    - access-denied
                                    - expired-token
                                    - token-reused
                                    - idempotency-key-reused
                                    - idempotency-in-progress
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                fieldError:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                            stats:
                              type: object
                              additionalProperties:
                                type: number
                            resolume:
                              description: >-
                                live driver status; only on protocol resolume,
                                read-only
                              type: object
                              required:
                                - osc
                                - rest
                                - ws
                              properties:
                                osc:
                                  type: object
                                  required:
                                    - state
                                  properties:
                                    state:
                                      anyOf:
                                        - enum:
                                            - disabled
                                            - connecting
                                            - up
                                            - down
                                        - type: string
                                          pattern: ^[a-z][a-z_-]{0,31}$
                                      description: >-
                                        for OSC over UDP, up means sending:
                                        there is no acknowledgement
                                    lastOkAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    sent:
                                      type: integer
                                      minimum: 0
                                    dropped:
                                      type: integer
                                      minimum: 0
                                    problem:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). RFC 9457 problem details with
                                        the Freedome `code` catalogue, 02e §3.3.
                                        Also the `data` of WS `error`, the
                                        socket.io ack error and GraphQL
                                        errors[].extensions.problem. The
                                        catalogue is open: unknown codes are
                                        allowed; known codes are bound to their
                                        HTTP status.
                                      title: Problem details
                                      type: object
                                      required:
                                        - type
                                        - title
                                        - code
                                      properties:
                                        type:
                                          type: string
                                          format: uri
                                          description: >-
                                            https://freedome.nativemind.us/problems/<code>
                                            for catalogue codes.
                                        title:
                                          type: string
                                          minLength: 1
                                        status:
                                          type: integer
                                          minimum: 100
                                          maximum: 599
                                        detail:
                                          type: string
                                        instance:
                                          type: string
                                          format: uri-reference
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        traceId:
                                          type: string
                                          pattern: ^[0-9a-f]{16,32}$
                                        errors:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                      allOf:
                                        - if:
                                            properties:
                                              code:
                                                const: validation-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: not-found
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 404
                                        - if:
                                            properties:
                                              code:
                                                const: conflict
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 412
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-required
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 428
                                        - if:
                                            properties:
                                              code:
                                                const: unauthenticated
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: forbidden
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: rate-limited
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 429
                                        - if:
                                            properties:
                                              code:
                                                const: payload-too-large
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 413
                                        - if:
                                            properties:
                                              code:
                                                const: unsupported-format
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 415
                                        - if:
                                            properties:
                                              code:
                                                const: engine-unavailable
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: engine-incompatible
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: degraded
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: upload-checksum-mismatch
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: legacy-unsupported
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 501
                                        - if:
                                            properties:
                                              code:
                                                const: internal
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 500
                                        - if:
                                            properties:
                                              code:
                                                const: clock-unlocked
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: not-configured
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: authorization-pending
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: slow-down
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: access-denied
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: expired-token
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: token-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-key-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-in-progress
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                      additionalProperties: true
                                      examples:
                                        - type: >-
                                            https://freedome.nativemind.us/problems/engine-unavailable
                                          title: Visual engine unavailable
                                          status: 503
                                          detail: >-
                                            freedome-engined not reachable at
                                            unix:/run/freedome/engine.sock
                                          instance: /api/v1/venues/default/players/main/play
                                          code: engine-unavailable
                                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                      $defs:
                                        knownCode:
                                          enum:
                                            - validation-failed
                                            - not-found
                                            - conflict
                                            - precondition-failed
                                            - precondition-required
                                            - unauthenticated
                                            - forbidden
                                            - rate-limited
                                            - payload-too-large
                                            - unsupported-format
                                            - engine-unavailable
                                            - engine-incompatible
                                            - degraded
                                            - job-failed
                                            - upload-checksum-mismatch
                                            - legacy-unsupported
                                            - internal
                                            - clock-unlocked
                                            - not-configured
                                            - authorization-pending
                                            - slow-down
                                            - access-denied
                                            - expired-token
                                            - token-reused
                                            - idempotency-key-reused
                                            - idempotency-in-progress
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        fieldError:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                  additionalProperties: false
                                rest:
                                  type: object
                                  required:
                                    - state
                                  properties:
                                    state:
                                      anyOf:
                                        - enum:
                                            - disabled
                                            - connecting
                                            - up
                                            - down
                                        - type: string
                                          pattern: ^[a-z][a-z_-]{0,31}$
                                      description: >-
                                        for OSC over UDP, up means sending:
                                        there is no acknowledgement
                                    lastOkAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    sent:
                                      type: integer
                                      minimum: 0
                                    dropped:
                                      type: integer
                                      minimum: 0
                                    problem:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). RFC 9457 problem details with
                                        the Freedome `code` catalogue, 02e §3.3.
                                        Also the `data` of WS `error`, the
                                        socket.io ack error and GraphQL
                                        errors[].extensions.problem. The
                                        catalogue is open: unknown codes are
                                        allowed; known codes are bound to their
                                        HTTP status.
                                      title: Problem details
                                      type: object
                                      required:
                                        - type
                                        - title
                                        - code
                                      properties:
                                        type:
                                          type: string
                                          format: uri
                                          description: >-
                                            https://freedome.nativemind.us/problems/<code>
                                            for catalogue codes.
                                        title:
                                          type: string
                                          minLength: 1
                                        status:
                                          type: integer
                                          minimum: 100
                                          maximum: 599
                                        detail:
                                          type: string
                                        instance:
                                          type: string
                                          format: uri-reference
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        traceId:
                                          type: string
                                          pattern: ^[0-9a-f]{16,32}$
                                        errors:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                      allOf:
                                        - if:
                                            properties:
                                              code:
                                                const: validation-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: not-found
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 404
                                        - if:
                                            properties:
                                              code:
                                                const: conflict
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 412
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-required
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 428
                                        - if:
                                            properties:
                                              code:
                                                const: unauthenticated
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: forbidden
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: rate-limited
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 429
                                        - if:
                                            properties:
                                              code:
                                                const: payload-too-large
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 413
                                        - if:
                                            properties:
                                              code:
                                                const: unsupported-format
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 415
                                        - if:
                                            properties:
                                              code:
                                                const: engine-unavailable
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: engine-incompatible
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: degraded
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: upload-checksum-mismatch
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: legacy-unsupported
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 501
                                        - if:
                                            properties:
                                              code:
                                                const: internal
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 500
                                        - if:
                                            properties:
                                              code:
                                                const: clock-unlocked
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: not-configured
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: authorization-pending
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: slow-down
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: access-denied
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: expired-token
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: token-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-key-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-in-progress
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                      additionalProperties: true
                                      examples:
                                        - type: >-
                                            https://freedome.nativemind.us/problems/engine-unavailable
                                          title: Visual engine unavailable
                                          status: 503
                                          detail: >-
                                            freedome-engined not reachable at
                                            unix:/run/freedome/engine.sock
                                          instance: /api/v1/venues/default/players/main/play
                                          code: engine-unavailable
                                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                      $defs:
                                        knownCode:
                                          enum:
                                            - validation-failed
                                            - not-found
                                            - conflict
                                            - precondition-failed
                                            - precondition-required
                                            - unauthenticated
                                            - forbidden
                                            - rate-limited
                                            - payload-too-large
                                            - unsupported-format
                                            - engine-unavailable
                                            - engine-incompatible
                                            - degraded
                                            - job-failed
                                            - upload-checksum-mismatch
                                            - legacy-unsupported
                                            - internal
                                            - clock-unlocked
                                            - not-configured
                                            - authorization-pending
                                            - slow-down
                                            - access-denied
                                            - expired-token
                                            - token-reused
                                            - idempotency-key-reused
                                            - idempotency-in-progress
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        fieldError:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                  additionalProperties: false
                                ws:
                                  type: object
                                  required:
                                    - state
                                  properties:
                                    state:
                                      anyOf:
                                        - enum:
                                            - disabled
                                            - connecting
                                            - up
                                            - down
                                        - type: string
                                          pattern: ^[a-z][a-z_-]{0,31}$
                                      description: >-
                                        for OSC over UDP, up means sending:
                                        there is no acknowledgement
                                    lastOkAt:
                                      description: >-
                                        RFC 3339 UTC with milliseconds, e.g.
                                        2026-10-19T12:00:00.000Z.
                                      type: string
                                      format: date-time
                                      pattern: >-
                                        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    sent:
                                      type: integer
                                      minimum: 0
                                    dropped:
                                      type: integer
                                      minimum: 0
                                    problem:
                                      $schema: >-
                                        https://json-schema.org/draft/2020-12/schema
                                      $id: >-
                                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                      $comment: >-
                                        NativeMindNONC — freedome_contract (see
                                        LICENSE). RFC 9457 problem details with
                                        the Freedome `code` catalogue, 02e §3.3.
                                        Also the `data` of WS `error`, the
                                        socket.io ack error and GraphQL
                                        errors[].extensions.problem. The
                                        catalogue is open: unknown codes are
                                        allowed; known codes are bound to their
                                        HTTP status.
                                      title: Problem details
                                      type: object
                                      required:
                                        - type
                                        - title
                                        - code
                                      properties:
                                        type:
                                          type: string
                                          format: uri
                                          description: >-
                                            https://freedome.nativemind.us/problems/<code>
                                            for catalogue codes.
                                        title:
                                          type: string
                                          minLength: 1
                                        status:
                                          type: integer
                                          minimum: 100
                                          maximum: 599
                                        detail:
                                          type: string
                                        instance:
                                          type: string
                                          format: uri-reference
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        traceId:
                                          type: string
                                          pattern: ^[0-9a-f]{16,32}$
                                        errors:
                                          type: array
                                          items:
                                            type: object
                                            required:
                                              - pointer
                                              - detail
                                            properties:
                                              pointer:
                                                type: string
                                                format: json-pointer
                                              detail:
                                                type: string
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                            additionalProperties: true
                                      allOf:
                                        - if:
                                            properties:
                                              code:
                                                const: validation-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: not-found
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 404
                                        - if:
                                            properties:
                                              code:
                                                const: conflict
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-failed
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 412
                                        - if:
                                            properties:
                                              code:
                                                const: precondition-required
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 428
                                        - if:
                                            properties:
                                              code:
                                                const: unauthenticated
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: forbidden
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: rate-limited
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 429
                                        - if:
                                            properties:
                                              code:
                                                const: payload-too-large
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 413
                                        - if:
                                            properties:
                                              code:
                                                const: unsupported-format
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 415
                                        - if:
                                            properties:
                                              code:
                                                const: engine-unavailable
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: engine-incompatible
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: degraded
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: upload-checksum-mismatch
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 422
                                        - if:
                                            properties:
                                              code:
                                                const: legacy-unsupported
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 501
                                        - if:
                                            properties:
                                              code:
                                                const: internal
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 500
                                        - if:
                                            properties:
                                              code:
                                                const: clock-unlocked
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: not-configured
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 503
                                        - if:
                                            properties:
                                              code:
                                                const: authorization-pending
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: slow-down
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: access-denied
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 403
                                        - if:
                                            properties:
                                              code:
                                                const: expired-token
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 400
                                        - if:
                                            properties:
                                              code:
                                                const: token-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 401
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-key-reused
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                        - if:
                                            properties:
                                              code:
                                                const: idempotency-in-progress
                                            required:
                                              - code
                                          then:
                                            properties:
                                              status:
                                                const: 409
                                      additionalProperties: true
                                      examples:
                                        - type: >-
                                            https://freedome.nativemind.us/problems/engine-unavailable
                                          title: Visual engine unavailable
                                          status: 503
                                          detail: >-
                                            freedome-engined not reachable at
                                            unix:/run/freedome/engine.sock
                                          instance: /api/v1/venues/default/players/main/play
                                          code: engine-unavailable
                                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                      $defs:
                                        knownCode:
                                          enum:
                                            - validation-failed
                                            - not-found
                                            - conflict
                                            - precondition-failed
                                            - precondition-required
                                            - unauthenticated
                                            - forbidden
                                            - rate-limited
                                            - payload-too-large
                                            - unsupported-format
                                            - engine-unavailable
                                            - engine-incompatible
                                            - degraded
                                            - job-failed
                                            - upload-checksum-mismatch
                                            - legacy-unsupported
                                            - internal
                                            - clock-unlocked
                                            - not-configured
                                            - authorization-pending
                                            - slow-down
                                            - access-denied
                                            - expired-token
                                            - token-reused
                                            - idempotency-key-reused
                                            - idempotency-in-progress
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        fieldError:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                  additionalProperties: false
                                product:
                                  description: >-
                                    GET /api/v1/product of Resolume, when
                                    reachable.
                                  type: object
                                  properties:
                                    name:
                                      type: string
                                    major:
                                      type: integer
                                      minimum: 0
                                    minor:
                                      type: integer
                                      minimum: 0
                                    micro:
                                      type: integer
                                      minimum: 0
                                    revision:
                                      type: integer
                                      minimum: 0
                                  additionalProperties: false
                                composition:
                                  description: Summary of the open composition.
                                  type: object
                                  properties:
                                    name:
                                      type: string
                                    layers:
                                      type: integer
                                      minimum: 0
                                    columns:
                                      type: integer
                                      minimum: 0
                                    decks:
                                      type: integer
                                      minimum: 0
                                  additionalProperties: false
                                lastSyncAt:
                                  description: >-
                                    RFC 3339 UTC with milliseconds, e.g.
                                    2026-10-19T12:00:00.000Z.
                                  type: string
                                  format: date-time
                                  pattern: >-
                                    ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              additionalProperties: false
                          if:
                            properties:
                              protocol:
                                const: resolume
                            required:
                              - protocol
                          then:
                            properties:
                              config:
                                description: >-
                                  `config` of the outbound Resolume Arena /
                                  Avenue driver (protocol resolume). Defaults
                                  are Resolume's own ports; they equal the media
                                  server's defaults, so on one machine move the
                                  media server (docs/audio-reactive.md).
                                type: object
                                required:
                                  - host
                                properties:
                                  host:
                                    type: string
                                    minLength: 1
                                    maxLength: 253
                                    description: host name or IP of the Resolume machine
                                  oscPort:
                                    type: integer
                                    minimum: 1
                                    maximum: 65535
                                    default: 7000
                                  restPort:
                                    type: integer
                                    minimum: 1
                                    maximum: 65535
                                    default: 8080
                                  ws:
                                    type: boolean
                                    default: true
                                    description: >-
                                      keep the WebSocket API connection
                                      (ws://host:restPort/api/v1) for state
                                  oscMaxRateHz:
                                    type: number
                                    exclusiveMinimum: 0
                                    maximum: 1000
                                    description: >-
                                      highest send rate per OSC address; newer
                                      values replace unsent ones
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        resolumeConfig:
                          description: >-
                            `config` of the outbound Resolume Arena / Avenue
                            driver (protocol resolume). Defaults are Resolume's
                            own ports; they equal the media server's defaults,
                            so on one machine move the media server
                            (docs/audio-reactive.md).
                          type: object
                          required:
                            - host
                          properties:
                            host:
                              type: string
                              minLength: 1
                              maxLength: 253
                              description: host name or IP of the Resolume machine
                            oscPort:
                              type: integer
                              minimum: 1
                              maximum: 65535
                              default: 7000
                            restPort:
                              type: integer
                              minimum: 1
                              maximum: 65535
                              default: 8080
                            ws:
                              type: boolean
                              default: true
                              description: >-
                                keep the WebSocket API connection
                                (ws://host:restPort/api/v1) for state
                            oscMaxRateHz:
                              type: number
                              exclusiveMinimum: 0
                              maximum: 1000
                              description: >-
                                highest send rate per OSC address; newer values
                                replace unsent ones
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        resolumeLink:
                          type: object
                          required:
                            - state
                          properties:
                            state:
                              anyOf:
                                - enum:
                                    - disabled
                                    - connecting
                                    - up
                                    - down
                                - type: string
                                  pattern: ^[a-z][a-z_-]{0,31}$
                              description: >-
                                for OSC over UDP, up means sending: there is no
                                acknowledgement
                            lastOkAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            sent:
                              type: integer
                              minimum: 0
                            dropped:
                              type: integer
                              minimum: 0
                            problem:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). RFC 9457 problem details with the
                                Freedome `code` catalogue, 02e §3.3. Also the
                                `data` of WS `error`, the socket.io ack error
                                and GraphQL errors[].extensions.problem. The
                                catalogue is open: unknown codes are allowed;
                                known codes are bound to their HTTP status.
                              title: Problem details
                              type: object
                              required:
                                - type
                                - title
                                - code
                              properties:
                                type:
                                  type: string
                                  format: uri
                                  description: >-
                                    https://freedome.nativemind.us/problems/<code>
                                    for catalogue codes.
                                title:
                                  type: string
                                  minLength: 1
                                status:
                                  type: integer
                                  minimum: 100
                                  maximum: 599
                                detail:
                                  type: string
                                instance:
                                  type: string
                                  format: uri-reference
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                traceId:
                                  type: string
                                  pattern: ^[0-9a-f]{16,32}$
                                errors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              allOf:
                                - if:
                                    properties:
                                      code:
                                        const: validation-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: not-found
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 404
                                - if:
                                    properties:
                                      code:
                                        const: conflict
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: precondition-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 412
                                - if:
                                    properties:
                                      code:
                                        const: precondition-required
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 428
                                - if:
                                    properties:
                                      code:
                                        const: unauthenticated
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: forbidden
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: rate-limited
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 429
                                - if:
                                    properties:
                                      code:
                                        const: payload-too-large
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 413
                                - if:
                                    properties:
                                      code:
                                        const: unsupported-format
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 415
                                - if:
                                    properties:
                                      code:
                                        const: engine-unavailable
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: engine-incompatible
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: degraded
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: upload-checksum-mismatch
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: legacy-unsupported
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 501
                                - if:
                                    properties:
                                      code:
                                        const: internal
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 500
                                - if:
                                    properties:
                                      code:
                                        const: clock-unlocked
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: not-configured
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: authorization-pending
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: slow-down
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: access-denied
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: expired-token
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: token-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-key-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-in-progress
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                              additionalProperties: true
                              examples:
                                - type: >-
                                    https://freedome.nativemind.us/problems/engine-unavailable
                                  title: Visual engine unavailable
                                  status: 503
                                  detail: >-
                                    freedome-engined not reachable at
                                    unix:/run/freedome/engine.sock
                                  instance: /api/v1/venues/default/players/main/play
                                  code: engine-unavailable
                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                              $defs:
                                knownCode:
                                  enum:
                                    - validation-failed
                                    - not-found
                                    - conflict
                                    - precondition-failed
                                    - precondition-required
                                    - unauthenticated
                                    - forbidden
                                    - rate-limited
                                    - payload-too-large
                                    - unsupported-format
                                    - engine-unavailable
                                    - engine-incompatible
                                    - degraded
                                    - job-failed
                                    - upload-checksum-mismatch
                                    - legacy-unsupported
                                    - internal
                                    - clock-unlocked
                                    - not-configured
                                    - authorization-pending
                                    - slow-down
                                    - access-denied
                                    - expired-token
                                    - token-reused
                                    - idempotency-key-reused
                                    - idempotency-in-progress
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                fieldError:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                          additionalProperties: false
                        resolumeStatus:
                          type: object
                          required:
                            - osc
                            - rest
                            - ws
                          properties:
                            osc:
                              type: object
                              required:
                                - state
                              properties:
                                state:
                                  anyOf:
                                    - enum:
                                        - disabled
                                        - connecting
                                        - up
                                        - down
                                    - type: string
                                      pattern: ^[a-z][a-z_-]{0,31}$
                                  description: >-
                                    for OSC over UDP, up means sending: there is
                                    no acknowledgement
                                lastOkAt:
                                  description: >-
                                    RFC 3339 UTC with milliseconds, e.g.
                                    2026-10-19T12:00:00.000Z.
                                  type: string
                                  format: date-time
                                  pattern: >-
                                    ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                sent:
                                  type: integer
                                  minimum: 0
                                dropped:
                                  type: integer
                                  minimum: 0
                                problem:
                                  $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). RFC 9457 problem details with the
                                    Freedome `code` catalogue, 02e §3.3. Also
                                    the `data` of WS `error`, the socket.io ack
                                    error and GraphQL
                                    errors[].extensions.problem. The catalogue
                                    is open: unknown codes are allowed; known
                                    codes are bound to their HTTP status.
                                  title: Problem details
                                  type: object
                                  required:
                                    - type
                                    - title
                                    - code
                                  properties:
                                    type:
                                      type: string
                                      format: uri
                                      description: >-
                                        https://freedome.nativemind.us/problems/<code>
                                        for catalogue codes.
                                    title:
                                      type: string
                                      minLength: 1
                                    status:
                                      type: integer
                                      minimum: 100
                                      maximum: 599
                                    detail:
                                      type: string
                                    instance:
                                      type: string
                                      format: uri-reference
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    traceId:
                                      type: string
                                      pattern: ^[0-9a-f]{16,32}$
                                    errors:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  allOf:
                                    - if:
                                        properties:
                                          code:
                                            const: validation-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: not-found
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 404
                                    - if:
                                        properties:
                                          code:
                                            const: conflict
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 412
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-required
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 428
                                    - if:
                                        properties:
                                          code:
                                            const: unauthenticated
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: forbidden
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: rate-limited
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 429
                                    - if:
                                        properties:
                                          code:
                                            const: payload-too-large
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 413
                                    - if:
                                        properties:
                                          code:
                                            const: unsupported-format
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 415
                                    - if:
                                        properties:
                                          code:
                                            const: engine-unavailable
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: engine-incompatible
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: degraded
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: upload-checksum-mismatch
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: legacy-unsupported
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 501
                                    - if:
                                        properties:
                                          code:
                                            const: internal
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 500
                                    - if:
                                        properties:
                                          code:
                                            const: clock-unlocked
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: not-configured
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: authorization-pending
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: slow-down
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: access-denied
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: expired-token
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: token-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-key-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-in-progress
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                  additionalProperties: true
                                  examples:
                                    - type: >-
                                        https://freedome.nativemind.us/problems/engine-unavailable
                                      title: Visual engine unavailable
                                      status: 503
                                      detail: >-
                                        freedome-engined not reachable at
                                        unix:/run/freedome/engine.sock
                                      instance: /api/v1/venues/default/players/main/play
                                      code: engine-unavailable
                                      traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                  $defs:
                                    knownCode:
                                      enum:
                                        - validation-failed
                                        - not-found
                                        - conflict
                                        - precondition-failed
                                        - precondition-required
                                        - unauthenticated
                                        - forbidden
                                        - rate-limited
                                        - payload-too-large
                                        - unsupported-format
                                        - engine-unavailable
                                        - engine-incompatible
                                        - degraded
                                        - job-failed
                                        - upload-checksum-mismatch
                                        - legacy-unsupported
                                        - internal
                                        - clock-unlocked
                                        - not-configured
                                        - authorization-pending
                                        - slow-down
                                        - access-denied
                                        - expired-token
                                        - token-reused
                                        - idempotency-key-reused
                                        - idempotency-in-progress
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    fieldError:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                              additionalProperties: false
                            rest:
                              type: object
                              required:
                                - state
                              properties:
                                state:
                                  anyOf:
                                    - enum:
                                        - disabled
                                        - connecting
                                        - up
                                        - down
                                    - type: string
                                      pattern: ^[a-z][a-z_-]{0,31}$
                                  description: >-
                                    for OSC over UDP, up means sending: there is
                                    no acknowledgement
                                lastOkAt:
                                  description: >-
                                    RFC 3339 UTC with milliseconds, e.g.
                                    2026-10-19T12:00:00.000Z.
                                  type: string
                                  format: date-time
                                  pattern: >-
                                    ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                sent:
                                  type: integer
                                  minimum: 0
                                dropped:
                                  type: integer
                                  minimum: 0
                                problem:
                                  $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). RFC 9457 problem details with the
                                    Freedome `code` catalogue, 02e §3.3. Also
                                    the `data` of WS `error`, the socket.io ack
                                    error and GraphQL
                                    errors[].extensions.problem. The catalogue
                                    is open: unknown codes are allowed; known
                                    codes are bound to their HTTP status.
                                  title: Problem details
                                  type: object
                                  required:
                                    - type
                                    - title
                                    - code
                                  properties:
                                    type:
                                      type: string
                                      format: uri
                                      description: >-
                                        https://freedome.nativemind.us/problems/<code>
                                        for catalogue codes.
                                    title:
                                      type: string
                                      minLength: 1
                                    status:
                                      type: integer
                                      minimum: 100
                                      maximum: 599
                                    detail:
                                      type: string
                                    instance:
                                      type: string
                                      format: uri-reference
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    traceId:
                                      type: string
                                      pattern: ^[0-9a-f]{16,32}$
                                    errors:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  allOf:
                                    - if:
                                        properties:
                                          code:
                                            const: validation-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: not-found
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 404
                                    - if:
                                        properties:
                                          code:
                                            const: conflict
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 412
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-required
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 428
                                    - if:
                                        properties:
                                          code:
                                            const: unauthenticated
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: forbidden
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: rate-limited
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 429
                                    - if:
                                        properties:
                                          code:
                                            const: payload-too-large
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 413
                                    - if:
                                        properties:
                                          code:
                                            const: unsupported-format
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 415
                                    - if:
                                        properties:
                                          code:
                                            const: engine-unavailable
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: engine-incompatible
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: degraded
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: upload-checksum-mismatch
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: legacy-unsupported
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 501
                                    - if:
                                        properties:
                                          code:
                                            const: internal
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 500
                                    - if:
                                        properties:
                                          code:
                                            const: clock-unlocked
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: not-configured
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: authorization-pending
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: slow-down
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: access-denied
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: expired-token
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: token-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-key-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-in-progress
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                  additionalProperties: true
                                  examples:
                                    - type: >-
                                        https://freedome.nativemind.us/problems/engine-unavailable
                                      title: Visual engine unavailable
                                      status: 503
                                      detail: >-
                                        freedome-engined not reachable at
                                        unix:/run/freedome/engine.sock
                                      instance: /api/v1/venues/default/players/main/play
                                      code: engine-unavailable
                                      traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                  $defs:
                                    knownCode:
                                      enum:
                                        - validation-failed
                                        - not-found
                                        - conflict
                                        - precondition-failed
                                        - precondition-required
                                        - unauthenticated
                                        - forbidden
                                        - rate-limited
                                        - payload-too-large
                                        - unsupported-format
                                        - engine-unavailable
                                        - engine-incompatible
                                        - degraded
                                        - job-failed
                                        - upload-checksum-mismatch
                                        - legacy-unsupported
                                        - internal
                                        - clock-unlocked
                                        - not-configured
                                        - authorization-pending
                                        - slow-down
                                        - access-denied
                                        - expired-token
                                        - token-reused
                                        - idempotency-key-reused
                                        - idempotency-in-progress
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    fieldError:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                              additionalProperties: false
                            ws:
                              type: object
                              required:
                                - state
                              properties:
                                state:
                                  anyOf:
                                    - enum:
                                        - disabled
                                        - connecting
                                        - up
                                        - down
                                    - type: string
                                      pattern: ^[a-z][a-z_-]{0,31}$
                                  description: >-
                                    for OSC over UDP, up means sending: there is
                                    no acknowledgement
                                lastOkAt:
                                  description: >-
                                    RFC 3339 UTC with milliseconds, e.g.
                                    2026-10-19T12:00:00.000Z.
                                  type: string
                                  format: date-time
                                  pattern: >-
                                    ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                sent:
                                  type: integer
                                  minimum: 0
                                dropped:
                                  type: integer
                                  minimum: 0
                                problem:
                                  $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). RFC 9457 problem details with the
                                    Freedome `code` catalogue, 02e §3.3. Also
                                    the `data` of WS `error`, the socket.io ack
                                    error and GraphQL
                                    errors[].extensions.problem. The catalogue
                                    is open: unknown codes are allowed; known
                                    codes are bound to their HTTP status.
                                  title: Problem details
                                  type: object
                                  required:
                                    - type
                                    - title
                                    - code
                                  properties:
                                    type:
                                      type: string
                                      format: uri
                                      description: >-
                                        https://freedome.nativemind.us/problems/<code>
                                        for catalogue codes.
                                    title:
                                      type: string
                                      minLength: 1
                                    status:
                                      type: integer
                                      minimum: 100
                                      maximum: 599
                                    detail:
                                      type: string
                                    instance:
                                      type: string
                                      format: uri-reference
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    traceId:
                                      type: string
                                      pattern: ^[0-9a-f]{16,32}$
                                    errors:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  allOf:
                                    - if:
                                        properties:
                                          code:
                                            const: validation-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: not-found
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 404
                                    - if:
                                        properties:
                                          code:
                                            const: conflict
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 412
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-required
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 428
                                    - if:
                                        properties:
                                          code:
                                            const: unauthenticated
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: forbidden
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: rate-limited
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 429
                                    - if:
                                        properties:
                                          code:
                                            const: payload-too-large
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 413
                                    - if:
                                        properties:
                                          code:
                                            const: unsupported-format
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 415
                                    - if:
                                        properties:
                                          code:
                                            const: engine-unavailable
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: engine-incompatible
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: degraded
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: upload-checksum-mismatch
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: legacy-unsupported
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 501
                                    - if:
                                        properties:
                                          code:
                                            const: internal
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 500
                                    - if:
                                        properties:
                                          code:
                                            const: clock-unlocked
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: not-configured
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: authorization-pending
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: slow-down
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: access-denied
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: expired-token
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: token-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-key-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-in-progress
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                  additionalProperties: true
                                  examples:
                                    - type: >-
                                        https://freedome.nativemind.us/problems/engine-unavailable
                                      title: Visual engine unavailable
                                      status: 503
                                      detail: >-
                                        freedome-engined not reachable at
                                        unix:/run/freedome/engine.sock
                                      instance: /api/v1/venues/default/players/main/play
                                      code: engine-unavailable
                                      traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                  $defs:
                                    knownCode:
                                      enum:
                                        - validation-failed
                                        - not-found
                                        - conflict
                                        - precondition-failed
                                        - precondition-required
                                        - unauthenticated
                                        - forbidden
                                        - rate-limited
                                        - payload-too-large
                                        - unsupported-format
                                        - engine-unavailable
                                        - engine-incompatible
                                        - degraded
                                        - job-failed
                                        - upload-checksum-mismatch
                                        - legacy-unsupported
                                        - internal
                                        - clock-unlocked
                                        - not-configured
                                        - authorization-pending
                                        - slow-down
                                        - access-denied
                                        - expired-token
                                        - token-reused
                                        - idempotency-key-reused
                                        - idempotency-in-progress
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    fieldError:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                              additionalProperties: false
                            product:
                              description: GET /api/v1/product of Resolume, when reachable.
                              type: object
                              properties:
                                name:
                                  type: string
                                major:
                                  type: integer
                                  minimum: 0
                                minor:
                                  type: integer
                                  minimum: 0
                                micro:
                                  type: integer
                                  minimum: 0
                                revision:
                                  type: integer
                                  minimum: 0
                              additionalProperties: false
                            composition:
                              description: Summary of the open composition.
                              type: object
                              properties:
                                name:
                                  type: string
                                layers:
                                  type: integer
                                  minimum: 0
                                columns:
                                  type: integer
                                  minimum: 0
                                decks:
                                  type: integer
                                  minimum: 0
                              additionalProperties: false
                            lastSyncAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          additionalProperties: false
                        patch:
                          type: object
                          minProperties: 1
                          properties:
                            enabled:
                              type: boolean
                            config:
                              type: object
                              additionalProperties: true
                            allowCidrs:
                              type: array
                              items:
                                type: string
                          additionalProperties: false
                        page:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                type: object
                                required:
                                  - id
                                  - direction
                                  - protocol
                                  - enabled
                                  - status
                                properties:
                                  id:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  name:
                                    type: string
                                  direction:
                                    enum:
                                      - inbound
                                      - outbound
                                      - converter
                                  protocol:
                                    type: string
                                    description: >-
                                      e.g. screenberry-json, dome360-http,
                                      watchout, resolume, osc, pjlink, artnet
                                  vendor:
                                    type: string
                                  enabled:
                                    type: boolean
                                  status:
                                    anyOf:
                                      - enum:
                                          - disabled
                                          - starting
                                          - up
                                          - degraded
                                          - down
                                      - type: string
                                        pattern: ^[a-z][a-z_-]{0,31}$
                                  docsOnly:
                                    type: boolean
                                    description: >-
                                      implemented from public docs, no recorded
                                      fixtures from a real system yet
                                  listeners:
                                    type: array
                                    items:
                                      type: object
                                      required:
                                        - transport
                                        - port
                                      properties:
                                        transport:
                                          enum:
                                            - http
                                            - tcp
                                            - udp
                                            - osc
                                            - ws
                                            - socketio
                                            - serial
                                        port:
                                          type: integer
                                          minimum: 0
                                          maximum: 65535
                                        bind:
                                          type: string
                                      additionalProperties: false
                                  peers:
                                    type: array
                                    items:
                                      type: object
                                      properties:
                                        address:
                                          type: string
                                        lastSeen:
                                          description: >-
                                            RFC 3339 UTC with milliseconds, e.g.
                                            2026-10-19T12:00:00.000Z.
                                          type: string
                                          format: date-time
                                          pattern: >-
                                            ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                      additionalProperties: false
                                  config:
                                    type: object
                                    additionalProperties: true
                                    description: >-
                                      gateway-specific; secrets redacted as
                                      "***"
                                  allowCidrs:
                                    type: array
                                    items:
                                      type: string
                                  problem:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  stats:
                                    type: object
                                    additionalProperties:
                                      type: number
                                  resolume:
                                    description: >-
                                      live driver status; only on protocol
                                      resolume, read-only
                                    type: object
                                    required:
                                      - osc
                                      - rest
                                      - ws
                                    properties:
                                      osc:
                                        type: object
                                        required:
                                          - state
                                        properties:
                                          state:
                                            anyOf:
                                              - enum:
                                                  - disabled
                                                  - connecting
                                                  - up
                                                  - down
                                              - type: string
                                                pattern: ^[a-z][a-z_-]{0,31}$
                                            description: >-
                                              for OSC over UDP, up means sending:
                                              there is no acknowledgement
                                          lastOkAt:
                                            description: >-
                                              RFC 3339 UTC with milliseconds, e.g.
                                              2026-10-19T12:00:00.000Z.
                                            type: string
                                            format: date-time
                                            pattern: >-
                                              ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                          sent:
                                            type: integer
                                            minimum: 0
                                          dropped:
                                            type: integer
                                            minimum: 0
                                          problem:
                                            $schema: >-
                                              https://json-schema.org/draft/2020-12/schema
                                            $id: >-
                                              https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                            $comment: >-
                                              NativeMindNONC — freedome_contract (see
                                              LICENSE). RFC 9457 problem details with
                                              the Freedome `code` catalogue, 02e §3.3.
                                              Also the `data` of WS `error`, the
                                              socket.io ack error and GraphQL
                                              errors[].extensions.problem. The
                                              catalogue is open: unknown codes are
                                              allowed; known codes are bound to their
                                              HTTP status.
                                            title: Problem details
                                            type: object
                                            required:
                                              - type
                                              - title
                                              - code
                                            properties:
                                              type:
                                                type: string
                                                format: uri
                                                description: >-
                                                  https://freedome.nativemind.us/problems/<code>
                                                  for catalogue codes.
                                              title:
                                                type: string
                                                minLength: 1
                                              status:
                                                type: integer
                                                minimum: 100
                                                maximum: 599
                                              detail:
                                                type: string
                                              instance:
                                                type: string
                                                format: uri-reference
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                              traceId:
                                                type: string
                                                pattern: ^[0-9a-f]{16,32}$
                                              errors:
                                                type: array
                                                items:
                                                  type: object
                                                  required:
                                                    - pointer
                                                    - detail
                                                  properties:
                                                    pointer:
                                                      type: string
                                                      format: json-pointer
                                                    detail:
                                                      type: string
                                                    code:
                                                      description: >-
                                                        Stable machine key; also the last path
                                                        segment of `type`. Open set: see
                                                        knownCode.
                                                      type: string
                                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                  additionalProperties: true
                                            allOf:
                                              - if:
                                                  properties:
                                                    code:
                                                      const: validation-failed
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 422
                                              - if:
                                                  properties:
                                                    code:
                                                      const: not-found
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 404
                                              - if:
                                                  properties:
                                                    code:
                                                      const: conflict
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 409
                                              - if:
                                                  properties:
                                                    code:
                                                      const: precondition-failed
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 412
                                              - if:
                                                  properties:
                                                    code:
                                                      const: precondition-required
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 428
                                              - if:
                                                  properties:
                                                    code:
                                                      const: unauthenticated
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 401
                                              - if:
                                                  properties:
                                                    code:
                                                      const: forbidden
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 403
                                              - if:
                                                  properties:
                                                    code:
                                                      const: rate-limited
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 429
                                              - if:
                                                  properties:
                                                    code:
                                                      const: payload-too-large
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 413
                                              - if:
                                                  properties:
                                                    code:
                                                      const: unsupported-format
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 415
                                              - if:
                                                  properties:
                                                    code:
                                                      const: engine-unavailable
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 503
                                              - if:
                                                  properties:
                                                    code:
                                                      const: engine-incompatible
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 503
                                              - if:
                                                  properties:
                                                    code:
                                                      const: degraded
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 503
                                              - if:
                                                  properties:
                                                    code:
                                                      const: upload-checksum-mismatch
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 422
                                              - if:
                                                  properties:
                                                    code:
                                                      const: legacy-unsupported
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 501
                                              - if:
                                                  properties:
                                                    code:
                                                      const: internal
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 500
                                              - if:
                                                  properties:
                                                    code:
                                                      const: clock-unlocked
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 409
                                              - if:
                                                  properties:
                                                    code:
                                                      const: not-configured
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 503
                                              - if:
                                                  properties:
                                                    code:
                                                      const: authorization-pending
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 400
                                              - if:
                                                  properties:
                                                    code:
                                                      const: slow-down
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 400
                                              - if:
                                                  properties:
                                                    code:
                                                      const: access-denied
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 403
                                              - if:
                                                  properties:
                                                    code:
                                                      const: expired-token
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 400
                                              - if:
                                                  properties:
                                                    code:
                                                      const: token-reused
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 401
                                              - if:
                                                  properties:
                                                    code:
                                                      const: idempotency-key-reused
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 409
                                              - if:
                                                  properties:
                                                    code:
                                                      const: idempotency-in-progress
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 409
                                            additionalProperties: true
                                            examples:
                                              - type: >-
                                                  https://freedome.nativemind.us/problems/engine-unavailable
                                                title: Visual engine unavailable
                                                status: 503
                                                detail: >-
                                                  freedome-engined not reachable at
                                                  unix:/run/freedome/engine.sock
                                                instance: /api/v1/venues/default/players/main/play
                                                code: engine-unavailable
                                                traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                            $defs:
                                              knownCode:
                                                enum:
                                                  - validation-failed
                                                  - not-found
                                                  - conflict
                                                  - precondition-failed
                                                  - precondition-required
                                                  - unauthenticated
                                                  - forbidden
                                                  - rate-limited
                                                  - payload-too-large
                                                  - unsupported-format
                                                  - engine-unavailable
                                                  - engine-incompatible
                                                  - degraded
                                                  - job-failed
                                                  - upload-checksum-mismatch
                                                  - legacy-unsupported
                                                  - internal
                                                  - clock-unlocked
                                                  - not-configured
                                                  - authorization-pending
                                                  - slow-down
                                                  - access-denied
                                                  - expired-token
                                                  - token-reused
                                                  - idempotency-key-reused
                                                  - idempotency-in-progress
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                              fieldError:
                                                type: object
                                                required:
                                                  - pointer
                                                  - detail
                                                properties:
                                                  pointer:
                                                    type: string
                                                    format: json-pointer
                                                  detail:
                                                    type: string
                                                  code:
                                                    description: >-
                                                      Stable machine key; also the last path
                                                      segment of `type`. Open set: see
                                                      knownCode.
                                                    type: string
                                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                additionalProperties: true
                                        additionalProperties: false
                                      rest:
                                        type: object
                                        required:
                                          - state
                                        properties:
                                          state:
                                            anyOf:
                                              - enum:
                                                  - disabled
                                                  - connecting
                                                  - up
                                                  - down
                                              - type: string
                                                pattern: ^[a-z][a-z_-]{0,31}$
                                            description: >-
                                              for OSC over UDP, up means sending:
                                              there is no acknowledgement
                                          lastOkAt:
                                            description: >-
                                              RFC 3339 UTC with milliseconds, e.g.
                                              2026-10-19T12:00:00.000Z.
                                            type: string
                                            format: date-time
                                            pattern: >-
                                              ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                          sent:
                                            type: integer
                                            minimum: 0
                                          dropped:
                                            type: integer
                                            minimum: 0
                                          problem:
                                            $schema: >-
                                              https://json-schema.org/draft/2020-12/schema
                                            $id: >-
                                              https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                            $comment: >-
                                              NativeMindNONC — freedome_contract (see
                                              LICENSE). RFC 9457 problem details with
                                              the Freedome `code` catalogue, 02e §3.3.
                                              Also the `data` of WS `error`, the
                                              socket.io ack error and GraphQL
                                              errors[].extensions.problem. The
                                              catalogue is open: unknown codes are
                                              allowed; known codes are bound to their
                                              HTTP status.
                                            title: Problem details
                                            type: object
                                            required:
                                              - type
                                              - title
                                              - code
                                            properties:
                                              type:
                                                type: string
                                                format: uri
                                                description: >-
                                                  https://freedome.nativemind.us/problems/<code>
                                                  for catalogue codes.
                                              title:
                                                type: string
                                                minLength: 1
                                              status:
                                                type: integer
                                                minimum: 100
                                                maximum: 599
                                              detail:
                                                type: string
                                              instance:
                                                type: string
                                                format: uri-reference
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                              traceId:
                                                type: string
                                                pattern: ^[0-9a-f]{16,32}$
                                              errors:
                                                type: array
                                                items:
                                                  type: object
                                                  required:
                                                    - pointer
                                                    - detail
                                                  properties:
                                                    pointer:
                                                      type: string
                                                      format: json-pointer
                                                    detail:
                                                      type: string
                                                    code:
                                                      description: >-
                                                        Stable machine key; also the last path
                                                        segment of `type`. Open set: see
                                                        knownCode.
                                                      type: string
                                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                  additionalProperties: true
                                            allOf:
                                              - if:
                                                  properties:
                                                    code:
                                                      const: validation-failed
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 422
                                              - if:
                                                  properties:
                                                    code:
                                                      const: not-found
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 404
                                              - if:
                                                  properties:
                                                    code:
                                                      const: conflict
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 409
                                              - if:
                                                  properties:
                                                    code:
                                                      const: precondition-failed
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 412
                                              - if:
                                                  properties:
                                                    code:
                                                      const: precondition-required
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 428
                                              - if:
                                                  properties:
                                                    code:
                                                      const: unauthenticated
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 401
                                              - if:
                                                  properties:
                                                    code:
                                                      const: forbidden
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 403
                                              - if:
                                                  properties:
                                                    code:
                                                      const: rate-limited
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 429
                                              - if:
                                                  properties:
                                                    code:
                                                      const: payload-too-large
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 413
                                              - if:
                                                  properties:
                                                    code:
                                                      const: unsupported-format
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 415
                                              - if:
                                                  properties:
                                                    code:
                                                      const: engine-unavailable
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 503
                                              - if:
                                                  properties:
                                                    code:
                                                      const: engine-incompatible
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 503
                                              - if:
                                                  properties:
                                                    code:
                                                      const: degraded
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 503
                                              - if:
                                                  properties:
                                                    code:
                                                      const: upload-checksum-mismatch
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 422
                                              - if:
                                                  properties:
                                                    code:
                                                      const: legacy-unsupported
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 501
                                              - if:
                                                  properties:
                                                    code:
                                                      const: internal
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 500
                                              - if:
                                                  properties:
                                                    code:
                                                      const: clock-unlocked
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 409
                                              - if:
                                                  properties:
                                                    code:
                                                      const: not-configured
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 503
                                              - if:
                                                  properties:
                                                    code:
                                                      const: authorization-pending
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 400
                                              - if:
                                                  properties:
                                                    code:
                                                      const: slow-down
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 400
                                              - if:
                                                  properties:
                                                    code:
                                                      const: access-denied
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 403
                                              - if:
                                                  properties:
                                                    code:
                                                      const: expired-token
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 400
                                              - if:
                                                  properties:
                                                    code:
                                                      const: token-reused
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 401
                                              - if:
                                                  properties:
                                                    code:
                                                      const: idempotency-key-reused
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 409
                                              - if:
                                                  properties:
                                                    code:
                                                      const: idempotency-in-progress
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 409
                                            additionalProperties: true
                                            examples:
                                              - type: >-
                                                  https://freedome.nativemind.us/problems/engine-unavailable
                                                title: Visual engine unavailable
                                                status: 503
                                                detail: >-
                                                  freedome-engined not reachable at
                                                  unix:/run/freedome/engine.sock
                                                instance: /api/v1/venues/default/players/main/play
                                                code: engine-unavailable
                                                traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                            $defs:
                                              knownCode:
                                                enum:
                                                  - validation-failed
                                                  - not-found
                                                  - conflict
                                                  - precondition-failed
                                                  - precondition-required
                                                  - unauthenticated
                                                  - forbidden
                                                  - rate-limited
                                                  - payload-too-large
                                                  - unsupported-format
                                                  - engine-unavailable
                                                  - engine-incompatible
                                                  - degraded
                                                  - job-failed
                                                  - upload-checksum-mismatch
                                                  - legacy-unsupported
                                                  - internal
                                                  - clock-unlocked
                                                  - not-configured
                                                  - authorization-pending
                                                  - slow-down
                                                  - access-denied
                                                  - expired-token
                                                  - token-reused
                                                  - idempotency-key-reused
                                                  - idempotency-in-progress
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                              fieldError:
                                                type: object
                                                required:
                                                  - pointer
                                                  - detail
                                                properties:
                                                  pointer:
                                                    type: string
                                                    format: json-pointer
                                                  detail:
                                                    type: string
                                                  code:
                                                    description: >-
                                                      Stable machine key; also the last path
                                                      segment of `type`. Open set: see
                                                      knownCode.
                                                    type: string
                                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                additionalProperties: true
                                        additionalProperties: false
                                      ws:
                                        type: object
                                        required:
                                          - state
                                        properties:
                                          state:
                                            anyOf:
                                              - enum:
                                                  - disabled
                                                  - connecting
                                                  - up
                                                  - down
                                              - type: string
                                                pattern: ^[a-z][a-z_-]{0,31}$
                                            description: >-
                                              for OSC over UDP, up means sending:
                                              there is no acknowledgement
                                          lastOkAt:
                                            description: >-
                                              RFC 3339 UTC with milliseconds, e.g.
                                              2026-10-19T12:00:00.000Z.
                                            type: string
                                            format: date-time
                                            pattern: >-
                                              ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                          sent:
                                            type: integer
                                            minimum: 0
                                          dropped:
                                            type: integer
                                            minimum: 0
                                          problem:
                                            $schema: >-
                                              https://json-schema.org/draft/2020-12/schema
                                            $id: >-
                                              https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                            $comment: >-
                                              NativeMindNONC — freedome_contract (see
                                              LICENSE). RFC 9457 problem details with
                                              the Freedome `code` catalogue, 02e §3.3.
                                              Also the `data` of WS `error`, the
                                              socket.io ack error and GraphQL
                                              errors[].extensions.problem. The
                                              catalogue is open: unknown codes are
                                              allowed; known codes are bound to their
                                              HTTP status.
                                            title: Problem details
                                            type: object
                                            required:
                                              - type
                                              - title
                                              - code
                                            properties:
                                              type:
                                                type: string
                                                format: uri
                                                description: >-
                                                  https://freedome.nativemind.us/problems/<code>
                                                  for catalogue codes.
                                              title:
                                                type: string
                                                minLength: 1
                                              status:
                                                type: integer
                                                minimum: 100
                                                maximum: 599
                                              detail:
                                                type: string
                                              instance:
                                                type: string
                                                format: uri-reference
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                              traceId:
                                                type: string
                                                pattern: ^[0-9a-f]{16,32}$
                                              errors:
                                                type: array
                                                items:
                                                  type: object
                                                  required:
                                                    - pointer
                                                    - detail
                                                  properties:
                                                    pointer:
                                                      type: string
                                                      format: json-pointer
                                                    detail:
                                                      type: string
                                                    code:
                                                      description: >-
                                                        Stable machine key; also the last path
                                                        segment of `type`. Open set: see
                                                        knownCode.
                                                      type: string
                                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                  additionalProperties: true
                                            allOf:
                                              - if:
                                                  properties:
                                                    code:
                                                      const: validation-failed
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 422
                                              - if:
                                                  properties:
                                                    code:
                                                      const: not-found
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 404
                                              - if:
                                                  properties:
                                                    code:
                                                      const: conflict
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 409
                                              - if:
                                                  properties:
                                                    code:
                                                      const: precondition-failed
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 412
                                              - if:
                                                  properties:
                                                    code:
                                                      const: precondition-required
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 428
                                              - if:
                                                  properties:
                                                    code:
                                                      const: unauthenticated
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 401
                                              - if:
                                                  properties:
                                                    code:
                                                      const: forbidden
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 403
                                              - if:
                                                  properties:
                                                    code:
                                                      const: rate-limited
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 429
                                              - if:
                                                  properties:
                                                    code:
                                                      const: payload-too-large
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 413
                                              - if:
                                                  properties:
                                                    code:
                                                      const: unsupported-format
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 415
                                              - if:
                                                  properties:
                                                    code:
                                                      const: engine-unavailable
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 503
                                              - if:
                                                  properties:
                                                    code:
                                                      const: engine-incompatible
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 503
                                              - if:
                                                  properties:
                                                    code:
                                                      const: degraded
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 503
                                              - if:
                                                  properties:
                                                    code:
                                                      const: upload-checksum-mismatch
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 422
                                              - if:
                                                  properties:
                                                    code:
                                                      const: legacy-unsupported
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 501
                                              - if:
                                                  properties:
                                                    code:
                                                      const: internal
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 500
                                              - if:
                                                  properties:
                                                    code:
                                                      const: clock-unlocked
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 409
                                              - if:
                                                  properties:
                                                    code:
                                                      const: not-configured
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 503
                                              - if:
                                                  properties:
                                                    code:
                                                      const: authorization-pending
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 400
                                              - if:
                                                  properties:
                                                    code:
                                                      const: slow-down
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 400
                                              - if:
                                                  properties:
                                                    code:
                                                      const: access-denied
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 403
                                              - if:
                                                  properties:
                                                    code:
                                                      const: expired-token
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 400
                                              - if:
                                                  properties:
                                                    code:
                                                      const: token-reused
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 401
                                              - if:
                                                  properties:
                                                    code:
                                                      const: idempotency-key-reused
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 409
                                              - if:
                                                  properties:
                                                    code:
                                                      const: idempotency-in-progress
                                                  required:
                                                    - code
                                                then:
                                                  properties:
                                                    status:
                                                      const: 409
                                            additionalProperties: true
                                            examples:
                                              - type: >-
                                                  https://freedome.nativemind.us/problems/engine-unavailable
                                                title: Visual engine unavailable
                                                status: 503
                                                detail: >-
                                                  freedome-engined not reachable at
                                                  unix:/run/freedome/engine.sock
                                                instance: /api/v1/venues/default/players/main/play
                                                code: engine-unavailable
                                                traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                            $defs:
                                              knownCode:
                                                enum:
                                                  - validation-failed
                                                  - not-found
                                                  - conflict
                                                  - precondition-failed
                                                  - precondition-required
                                                  - unauthenticated
                                                  - forbidden
                                                  - rate-limited
                                                  - payload-too-large
                                                  - unsupported-format
                                                  - engine-unavailable
                                                  - engine-incompatible
                                                  - degraded
                                                  - job-failed
                                                  - upload-checksum-mismatch
                                                  - legacy-unsupported
                                                  - internal
                                                  - clock-unlocked
                                                  - not-configured
                                                  - authorization-pending
                                                  - slow-down
                                                  - access-denied
                                                  - expired-token
                                                  - token-reused
                                                  - idempotency-key-reused
                                                  - idempotency-in-progress
                                              code:
                                                description: >-
                                                  Stable machine key; also the last path
                                                  segment of `type`. Open set: see
                                                  knownCode.
                                                type: string
                                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                              fieldError:
                                                type: object
                                                required:
                                                  - pointer
                                                  - detail
                                                properties:
                                                  pointer:
                                                    type: string
                                                    format: json-pointer
                                                  detail:
                                                    type: string
                                                  code:
                                                    description: >-
                                                      Stable machine key; also the last path
                                                      segment of `type`. Open set: see
                                                      knownCode.
                                                    type: string
                                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                                additionalProperties: true
                                        additionalProperties: false
                                      product:
                                        description: >-
                                          GET /api/v1/product of Resolume, when
                                          reachable.
                                        type: object
                                        properties:
                                          name:
                                            type: string
                                          major:
                                            type: integer
                                            minimum: 0
                                          minor:
                                            type: integer
                                            minimum: 0
                                          micro:
                                            type: integer
                                            minimum: 0
                                          revision:
                                            type: integer
                                            minimum: 0
                                        additionalProperties: false
                                      composition:
                                        description: Summary of the open composition.
                                        type: object
                                        properties:
                                          name:
                                            type: string
                                          layers:
                                            type: integer
                                            minimum: 0
                                          columns:
                                            type: integer
                                            minimum: 0
                                          decks:
                                            type: integer
                                            minimum: 0
                                        additionalProperties: false
                                      lastSyncAt:
                                        description: >-
                                          RFC 3339 UTC with milliseconds, e.g.
                                          2026-10-19T12:00:00.000Z.
                                        type: string
                                        format: date-time
                                        pattern: >-
                                          ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    additionalProperties: false
                                if:
                                  properties:
                                    protocol:
                                      const: resolume
                                  required:
                                    - protocol
                                then:
                                  properties:
                                    config:
                                      description: >-
                                        `config` of the outbound Resolume Arena
                                        / Avenue driver (protocol resolume).
                                        Defaults are Resolume's own ports; they
                                        equal the media server's defaults, so on
                                        one machine move the media server
                                        (docs/audio-reactive.md).
                                      type: object
                                      required:
                                        - host
                                      properties:
                                        host:
                                          type: string
                                          minLength: 1
                                          maxLength: 253
                                          description: host name or IP of the Resolume machine
                                        oscPort:
                                          type: integer
                                          minimum: 1
                                          maximum: 65535
                                          default: 7000
                                        restPort:
                                          type: integer
                                          minimum: 1
                                          maximum: 65535
                                          default: 8080
                                        ws:
                                          type: boolean
                                          default: true
                                          description: >-
                                            keep the WebSocket API connection
                                            (ws://host:restPort/api/v1) for state
                                        oscMaxRateHz:
                                          type: number
                                          exclusiveMinimum: 0
                                          maximum: 1000
                                          description: >-
                                            highest send rate per OSC address; newer
                                            values replace unsent ones
                                      patternProperties:
                                        ^x-: true
                                      additionalProperties: false
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                          additionalProperties: false
                        testResult:
                          type: object
                          required:
                            - gatewayId
                            - ok
                          properties:
                            gatewayId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            ok:
                              type: boolean
                            latencyMs:
                              type: number
                              minimum: 0
                            remoteVersion:
                              type: string
                            detail:
                              type: string
                            problem:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). RFC 9457 problem details with the
                                Freedome `code` catalogue, 02e §3.3. Also the
                                `data` of WS `error`, the socket.io ack error
                                and GraphQL errors[].extensions.problem. The
                                catalogue is open: unknown codes are allowed;
                                known codes are bound to their HTTP status.
                              title: Problem details
                              type: object
                              required:
                                - type
                                - title
                                - code
                              properties:
                                type:
                                  type: string
                                  format: uri
                                  description: >-
                                    https://freedome.nativemind.us/problems/<code>
                                    for catalogue codes.
                                title:
                                  type: string
                                  minLength: 1
                                status:
                                  type: integer
                                  minimum: 100
                                  maximum: 599
                                detail:
                                  type: string
                                instance:
                                  type: string
                                  format: uri-reference
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                traceId:
                                  type: string
                                  pattern: ^[0-9a-f]{16,32}$
                                errors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              allOf:
                                - if:
                                    properties:
                                      code:
                                        const: validation-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: not-found
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 404
                                - if:
                                    properties:
                                      code:
                                        const: conflict
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: precondition-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 412
                                - if:
                                    properties:
                                      code:
                                        const: precondition-required
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 428
                                - if:
                                    properties:
                                      code:
                                        const: unauthenticated
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: forbidden
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: rate-limited
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 429
                                - if:
                                    properties:
                                      code:
                                        const: payload-too-large
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 413
                                - if:
                                    properties:
                                      code:
                                        const: unsupported-format
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 415
                                - if:
                                    properties:
                                      code:
                                        const: engine-unavailable
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: engine-incompatible
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: degraded
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: upload-checksum-mismatch
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: legacy-unsupported
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 501
                                - if:
                                    properties:
                                      code:
                                        const: internal
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 500
                                - if:
                                    properties:
                                      code:
                                        const: clock-unlocked
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: not-configured
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: authorization-pending
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: slow-down
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: access-denied
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: expired-token
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: token-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-key-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-in-progress
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                              additionalProperties: true
                              examples:
                                - type: >-
                                    https://freedome.nativemind.us/problems/engine-unavailable
                                  title: Visual engine unavailable
                                  status: 503
                                  detail: >-
                                    freedome-engined not reachable at
                                    unix:/run/freedome/engine.sock
                                  instance: /api/v1/venues/default/players/main/play
                                  code: engine-unavailable
                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                              $defs:
                                knownCode:
                                  enum:
                                    - validation-failed
                                    - not-found
                                    - conflict
                                    - precondition-failed
                                    - precondition-required
                                    - unauthenticated
                                    - forbidden
                                    - rate-limited
                                    - payload-too-large
                                    - unsupported-format
                                    - engine-unavailable
                                    - engine-incompatible
                                    - degraded
                                    - job-failed
                                    - upload-checksum-mismatch
                                    - legacy-unsupported
                                    - internal
                                    - clock-unlocked
                                    - not-configured
                                    - authorization-pending
                                    - slow-down
                                    - access-denied
                                    - expired-token
                                    - token-reused
                                    - idempotency-key-reused
                                    - idempotency-in-progress
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                fieldError:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                          additionalProperties: false
                        oscArg:
                          type: object
                          required:
                            - type
                            - value
                          properties:
                            type:
                              enum:
                                - i
                                - f
                                - s
                                - b
                                - T
                                - F
                                - h
                                - d
                                - t
                                - 'N'
                            value:
                              anyOf:
                                - type: number
                                - type: string
                                - type: boolean
                                - type: 'null'
                              description: b = base64 blob; t = NTP time tag as RFC 3339
                          additionalProperties: false
                        sendOsc:
                          description: >-
                            POST /integrations/osc/send: to a configured OSC
                            target only (never an arbitrary host).
                          type: object
                          required:
                            - target
                            - address
                          properties:
                            target:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            address:
                              type: string
                              pattern: ^/[^\s#*,?\[\]{}]*$
                            args:
                              type: array
                              items:
                                type: object
                                required:
                                  - type
                                  - value
                                properties:
                                  type:
                                    enum:
                                      - i
                                      - f
                                      - s
                                      - b
                                      - T
                                      - F
                                      - h
                                      - d
                                      - t
                                      - 'N'
                                  value:
                                    anyOf:
                                      - type: number
                                      - type: string
                                      - type: boolean
                                      - type: 'null'
                                    description: >-
                                      b = base64 blob; t = NTP time tag as RFC
                                      3339
                                additionalProperties: false
                              maxItems: 64
                          additionalProperties: false
                    patch:
                      description: Merge patch of the resource (high-rate kinds).
                      type: object
                      minProperties: 1
              - if:
                  properties:
                    kind:
                      const: gateway.message
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: Debug trace of a gateway message (gateways:manage only).
                      type: object
                      required:
                        - direction
                        - summary
                      properties:
                        direction:
                          enum:
                            - in
                            - out
                        peer:
                          type: string
                        summary:
                          type: string
                        mapsTo:
                          description: >-
                            OpenAPI operationId (camelCase); also the `op` of WS
                            / socket.io `call`.
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*$
                        raw:
                          type: string
                          maxLength: 4096
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: app.payload
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: >-
                        Response of publishAppPayload and the `data.resource` of
                        event app.payload.
                      type: object
                      required:
                        - id
                        - app
                        - kind
                        - expiresAt
                      properties:
                        id:
                          description: >-
                            Server-owned resource id: UUIDv7, lowercase,
                            sortable by creation time.
                          type: string
                          pattern: >-
                            ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                          examples:
                            - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                        app:
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,128}$
                        kind:
                          type: string
                        schema:
                          type: string
                        data: {}
                        publishedBy:
                          type: string
                        expiresAt:
                          description: >-
                            RFC 3339 UTC with milliseconds, e.g.
                            2026-10-19T12:00:00.000Z.
                          type: string
                          format: date-time
                          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: app.cleared
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      type: object
                      required:
                        - app
                      properties:
                        app:
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,128}$
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: client.command
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: >-
                        Server → device command, delivered as event
                        client.command on clients/{clientId}/commands.
                      type: object
                      required:
                        - command
                      properties:
                        command:
                          anyOf:
                            - enum:
                                - vibrate
                                - capture
                                - sensors
                                - biometric
                            - type: string
                              pattern: ^[a-z][A-Za-z0-9_.-]{0,63}$
                        params:
                          type: object
                          additionalProperties: true
                        expiresAt:
                          description: >-
                            RFC 3339 UTC with milliseconds, e.g.
                            2026-10-19T12:00:00.000Z.
                          type: string
                          format: date-time
                          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: session.revoked
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      type: object
                      required:
                        - reason
                      properties:
                        sessionId:
                          type: string
                        reason:
                          anyOf:
                            - enum:
                                - signed-out
                                - refresh-reuse
                                - password-changed
                                - user-deleted
                                - key-revoked
                                - admin
                            - type: string
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: scenarioSession.state
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/api/1.0/scenario-session.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE).
                        Scenario session (02d §3 ScenarioSession, UC-SC2–SC4;
                        topic venues/{venueId}/scenarios/{sessionId}, RC5). Root
                        = GET /venues/{venueId}/scenario-sessions/{sessionId}.
                      title: Scenario session
                      allOf:
                        - type: object
                          required:
                            - id
                            - venueId
                            - scenarioId
                            - status
                            - params
                            - startedAt
                          properties:
                            id:
                              description: >-
                                Server-owned resource id: UUIDv7, lowercase,
                                sortable by creation time.
                              type: string
                              pattern: >-
                                ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                              examples:
                                - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                            venueId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            scenarioId:
                              type: string
                              pattern: ^[a-z][a-z0-9_]{0,63}$
                            scenarioVersion:
                              description: Semantic version 2.0.0.
                              type: string
                              pattern: >-
                                ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$
                            status:
                              anyOf:
                                - enum:
                                    - starting
                                    - running
                                    - paused
                                    - finished
                                    - stopped
                                    - failed
                                - type: string
                                  pattern: ^[a-z][a-z_-]{0,31}$
                            params:
                              type: object
                            owner:
                              type: string
                              description: >-
                                principal that started it (the session runs with
                                its role)
                            progress:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            phase:
                              type: string
                            message:
                              type: string
                            problem:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). RFC 9457 problem details with the
                                Freedome `code` catalogue, 02e §3.3. Also the
                                `data` of WS `error`, the socket.io ack error
                                and GraphQL errors[].extensions.problem. The
                                catalogue is open: unknown codes are allowed;
                                known codes are bound to their HTTP status.
                              title: Problem details
                              type: object
                              required:
                                - type
                                - title
                                - code
                              properties:
                                type:
                                  type: string
                                  format: uri
                                  description: >-
                                    https://freedome.nativemind.us/problems/<code>
                                    for catalogue codes.
                                title:
                                  type: string
                                  minLength: 1
                                status:
                                  type: integer
                                  minimum: 100
                                  maximum: 599
                                detail:
                                  type: string
                                instance:
                                  type: string
                                  format: uri-reference
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                traceId:
                                  type: string
                                  pattern: ^[0-9a-f]{16,32}$
                                errors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              allOf:
                                - if:
                                    properties:
                                      code:
                                        const: validation-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: not-found
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 404
                                - if:
                                    properties:
                                      code:
                                        const: conflict
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: precondition-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 412
                                - if:
                                    properties:
                                      code:
                                        const: precondition-required
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 428
                                - if:
                                    properties:
                                      code:
                                        const: unauthenticated
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: forbidden
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: rate-limited
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 429
                                - if:
                                    properties:
                                      code:
                                        const: payload-too-large
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 413
                                - if:
                                    properties:
                                      code:
                                        const: unsupported-format
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 415
                                - if:
                                    properties:
                                      code:
                                        const: engine-unavailable
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: engine-incompatible
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: degraded
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: upload-checksum-mismatch
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: legacy-unsupported
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 501
                                - if:
                                    properties:
                                      code:
                                        const: internal
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 500
                                - if:
                                    properties:
                                      code:
                                        const: clock-unlocked
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: not-configured
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: authorization-pending
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: slow-down
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: access-denied
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: expired-token
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: token-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-key-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-in-progress
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                              additionalProperties: true
                              examples:
                                - type: >-
                                    https://freedome.nativemind.us/problems/engine-unavailable
                                  title: Visual engine unavailable
                                  status: 503
                                  detail: >-
                                    freedome-engined not reachable at
                                    unix:/run/freedome/engine.sock
                                  instance: /api/v1/venues/default/players/main/play
                                  code: engine-unavailable
                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                              $defs:
                                knownCode:
                                  enum:
                                    - validation-failed
                                    - not-found
                                    - conflict
                                    - precondition-failed
                                    - precondition-required
                                    - unauthenticated
                                    - forbidden
                                    - rate-limited
                                    - payload-too-large
                                    - unsupported-format
                                    - engine-unavailable
                                    - engine-incompatible
                                    - degraded
                                    - job-failed
                                    - upload-checksum-mismatch
                                    - legacy-unsupported
                                    - internal
                                    - clock-unlocked
                                    - not-configured
                                    - authorization-pending
                                    - slow-down
                                    - access-denied
                                    - expired-token
                                    - token-reused
                                    - idempotency-key-reused
                                    - idempotency-in-progress
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                fieldError:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                            startedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            endedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                          allOf:
                            - if:
                                properties:
                                  status:
                                    const: failed
                                required:
                                  - status
                              then:
                                required:
                                  - problem
                      $defs:
                        status:
                          anyOf:
                            - enum:
                                - starting
                                - running
                                - paused
                                - finished
                                - stopped
                                - failed
                            - type: string
                              pattern: ^[a-z][a-z_-]{0,31}$
                        session:
                          type: object
                          required:
                            - id
                            - venueId
                            - scenarioId
                            - status
                            - params
                            - startedAt
                          properties:
                            id:
                              description: >-
                                Server-owned resource id: UUIDv7, lowercase,
                                sortable by creation time.
                              type: string
                              pattern: >-
                                ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                              examples:
                                - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                            venueId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            scenarioId:
                              type: string
                              pattern: ^[a-z][a-z0-9_]{0,63}$
                            scenarioVersion:
                              description: Semantic version 2.0.0.
                              type: string
                              pattern: >-
                                ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$
                            status:
                              anyOf:
                                - enum:
                                    - starting
                                    - running
                                    - paused
                                    - finished
                                    - stopped
                                    - failed
                                - type: string
                                  pattern: ^[a-z][a-z_-]{0,31}$
                            params:
                              type: object
                            owner:
                              type: string
                              description: >-
                                principal that started it (the session runs with
                                its role)
                            progress:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            phase:
                              type: string
                            message:
                              type: string
                            problem:
                              $schema: https://json-schema.org/draft/2020-12/schema
                              $id: >-
                                https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                              $comment: >-
                                NativeMindNONC — freedome_contract (see
                                LICENSE). RFC 9457 problem details with the
                                Freedome `code` catalogue, 02e §3.3. Also the
                                `data` of WS `error`, the socket.io ack error
                                and GraphQL errors[].extensions.problem. The
                                catalogue is open: unknown codes are allowed;
                                known codes are bound to their HTTP status.
                              title: Problem details
                              type: object
                              required:
                                - type
                                - title
                                - code
                              properties:
                                type:
                                  type: string
                                  format: uri
                                  description: >-
                                    https://freedome.nativemind.us/problems/<code>
                                    for catalogue codes.
                                title:
                                  type: string
                                  minLength: 1
                                status:
                                  type: integer
                                  minimum: 100
                                  maximum: 599
                                detail:
                                  type: string
                                instance:
                                  type: string
                                  format: uri-reference
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                traceId:
                                  type: string
                                  pattern: ^[0-9a-f]{16,32}$
                                errors:
                                  type: array
                                  items:
                                    type: object
                                    required:
                                      - pointer
                                      - detail
                                    properties:
                                      pointer:
                                        type: string
                                        format: json-pointer
                                      detail:
                                        type: string
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    additionalProperties: true
                              allOf:
                                - if:
                                    properties:
                                      code:
                                        const: validation-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: not-found
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 404
                                - if:
                                    properties:
                                      code:
                                        const: conflict
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: precondition-failed
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 412
                                - if:
                                    properties:
                                      code:
                                        const: precondition-required
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 428
                                - if:
                                    properties:
                                      code:
                                        const: unauthenticated
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: forbidden
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: rate-limited
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 429
                                - if:
                                    properties:
                                      code:
                                        const: payload-too-large
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 413
                                - if:
                                    properties:
                                      code:
                                        const: unsupported-format
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 415
                                - if:
                                    properties:
                                      code:
                                        const: engine-unavailable
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: engine-incompatible
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: degraded
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: upload-checksum-mismatch
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 422
                                - if:
                                    properties:
                                      code:
                                        const: legacy-unsupported
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 501
                                - if:
                                    properties:
                                      code:
                                        const: internal
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 500
                                - if:
                                    properties:
                                      code:
                                        const: clock-unlocked
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: not-configured
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 503
                                - if:
                                    properties:
                                      code:
                                        const: authorization-pending
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: slow-down
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: access-denied
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 403
                                - if:
                                    properties:
                                      code:
                                        const: expired-token
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 400
                                - if:
                                    properties:
                                      code:
                                        const: token-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 401
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-key-reused
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                                - if:
                                    properties:
                                      code:
                                        const: idempotency-in-progress
                                    required:
                                      - code
                                  then:
                                    properties:
                                      status:
                                        const: 409
                              additionalProperties: true
                              examples:
                                - type: >-
                                    https://freedome.nativemind.us/problems/engine-unavailable
                                  title: Visual engine unavailable
                                  status: 503
                                  detail: >-
                                    freedome-engined not reachable at
                                    unix:/run/freedome/engine.sock
                                  instance: /api/v1/venues/default/players/main/play
                                  code: engine-unavailable
                                  traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                              $defs:
                                knownCode:
                                  enum:
                                    - validation-failed
                                    - not-found
                                    - conflict
                                    - precondition-failed
                                    - precondition-required
                                    - unauthenticated
                                    - forbidden
                                    - rate-limited
                                    - payload-too-large
                                    - unsupported-format
                                    - engine-unavailable
                                    - engine-incompatible
                                    - degraded
                                    - job-failed
                                    - upload-checksum-mismatch
                                    - legacy-unsupported
                                    - internal
                                    - clock-unlocked
                                    - not-configured
                                    - authorization-pending
                                    - slow-down
                                    - access-denied
                                    - expired-token
                                    - token-reused
                                    - idempotency-key-reused
                                    - idempotency-in-progress
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                fieldError:
                                  type: object
                                  required:
                                    - pointer
                                    - detail
                                  properties:
                                    pointer:
                                      type: string
                                      format: json-pointer
                                    detail:
                                      type: string
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                  additionalProperties: true
                            startedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            endedAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                          allOf:
                            - if:
                                properties:
                                  status:
                                    const: failed
                                required:
                                  - status
                              then:
                                required:
                                  - problem
                        start:
                          description: >-
                            POST /venues/{venueId}/scenario-sessions (UC-SC2);
                            params are validated against the scenario's
                            paramsSchema (422).
                          type: object
                          required:
                            - scenarioId
                          properties:
                            scenarioId:
                              type: string
                              pattern: ^[a-z][a-z0-9_]{0,63}$
                            params:
                              type: object
                              default: {}
                            at:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          additionalProperties: false
                        page:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                type: object
                                required:
                                  - id
                                  - venueId
                                  - scenarioId
                                  - status
                                  - params
                                  - startedAt
                                properties:
                                  id:
                                    description: >-
                                      Server-owned resource id: UUIDv7,
                                      lowercase, sortable by creation time.
                                    type: string
                                    pattern: >-
                                      ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                                    examples:
                                      - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                                  venueId:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  scenarioId:
                                    type: string
                                    pattern: ^[a-z][a-z0-9_]{0,63}$
                                  scenarioVersion:
                                    description: Semantic version 2.0.0.
                                    type: string
                                    pattern: >-
                                      ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$
                                  status:
                                    anyOf:
                                      - enum:
                                          - starting
                                          - running
                                          - paused
                                          - finished
                                          - stopped
                                          - failed
                                      - type: string
                                        pattern: ^[a-z][a-z_-]{0,31}$
                                  params:
                                    type: object
                                  owner:
                                    type: string
                                    description: >-
                                      principal that started it (the session
                                      runs with its role)
                                  progress:
                                    description: >-
                                      0..1 (brightness, linear volume gain,
                                      progress).
                                    type: number
                                    minimum: 0
                                    maximum: 1
                                  phase:
                                    type: string
                                  message:
                                    type: string
                                  problem:
                                    $schema: >-
                                      https://json-schema.org/draft/2020-12/schema
                                    $id: >-
                                      https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                    $comment: >-
                                      NativeMindNONC — freedome_contract (see
                                      LICENSE). RFC 9457 problem details with
                                      the Freedome `code` catalogue, 02e §3.3.
                                      Also the `data` of WS `error`, the
                                      socket.io ack error and GraphQL
                                      errors[].extensions.problem. The catalogue
                                      is open: unknown codes are allowed; known
                                      codes are bound to their HTTP status.
                                    title: Problem details
                                    type: object
                                    required:
                                      - type
                                      - title
                                      - code
                                    properties:
                                      type:
                                        type: string
                                        format: uri
                                        description: >-
                                          https://freedome.nativemind.us/problems/<code>
                                          for catalogue codes.
                                      title:
                                        type: string
                                        minLength: 1
                                      status:
                                        type: integer
                                        minimum: 100
                                        maximum: 599
                                      detail:
                                        type: string
                                      instance:
                                        type: string
                                        format: uri-reference
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      traceId:
                                        type: string
                                        pattern: ^[0-9a-f]{16,32}$
                                      errors:
                                        type: array
                                        items:
                                          type: object
                                          required:
                                            - pointer
                                            - detail
                                          properties:
                                            pointer:
                                              type: string
                                              format: json-pointer
                                            detail:
                                              type: string
                                            code:
                                              description: >-
                                                Stable machine key; also the last path
                                                segment of `type`. Open set: see
                                                knownCode.
                                              type: string
                                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                          additionalProperties: true
                                    allOf:
                                      - if:
                                          properties:
                                            code:
                                              const: validation-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: not-found
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 404
                                      - if:
                                          properties:
                                            code:
                                              const: conflict
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-failed
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 412
                                      - if:
                                          properties:
                                            code:
                                              const: precondition-required
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 428
                                      - if:
                                          properties:
                                            code:
                                              const: unauthenticated
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: forbidden
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: rate-limited
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 429
                                      - if:
                                          properties:
                                            code:
                                              const: payload-too-large
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 413
                                      - if:
                                          properties:
                                            code:
                                              const: unsupported-format
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 415
                                      - if:
                                          properties:
                                            code:
                                              const: engine-unavailable
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: engine-incompatible
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: degraded
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: upload-checksum-mismatch
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 422
                                      - if:
                                          properties:
                                            code:
                                              const: legacy-unsupported
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 501
                                      - if:
                                          properties:
                                            code:
                                              const: internal
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 500
                                      - if:
                                          properties:
                                            code:
                                              const: clock-unlocked
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: not-configured
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 503
                                      - if:
                                          properties:
                                            code:
                                              const: authorization-pending
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: slow-down
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: access-denied
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 403
                                      - if:
                                          properties:
                                            code:
                                              const: expired-token
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 400
                                      - if:
                                          properties:
                                            code:
                                              const: token-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 401
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-key-reused
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                      - if:
                                          properties:
                                            code:
                                              const: idempotency-in-progress
                                          required:
                                            - code
                                        then:
                                          properties:
                                            status:
                                              const: 409
                                    additionalProperties: true
                                    examples:
                                      - type: >-
                                          https://freedome.nativemind.us/problems/engine-unavailable
                                        title: Visual engine unavailable
                                        status: 503
                                        detail: >-
                                          freedome-engined not reachable at
                                          unix:/run/freedome/engine.sock
                                        instance: /api/v1/venues/default/players/main/play
                                        code: engine-unavailable
                                        traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                    $defs:
                                      knownCode:
                                        enum:
                                          - validation-failed
                                          - not-found
                                          - conflict
                                          - precondition-failed
                                          - precondition-required
                                          - unauthenticated
                                          - forbidden
                                          - rate-limited
                                          - payload-too-large
                                          - unsupported-format
                                          - engine-unavailable
                                          - engine-incompatible
                                          - degraded
                                          - job-failed
                                          - upload-checksum-mismatch
                                          - legacy-unsupported
                                          - internal
                                          - clock-unlocked
                                          - not-configured
                                          - authorization-pending
                                          - slow-down
                                          - access-denied
                                          - expired-token
                                          - token-reused
                                          - idempotency-key-reused
                                          - idempotency-in-progress
                                      code:
                                        description: >-
                                          Stable machine key; also the last path
                                          segment of `type`. Open set: see
                                          knownCode.
                                        type: string
                                        pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      fieldError:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  startedAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  endedAt:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                                allOf:
                                  - if:
                                      properties:
                                        status:
                                          const: failed
                                      required:
                                        - status
                                    then:
                                      required:
                                        - problem
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                          additionalProperties: false
                        logEntry:
                          type: object
                          required:
                            - seq
                            - ts
                            - level
                            - message
                          properties:
                            seq:
                              type: integer
                              minimum: 0
                            ts:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            level:
                              enum:
                                - debug
                                - info
                                - warn
                                - error
                            message:
                              type: string
                            fields:
                              type: object
                              additionalProperties: true
                          additionalProperties: false
                        logPage:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                type: object
                                required:
                                  - seq
                                  - ts
                                  - level
                                  - message
                                properties:
                                  seq:
                                    type: integer
                                    minimum: 0
                                  ts:
                                    description: >-
                                      RFC 3339 UTC with milliseconds, e.g.
                                      2026-10-19T12:00:00.000Z.
                                    type: string
                                    format: date-time
                                    pattern: >-
                                      ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                  level:
                                    enum:
                                      - debug
                                      - info
                                      - warn
                                      - error
                                  message:
                                    type: string
                                  fields:
                                    type: object
                                    additionalProperties: true
                                additionalProperties: false
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                          additionalProperties: false
                    patch:
                      description: Merge patch of the resource (high-rate kinds).
                      type: object
                      minProperties: 1
              - if:
                  properties:
                    kind:
                      const: scenarioSession.log
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      type: object
                      required:
                        - seq
                        - ts
                        - level
                        - message
                      properties:
                        seq:
                          type: integer
                          minimum: 0
                        ts:
                          description: >-
                            RFC 3339 UTC with milliseconds, e.g.
                            2026-10-19T12:00:00.000Z.
                          type: string
                          format: date-time
                          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                        level:
                          enum:
                            - debug
                            - info
                            - warn
                            - error
                        message:
                          type: string
                        fields:
                          type: object
                          additionalProperties: true
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: device.state
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/api/1.0/device.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). Visual
                        device agents speaking freedome.device.v1 (projector
                        variants FD-VP-*, master PR3, MS 1.MS.18): discovery,
                        pairing, binding to a display, telemetry. Root = GET
                        /devices/{deviceId}.
                      title: Visual device
                      allOf:
                        - type: object
                          required:
                            - id
                            - variant
                            - address
                            - paired
                            - state
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            serial:
                              type: string
                            product:
                              type: string
                            variant:
                              type: string
                              description: fd-vp-f-1, fd-vp-p-s, …
                            hwRevision:
                              type: string
                            agentVersion:
                              type: string
                            protocolVersion:
                              type: string
                            capabilities:
                              type: array
                              items:
                                type: string
                              uniqueItems: true
                            address:
                              type: string
                              description: host:port of the agent
                            paired:
                              type: boolean
                            displayId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                              description: venue display this device drives
                            state:
                              type: object
                              required:
                                - online
                              properties:
                                online:
                                  type: boolean
                                power:
                                  anyOf:
                                    - enum:
                                        - 'on'
                                        - 'off'
                                        - standby
                                        - warming
                                        - cooling
                                        - unknown
                                    - type: string
                                temperatureC:
                                  type: number
                                fanRpm:
                                  type: number
                                  minimum: 0
                                lampHours:
                                  type: number
                                  minimum: 0
                                battery:
                                  description: >-
                                    0..1 (brightness, linear volume gain,
                                    progress).
                                  type: number
                                  minimum: 0
                                  maximum: 1
                                faults:
                                  type: array
                                  items:
                                    type: string
                                lastSeen:
                                  description: >-
                                    RFC 3339 UTC with milliseconds, e.g.
                                    2026-10-19T12:00:00.000Z.
                                  type: string
                                  format: date-time
                                  pattern: >-
                                    ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              additionalProperties: true
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                      $defs:
                        device:
                          type: object
                          required:
                            - id
                            - variant
                            - address
                            - paired
                            - state
                          properties:
                            id:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            serial:
                              type: string
                            product:
                              type: string
                            variant:
                              type: string
                              description: fd-vp-f-1, fd-vp-p-s, …
                            hwRevision:
                              type: string
                            agentVersion:
                              type: string
                            protocolVersion:
                              type: string
                            capabilities:
                              type: array
                              items:
                                type: string
                              uniqueItems: true
                            address:
                              type: string
                              description: host:port of the agent
                            paired:
                              type: boolean
                            displayId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                              description: venue display this device drives
                            state:
                              type: object
                              required:
                                - online
                              properties:
                                online:
                                  type: boolean
                                power:
                                  anyOf:
                                    - enum:
                                        - 'on'
                                        - 'off'
                                        - standby
                                        - warming
                                        - cooling
                                        - unknown
                                    - type: string
                                temperatureC:
                                  type: number
                                fanRpm:
                                  type: number
                                  minimum: 0
                                lampHours:
                                  type: number
                                  minimum: 0
                                battery:
                                  description: >-
                                    0..1 (brightness, linear volume gain,
                                    progress).
                                  type: number
                                  minimum: 0
                                  maximum: 1
                                faults:
                                  type: array
                                  items:
                                    type: string
                                lastSeen:
                                  description: >-
                                    RFC 3339 UTC with milliseconds, e.g.
                                    2026-10-19T12:00:00.000Z.
                                  type: string
                                  format: date-time
                                  pattern: >-
                                    ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                              additionalProperties: true
                          patternProperties:
                            ^x-: true
                          additionalProperties: false
                        page:
                          type: object
                          required:
                            - items
                            - nextCursor
                          properties:
                            items:
                              type: array
                              items:
                                type: object
                                required:
                                  - id
                                  - variant
                                  - address
                                  - paired
                                  - state
                                properties:
                                  id:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  serial:
                                    type: string
                                  product:
                                    type: string
                                  variant:
                                    type: string
                                    description: fd-vp-f-1, fd-vp-p-s, …
                                  hwRevision:
                                    type: string
                                  agentVersion:
                                    type: string
                                  protocolVersion:
                                    type: string
                                  capabilities:
                                    type: array
                                    items:
                                      type: string
                                    uniqueItems: true
                                  address:
                                    type: string
                                    description: host:port of the agent
                                  paired:
                                    type: boolean
                                  displayId:
                                    anyOf:
                                      - description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      - type: 'null'
                                    description: venue display this device drives
                                  state:
                                    type: object
                                    required:
                                      - online
                                    properties:
                                      online:
                                        type: boolean
                                      power:
                                        anyOf:
                                          - enum:
                                              - 'on'
                                              - 'off'
                                              - standby
                                              - warming
                                              - cooling
                                              - unknown
                                          - type: string
                                      temperatureC:
                                        type: number
                                      fanRpm:
                                        type: number
                                        minimum: 0
                                      lampHours:
                                        type: number
                                        minimum: 0
                                      battery:
                                        description: >-
                                          0..1 (brightness, linear volume gain,
                                          progress).
                                        type: number
                                        minimum: 0
                                        maximum: 1
                                      faults:
                                        type: array
                                        items:
                                          type: string
                                      lastSeen:
                                        description: >-
                                          RFC 3339 UTC with milliseconds, e.g.
                                          2026-10-19T12:00:00.000Z.
                                        type: string
                                        format: date-time
                                        pattern: >-
                                          ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                    additionalProperties: true
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                            nextCursor:
                              anyOf:
                                - type: string
                                - type: 'null'
                          additionalProperties: false
                        pairingStarted:
                          description: >-
                            POST /devices/{deviceId}/pairing: the device shows a
                            code (display / LED); the operator confirms it.
                          type: object
                          required:
                            - deviceId
                            - expiresAt
                          properties:
                            deviceId:
                              description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            expiresAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                            codeLength:
                              type: integer
                              minimum: 4
                              maximum: 8
                          additionalProperties: false
                        pairingConfirm:
                          type: object
                          required:
                            - code
                          properties:
                            code:
                              type: string
                              pattern: ^[0-9A-Z]{4,8}$
                          additionalProperties: false
                        bind:
                          type: object
                          required:
                            - displayId
                          properties:
                            displayId:
                              anyOf:
                                - description: >-
                                    Document-scoped id (.dome displays[].id,
                                    assets[].id, playlist / cue ids); unique
                                    within its parent.
                                  type: string
                                  pattern: ^[A-Za-z0-9._-]{1,64}$
                                  examples:
                                    - p1
                                    - intro.mp4
                                    - cue-01
                                - type: 'null'
                              description: null unbinds
                          additionalProperties: false
                    patch:
                      description: Merge patch of the resource (high-rate kinds).
                      type: object
                      minProperties: 1
              - if:
                  properties:
                    kind:
                      const: audioAnalysis.state
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: >-
                        GET /venues/{venueId}/audio/analysis, event
                        audioAnalysis.state.
                      type: object
                      required:
                        - venueId
                        - enabled
                        - status
                        - inputs
                      properties:
                        venueId:
                          description: >-
                            Venue id in a path: a stored venue id or the alias
                            `default`.
                          anyOf:
                            - description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            - const: default
                        enabled:
                          type: boolean
                        status:
                          description: Service status. Open list.
                          anyOf:
                            - enum:
                                - disabled
                                - starting
                                - running
                                - degraded
                                - down
                            - type: string
                              pattern: ^[a-z][a-z_-]{0,31}$
                        problem:
                          $schema: https://json-schema.org/draft/2020-12/schema
                          $id: >-
                            https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                          $comment: >-
                            NativeMindNONC — freedome_contract (see LICENSE).
                            RFC 9457 problem details with the Freedome `code`
                            catalogue, 02e §3.3. Also the `data` of WS `error`,
                            the socket.io ack error and GraphQL
                            errors[].extensions.problem. The catalogue is open:
                            unknown codes are allowed; known codes are bound to
                            their HTTP status.
                          title: Problem details
                          type: object
                          required:
                            - type
                            - title
                            - code
                          properties:
                            type:
                              type: string
                              format: uri
                              description: >-
                                https://freedome.nativemind.us/problems/<code>
                                for catalogue codes.
                            title:
                              type: string
                              minLength: 1
                            status:
                              type: integer
                              minimum: 100
                              maximum: 599
                            detail:
                              type: string
                            instance:
                              type: string
                              format: uri-reference
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            traceId:
                              type: string
                              pattern: ^[0-9a-f]{16,32}$
                            errors:
                              type: array
                              items:
                                type: object
                                required:
                                  - pointer
                                  - detail
                                properties:
                                  pointer:
                                    type: string
                                    format: json-pointer
                                  detail:
                                    type: string
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                additionalProperties: true
                          allOf:
                            - if:
                                properties:
                                  code:
                                    const: validation-failed
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 422
                            - if:
                                properties:
                                  code:
                                    const: not-found
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 404
                            - if:
                                properties:
                                  code:
                                    const: conflict
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 409
                            - if:
                                properties:
                                  code:
                                    const: precondition-failed
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 412
                            - if:
                                properties:
                                  code:
                                    const: precondition-required
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 428
                            - if:
                                properties:
                                  code:
                                    const: unauthenticated
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 401
                            - if:
                                properties:
                                  code:
                                    const: forbidden
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 403
                            - if:
                                properties:
                                  code:
                                    const: rate-limited
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 429
                            - if:
                                properties:
                                  code:
                                    const: payload-too-large
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 413
                            - if:
                                properties:
                                  code:
                                    const: unsupported-format
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 415
                            - if:
                                properties:
                                  code:
                                    const: engine-unavailable
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 503
                            - if:
                                properties:
                                  code:
                                    const: engine-incompatible
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 503
                            - if:
                                properties:
                                  code:
                                    const: degraded
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 503
                            - if:
                                properties:
                                  code:
                                    const: upload-checksum-mismatch
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 422
                            - if:
                                properties:
                                  code:
                                    const: legacy-unsupported
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 501
                            - if:
                                properties:
                                  code:
                                    const: internal
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 500
                            - if:
                                properties:
                                  code:
                                    const: clock-unlocked
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 409
                            - if:
                                properties:
                                  code:
                                    const: not-configured
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 503
                            - if:
                                properties:
                                  code:
                                    const: authorization-pending
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 400
                            - if:
                                properties:
                                  code:
                                    const: slow-down
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 400
                            - if:
                                properties:
                                  code:
                                    const: access-denied
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 403
                            - if:
                                properties:
                                  code:
                                    const: expired-token
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 400
                            - if:
                                properties:
                                  code:
                                    const: token-reused
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 401
                            - if:
                                properties:
                                  code:
                                    const: idempotency-key-reused
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 409
                            - if:
                                properties:
                                  code:
                                    const: idempotency-in-progress
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 409
                          additionalProperties: true
                          examples:
                            - type: >-
                                https://freedome.nativemind.us/problems/engine-unavailable
                              title: Visual engine unavailable
                              status: 503
                              detail: >-
                                freedome-engined not reachable at
                                unix:/run/freedome/engine.sock
                              instance: /api/v1/venues/default/players/main/play
                              code: engine-unavailable
                              traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                          $defs:
                            knownCode:
                              enum:
                                - validation-failed
                                - not-found
                                - conflict
                                - precondition-failed
                                - precondition-required
                                - unauthenticated
                                - forbidden
                                - rate-limited
                                - payload-too-large
                                - unsupported-format
                                - engine-unavailable
                                - engine-incompatible
                                - degraded
                                - job-failed
                                - upload-checksum-mismatch
                                - legacy-unsupported
                                - internal
                                - clock-unlocked
                                - not-configured
                                - authorization-pending
                                - slow-down
                                - access-denied
                                - expired-token
                                - token-reused
                                - idempotency-key-reused
                                - idempotency-in-progress
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            fieldError:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        engine:
                          type: string
                          description: engine that runs the analysis, `<kind>@<node>`
                        sampleRate:
                          type: integer
                          minimum: 1
                        blockSize:
                          type: integer
                          minimum: 1
                        inputs:
                          type: array
                          items:
                            description: >-
                              One analysed input (a vocal microphone, an
                              instrument group, a mix).
                            type: object
                            required:
                              - id
                            properties:
                              id:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              label:
                                type: string
                                maxLength: 128
                              device:
                                description: >-
                                  Document-scoped id (.dome displays[].id,
                                  assets[].id, playlist / cue ids); unique
                                  within its parent.
                                type: string
                                pattern: ^[A-Za-z0-9._-]{1,64}$
                                examples:
                                  - p1
                                  - intro.mp4
                                  - cue-01
                              channels:
                                type: array
                                items:
                                  type: integer
                                  minimum: 1
                                  maximum: 1024
                                minItems: 1
                                maxItems: 64
                                uniqueItems: true
                                description: >-
                                  1-based capture channels, summed to mono;
                                  default [1]
                              gainDb:
                                description: >-
                                  Gain in dB (C5: optional companion of linear
                                  `volume`).
                                type: number
                                minimum: -144
                                maximum: 24
                              gateDb:
                                type: number
                                minimum: -144
                                maximum: 0
                                description: noise gate threshold, dBFS
                              envelope:
                                type: object
                                properties:
                                  attackMs:
                                    type: number
                                    minimum: 0
                                    maximum: 10000
                                    default: 8
                                  decayMs:
                                    type: number
                                    minimum: 0
                                    maximum: 10000
                                    default: 120
                                additionalProperties: false
                              onset:
                                type: object
                                properties:
                                  threshold:
                                    description: >-
                                      0..1 (brightness, linear volume gain,
                                      progress).
                                    type: number
                                    minimum: 0
                                    maximum: 1
                                  refractoryMs:
                                    type: number
                                    minimum: 0
                                    maximum: 10000
                                    description: minimum time between two onsets
                                additionalProperties: false
                              centroidRange:
                                description: Frequencies that map to centroid 0 and 1.
                                type: object
                                required:
                                  - minHz
                                  - maxHz
                                properties:
                                  minHz:
                                    type: number
                                    exclusiveMinimum: 0
                                  maxHz:
                                    type: number
                                    exclusiveMinimum: 0
                                additionalProperties: false
                            patternProperties:
                              ^x-: true
                            additionalProperties: false
                          maxItems: 64
                      patternProperties:
                        ^x-: true
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: audio.analysis
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: >-
                        One analysis frame of one input (event audio.analysis).
                        rms, peak and bands are linear amplitude relative to
                        full scale, clamped to 0..1, after the input's envelope
                        (a voice at -24 dBFS reads 0.06). Scene smoothing is
                        applied after this.
                      type: object
                      required:
                        - inputId
                        - frame
                        - captureUs
                        - rms
                        - peak
                        - bands
                        - centroid
                        - onset
                      properties:
                        inputId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        frame:
                          type: integer
                          minimum: 0
                          description: >-
                            frame counter of this input since the analysis
                            started
                        captureUs:
                          type: integer
                          minimum: 0
                          description: >-
                            start of the audio block on the analysis node's
                            monotonic clock, µs; comparable only on that node
                        rms:
                          description: 0..1 (brightness, linear volume gain, progress).
                          type: number
                          minimum: 0
                          maximum: 1
                        peak:
                          description: 0..1 (brightness, linear volume gain, progress).
                          type: number
                          minimum: 0
                          maximum: 1
                        rmsDb:
                          type: number
                          description: dBFS, before normalisation
                        peakDb:
                          type: number
                          description: dBFS, before normalisation
                        bands:
                          description: >-
                            Band energies, each 0..1. Fixed ranges: subBass
                            30–150 Hz, mid 150–800 Hz, highMid 800–4000 Hz,
                            treble 4000–16000 Hz.
                          type: object
                          required:
                            - subBass
                            - mid
                            - highMid
                            - treble
                          properties:
                            subBass:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            mid:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            highMid:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                            treble:
                              description: 0..1 (brightness, linear volume gain, progress).
                              type: number
                              minimum: 0
                              maximum: 1
                          additionalProperties: false
                        centroid:
                          description: 0..1 (brightness, linear volume gain, progress).
                          type: number
                          minimum: 0
                          maximum: 1
                        centroidHz:
                          type: number
                          exclusiveMinimum: 0
                        onset:
                          description: 0..1 (brightness, linear volume gain, progress).
                          type: number
                          minimum: 0
                          maximum: 1
                        gated:
                          type: boolean
                          description: 'the input is below its gate: normalised values are 0'
                      patternProperties:
                        ^x-: true
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: audio.onset
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: One detected attack (event audio.onset).
                      type: object
                      required:
                        - inputId
                        - frame
                        - captureUs
                        - strength
                      properties:
                        inputId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        frame:
                          type: integer
                          minimum: 0
                        captureUs:
                          type: integer
                          minimum: 0
                        strength:
                          description: 0..1 (brightness, linear volume gain, progress).
                          type: number
                          minimum: 0
                          maximum: 1
                        band:
                          enum:
                            - subBass
                            - mid
                            - highMid
                            - treble
                          description: band with the largest energy rise, when known
                      patternProperties:
                        ^x-: true
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: audioReactive.state
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: >-
                        GET /venues/{venueId}/audio/reactive, event
                        audioReactive.state.
                      type: object
                      required:
                        - venueId
                        - enabled
                        - status
                        - activeSceneId
                        - intensity
                      properties:
                        venueId:
                          description: >-
                            Venue id in a path: a stored venue id or the alias
                            `default`.
                          anyOf:
                            - description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            - const: default
                        enabled:
                          type: boolean
                        status:
                          description: Service status. Open list.
                          anyOf:
                            - enum:
                                - disabled
                                - starting
                                - running
                                - degraded
                                - down
                            - type: string
                              pattern: ^[a-z][a-z_-]{0,31}$
                        problem:
                          $schema: https://json-schema.org/draft/2020-12/schema
                          $id: >-
                            https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                          $comment: >-
                            NativeMindNONC — freedome_contract (see LICENSE).
                            RFC 9457 problem details with the Freedome `code`
                            catalogue, 02e §3.3. Also the `data` of WS `error`,
                            the socket.io ack error and GraphQL
                            errors[].extensions.problem. The catalogue is open:
                            unknown codes are allowed; known codes are bound to
                            their HTTP status.
                          title: Problem details
                          type: object
                          required:
                            - type
                            - title
                            - code
                          properties:
                            type:
                              type: string
                              format: uri
                              description: >-
                                https://freedome.nativemind.us/problems/<code>
                                for catalogue codes.
                            title:
                              type: string
                              minLength: 1
                            status:
                              type: integer
                              minimum: 100
                              maximum: 599
                            detail:
                              type: string
                            instance:
                              type: string
                              format: uri-reference
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            traceId:
                              type: string
                              pattern: ^[0-9a-f]{16,32}$
                            errors:
                              type: array
                              items:
                                type: object
                                required:
                                  - pointer
                                  - detail
                                properties:
                                  pointer:
                                    type: string
                                    format: json-pointer
                                  detail:
                                    type: string
                                  code:
                                    description: >-
                                      Stable machine key; also the last path
                                      segment of `type`. Open set: see
                                      knownCode.
                                    type: string
                                    pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                additionalProperties: true
                          allOf:
                            - if:
                                properties:
                                  code:
                                    const: validation-failed
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 422
                            - if:
                                properties:
                                  code:
                                    const: not-found
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 404
                            - if:
                                properties:
                                  code:
                                    const: conflict
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 409
                            - if:
                                properties:
                                  code:
                                    const: precondition-failed
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 412
                            - if:
                                properties:
                                  code:
                                    const: precondition-required
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 428
                            - if:
                                properties:
                                  code:
                                    const: unauthenticated
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 401
                            - if:
                                properties:
                                  code:
                                    const: forbidden
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 403
                            - if:
                                properties:
                                  code:
                                    const: rate-limited
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 429
                            - if:
                                properties:
                                  code:
                                    const: payload-too-large
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 413
                            - if:
                                properties:
                                  code:
                                    const: unsupported-format
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 415
                            - if:
                                properties:
                                  code:
                                    const: engine-unavailable
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 503
                            - if:
                                properties:
                                  code:
                                    const: engine-incompatible
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 503
                            - if:
                                properties:
                                  code:
                                    const: degraded
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 503
                            - if:
                                properties:
                                  code:
                                    const: upload-checksum-mismatch
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 422
                            - if:
                                properties:
                                  code:
                                    const: legacy-unsupported
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 501
                            - if:
                                properties:
                                  code:
                                    const: internal
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 500
                            - if:
                                properties:
                                  code:
                                    const: clock-unlocked
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 409
                            - if:
                                properties:
                                  code:
                                    const: not-configured
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 503
                            - if:
                                properties:
                                  code:
                                    const: authorization-pending
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 400
                            - if:
                                properties:
                                  code:
                                    const: slow-down
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 400
                            - if:
                                properties:
                                  code:
                                    const: access-denied
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 403
                            - if:
                                properties:
                                  code:
                                    const: expired-token
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 400
                            - if:
                                properties:
                                  code:
                                    const: token-reused
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 401
                            - if:
                                properties:
                                  code:
                                    const: idempotency-key-reused
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 409
                            - if:
                                properties:
                                  code:
                                    const: idempotency-in-progress
                                required:
                                  - code
                              then:
                                properties:
                                  status:
                                    const: 409
                          additionalProperties: true
                          examples:
                            - type: >-
                                https://freedome.nativemind.us/problems/engine-unavailable
                              title: Visual engine unavailable
                              status: 503
                              detail: >-
                                freedome-engined not reachable at
                                unix:/run/freedome/engine.sock
                              instance: /api/v1/venues/default/players/main/play
                              code: engine-unavailable
                              traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                          $defs:
                            knownCode:
                              enum:
                                - validation-failed
                                - not-found
                                - conflict
                                - precondition-failed
                                - precondition-required
                                - unauthenticated
                                - forbidden
                                - rate-limited
                                - payload-too-large
                                - unsupported-format
                                - engine-unavailable
                                - engine-incompatible
                                - degraded
                                - job-failed
                                - upload-checksum-mismatch
                                - legacy-unsupported
                                - internal
                                - clock-unlocked
                                - not-configured
                                - authorization-pending
                                - slow-down
                                - access-denied
                                - expired-token
                                - token-reused
                                - idempotency-key-reused
                                - idempotency-in-progress
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            fieldError:
                              type: object
                              required:
                                - pointer
                                - detail
                              properties:
                                pointer:
                                  type: string
                                  format: json-pointer
                                detail:
                                  type: string
                                code:
                                  description: >-
                                    Stable machine key; also the last path
                                    segment of `type`. Open set: see knownCode.
                                  type: string
                                  pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                              additionalProperties: true
                        activeSceneId:
                          anyOf:
                            - description: >-
                                Document-scoped id (.dome displays[].id,
                                assets[].id, playlist / cue ids); unique within
                                its parent.
                              type: string
                              pattern: ^[A-Za-z0-9._-]{1,64}$
                              examples:
                                - p1
                                - intro.mp4
                                - cue-01
                            - type: 'null'
                        intensity:
                          description: 0..1 (brightness, linear volume gain, progress).
                          type: number
                          minimum: 0
                          maximum: 1
                        stats:
                          type: object
                          additionalProperties:
                            type: number
                          description: counters, e.g. framesIn, messagesOut, framesDropped
                        resolume:
                          description: >-
                            connection status of gateway `resolume`, the same
                            object as its gateway member, so that playback:read
                            can see it without gateways:manage; absent when no
                            such gateway is configured. Read-only.
                          type: object
                          required:
                            - osc
                            - rest
                            - ws
                          properties:
                            osc:
                              type: object
                              required:
                                - state
                              properties:
                                state:
                                  anyOf:
                                    - enum:
                                        - disabled
                                        - connecting
                                        - up
                                        - down
                                    - type: string
                                      pattern: ^[a-z][a-z_-]{0,31}$
                                  description: >-
                                    for OSC over UDP, up means sending: there is
                                    no acknowledgement
                                lastOkAt:
                                  description: >-
                                    RFC 3339 UTC with milliseconds, e.g.
                                    2026-10-19T12:00:00.000Z.
                                  type: string
                                  format: date-time
                                  pattern: >-
                                    ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                sent:
                                  type: integer
                                  minimum: 0
                                dropped:
                                  type: integer
                                  minimum: 0
                                problem:
                                  $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). RFC 9457 problem details with the
                                    Freedome `code` catalogue, 02e §3.3. Also
                                    the `data` of WS `error`, the socket.io ack
                                    error and GraphQL
                                    errors[].extensions.problem. The catalogue
                                    is open: unknown codes are allowed; known
                                    codes are bound to their HTTP status.
                                  title: Problem details
                                  type: object
                                  required:
                                    - type
                                    - title
                                    - code
                                  properties:
                                    type:
                                      type: string
                                      format: uri
                                      description: >-
                                        https://freedome.nativemind.us/problems/<code>
                                        for catalogue codes.
                                    title:
                                      type: string
                                      minLength: 1
                                    status:
                                      type: integer
                                      minimum: 100
                                      maximum: 599
                                    detail:
                                      type: string
                                    instance:
                                      type: string
                                      format: uri-reference
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    traceId:
                                      type: string
                                      pattern: ^[0-9a-f]{16,32}$
                                    errors:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  allOf:
                                    - if:
                                        properties:
                                          code:
                                            const: validation-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: not-found
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 404
                                    - if:
                                        properties:
                                          code:
                                            const: conflict
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 412
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-required
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 428
                                    - if:
                                        properties:
                                          code:
                                            const: unauthenticated
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: forbidden
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: rate-limited
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 429
                                    - if:
                                        properties:
                                          code:
                                            const: payload-too-large
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 413
                                    - if:
                                        properties:
                                          code:
                                            const: unsupported-format
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 415
                                    - if:
                                        properties:
                                          code:
                                            const: engine-unavailable
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: engine-incompatible
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: degraded
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: upload-checksum-mismatch
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: legacy-unsupported
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 501
                                    - if:
                                        properties:
                                          code:
                                            const: internal
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 500
                                    - if:
                                        properties:
                                          code:
                                            const: clock-unlocked
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: not-configured
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: authorization-pending
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: slow-down
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: access-denied
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: expired-token
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: token-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-key-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-in-progress
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                  additionalProperties: true
                                  examples:
                                    - type: >-
                                        https://freedome.nativemind.us/problems/engine-unavailable
                                      title: Visual engine unavailable
                                      status: 503
                                      detail: >-
                                        freedome-engined not reachable at
                                        unix:/run/freedome/engine.sock
                                      instance: /api/v1/venues/default/players/main/play
                                      code: engine-unavailable
                                      traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                  $defs:
                                    knownCode:
                                      enum:
                                        - validation-failed
                                        - not-found
                                        - conflict
                                        - precondition-failed
                                        - precondition-required
                                        - unauthenticated
                                        - forbidden
                                        - rate-limited
                                        - payload-too-large
                                        - unsupported-format
                                        - engine-unavailable
                                        - engine-incompatible
                                        - degraded
                                        - job-failed
                                        - upload-checksum-mismatch
                                        - legacy-unsupported
                                        - internal
                                        - clock-unlocked
                                        - not-configured
                                        - authorization-pending
                                        - slow-down
                                        - access-denied
                                        - expired-token
                                        - token-reused
                                        - idempotency-key-reused
                                        - idempotency-in-progress
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    fieldError:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                              additionalProperties: false
                            rest:
                              type: object
                              required:
                                - state
                              properties:
                                state:
                                  anyOf:
                                    - enum:
                                        - disabled
                                        - connecting
                                        - up
                                        - down
                                    - type: string
                                      pattern: ^[a-z][a-z_-]{0,31}$
                                  description: >-
                                    for OSC over UDP, up means sending: there is
                                    no acknowledgement
                                lastOkAt:
                                  description: >-
                                    RFC 3339 UTC with milliseconds, e.g.
                                    2026-10-19T12:00:00.000Z.
                                  type: string
                                  format: date-time
                                  pattern: >-
                                    ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                sent:
                                  type: integer
                                  minimum: 0
                                dropped:
                                  type: integer
                                  minimum: 0
                                problem:
                                  $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). RFC 9457 problem details with the
                                    Freedome `code` catalogue, 02e §3.3. Also
                                    the `data` of WS `error`, the socket.io ack
                                    error and GraphQL
                                    errors[].extensions.problem. The catalogue
                                    is open: unknown codes are allowed; known
                                    codes are bound to their HTTP status.
                                  title: Problem details
                                  type: object
                                  required:
                                    - type
                                    - title
                                    - code
                                  properties:
                                    type:
                                      type: string
                                      format: uri
                                      description: >-
                                        https://freedome.nativemind.us/problems/<code>
                                        for catalogue codes.
                                    title:
                                      type: string
                                      minLength: 1
                                    status:
                                      type: integer
                                      minimum: 100
                                      maximum: 599
                                    detail:
                                      type: string
                                    instance:
                                      type: string
                                      format: uri-reference
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    traceId:
                                      type: string
                                      pattern: ^[0-9a-f]{16,32}$
                                    errors:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  allOf:
                                    - if:
                                        properties:
                                          code:
                                            const: validation-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: not-found
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 404
                                    - if:
                                        properties:
                                          code:
                                            const: conflict
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 412
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-required
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 428
                                    - if:
                                        properties:
                                          code:
                                            const: unauthenticated
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: forbidden
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: rate-limited
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 429
                                    - if:
                                        properties:
                                          code:
                                            const: payload-too-large
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 413
                                    - if:
                                        properties:
                                          code:
                                            const: unsupported-format
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 415
                                    - if:
                                        properties:
                                          code:
                                            const: engine-unavailable
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: engine-incompatible
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: degraded
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: upload-checksum-mismatch
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: legacy-unsupported
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 501
                                    - if:
                                        properties:
                                          code:
                                            const: internal
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 500
                                    - if:
                                        properties:
                                          code:
                                            const: clock-unlocked
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: not-configured
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: authorization-pending
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: slow-down
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: access-denied
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: expired-token
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: token-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-key-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-in-progress
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                  additionalProperties: true
                                  examples:
                                    - type: >-
                                        https://freedome.nativemind.us/problems/engine-unavailable
                                      title: Visual engine unavailable
                                      status: 503
                                      detail: >-
                                        freedome-engined not reachable at
                                        unix:/run/freedome/engine.sock
                                      instance: /api/v1/venues/default/players/main/play
                                      code: engine-unavailable
                                      traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                  $defs:
                                    knownCode:
                                      enum:
                                        - validation-failed
                                        - not-found
                                        - conflict
                                        - precondition-failed
                                        - precondition-required
                                        - unauthenticated
                                        - forbidden
                                        - rate-limited
                                        - payload-too-large
                                        - unsupported-format
                                        - engine-unavailable
                                        - engine-incompatible
                                        - degraded
                                        - job-failed
                                        - upload-checksum-mismatch
                                        - legacy-unsupported
                                        - internal
                                        - clock-unlocked
                                        - not-configured
                                        - authorization-pending
                                        - slow-down
                                        - access-denied
                                        - expired-token
                                        - token-reused
                                        - idempotency-key-reused
                                        - idempotency-in-progress
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    fieldError:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                              additionalProperties: false
                            ws:
                              type: object
                              required:
                                - state
                              properties:
                                state:
                                  anyOf:
                                    - enum:
                                        - disabled
                                        - connecting
                                        - up
                                        - down
                                    - type: string
                                      pattern: ^[a-z][a-z_-]{0,31}$
                                  description: >-
                                    for OSC over UDP, up means sending: there is
                                    no acknowledgement
                                lastOkAt:
                                  description: >-
                                    RFC 3339 UTC with milliseconds, e.g.
                                    2026-10-19T12:00:00.000Z.
                                  type: string
                                  format: date-time
                                  pattern: >-
                                    ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                                sent:
                                  type: integer
                                  minimum: 0
                                dropped:
                                  type: integer
                                  minimum: 0
                                problem:
                                  $schema: https://json-schema.org/draft/2020-12/schema
                                  $id: >-
                                    https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                                  $comment: >-
                                    NativeMindNONC — freedome_contract (see
                                    LICENSE). RFC 9457 problem details with the
                                    Freedome `code` catalogue, 02e §3.3. Also
                                    the `data` of WS `error`, the socket.io ack
                                    error and GraphQL
                                    errors[].extensions.problem. The catalogue
                                    is open: unknown codes are allowed; known
                                    codes are bound to their HTTP status.
                                  title: Problem details
                                  type: object
                                  required:
                                    - type
                                    - title
                                    - code
                                  properties:
                                    type:
                                      type: string
                                      format: uri
                                      description: >-
                                        https://freedome.nativemind.us/problems/<code>
                                        for catalogue codes.
                                    title:
                                      type: string
                                      minLength: 1
                                    status:
                                      type: integer
                                      minimum: 100
                                      maximum: 599
                                    detail:
                                      type: string
                                    instance:
                                      type: string
                                      format: uri-reference
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    traceId:
                                      type: string
                                      pattern: ^[0-9a-f]{16,32}$
                                    errors:
                                      type: array
                                      items:
                                        type: object
                                        required:
                                          - pointer
                                          - detail
                                        properties:
                                          pointer:
                                            type: string
                                            format: json-pointer
                                          detail:
                                            type: string
                                          code:
                                            description: >-
                                              Stable machine key; also the last path
                                              segment of `type`. Open set: see
                                              knownCode.
                                            type: string
                                            pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                        additionalProperties: true
                                  allOf:
                                    - if:
                                        properties:
                                          code:
                                            const: validation-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: not-found
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 404
                                    - if:
                                        properties:
                                          code:
                                            const: conflict
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-failed
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 412
                                    - if:
                                        properties:
                                          code:
                                            const: precondition-required
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 428
                                    - if:
                                        properties:
                                          code:
                                            const: unauthenticated
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: forbidden
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: rate-limited
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 429
                                    - if:
                                        properties:
                                          code:
                                            const: payload-too-large
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 413
                                    - if:
                                        properties:
                                          code:
                                            const: unsupported-format
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 415
                                    - if:
                                        properties:
                                          code:
                                            const: engine-unavailable
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: engine-incompatible
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: degraded
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: upload-checksum-mismatch
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 422
                                    - if:
                                        properties:
                                          code:
                                            const: legacy-unsupported
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 501
                                    - if:
                                        properties:
                                          code:
                                            const: internal
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 500
                                    - if:
                                        properties:
                                          code:
                                            const: clock-unlocked
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: not-configured
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 503
                                    - if:
                                        properties:
                                          code:
                                            const: authorization-pending
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: slow-down
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: access-denied
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 403
                                    - if:
                                        properties:
                                          code:
                                            const: expired-token
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 400
                                    - if:
                                        properties:
                                          code:
                                            const: token-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 401
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-key-reused
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                    - if:
                                        properties:
                                          code:
                                            const: idempotency-in-progress
                                        required:
                                          - code
                                      then:
                                        properties:
                                          status:
                                            const: 409
                                  additionalProperties: true
                                  examples:
                                    - type: >-
                                        https://freedome.nativemind.us/problems/engine-unavailable
                                      title: Visual engine unavailable
                                      status: 503
                                      detail: >-
                                        freedome-engined not reachable at
                                        unix:/run/freedome/engine.sock
                                      instance: /api/v1/venues/default/players/main/play
                                      code: engine-unavailable
                                      traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                                  $defs:
                                    knownCode:
                                      enum:
                                        - validation-failed
                                        - not-found
                                        - conflict
                                        - precondition-failed
                                        - precondition-required
                                        - unauthenticated
                                        - forbidden
                                        - rate-limited
                                        - payload-too-large
                                        - unsupported-format
                                        - engine-unavailable
                                        - engine-incompatible
                                        - degraded
                                        - job-failed
                                        - upload-checksum-mismatch
                                        - legacy-unsupported
                                        - internal
                                        - clock-unlocked
                                        - not-configured
                                        - authorization-pending
                                        - slow-down
                                        - access-denied
                                        - expired-token
                                        - token-reused
                                        - idempotency-key-reused
                                        - idempotency-in-progress
                                    code:
                                      description: >-
                                        Stable machine key; also the last path
                                        segment of `type`. Open set: see
                                        knownCode.
                                      type: string
                                      pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                    fieldError:
                                      type: object
                                      required:
                                        - pointer
                                        - detail
                                      properties:
                                        pointer:
                                          type: string
                                          format: json-pointer
                                        detail:
                                          type: string
                                        code:
                                          description: >-
                                            Stable machine key; also the last path
                                            segment of `type`. Open set: see
                                            knownCode.
                                          type: string
                                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                                      additionalProperties: true
                              additionalProperties: false
                            product:
                              description: GET /api/v1/product of Resolume, when reachable.
                              type: object
                              properties:
                                name:
                                  type: string
                                major:
                                  type: integer
                                  minimum: 0
                                minor:
                                  type: integer
                                  minimum: 0
                                micro:
                                  type: integer
                                  minimum: 0
                                revision:
                                  type: integer
                                  minimum: 0
                              additionalProperties: false
                            composition:
                              description: Summary of the open composition.
                              type: object
                              properties:
                                name:
                                  type: string
                                layers:
                                  type: integer
                                  minimum: 0
                                columns:
                                  type: integer
                                  minimum: 0
                                decks:
                                  type: integer
                                  minimum: 0
                              additionalProperties: false
                            lastSyncAt:
                              description: >-
                                RFC 3339 UTC with milliseconds, e.g.
                                2026-10-19T12:00:00.000Z.
                              type: string
                              format: date-time
                              pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                          additionalProperties: false
                      patternProperties:
                        ^x-: true
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: audioReactiveScene.updated
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: >-
                        A scene is data: which metrics drive which targets.
                        Mapping ids are unique within the scene.
                      type: object
                      allOf:
                        - type: object
                          properties:
                            title:
                              description: >-
                                Plain string (treated as `en`) or a localised
                                map. (map branch = the root schema, inlined for
                                tools that mis-handle self references)
                              anyOf:
                                - type: string
                                - type: object
                                  minProperties: 1
                                  propertyNames:
                                    pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                  additionalProperties:
                                    type: string
                                  examples:
                                    - en: Intro
                                      ru: Вступление
                            description:
                              description: >-
                                Plain string (treated as `en`) or a localised
                                map. (map branch = the root schema, inlined for
                                tools that mis-handle self references)
                              anyOf:
                                - type: string
                                - type: object
                                  minProperties: 1
                                  propertyNames:
                                    pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                  additionalProperties:
                                    type: string
                                  examples:
                                    - en: Intro
                                      ru: Вступление
                            mappings:
                              type: array
                              items:
                                description: >-
                                  One metric → one target. continuous: the
                                  mapped value is sent on every frame it
                                  changes. trigger: one message when the metric
                                  rises through `threshold`, then nothing for
                                  `cooldownMs`.
                                type: object
                                required:
                                  - id
                                  - mode
                                  - source
                                  - target
                                properties:
                                  id:
                                    description: >-
                                      Document-scoped id (.dome displays[].id,
                                      assets[].id, playlist / cue ids); unique
                                      within its parent.
                                    type: string
                                    pattern: ^[A-Za-z0-9._-]{1,64}$
                                    examples:
                                      - p1
                                      - intro.mp4
                                      - cue-01
                                  mode:
                                    enum:
                                      - continuous
                                      - trigger
                                  source:
                                    type: object
                                    required:
                                      - input
                                      - metric
                                    properties:
                                      input:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      metric:
                                        description: >-
                                          A value of the analysis frame. rms,
                                          peak: envelope; subBass, mid, highMid,
                                          treble: bands; centroid: spectral
                                          brightness; onset: attack strength. Open
                                          list.
                                        anyOf:
                                          - enum:
                                              - rms
                                              - peak
                                              - subBass
                                              - mid
                                              - highMid
                                              - treble
                                              - centroid
                                              - onset
                                          - type: string
                                            pattern: ^[a-z][A-Za-z0-9]{0,31}$
                                    additionalProperties: false
                                  range:
                                    description: >-
                                      Linear map before the curve. inMax > inMin
                                      (422 otherwise); outMin > outMax inverts.
                                      Defaults 0, 1, 0, 1.
                                    type: object
                                    properties:
                                      inMin:
                                        type: number
                                      inMax:
                                        type: number
                                      outMin:
                                        type: number
                                      outMax:
                                        type: number
                                    additionalProperties: false
                                  curve:
                                    anyOf:
                                      - enum:
                                          - linear
                                          - exp
                                          - log
                                          - s-curve
                                      - type: string
                                        pattern: ^[a-z][a-z0-9_-]{0,31}$
                                    default: linear
                                    description: >-
                                      for t in 0..1: linear t; exp t²; log
                                      log10(1 + 9t); s-curve 3t² − 2t³
                                  smoothing:
                                    description: >-
                                      Asymmetric smoothing of the mapped value,
                                      applied by the media server.
                                    type: object
                                    properties:
                                      attackMs:
                                        type: number
                                        minimum: 0
                                        maximum: 10000
                                      decayMs:
                                        type: number
                                        minimum: 0
                                        maximum: 10000
                                    additionalProperties: false
                                  threshold:
                                    description: >-
                                      0..1 (brightness, linear volume gain,
                                      progress).
                                    type: number
                                    minimum: 0
                                    maximum: 1
                                  cooldownMs:
                                    type: number
                                    minimum: 0
                                    maximum: 60000
                                  target:
                                    description: >-
                                      Where a mapping goes. kind osc: an OSC
                                      address of an outbound gateway. Open list:
                                      a server that does not know a kind answers
                                      422.
                                    type: object
                                    required:
                                      - kind
                                    properties:
                                      kind:
                                        anyOf:
                                          - enum:
                                              - osc
                                          - type: string
                                            pattern: ^[a-z][a-z_-]{0,31}$
                                      gateway:
                                        description: >-
                                          Document-scoped id (.dome displays[].id,
                                          assets[].id, playlist / cue ids); unique
                                          within its parent.
                                        type: string
                                        pattern: ^[A-Za-z0-9._-]{1,64}$
                                        examples:
                                          - p1
                                          - intro.mp4
                                          - cue-01
                                      address:
                                        type: string
                                        pattern: ^/[^\s#*,?\[\]{}]*$
                                        description: >-
                                          concrete address, e.g.
                                          /composition/layers/1/video/opacity
                                      type:
                                        enum:
                                          - f
                                          - i
                                        description: OSC argument type
                                      value:
                                        type: number
                                        description: >-
                                          trigger mode: the argument to send;
                                          default 1
                                    if:
                                      properties:
                                        kind:
                                          const: osc
                                      required:
                                        - kind
                                    then:
                                      required:
                                        - gateway
                                        - address
                                        - type
                                    patternProperties:
                                      ^x-: true
                                    additionalProperties: false
                                if:
                                  properties:
                                    mode:
                                      const: trigger
                                  required:
                                    - mode
                                then:
                                  required:
                                    - threshold
                                patternProperties:
                                  ^x-: true
                                additionalProperties: false
                              maxItems: 256
                          patternProperties:
                            ^x-: true
                      required:
                        - id
                        - title
                        - revision
                        - mappings
                      properties:
                        id:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                      unevaluatedProperties: false
              - if:
                  properties:
                    kind:
                      const: audioReactiveScene.deleted
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      type: object
                      required:
                        - id
                      properties:
                        id:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                      additionalProperties: false
              - if:
                  properties:
                    kind:
                      const: textureSource.state
                  required:
                    - kind
                then:
                  properties:
                    resource:
                      description: >-
                        A live source seen by the engine (GET
                        /venues/{venueId}/texture-sources, event
                        textureSource.state).
                      type: object
                      required:
                        - id
                        - transport
                        - sender
                        - status
                      properties:
                        id:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        transport:
                          description: >-
                            Shared GPU texture or spare network transport of a
                            live source. Open list.
                          anyOf:
                            - enum:
                                - spout
                                - syphon
                                - dmabuf
                                - capture
                                - ndi
                            - type: string
                              pattern: ^[a-z][a-z0-9_-]{0,31}$
                        sender:
                          type: string
                          minLength: 1
                          maxLength: 256
                        application:
                          type: string
                          maxLength: 256
                        status:
                          anyOf:
                            - enum:
                                - online
                                - offline
                            - type: string
                              pattern: ^[a-z][a-z_-]{0,31}$
                        width:
                          type: integer
                          minimum: 1
                        height:
                          type: integer
                          minimum: 1
                        fps:
                          type: number
                          minimum: 0
                          description: frames per second measured by the engine
                        pixelFormat:
                          type: string
                          maxLength: 32
                        assetId:
                          description: >-
                            Document-scoped id (.dome displays[].id,
                            assets[].id, playlist / cue ids); unique within its
                            parent.
                          type: string
                          pattern: ^[A-Za-z0-9._-]{1,64}$
                          examples:
                            - p1
                            - intro.mp4
                            - cue-01
                        node:
                          type: string
                          maxLength: 64
                          description: node whose engine sees the source
                        lastSeen:
                          description: >-
                            RFC 3339 UTC with milliseconds, e.g.
                            2026-10-19T12:00:00.000Z.
                          type: string
                          format: date-time
                          pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
                      patternProperties:
                        ^x-: true
                      additionalProperties: false
            $defs:
              knownKind:
                description: >-
                  Kinds of the v1 topic tree (events/topics.yaml); open
                  catalogue — clients ignore unknown kinds.
                enum:
                  - system.info
                  - system.health
                  - engine.status
                  - engine.metrics
                  - engine.error
                  - venue.updated
                  - venue.deleted
                  - venue.activeShow
                  - output.state
                  - display.state
                  - display.pattern
                  - display.error
                  - calibration.updated
                  - calibrationJob.state
                  - calibrationJob.progress
                  - calibrationJob.awaiting
                  - job.state
                  - job.progress
                  - log.entry
                  - node.state
                  - player.state
                  - player.position
                  - player.ended
                  - player.error
                  - cue.fired
                  - cue.failed
                  - parameter.changed
                  - audio.state
                  - audio.layout
                  - audio.levels
                  - zone.state
                  - zone.deleted
                  - audioDevice.state
                  - audioSession.state
                  - generator.state
                  - show.updated
                  - show.deleted
                  - playlist.updated
                  - playlist.deleted
                  - timeline.updated
                  - timeline.deleted
                  - cue.updated
                  - cue.deleted
                  - trigger.updated
                  - trigger.deleted
                  - matrix.updated
                  - asset.created
                  - asset.progress
                  - asset.ready
                  - asset.failed
                  - asset.deleted
                  - upload.progress
                  - gateway.state
                  - gateway.message
                  - app.payload
                  - app.cleared
                  - client.command
                  - session.revoked
                  - scenarioSession.state
                  - scenarioSession.log
                  - device.state
                  - audioAnalysis.state
                  - audio.analysis
                  - audio.onset
                  - audioReactive.state
                  - audioReactiveScene.updated
                  - audioReactiveScene.deleted
                  - textureSource.state
              engineStatus:
                type: object
                required:
                  - name
                  - status
                properties:
                  name:
                    anyOf:
                      - enum:
                          - visual
                          - anantasound
                          - anantadigital
                      - type: string
                        pattern: ^[a-z][a-z0-9_-]{0,31}(@[A-Za-z0-9._-]{1,64})?$
                  status:
                    enum:
                      - up
                      - degraded
                      - down
                      - incompatible
                  version:
                    type: string
                  protocol:
                    type: string
                    examples:
                      - freedome.engine.v1
                  capabilities:
                    type: array
                    items:
                      type: string
                  message:
                    type: string
                additionalProperties: false
              engineMetrics:
                description: ≤ 1 Hz; any subset (patch) of the metrics.
                type: object
                properties:
                  fps:
                    type: number
                    minimum: 0
                  frameTimeMs:
                    type: number
                    minimum: 0
                  droppedFrames:
                    type: integer
                    minimum: 0
                  gpuLoad:
                    type: number
                    minimum: 0
                    maximum: 1
                  cpuLoad:
                    type: number
                    minimum: 0
                    maximum: 1
                  temperatureC:
                    type: number
                patternProperties:
                  ^x-: true
                additionalProperties: false
              deleted:
                type: object
                required:
                  - id
                properties:
                  id:
                    description: >-
                      Document-scoped id (.dome displays[].id, assets[].id,
                      playlist / cue ids); unique within its parent.
                    type: string
                    pattern: ^[A-Za-z0-9._-]{1,64}$
                    examples:
                      - p1
                      - intro.mp4
                      - cue-01
                additionalProperties: false
              activeShow:
                type: object
                required:
                  - activeShowId
                properties:
                  activeShowId:
                    anyOf:
                      - description: >-
                          Document-scoped id (.dome displays[].id, assets[].id,
                          playlist / cue ids); unique within its parent.
                        type: string
                        pattern: ^[A-Za-z0-9._-]{1,64}$
                        examples:
                          - p1
                          - intro.mp4
                          - cue-01
                      - type: 'null'
                additionalProperties: false
              progressPatch:
                type: object
                minProperties: 1
                properties:
                  progress:
                    type: number
                    minimum: 0
                    maximum: 1
                  currentStep:
                    anyOf:
                      - description: >-
                          Document-scoped id (.dome displays[].id, assets[].id,
                          playlist / cue ids); unique within its parent.
                        type: string
                        pattern: ^[A-Za-z0-9._-]{1,64}$
                        examples:
                          - p1
                          - intro.mp4
                          - cue-01
                      - type: 'null'
                  message:
                    type: string
                additionalProperties: false
              awaiting:
                description: >-
                  Same object as calibration-job `awaiting` (null when nothing
                  is awaited).
                anyOf:
                  - type: 'null'
                  - type: object
                    required:
                      - kind
                    properties:
                      kind:
                        anyOf:
                          - enum:
                              - camera-capture
                              - manual-adjust
                              - confirm
                          - type: string
                      stepId:
                        description: >-
                          Document-scoped id (.dome displays[].id, assets[].id,
                          playlist / cue ids); unique within its parent.
                        type: string
                        pattern: ^[A-Za-z0-9._-]{1,64}$
                        examples:
                          - p1
                          - intro.mp4
                          - cue-01
                      displayId:
                        description: >-
                          Document-scoped id (.dome displays[].id, assets[].id,
                          playlist / cue ids); unique within its parent.
                        type: string
                        pattern: ^[A-Za-z0-9._-]{1,64}$
                        examples:
                          - p1
                          - intro.mp4
                          - cue-01
                      pattern:
                        description: >-
                          PUT /venues/{venueId}/displays/{displayId}/pattern
                          body (engine freedome_pattern_*).
                        type: object
                        required:
                          - kind
                        properties:
                          kind:
                            anyOf:
                              - enum:
                                  - 'off'
                                  - grid
                                  - checker
                                  - gray-ramp
                                  - colour-bars
                                  - dots
                                  - crosshair
                                  - solid
                                  - structured-light
                              - type: string
                                pattern: ^[a-z][a-z0-9_-]{0,31}$
                          params:
                            description: >-
                              Kind-specific: grid {spacingDeg, lineWidthPx,
                              colour}, checker {cells}, solid {colour},
                              structured-light {sequence, index} …
                            type: object
                          face:
                            type: integer
                            minimum: 0
                            maximum: 5
                            description: 'prism / pyramid: limit to one optics face'
                        additionalProperties: false
                      instructions:
                        $schema: https://json-schema.org/draft/2020-12/schema
                        $id: >-
                          https://freedome.nativemind.us/schemas/common/1.0/i18n-text.schema.json
                        $comment: >-
                          NativeMindNONC — freedome_contract (see LICENSE).
                          Localised text map {"en":…,"ru":…}, 02e §3.1 (as .dome
                          meta.title).
                        title: Localised text
                        type: object
                        minProperties: 1
                        propertyNames:
                          pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                        additionalProperties:
                          type: string
                        examples:
                          - en: Intro
                            ru: Вступление
                        $defs:
                          textOrI18n:
                            description: >-
                              Plain string (treated as `en`) or a localised map.
                              (map branch = the root schema, inlined for tools
                              that mis-handle self references)
                            anyOf:
                              - type: string
                              - type: object
                                minProperties: 1
                                propertyNames:
                                  pattern: ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$
                                additionalProperties:
                                  type: string
                                examples:
                                  - en: Intro
                                    ru: Вступление
                    additionalProperties: false
              anyPatch:
                description: Merge patch of the resource (high-rate kinds).
                type: object
                minProperties: 1
              positionPatch:
                description: >-
                  player.position (default 4 Hz, ≤ 30 Hz per subscription option
                  positionHz).
                type: object
                required:
                  - position
                properties:
                  position:
                    description: Media position in seconds from the start.
                    type: number
                    minimum: 0
                  duration:
                    anyOf:
                      - description: Duration in seconds.
                        type: number
                        minimum: 0
                      - type: 'null'
                  rate:
                    type: number
                  timecode:
                    type: string
                    pattern: ^\d{2}:\d{2}:\d{2}[:;]\d{2}$
                additionalProperties: false
              levels:
                description: >-
                  audio.levels meters (≤ 10 Hz): id (speaker / zone / device /
                  master) → dBFS.
                type: object
                required:
                  - levels
                properties:
                  levels:
                    type: object
                    additionalProperties:
                      type: number
                      maximum: 24
                  peak:
                    type: object
                    additionalProperties:
                      type: number
                      maximum: 24
                additionalProperties: false
              showItem:
                description: Fine-grained show edit (sub-kind of show.updated).
                type: object
                required:
                  - showId
                  - itemId
                  - revision
                properties:
                  showId:
                    description: >-
                      Document-scoped id (.dome displays[].id, assets[].id,
                      playlist / cue ids); unique within its parent.
                    type: string
                    pattern: ^[A-Za-z0-9._-]{1,64}$
                    examples:
                      - p1
                      - intro.mp4
                      - cue-01
                  itemId:
                    description: >-
                      Document-scoped id (.dome displays[].id, assets[].id,
                      playlist / cue ids); unique within its parent.
                    type: string
                    pattern: ^[A-Za-z0-9._-]{1,64}$
                    examples:
                      - p1
                      - intro.mp4
                      - cue-01
                  revision:
                    description: >-
                      Monotonic resource revision; the strong ETag is derived
                      from it.
                    type: integer
                    minimum: 0
                  item:
                    type: object
                    description: the stored .dome entry (absent on delete)
                additionalProperties: false
              uploadProgress:
                type: object
                required:
                  - offset
                properties:
                  offset:
                    type: integer
                    minimum: 0
                  length:
                    type: integer
                    minimum: 0
                  status:
                    type: string
                additionalProperties: false
              gatewayMessage:
                description: Debug trace of a gateway message (gateways:manage only).
                type: object
                required:
                  - direction
                  - summary
                properties:
                  direction:
                    enum:
                      - in
                      - out
                  peer:
                    type: string
                  summary:
                    type: string
                  mapsTo:
                    description: >-
                      OpenAPI operationId (camelCase); also the `op` of WS /
                      socket.io `call`.
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*$
                  raw:
                    type: string
                    maxLength: 4096
                additionalProperties: false
              appCleared:
                type: object
                required:
                  - app
                properties:
                  app:
                    type: string
                    pattern: ^[A-Za-z0-9._-]{1,128}$
                additionalProperties: false
              sessionRevoked:
                type: object
                required:
                  - reason
                properties:
                  sessionId:
                    type: string
                  reason:
                    anyOf:
                      - enum:
                          - signed-out
                          - refresh-reuse
                          - password-changed
                          - user-deleted
                          - key-revoked
                          - admin
                      - type: string
                additionalProperties: false
      examples:
        - name: display.pattern
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789abdc
            ts: '2026-10-19T12:00:01.040Z'
            topic: venues/default/displays/p1
            data:
              seq: 48213
              kind: display.pattern
              resource:
                kind: grid
        - name: calibrationJob.progress
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789abdd
            ts: '2026-10-19T12:01:00.000Z'
            topic: >-
              venues/default/calibration/jobs/0192f3a4-5b6c-7d8e-9f01-23456789abd0
            data:
              seq: 48250
              kind: calibrationJob.progress
              patch:
                progress: 0.6
                currentStep: solve
        - name: output.state
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789abde
            ts: '2026-10-19T12:02:00.000Z'
            topic: venues/default/output
            data:
              seq: 48260
              kind: output.state
              resource:
                brightness: 0.25
                volume: 0.5
                blackout: false
        - name: system.info
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890301
            ts: '2026-10-19T12:05:00.000Z'
            topic: system/info
            data:
              seq: 49769
              kind: system.info
              resource:
                product: freedome-mediaserver
                serverVersion: 1.0.0
                instanceId: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                apiVersions:
                  - v1
        - name: system.health
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890302
            ts: '2026-10-19T12:05:00.000Z'
            topic: system/health
            data:
              seq: 49770
              kind: system.health
              resource:
                status: degraded
                checks:
                  engine.visual:
                    status: down
                    detail: not reachable
        - name: log.entry
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890303
            ts: '2026-10-19T12:05:00.000Z'
            topic: system/logs
            data:
              seq: 49771
              kind: log.entry
              resource:
                seq: 1201
                ts: '2026-10-19T12:00:00.123Z'
                level: warn
                message: engine reconnect
        - name: node.state
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890304
            ts: '2026-10-19T12:05:00.000Z'
            topic: nodes/node-2
            data:
              seq: 49772
              kind: node.state
              patch:
                clock:
                  source: ptp
                  offsetMs: 0.09
                  locked: true
        - name: engine.status
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890305
            ts: '2026-10-19T12:05:00.000Z'
            topic: engines/visual
            data:
              seq: 49773
              kind: engine.status
              resource:
                name: visual
                status: up
                version: 1.0.0
                protocol: freedome.engine.v1
        - name: engine.metrics
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890306
            ts: '2026-10-19T12:05:00.000Z'
            topic: engines/visual
            data:
              seq: 49774
              kind: engine.metrics
              patch:
                fps: 59.9
                droppedFrames: 0
                gpuLoad: 0.41
        - name: engine.error
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890307
            ts: '2026-10-19T12:05:00.000Z'
            topic: engines/anantadigital
            data:
              seq: 49775
              kind: engine.error
              resource:
                type: https://freedome.nativemind.us/problems/engine-unavailable
                title: Engine unavailable
                status: 503
                code: engine-unavailable
        - name: venue.updated
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890308
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default
            data:
              seq: 49776
              kind: venue.updated
              revision: 4
              patch:
                meta:
                  title:
                    en: Demo dome
        - name: venue.deleted
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890309
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/old-dome
            data:
              seq: 49777
              kind: venue.deleted
              resource:
                id: old-dome
        - name: venue.activeShow
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789030a
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default
            data:
              seq: 49778
              kind: venue.activeShow
              resource:
                activeShowId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
        - name: output.state
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789030b
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/output
            data:
              seq: 49779
              kind: output.state
              resource:
                brightness: 0.8
                volume: 0.6
                blackout: false
        - name: player.state
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789030c
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/players/main
            data:
              seq: 49780
              kind: player.state
              revision: 42
              resource:
                id: main
                venueId: default
                status: playing
                position: 12.5
                duration: 600
                revision: 42
        - name: player.position
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789030d
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/players/main
            data:
              seq: 49781
              kind: player.position
              patch:
                position: 12.75
                duration: 600
        - name: player.ended
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789030e
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/players/main
            data:
              seq: 49782
              kind: player.ended
              resource:
                id: main
                venueId: default
                status: stopped
                position: 600
                revision: 43
        - name: player.error
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789030f
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/players/main
            data:
              seq: 49783
              kind: player.error
              resource:
                type: https://freedome.nativemind.us/problems/engine-unavailable
                title: Engine unavailable
                status: 503
                code: engine-unavailable
        - name: cue.fired
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890310
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/cues
            data:
              seq: 49784
              kind: cue.fired
              resource:
                cueId: dim
                showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                firedAt: '2026-10-19T12:01:00.000Z'
                actions:
                  - do: setBrightness
                    status: ok
        - name: cue.failed
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890311
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/cues
            data:
              seq: 49785
              kind: cue.failed
              resource:
                cueId: intro
                showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                firedAt: '2026-10-19T12:01:00.000Z'
                actions:
                  - do: play
                    status: failed
                    problem:
                      type: https://freedome.nativemind.us/problems/not-found
                      title: Asset not found
                      status: 404
                      code: not-found
        - name: parameter.changed
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890312
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/parameters
            data:
              seq: 49786
              kind: parameter.changed
              resource:
                path: master.brightness
                type: float
                value: 0.8
                min: 0
                max: 1
        - name: display.state
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890313
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/displays/p1
            data:
              seq: 49787
              kind: display.state
              patch:
                temperatureC: 41.5
        - name: display.error
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890314
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/displays/p2
            data:
              seq: 49788
              kind: display.error
              resource:
                type: https://freedome.nativemind.us/problems/degraded
                title: No signal
                status: 503
                code: degraded
                detail: 'p2: no HDMI signal'
        - name: calibration.updated
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890315
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/calibration
            data:
              seq: 49789
              kind: calibration.updated
              revision: 5
              resource:
                displays:
                  p1:
                    warp:
                      file: calibration/p1.mesh
                      kind: uv-grid
                      size:
                        - 65
                        - 65
        - name: calibrationJob.state
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890316
            ts: '2026-10-19T12:05:00.000Z'
            topic: >-
              venues/default/calibration/jobs/0192f3a4-5b6c-7d8e-9f01-23456789abd0
            data:
              seq: 49790
              kind: calibrationJob.state
              resource:
                id: 0192f3a4-5b6c-7d8e-9f01-23456789abd0
                venueId: default
                kind: visual-camera
                status: running
                steps:
                  - id: capture
                    status: running
                createdAt: '2026-10-19T12:00:00.000Z'
        - name: calibrationJob.awaiting
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890317
            ts: '2026-10-19T12:05:00.000Z'
            topic: >-
              venues/default/calibration/jobs/0192f3a4-5b6c-7d8e-9f01-23456789abd0
            data:
              seq: 49791
              kind: calibrationJob.awaiting
              resource:
                kind: camera-capture
                stepId: capture-p1
                displayId: p1
                pattern:
                  kind: structured-light
        - name: job.state
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890318
            ts: '2026-10-19T12:05:00.000Z'
            topic: jobs/0192f3a4-5b6c-7d8e-9f01-23456789abd0
            data:
              seq: 49792
              kind: job.state
              resource:
                id: 0192f3a4-5b6c-7d8e-9f01-23456789abd0
                kind: import
                status: succeeded
                progress: 1
                createdAt: '2026-10-19T12:00:00.000Z'
                result:
                  showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
        - name: job.progress
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890319
            ts: '2026-10-19T12:05:00.000Z'
            topic: jobs/0192f3a4-5b6c-7d8e-9f01-23456789abd0
            data:
              seq: 49793
              kind: job.progress
              patch:
                progress: 0.5
        - name: audio.state
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789031a
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/audio
            data:
              seq: 49794
              kind: audio.state
              resource:
                venueId: default
                mode: combined
                masterGainDb: -6
                mute: false
                revision: 12
        - name: audio.layout
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789031b
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/audio/layout
            data:
              seq: 49795
              kind: audio.layout
              resource:
                ambisonics:
                  order: 3
                speakers:
                  - id: s1
                    azimuth: 0
                    elevation: 0
                    distance: 4
        - name: audio.levels
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789031c
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/audio/levels
            data:
              seq: 49796
              kind: audio.levels
              resource:
                levels:
                  master: -18.5
                  s1: -21
        - name: audioAnalysis.state
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890400
            ts: '2026-11-05T12:05:00.000Z'
            topic: venues/default/audio/analysis
            data:
              seq: 50100
              kind: audioAnalysis.state
              resource:
                venueId: default
                enabled: true
                status: running
                engine: anantadigital@node-1
                sampleRate: 48000
                blockSize: 256
                inputs:
                  - id: vocal
                    channels:
                      - 1
        - name: audio.analysis
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890401
            ts: '2026-11-05T12:05:00.000Z'
            topic: venues/default/audio/analysis/vocal
            data:
              seq: 50101
              kind: audio.analysis
              resource:
                inputId: vocal
                frame: 18244
                captureUs: 912200500
                rms: 0.41
                peak: 0.63
                bands:
                  subBass: 0.08
                  mid: 0.55
                  highMid: 0.31
                  treble: 0.06
                centroid: 0.37
                centroidHz: 1850
                onset: 0
        - name: audio.onset
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890402
            ts: '2026-11-05T12:05:00.000Z'
            topic: venues/default/audio/onsets/drums
            data:
              seq: 50102
              kind: audio.onset
              resource:
                inputId: drums
                frame: 18300
                captureUs: 915000000
                strength: 0.9
        - name: audioReactive.state
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890403
            ts: '2026-11-05T12:05:00.000Z'
            topic: venues/default/audio/reactive
            data:
              seq: 50103
              kind: audioReactive.state
              resource:
                venueId: default
                enabled: true
                status: running
                activeSceneId: vocal-aura
                intensity: 1
                resolume:
                  osc:
                    state: up
                  rest:
                    state: up
                  ws:
                    state: up
        - name: audioReactiveScene.updated
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890404
            ts: '2026-11-05T12:05:00.000Z'
            topic: venues/default/audio/reactive/scenes
            data:
              seq: 50104
              kind: audioReactiveScene.updated
              resource:
                id: vocal-aura
                title:
                  en: Vocal Aura
                revision: 2
                mappings:
                  - id: glow
                    mode: continuous
                    source:
                      input: vocal
                      metric: rms
                    target:
                      kind: osc
                      gateway: resolume
                      address: /composition/layers/2/video/opacity
                      type: f
        - name: audioReactiveScene.deleted
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890405
            ts: '2026-11-05T12:05:00.000Z'
            topic: venues/default/audio/reactive/scenes
            data:
              seq: 50105
              kind: audioReactiveScene.deleted
              resource:
                id: vocal-aura
        - name: textureSource.state
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890406
            ts: '2026-11-05T12:05:00.000Z'
            topic: venues/default/texture-sources/spout-arena
            data:
              seq: 50106
              kind: textureSource.state
              resource:
                id: spout-arena
                transport: spout
                sender: Arena
                status: online
                width: 3840
                height: 2160
        - name: zone.state
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789031d
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/audio/zones/front
            data:
              seq: 49797
              kind: zone.state
              patch:
                gainDb: -6
        - name: zone.deleted
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789031e
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/audio/zones/back
            data:
              seq: 49798
              kind: zone.deleted
              resource:
                id: back
        - name: audioDevice.state
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789031f
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/audio/devices/qrd1
            data:
              seq: 49799
              kind: audioDevice.state
              patch:
                state:
                  online: false
        - name: audioSession.state
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890320
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/audio/sessions/0192f3a4-5b6c-7d8e-9f01-23456789b001
            data:
              seq: 49800
              kind: audioSession.state
              resource:
                id: 0192f3a4-5b6c-7d8e-9f01-23456789b001
                venueId: default
                presetId: calm-7
                status: running
                startedAt: '2026-10-19T12:00:00.000Z'
        - name: generator.state
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890321
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/audio/generator
            data:
              seq: 49801
              kind: generator.state
              resource:
                running: false
        - name: scenarioSession.state
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890322
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/scenarios/0192f3a4-5b6c-7d8e-9f01-23456789b401
            data:
              seq: 49802
              kind: scenarioSession.state
              resource:
                id: 0192f3a4-5b6c-7d8e-9f01-23456789b401
                venueId: default
                scenarioId: karmic_clusters
                status: running
                params:
                  durationS: 600
                startedAt: '2026-10-19T12:00:00.000Z'
        - name: scenarioSession.log
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890323
            ts: '2026-10-19T12:05:00.000Z'
            topic: venues/default/scenarios/0192f3a4-5b6c-7d8e-9f01-23456789b401
            data:
              seq: 49803
              kind: scenarioSession.log
              resource:
                seq: 1
                ts: '2026-10-19T12:00:01.000Z'
                level: info
                message: phase warm-up
        - name: show.updated
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890324
            ts: '2026-10-19T12:05:00.000Z'
            topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
            data:
              seq: 49804
              kind: show.updated
              revision: 3
              patch:
                meta:
                  title:
                    en: Intro v2
        - name: show.deleted
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890325
            ts: '2026-10-19T12:05:00.000Z'
            topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
            data:
              seq: 49805
              kind: show.deleted
              resource:
                id: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
        - name: playlist.updated
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890326
            ts: '2026-10-19T12:05:00.000Z'
            topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
            data:
              seq: 49806
              kind: playlist.updated
              resource:
                showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                itemId: main
                revision: 4
                item:
                  id: main
                  items:
                    - asset: intro
        - name: playlist.deleted
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890327
            ts: '2026-10-19T12:05:00.000Z'
            topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
            data:
              seq: 49807
              kind: playlist.deleted
              resource:
                showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                itemId: lobby
                revision: 5
        - name: timeline.updated
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890328
            ts: '2026-10-19T12:05:00.000Z'
            topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
            data:
              seq: 49808
              kind: timeline.updated
              resource:
                showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                itemId: tl
                revision: 6
        - name: timeline.deleted
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890329
            ts: '2026-10-19T12:05:00.000Z'
            topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
            data:
              seq: 49809
              kind: timeline.deleted
              resource:
                showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                itemId: tl2
                revision: 7
        - name: cue.updated
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789032a
            ts: '2026-10-19T12:05:00.000Z'
            topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
            data:
              seq: 49810
              kind: cue.updated
              resource:
                showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                itemId: dim
                revision: 8
        - name: cue.deleted
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789032b
            ts: '2026-10-19T12:05:00.000Z'
            topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
            data:
              seq: 49811
              kind: cue.deleted
              resource:
                showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                itemId: old
                revision: 9
        - name: trigger.updated
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789032c
            ts: '2026-10-19T12:05:00.000Z'
            topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
            data:
              seq: 49812
              kind: trigger.updated
              resource:
                showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                itemId: go
                revision: 10
        - name: trigger.deleted
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789032d
            ts: '2026-10-19T12:05:00.000Z'
            topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
            data:
              seq: 49813
              kind: trigger.deleted
              resource:
                showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                itemId: go2
                revision: 11
        - name: matrix.updated
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789032e
            ts: '2026-10-19T12:05:00.000Z'
            topic: shows/9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
            data:
              seq: 49814
              kind: matrix.updated
              resource:
                showId: 9c4d5e6f-7a8b-4c93-8d0e-1f2a3b4c5d6e
                itemId: matrix
                revision: 12
        - name: asset.created
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789032f
            ts: '2026-10-19T12:05:00.000Z'
            topic: assets/0192f3a4-5b6c-7d8e-9f01-23456789ae01
            data:
              seq: 49815
              kind: asset.created
              resource:
                id: 0192f3a4-5b6c-7d8e-9f01-23456789ae01
                name: intro.mov
                type: video
                status: processing
                revision: 1
                createdAt: '2026-10-19T12:00:00.000Z'
        - name: asset.progress
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890330
            ts: '2026-10-19T12:05:00.000Z'
            topic: assets/0192f3a4-5b6c-7d8e-9f01-23456789ae01
            data:
              seq: 49816
              kind: asset.progress
              patch:
                progress: 0.5
        - name: asset.ready
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890331
            ts: '2026-10-19T12:05:00.000Z'
            topic: assets/0192f3a4-5b6c-7d8e-9f01-23456789ae01
            data:
              seq: 49817
              kind: asset.ready
              resource:
                id: 0192f3a4-5b6c-7d8e-9f01-23456789ae01
                name: intro.mov
                type: video
                status: ready
                revision: 2
                createdAt: '2026-10-19T12:00:00.000Z'
        - name: asset.failed
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890332
            ts: '2026-10-19T12:05:00.000Z'
            topic: assets/0192f3a4-5b6c-7d8e-9f01-23456789ae02
            data:
              seq: 49818
              kind: asset.failed
              resource:
                id: 0192f3a4-5b6c-7d8e-9f01-23456789ae02
                name: broken.mov
                type: video
                status: failed
                problem:
                  type: >-
                    https://freedome.nativemind.us/problems/upload-checksum-mismatch
                  title: Checksum mismatch
                  status: 422
                  code: upload-checksum-mismatch
                revision: 2
                createdAt: '2026-10-19T12:00:00.000Z'
        - name: asset.deleted
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890333
            ts: '2026-10-19T12:05:00.000Z'
            topic: assets/0192f3a4-5b6c-7d8e-9f01-23456789ae03
            data:
              seq: 49819
              kind: asset.deleted
              resource:
                id: 0192f3a4-5b6c-7d8e-9f01-23456789ae03
        - name: upload.progress
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890334
            ts: '2026-10-19T12:05:00.000Z'
            topic: uploads/0192f3a4-5b6c-7d8e-9f01-23456789ae10
            data:
              seq: 49820
              kind: upload.progress
              patch:
                offset: 209715200
                length: 734003200
        - name: gateway.state
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890335
            ts: '2026-10-19T12:05:00.000Z'
            topic: gateways/screenberry
            data:
              seq: 49821
              kind: gateway.state
              patch:
                status: degraded
        - name: gateway.message
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890336
            ts: '2026-10-19T12:05:00.000Z'
            topic: gateways/screenberry
            data:
              seq: 49822
              kind: gateway.message
              resource:
                direction: in
                peer: 10.0.0.50:51234
                summary: command play
                mapsTo: play
        - name: app.payload
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890337
            ts: '2026-10-19T12:05:00.000Z'
            topic: apps/net.nativemind.starveda
            data:
              seq: 49823
              kind: app.payload
              resource:
                id: 0192f3a4-5b6c-7d8e-9f01-23456789b101
                app: net.nativemind.starveda
                kind: overlay
                data:
                  text: Hello
                expiresAt: '2026-10-19T12:01:00.000Z'
        - name: app.cleared
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890338
            ts: '2026-10-19T12:05:00.000Z'
            topic: apps/net.nativemind.starveda
            data:
              seq: 49824
              kind: app.cleared
              resource:
                app: net.nativemind.starveda
        - name: client.command
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-234567890339
            ts: '2026-10-19T12:05:00.000Z'
            topic: clients/0192f3a4-5b6c-7d8e-9f01-23456789b201/commands
            data:
              seq: 49825
              kind: client.command
              resource:
                command: vibrate
                params:
                  ms: 200
        - name: device.state
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789033a
            ts: '2026-10-19T12:05:00.000Z'
            topic: devices/vp-f-0012
            data:
              seq: 49826
              kind: device.state
              patch:
                state:
                  temperatureC: 42
        - name: session.revoked
          payload:
            type: event
            id: 0192f3a4-5b6c-7d8e-9f01-23456789033b
            ts: '2026-10-19T12:05:00.000Z'
            topic: auth/sessions
            data:
              seq: 49827
              kind: session.revoked
              resource:
                reason: password-changed
    resync:
      name: resync
      title: resync (S→C)
      payload:
        description: 'S→C: resume gap too old.'
        type: object
        allOf:
          - $schema: https://json-schema.org/draft/2020-12/schema
            $id: >-
              https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
            $comment: >-
              NativeMindNONC — freedome_contract (see LICENSE). Message envelope
              for plain WS (sub-protocol freedome.v1), socket.io `event`
              payload, GraphQL Event and OSC JSON events, 02e §7.1 / §8.1.
              `type`, `id`, `ts`, `data` on every message; `topic` on events;
              `replyTo` on result / error replies. Message types are open
              (readers ignore unknown ones).
            title: Message envelope
            type: object
            required:
              - type
              - id
              - ts
              - data
            properties:
              type:
                description: >-
                  Known: hello, welcome, subscribe, unsubscribe, call, result,
                  event, error, resync, ping, pong, bye.
                type: string
                pattern: ^[a-z][a-zA-Z0-9]*$
              id:
                description: Unique per message; the idempotency key of `call`.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              ts:
                description: RFC 3339 UTC with milliseconds, e.g. 2026-10-19T12:00:00.000Z.
                type: string
                format: date-time
                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
              topic:
                description: >-
                  Concrete event topic (02e §7.2), e.g.
                  venues/default/players/main.
                type: string
                maxLength: 512
                pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
              replyTo:
                description: >-
                  Server-owned resource id: UUIDv7, lowercase, sortable by
                  creation time.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              data: {}
            allOf:
              - if:
                  properties:
                    type:
                      const: event
                  required:
                    - type
                then:
                  required:
                    - topic
                  properties:
                    data:
                      type: object
                      required:
                        - seq
                        - kind
                      properties:
                        seq:
                          type: integer
                          minimum: 0
                          description: >-
                            Per-server monotonically increasing sequence (resume
                            with sinceSeq).
                        kind:
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                          description: >-
                            Event kind from events/topics.yaml, e.g.
                            player.state.
                        resource:
                          description: Full new representation.
                        patch:
                          type: object
                          description: JSON merge patch (high-rate kinds).
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                      not:
                        required:
                          - resource
                          - patch
                      additionalProperties: true
              - if:
                  properties:
                    type:
                      const: result
                  required:
                    - type
                then:
                  required:
                    - replyTo
              - if:
                  properties:
                    type:
                      const: error
                  required:
                    - type
                then:
                  properties:
                    data:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). RFC
                        9457 problem details with the Freedome `code` catalogue,
                        02e §3.3. Also the `data` of WS `error`, the socket.io
                        ack error and GraphQL errors[].extensions.problem. The
                        catalogue is open: unknown codes are allowed; known
                        codes are bound to their HTTP status.
                      title: Problem details
                      type: object
                      required:
                        - type
                        - title
                        - code
                      properties:
                        type:
                          type: string
                          format: uri
                          description: >-
                            https://freedome.nativemind.us/problems/<code> for
                            catalogue codes.
                        title:
                          type: string
                          minLength: 1
                        status:
                          type: integer
                          minimum: 100
                          maximum: 599
                        detail:
                          type: string
                        instance:
                          type: string
                          format: uri-reference
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        traceId:
                          type: string
                          pattern: ^[0-9a-f]{16,32}$
                        errors:
                          type: array
                          items:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                      allOf:
                        - if:
                            properties:
                              code:
                                const: validation-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: not-found
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 404
                        - if:
                            properties:
                              code:
                                const: conflict
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: precondition-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 412
                        - if:
                            properties:
                              code:
                                const: precondition-required
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 428
                        - if:
                            properties:
                              code:
                                const: unauthenticated
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: forbidden
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: rate-limited
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 429
                        - if:
                            properties:
                              code:
                                const: payload-too-large
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 413
                        - if:
                            properties:
                              code:
                                const: unsupported-format
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 415
                        - if:
                            properties:
                              code:
                                const: engine-unavailable
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: engine-incompatible
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: degraded
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: upload-checksum-mismatch
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: legacy-unsupported
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 501
                        - if:
                            properties:
                              code:
                                const: internal
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 500
                        - if:
                            properties:
                              code:
                                const: clock-unlocked
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: not-configured
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: authorization-pending
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: slow-down
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: access-denied
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: expired-token
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: token-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: idempotency-key-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: idempotency-in-progress
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                      additionalProperties: true
                      examples:
                        - type: >-
                            https://freedome.nativemind.us/problems/engine-unavailable
                          title: Visual engine unavailable
                          status: 503
                          detail: >-
                            freedome-engined not reachable at
                            unix:/run/freedome/engine.sock
                          instance: /api/v1/venues/default/players/main/play
                          code: engine-unavailable
                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                      $defs:
                        knownCode:
                          enum:
                            - validation-failed
                            - not-found
                            - conflict
                            - precondition-failed
                            - precondition-required
                            - unauthenticated
                            - forbidden
                            - rate-limited
                            - payload-too-large
                            - unsupported-format
                            - engine-unavailable
                            - engine-incompatible
                            - degraded
                            - job-failed
                            - upload-checksum-mismatch
                            - legacy-unsupported
                            - internal
                            - clock-unlocked
                            - not-configured
                            - authorization-pending
                            - slow-down
                            - access-denied
                            - expired-token
                            - token-reused
                            - idempotency-key-reused
                            - idempotency-in-progress
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        fieldError:
                          type: object
                          required:
                            - pointer
                            - detail
                          properties:
                            pointer:
                              type: string
                              format: json-pointer
                            detail:
                              type: string
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          additionalProperties: true
              - if:
                  properties:
                    type:
                      const: call
                  required:
                    - type
                then:
                  properties:
                    data:
                      type: object
                      required:
                        - op
                      properties:
                        op:
                          description: >-
                            OpenAPI operationId (camelCase); also the `op` of WS
                            / socket.io `call`.
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*$
                        params:
                          type: object
                        body: {}
                        ifMatch:
                          type: string
                      additionalProperties: true
            additionalProperties: true
            examples:
              - type: event
                id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts: '2026-10-19T12:00:00.123Z'
                topic: venues/default/players/main
                data:
                  seq: 48213
                  kind: player.state
                  resource:
                    status: playing
                    position: 12.5
            $defs:
              knownType:
                enum:
                  - hello
                  - welcome
                  - subscribe
                  - unsubscribe
                  - call
                  - result
                  - event
                  - error
                  - resync
                  - ping
                  - pong
                  - bye
              eventData:
                type: object
                required:
                  - seq
                  - kind
                properties:
                  seq:
                    type: integer
                    minimum: 0
                    description: >-
                      Per-server monotonically increasing sequence (resume with
                      sinceSeq).
                  kind:
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                    description: Event kind from events/topics.yaml, e.g. player.state.
                  resource:
                    description: Full new representation.
                  patch:
                    type: object
                    description: JSON merge patch (high-rate kinds).
                  revision:
                    description: >-
                      Monotonic resource revision; the strong ETag is derived
                      from it.
                    type: integer
                    minimum: 0
                not:
                  required:
                    - resource
                    - patch
                additionalProperties: true
              callData:
                type: object
                required:
                  - op
                properties:
                  op:
                    description: >-
                      OpenAPI operationId (camelCase); also the `op` of WS /
                      socket.io `call`.
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*$
                  params:
                    type: object
                  body: {}
                  ifMatch:
                    type: string
                additionalProperties: true
        required:
          - type
          - id
          - ts
          - data
        properties:
          type:
            const: resync
          data:
            description: Client must re-read state via REST / GraphQL for these topics.
            type: object
            required:
              - topics
              - reason
            properties:
              topics:
                type: array
                items:
                  description: >-
                    Subscription filter: a topic where a level may be `+` (one
                    level) and the last level may be `#` (rest), MQTT style.
                  type: string
                  maxLength: 512
                  pattern: >-
                    ^(?:[A-Za-z0-9._@-]+|\+)(?:/(?:[A-Za-z0-9._@-]+|\+))*(?:/#)?$|^#$
              reason:
                anyOf:
                  - enum:
                      - gap-too-old
                      - server-restart
                      - overflow
                  - type: string
            patternProperties:
              ^x-: true
            additionalProperties: false
      examples:
        - name: gap
          payload:
            type: resync
            id: 0192f3a4-5b6c-7d8e-9f01-23456789abdf
            ts: '2026-10-19T12:00:00.040Z'
            data:
              topics:
                - venues/default/displays/+
              reason: gap-too-old
    ping:
      name: ping
      title: ping
      payload:
        description: Either side; 2 missed heartbeats → close 4408.
        type: object
        allOf:
          - $schema: https://json-schema.org/draft/2020-12/schema
            $id: >-
              https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
            $comment: >-
              NativeMindNONC — freedome_contract (see LICENSE). Message envelope
              for plain WS (sub-protocol freedome.v1), socket.io `event`
              payload, GraphQL Event and OSC JSON events, 02e §7.1 / §8.1.
              `type`, `id`, `ts`, `data` on every message; `topic` on events;
              `replyTo` on result / error replies. Message types are open
              (readers ignore unknown ones).
            title: Message envelope
            type: object
            required:
              - type
              - id
              - ts
              - data
            properties:
              type:
                description: >-
                  Known: hello, welcome, subscribe, unsubscribe, call, result,
                  event, error, resync, ping, pong, bye.
                type: string
                pattern: ^[a-z][a-zA-Z0-9]*$
              id:
                description: Unique per message; the idempotency key of `call`.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              ts:
                description: RFC 3339 UTC with milliseconds, e.g. 2026-10-19T12:00:00.000Z.
                type: string
                format: date-time
                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
              topic:
                description: >-
                  Concrete event topic (02e §7.2), e.g.
                  venues/default/players/main.
                type: string
                maxLength: 512
                pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
              replyTo:
                description: >-
                  Server-owned resource id: UUIDv7, lowercase, sortable by
                  creation time.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              data: {}
            allOf:
              - if:
                  properties:
                    type:
                      const: event
                  required:
                    - type
                then:
                  required:
                    - topic
                  properties:
                    data:
                      type: object
                      required:
                        - seq
                        - kind
                      properties:
                        seq:
                          type: integer
                          minimum: 0
                          description: >-
                            Per-server monotonically increasing sequence (resume
                            with sinceSeq).
                        kind:
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                          description: >-
                            Event kind from events/topics.yaml, e.g.
                            player.state.
                        resource:
                          description: Full new representation.
                        patch:
                          type: object
                          description: JSON merge patch (high-rate kinds).
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                      not:
                        required:
                          - resource
                          - patch
                      additionalProperties: true
              - if:
                  properties:
                    type:
                      const: result
                  required:
                    - type
                then:
                  required:
                    - replyTo
              - if:
                  properties:
                    type:
                      const: error
                  required:
                    - type
                then:
                  properties:
                    data:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). RFC
                        9457 problem details with the Freedome `code` catalogue,
                        02e §3.3. Also the `data` of WS `error`, the socket.io
                        ack error and GraphQL errors[].extensions.problem. The
                        catalogue is open: unknown codes are allowed; known
                        codes are bound to their HTTP status.
                      title: Problem details
                      type: object
                      required:
                        - type
                        - title
                        - code
                      properties:
                        type:
                          type: string
                          format: uri
                          description: >-
                            https://freedome.nativemind.us/problems/<code> for
                            catalogue codes.
                        title:
                          type: string
                          minLength: 1
                        status:
                          type: integer
                          minimum: 100
                          maximum: 599
                        detail:
                          type: string
                        instance:
                          type: string
                          format: uri-reference
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        traceId:
                          type: string
                          pattern: ^[0-9a-f]{16,32}$
                        errors:
                          type: array
                          items:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                      allOf:
                        - if:
                            properties:
                              code:
                                const: validation-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: not-found
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 404
                        - if:
                            properties:
                              code:
                                const: conflict
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: precondition-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 412
                        - if:
                            properties:
                              code:
                                const: precondition-required
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 428
                        - if:
                            properties:
                              code:
                                const: unauthenticated
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: forbidden
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: rate-limited
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 429
                        - if:
                            properties:
                              code:
                                const: payload-too-large
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 413
                        - if:
                            properties:
                              code:
                                const: unsupported-format
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 415
                        - if:
                            properties:
                              code:
                                const: engine-unavailable
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: engine-incompatible
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: degraded
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: upload-checksum-mismatch
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: legacy-unsupported
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 501
                        - if:
                            properties:
                              code:
                                const: internal
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 500
                        - if:
                            properties:
                              code:
                                const: clock-unlocked
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: not-configured
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: authorization-pending
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: slow-down
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: access-denied
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: expired-token
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: token-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: idempotency-key-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: idempotency-in-progress
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                      additionalProperties: true
                      examples:
                        - type: >-
                            https://freedome.nativemind.us/problems/engine-unavailable
                          title: Visual engine unavailable
                          status: 503
                          detail: >-
                            freedome-engined not reachable at
                            unix:/run/freedome/engine.sock
                          instance: /api/v1/venues/default/players/main/play
                          code: engine-unavailable
                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                      $defs:
                        knownCode:
                          enum:
                            - validation-failed
                            - not-found
                            - conflict
                            - precondition-failed
                            - precondition-required
                            - unauthenticated
                            - forbidden
                            - rate-limited
                            - payload-too-large
                            - unsupported-format
                            - engine-unavailable
                            - engine-incompatible
                            - degraded
                            - job-failed
                            - upload-checksum-mismatch
                            - legacy-unsupported
                            - internal
                            - clock-unlocked
                            - not-configured
                            - authorization-pending
                            - slow-down
                            - access-denied
                            - expired-token
                            - token-reused
                            - idempotency-key-reused
                            - idempotency-in-progress
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        fieldError:
                          type: object
                          required:
                            - pointer
                            - detail
                          properties:
                            pointer:
                              type: string
                              format: json-pointer
                            detail:
                              type: string
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          additionalProperties: true
              - if:
                  properties:
                    type:
                      const: call
                  required:
                    - type
                then:
                  properties:
                    data:
                      type: object
                      required:
                        - op
                      properties:
                        op:
                          description: >-
                            OpenAPI operationId (camelCase); also the `op` of WS
                            / socket.io `call`.
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*$
                        params:
                          type: object
                        body: {}
                        ifMatch:
                          type: string
                      additionalProperties: true
            additionalProperties: true
            examples:
              - type: event
                id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts: '2026-10-19T12:00:00.123Z'
                topic: venues/default/players/main
                data:
                  seq: 48213
                  kind: player.state
                  resource:
                    status: playing
                    position: 12.5
            $defs:
              knownType:
                enum:
                  - hello
                  - welcome
                  - subscribe
                  - unsubscribe
                  - call
                  - result
                  - event
                  - error
                  - resync
                  - ping
                  - pong
                  - bye
              eventData:
                type: object
                required:
                  - seq
                  - kind
                properties:
                  seq:
                    type: integer
                    minimum: 0
                    description: >-
                      Per-server monotonically increasing sequence (resume with
                      sinceSeq).
                  kind:
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                    description: Event kind from events/topics.yaml, e.g. player.state.
                  resource:
                    description: Full new representation.
                  patch:
                    type: object
                    description: JSON merge patch (high-rate kinds).
                  revision:
                    description: >-
                      Monotonic resource revision; the strong ETag is derived
                      from it.
                    type: integer
                    minimum: 0
                not:
                  required:
                    - resource
                    - patch
                additionalProperties: true
              callData:
                type: object
                required:
                  - op
                properties:
                  op:
                    description: >-
                      OpenAPI operationId (camelCase); also the `op` of WS /
                      socket.io `call`.
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*$
                  params:
                    type: object
                  body: {}
                  ifMatch:
                    type: string
                additionalProperties: true
        required:
          - type
          - id
          - ts
          - data
        properties:
          type:
            const: ping
          data:
            type: object
            maxProperties: 0
      examples:
        - name: ping
          payload:
            type: ping
            id: 0192f3a4-5b6c-7d8e-9f01-23456789abe0
            ts: '2026-10-19T12:00:20.000Z'
            data: {}
    pong:
      name: pong
      title: pong
      payload:
        description: Reply to ping.
        type: object
        allOf:
          - $schema: https://json-schema.org/draft/2020-12/schema
            $id: >-
              https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
            $comment: >-
              NativeMindNONC — freedome_contract (see LICENSE). Message envelope
              for plain WS (sub-protocol freedome.v1), socket.io `event`
              payload, GraphQL Event and OSC JSON events, 02e §7.1 / §8.1.
              `type`, `id`, `ts`, `data` on every message; `topic` on events;
              `replyTo` on result / error replies. Message types are open
              (readers ignore unknown ones).
            title: Message envelope
            type: object
            required:
              - type
              - id
              - ts
              - data
            properties:
              type:
                description: >-
                  Known: hello, welcome, subscribe, unsubscribe, call, result,
                  event, error, resync, ping, pong, bye.
                type: string
                pattern: ^[a-z][a-zA-Z0-9]*$
              id:
                description: Unique per message; the idempotency key of `call`.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              ts:
                description: RFC 3339 UTC with milliseconds, e.g. 2026-10-19T12:00:00.000Z.
                type: string
                format: date-time
                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
              topic:
                description: >-
                  Concrete event topic (02e §7.2), e.g.
                  venues/default/players/main.
                type: string
                maxLength: 512
                pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
              replyTo:
                description: >-
                  Server-owned resource id: UUIDv7, lowercase, sortable by
                  creation time.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              data: {}
            allOf:
              - if:
                  properties:
                    type:
                      const: event
                  required:
                    - type
                then:
                  required:
                    - topic
                  properties:
                    data:
                      type: object
                      required:
                        - seq
                        - kind
                      properties:
                        seq:
                          type: integer
                          minimum: 0
                          description: >-
                            Per-server monotonically increasing sequence (resume
                            with sinceSeq).
                        kind:
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                          description: >-
                            Event kind from events/topics.yaml, e.g.
                            player.state.
                        resource:
                          description: Full new representation.
                        patch:
                          type: object
                          description: JSON merge patch (high-rate kinds).
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                      not:
                        required:
                          - resource
                          - patch
                      additionalProperties: true
              - if:
                  properties:
                    type:
                      const: result
                  required:
                    - type
                then:
                  required:
                    - replyTo
              - if:
                  properties:
                    type:
                      const: error
                  required:
                    - type
                then:
                  properties:
                    data:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). RFC
                        9457 problem details with the Freedome `code` catalogue,
                        02e §3.3. Also the `data` of WS `error`, the socket.io
                        ack error and GraphQL errors[].extensions.problem. The
                        catalogue is open: unknown codes are allowed; known
                        codes are bound to their HTTP status.
                      title: Problem details
                      type: object
                      required:
                        - type
                        - title
                        - code
                      properties:
                        type:
                          type: string
                          format: uri
                          description: >-
                            https://freedome.nativemind.us/problems/<code> for
                            catalogue codes.
                        title:
                          type: string
                          minLength: 1
                        status:
                          type: integer
                          minimum: 100
                          maximum: 599
                        detail:
                          type: string
                        instance:
                          type: string
                          format: uri-reference
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        traceId:
                          type: string
                          pattern: ^[0-9a-f]{16,32}$
                        errors:
                          type: array
                          items:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                      allOf:
                        - if:
                            properties:
                              code:
                                const: validation-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: not-found
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 404
                        - if:
                            properties:
                              code:
                                const: conflict
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: precondition-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 412
                        - if:
                            properties:
                              code:
                                const: precondition-required
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 428
                        - if:
                            properties:
                              code:
                                const: unauthenticated
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: forbidden
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: rate-limited
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 429
                        - if:
                            properties:
                              code:
                                const: payload-too-large
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 413
                        - if:
                            properties:
                              code:
                                const: unsupported-format
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 415
                        - if:
                            properties:
                              code:
                                const: engine-unavailable
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: engine-incompatible
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: degraded
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: upload-checksum-mismatch
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: legacy-unsupported
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 501
                        - if:
                            properties:
                              code:
                                const: internal
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 500
                        - if:
                            properties:
                              code:
                                const: clock-unlocked
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: not-configured
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: authorization-pending
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: slow-down
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: access-denied
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: expired-token
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: token-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: idempotency-key-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: idempotency-in-progress
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                      additionalProperties: true
                      examples:
                        - type: >-
                            https://freedome.nativemind.us/problems/engine-unavailable
                          title: Visual engine unavailable
                          status: 503
                          detail: >-
                            freedome-engined not reachable at
                            unix:/run/freedome/engine.sock
                          instance: /api/v1/venues/default/players/main/play
                          code: engine-unavailable
                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                      $defs:
                        knownCode:
                          enum:
                            - validation-failed
                            - not-found
                            - conflict
                            - precondition-failed
                            - precondition-required
                            - unauthenticated
                            - forbidden
                            - rate-limited
                            - payload-too-large
                            - unsupported-format
                            - engine-unavailable
                            - engine-incompatible
                            - degraded
                            - job-failed
                            - upload-checksum-mismatch
                            - legacy-unsupported
                            - internal
                            - clock-unlocked
                            - not-configured
                            - authorization-pending
                            - slow-down
                            - access-denied
                            - expired-token
                            - token-reused
                            - idempotency-key-reused
                            - idempotency-in-progress
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        fieldError:
                          type: object
                          required:
                            - pointer
                            - detail
                          properties:
                            pointer:
                              type: string
                              format: json-pointer
                            detail:
                              type: string
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          additionalProperties: true
              - if:
                  properties:
                    type:
                      const: call
                  required:
                    - type
                then:
                  properties:
                    data:
                      type: object
                      required:
                        - op
                      properties:
                        op:
                          description: >-
                            OpenAPI operationId (camelCase); also the `op` of WS
                            / socket.io `call`.
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*$
                        params:
                          type: object
                        body: {}
                        ifMatch:
                          type: string
                      additionalProperties: true
            additionalProperties: true
            examples:
              - type: event
                id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts: '2026-10-19T12:00:00.123Z'
                topic: venues/default/players/main
                data:
                  seq: 48213
                  kind: player.state
                  resource:
                    status: playing
                    position: 12.5
            $defs:
              knownType:
                enum:
                  - hello
                  - welcome
                  - subscribe
                  - unsubscribe
                  - call
                  - result
                  - event
                  - error
                  - resync
                  - ping
                  - pong
                  - bye
              eventData:
                type: object
                required:
                  - seq
                  - kind
                properties:
                  seq:
                    type: integer
                    minimum: 0
                    description: >-
                      Per-server monotonically increasing sequence (resume with
                      sinceSeq).
                  kind:
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                    description: Event kind from events/topics.yaml, e.g. player.state.
                  resource:
                    description: Full new representation.
                  patch:
                    type: object
                    description: JSON merge patch (high-rate kinds).
                  revision:
                    description: >-
                      Monotonic resource revision; the strong ETag is derived
                      from it.
                    type: integer
                    minimum: 0
                not:
                  required:
                    - resource
                    - patch
                additionalProperties: true
              callData:
                type: object
                required:
                  - op
                properties:
                  op:
                    description: >-
                      OpenAPI operationId (camelCase); also the `op` of WS /
                      socket.io `call`.
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*$
                  params:
                    type: object
                  body: {}
                  ifMatch:
                    type: string
                additionalProperties: true
        required:
          - type
          - id
          - ts
          - data
          - replyTo
        properties:
          type:
            const: pong
          data:
            type: object
            maxProperties: 0
      examples:
        - name: pong
          payload:
            type: pong
            id: 0192f3a4-5b6c-7d8e-9f01-23456789abe1
            ts: '2026-10-19T12:00:20.002Z'
            replyTo: 0192f3a4-5b6c-7d8e-9f01-23456789abe0
            data: {}
    bye:
      name: bye
      title: bye (S→C)
      payload:
        description: S→C before closing.
        type: object
        allOf:
          - $schema: https://json-schema.org/draft/2020-12/schema
            $id: >-
              https://freedome.nativemind.us/schemas/common/1.0/envelope.schema.json
            $comment: >-
              NativeMindNONC — freedome_contract (see LICENSE). Message envelope
              for plain WS (sub-protocol freedome.v1), socket.io `event`
              payload, GraphQL Event and OSC JSON events, 02e §7.1 / §8.1.
              `type`, `id`, `ts`, `data` on every message; `topic` on events;
              `replyTo` on result / error replies. Message types are open
              (readers ignore unknown ones).
            title: Message envelope
            type: object
            required:
              - type
              - id
              - ts
              - data
            properties:
              type:
                description: >-
                  Known: hello, welcome, subscribe, unsubscribe, call, result,
                  event, error, resync, ping, pong, bye.
                type: string
                pattern: ^[a-z][a-zA-Z0-9]*$
              id:
                description: Unique per message; the idempotency key of `call`.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              ts:
                description: RFC 3339 UTC with milliseconds, e.g. 2026-10-19T12:00:00.000Z.
                type: string
                format: date-time
                pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$
              topic:
                description: >-
                  Concrete event topic (02e §7.2), e.g.
                  venues/default/players/main.
                type: string
                maxLength: 512
                pattern: ^[A-Za-z0-9._@-]+(/[A-Za-z0-9._@-]+)*$
              replyTo:
                description: >-
                  Server-owned resource id: UUIDv7, lowercase, sortable by
                  creation time.
                type: string
                pattern: >-
                  ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                examples:
                  - 0192f3a4-5b6c-7d8e-9f01-23456789abcd
              data: {}
            allOf:
              - if:
                  properties:
                    type:
                      const: event
                  required:
                    - type
                then:
                  required:
                    - topic
                  properties:
                    data:
                      type: object
                      required:
                        - seq
                        - kind
                      properties:
                        seq:
                          type: integer
                          minimum: 0
                          description: >-
                            Per-server monotonically increasing sequence (resume
                            with sinceSeq).
                        kind:
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                          description: >-
                            Event kind from events/topics.yaml, e.g.
                            player.state.
                        resource:
                          description: Full new representation.
                        patch:
                          type: object
                          description: JSON merge patch (high-rate kinds).
                        revision:
                          description: >-
                            Monotonic resource revision; the strong ETag is
                            derived from it.
                          type: integer
                          minimum: 0
                      not:
                        required:
                          - resource
                          - patch
                      additionalProperties: true
              - if:
                  properties:
                    type:
                      const: result
                  required:
                    - type
                then:
                  required:
                    - replyTo
              - if:
                  properties:
                    type:
                      const: error
                  required:
                    - type
                then:
                  properties:
                    data:
                      $schema: https://json-schema.org/draft/2020-12/schema
                      $id: >-
                        https://freedome.nativemind.us/schemas/common/1.0/problem.schema.json
                      $comment: >-
                        NativeMindNONC — freedome_contract (see LICENSE). RFC
                        9457 problem details with the Freedome `code` catalogue,
                        02e §3.3. Also the `data` of WS `error`, the socket.io
                        ack error and GraphQL errors[].extensions.problem. The
                        catalogue is open: unknown codes are allowed; known
                        codes are bound to their HTTP status.
                      title: Problem details
                      type: object
                      required:
                        - type
                        - title
                        - code
                      properties:
                        type:
                          type: string
                          format: uri
                          description: >-
                            https://freedome.nativemind.us/problems/<code> for
                            catalogue codes.
                        title:
                          type: string
                          minLength: 1
                        status:
                          type: integer
                          minimum: 100
                          maximum: 599
                        detail:
                          type: string
                        instance:
                          type: string
                          format: uri-reference
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        traceId:
                          type: string
                          pattern: ^[0-9a-f]{16,32}$
                        errors:
                          type: array
                          items:
                            type: object
                            required:
                              - pointer
                              - detail
                            properties:
                              pointer:
                                type: string
                                format: json-pointer
                              detail:
                                type: string
                              code:
                                description: >-
                                  Stable machine key; also the last path segment
                                  of `type`. Open set: see knownCode.
                                type: string
                                pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                            additionalProperties: true
                      allOf:
                        - if:
                            properties:
                              code:
                                const: validation-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: not-found
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 404
                        - if:
                            properties:
                              code:
                                const: conflict
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: precondition-failed
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 412
                        - if:
                            properties:
                              code:
                                const: precondition-required
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 428
                        - if:
                            properties:
                              code:
                                const: unauthenticated
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: forbidden
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: rate-limited
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 429
                        - if:
                            properties:
                              code:
                                const: payload-too-large
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 413
                        - if:
                            properties:
                              code:
                                const: unsupported-format
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 415
                        - if:
                            properties:
                              code:
                                const: engine-unavailable
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: engine-incompatible
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: degraded
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: upload-checksum-mismatch
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 422
                        - if:
                            properties:
                              code:
                                const: legacy-unsupported
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 501
                        - if:
                            properties:
                              code:
                                const: internal
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 500
                        - if:
                            properties:
                              code:
                                const: clock-unlocked
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: not-configured
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 503
                        - if:
                            properties:
                              code:
                                const: authorization-pending
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: slow-down
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: access-denied
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 403
                        - if:
                            properties:
                              code:
                                const: expired-token
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 400
                        - if:
                            properties:
                              code:
                                const: token-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 401
                        - if:
                            properties:
                              code:
                                const: idempotency-key-reused
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                        - if:
                            properties:
                              code:
                                const: idempotency-in-progress
                            required:
                              - code
                          then:
                            properties:
                              status:
                                const: 409
                      additionalProperties: true
                      examples:
                        - type: >-
                            https://freedome.nativemind.us/problems/engine-unavailable
                          title: Visual engine unavailable
                          status: 503
                          detail: >-
                            freedome-engined not reachable at
                            unix:/run/freedome/engine.sock
                          instance: /api/v1/venues/default/players/main/play
                          code: engine-unavailable
                          traceId: 4bf92f3577b34da6a3ce929d0e0e4736
                      $defs:
                        knownCode:
                          enum:
                            - validation-failed
                            - not-found
                            - conflict
                            - precondition-failed
                            - precondition-required
                            - unauthenticated
                            - forbidden
                            - rate-limited
                            - payload-too-large
                            - unsupported-format
                            - engine-unavailable
                            - engine-incompatible
                            - degraded
                            - job-failed
                            - upload-checksum-mismatch
                            - legacy-unsupported
                            - internal
                            - clock-unlocked
                            - not-configured
                            - authorization-pending
                            - slow-down
                            - access-denied
                            - expired-token
                            - token-reused
                            - idempotency-key-reused
                            - idempotency-in-progress
                        code:
                          description: >-
                            Stable machine key; also the last path segment of
                            `type`. Open set: see knownCode.
                          type: string
                          pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                        fieldError:
                          type: object
                          required:
                            - pointer
                            - detail
                          properties:
                            pointer:
                              type: string
                              format: json-pointer
                            detail:
                              type: string
                            code:
                              description: >-
                                Stable machine key; also the last path segment
                                of `type`. Open set: see knownCode.
                              type: string
                              pattern: ^[a-z][a-z0-9]*(-[a-z0-9]+)*$
                          additionalProperties: true
              - if:
                  properties:
                    type:
                      const: call
                  required:
                    - type
                then:
                  properties:
                    data:
                      type: object
                      required:
                        - op
                      properties:
                        op:
                          description: >-
                            OpenAPI operationId (camelCase); also the `op` of WS
                            / socket.io `call`.
                          type: string
                          pattern: ^[a-z][a-zA-Z0-9]*$
                        params:
                          type: object
                        body: {}
                        ifMatch:
                          type: string
                      additionalProperties: true
            additionalProperties: true
            examples:
              - type: event
                id: 0192f3a4-5b6c-7d8e-9f01-23456789abcd
                ts: '2026-10-19T12:00:00.123Z'
                topic: venues/default/players/main
                data:
                  seq: 48213
                  kind: player.state
                  resource:
                    status: playing
                    position: 12.5
            $defs:
              knownType:
                enum:
                  - hello
                  - welcome
                  - subscribe
                  - unsubscribe
                  - call
                  - result
                  - event
                  - error
                  - resync
                  - ping
                  - pong
                  - bye
              eventData:
                type: object
                required:
                  - seq
                  - kind
                properties:
                  seq:
                    type: integer
                    minimum: 0
                    description: >-
                      Per-server monotonically increasing sequence (resume with
                      sinceSeq).
                  kind:
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*(\.[a-z][a-zA-Z0-9]*)+$
                    description: Event kind from events/topics.yaml, e.g. player.state.
                  resource:
                    description: Full new representation.
                  patch:
                    type: object
                    description: JSON merge patch (high-rate kinds).
                  revision:
                    description: >-
                      Monotonic resource revision; the strong ETag is derived
                      from it.
                    type: integer
                    minimum: 0
                not:
                  required:
                    - resource
                    - patch
                additionalProperties: true
              callData:
                type: object
                required:
                  - op
                properties:
                  op:
                    description: >-
                      OpenAPI operationId (camelCase); also the `op` of WS /
                      socket.io `call`.
                    type: string
                    pattern: ^[a-z][a-zA-Z0-9]*$
                  params:
                    type: object
                  body: {}
                  ifMatch:
                    type: string
                additionalProperties: true
        required:
          - type
          - id
          - ts
          - data
        properties:
          type:
            const: bye
          data:
            type: object
            required:
              - reason
            properties:
              reason:
                type: string
              code:
                type: integer
                description: >-
                  WebSocket close code that follows: 4401 unauthenticated, 4403
                  forbidden, 4408 heartbeat timeout, 4409 superseded, 4413
                  message too large, 1012 restart
            patternProperties:
              ^x-: true
            additionalProperties: false
      examples:
        - name: expired
          payload:
            type: bye
            id: 0192f3a4-5b6c-7d8e-9f01-23456789abe2
            ts: '2026-10-19T12:15:00.000Z'
            data:
              reason: token expired
              code: 4401
