{
  "openapi": "3.1.0",
  "info": {
    "title": "RosieOS rt-control API",
    "version": "contract 2 (75fee43296f2)",
    "summary": "The public control API of RosieOS: one controller at a time drives a Rosie cell through rt-control.",
    "description": "Generated from the RosieOS contract rt-core/protocol/application-v1.schema.json at commit 75fee43296f2d888b55cab9e1110261dfc33386e (published verbatim at https://advancedmetalresearch.com/docs/openapi/rt-control.contract.json), with per-operation transport parameters and reason lists from https://advancedmetalresearch.com/docs/apis/rt-control-http. Response.data is the capability response type when named; sequence and handle are envelope fields. Errors return HTTP 409 except body size HTTP 413; success HTTP 200. Native receipts use their existing case-sensitive JSON field names. RosieOS has no software E-stop: the hardware E-stop is the safety function. See https://advancedmetalresearch.com/docs/get-started/safety-model.",
    "license": {
      "name": "Apache 2.0",
      "identifier": "Apache-2.0"
    },
    "contact": {
      "url": "https://github.com/advanced-metal-research/RosieOS"
    }
  },
  "externalDocs": {
    "description": "rt-control HTTP API reference",
    "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http"
  },
  "servers": [
    {
      "url": "http://localhost",
      "description": "HTTP over the local Unix socket /run/rosie-rt-core/control.sock (file permissions authenticate). Use localhost as the host name."
    },
    {
      "url": "https://{host}:{port}",
      "description": "Mutual TLS 1.3 remote listener (--remote-listen; cell configs set 127.0.0.1:8443). Client certificates come from the cell's component CA.",
      "variables": {
        "host": {
          "default": "127.0.0.1"
        },
        "port": {
          "default": "8443"
        }
      }
    }
  ],
  "security": [
    {},
    {
      "mutualTLS": []
    }
  ],
  "tags": [
    {
      "name": "Observation"
    },
    {
      "name": "Authority"
    },
    {
      "name": "Machine control"
    },
    {
      "name": "Jog"
    },
    {
      "name": "Trajectories"
    },
    {
      "name": "Programs"
    },
    {
      "name": "Reserved operations"
    },
    {
      "name": "Control"
    }
  ],
  "paths": {
    "/v1/control": {
      "post": {
        "operationId": "control",
        "summary": "Send one JSON command; `operation` selects which",
        "description": "Every JSON command is a POST /v1/control whose body is one Request. After acquire, every command carries the session and generation of the current grant (the fence). Decoding is strict: unknown fields, duplicate fields and trailing data are refused. Operations: mark_telemetry (implemented), acquire (implemented), renew (implemented), release (implemented), stop (implemented), enable (implemented), arm (implemented), home (implemented), reset_fault (interim), recovery_status (implemented), jog (test_only), begin_jog (implemented), end_jog (implemented), prepare_trajectory (implemented), start_trajectory (implemented), discard_trajectory (implemented), start_program (implemented), halt (implemented), restore_anchor (implemented), io_arm (implemented), io_disarm (implemented). Per-operation state, required fields, result type, reasons and docs are in x-rosieos-operations.",
        "tags": [
          "Control"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/Request_mark_telemetry"
                  },
                  {
                    "$ref": "#/components/schemas/Request_acquire"
                  },
                  {
                    "$ref": "#/components/schemas/Request_renew"
                  },
                  {
                    "$ref": "#/components/schemas/Request_release"
                  },
                  {
                    "$ref": "#/components/schemas/Request_stop"
                  },
                  {
                    "$ref": "#/components/schemas/Request_enable"
                  },
                  {
                    "$ref": "#/components/schemas/Request_arm"
                  },
                  {
                    "$ref": "#/components/schemas/Request_home"
                  },
                  {
                    "$ref": "#/components/schemas/Request_reset_fault"
                  },
                  {
                    "$ref": "#/components/schemas/Request_recovery_status"
                  },
                  {
                    "$ref": "#/components/schemas/Request_jog"
                  },
                  {
                    "$ref": "#/components/schemas/Request_begin_jog"
                  },
                  {
                    "$ref": "#/components/schemas/Request_end_jog"
                  },
                  {
                    "$ref": "#/components/schemas/Request_prepare_trajectory"
                  },
                  {
                    "$ref": "#/components/schemas/Request_start_trajectory"
                  },
                  {
                    "$ref": "#/components/schemas/Request_discard_trajectory"
                  },
                  {
                    "$ref": "#/components/schemas/Request_start_program"
                  },
                  {
                    "$ref": "#/components/schemas/Request_halt"
                  },
                  {
                    "$ref": "#/components/schemas/Request_restore_anchor"
                  },
                  {
                    "$ref": "#/components/schemas/Request_io_arm"
                  },
                  {
                    "$ref": "#/components/schemas/Request_io_disarm"
                  }
                ],
                "discriminator": {
                  "propertyName": "operation",
                  "mapping": {
                    "mark_telemetry": "#/components/schemas/Request_mark_telemetry",
                    "acquire": "#/components/schemas/Request_acquire",
                    "renew": "#/components/schemas/Request_renew",
                    "release": "#/components/schemas/Request_release",
                    "stop": "#/components/schemas/Request_stop",
                    "enable": "#/components/schemas/Request_enable",
                    "arm": "#/components/schemas/Request_arm",
                    "home": "#/components/schemas/Request_home",
                    "reset_fault": "#/components/schemas/Request_reset_fault",
                    "recovery_status": "#/components/schemas/Request_recovery_status",
                    "jog": "#/components/schemas/Request_jog",
                    "begin_jog": "#/components/schemas/Request_begin_jog",
                    "end_jog": "#/components/schemas/Request_end_jog",
                    "prepare_trajectory": "#/components/schemas/Request_prepare_trajectory",
                    "start_trajectory": "#/components/schemas/Request_start_trajectory",
                    "discard_trajectory": "#/components/schemas/Request_discard_trajectory",
                    "start_program": "#/components/schemas/Request_start_program",
                    "halt": "#/components/schemas/Request_halt",
                    "restore_anchor": "#/components/schemas/Request_restore_anchor",
                    "io_arm": "#/components/schemas/Request_io_arm",
                    "io_disarm": "#/components/schemas/Request_io_disarm"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Admitted. For motion this acknowledges admission, not physical completion.",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/Response_mark_telemetry"
                    },
                    {
                      "$ref": "#/components/schemas/Response_acquire"
                    },
                    {
                      "$ref": "#/components/schemas/Response_renew"
                    },
                    {
                      "$ref": "#/components/schemas/Response_release"
                    },
                    {
                      "$ref": "#/components/schemas/Response_stop"
                    },
                    {
                      "$ref": "#/components/schemas/Response_enable"
                    },
                    {
                      "$ref": "#/components/schemas/Response_arm"
                    },
                    {
                      "$ref": "#/components/schemas/Response_home"
                    },
                    {
                      "$ref": "#/components/schemas/Response_reset_fault"
                    },
                    {
                      "$ref": "#/components/schemas/Response_recovery_status"
                    },
                    {
                      "$ref": "#/components/schemas/Response_jog"
                    },
                    {
                      "$ref": "#/components/schemas/Response_begin_jog"
                    },
                    {
                      "$ref": "#/components/schemas/Response_end_jog"
                    },
                    {
                      "$ref": "#/components/schemas/Response_prepare_trajectory"
                    },
                    {
                      "$ref": "#/components/schemas/Response_start_trajectory"
                    },
                    {
                      "$ref": "#/components/schemas/Response_discard_trajectory"
                    },
                    {
                      "$ref": "#/components/schemas/Response_start_program"
                    },
                    {
                      "$ref": "#/components/schemas/Response_halt"
                    },
                    {
                      "$ref": "#/components/schemas/Response_restore_anchor"
                    },
                    {
                      "$ref": "#/components/schemas/Response_io_arm"
                    },
                    {
                      "$ref": "#/components/schemas/Response_io_disarm"
                    }
                  ]
                }
              }
            }
          },
          "409": {
            "description": "Refused. `error` holds the reason. Reasons this operation can return: telemetry_label_invalid, capability_unimplemented, body_too_large, invalid_request_envelope, duplicate_request_field, schema_mismatch, unknown_operation, trailing_request_data, request_envelope_changed, invalid_request_id, request_id_conflict, session_principal_mismatch, control_session_stale, daemon_restarted, fence, native_rejected, outside_limits_outward, authority_binding_mismatch, control_already_owned, application_generation_exhausted, invalid_requested_lease, expired, anchor_source_invalid, anchor_identity_mismatch, anchor_store_io, program_already_executing, reset_requires_inhibited, recovery_observation_unavailable, fault_persists, mode_conflict, jog_clock_incarnation_mismatch, independent_jog_unavailable, jog_session_stale, busy, no_grant, wrong_generation, inhibited, io_not_configured, io_not_armed, io_fast_input_unsatisfied, io_readback_disagreement, io_torch_unqualified, io_marker_late, io_exchange_lost, unknown_handle, trajectory_identity_mismatch, handle_started, handle_consumed, handle_discarded, handle_superseded, handle_retired, not_ready, handle_active, program_identity_mismatch, process_io_executor_not_qualified, invalid_axis_mask, anchor_missing, anchor_disagrees.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "body_too_large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "x-rosieos-operations": [
          {
            "operation": "mark_telemetry",
            "tag": "Machine control",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation",
              "label"
            ],
            "x-rosieos-response-type": "sequence",
            "x-rosieos-reasons": [
              "telemetry_label_invalid",
              "capability_unimplemented",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "control_session_stale",
              "daemon_restarted",
              "fence",
              "native_rejected",
              "outside_limits_outward"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#mark-telemetry"
            }
          },
          {
            "operation": "acquire",
            "tag": "Authority",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "controller",
              "binding"
            ],
            "x-rosieos-response-type": "Grant",
            "x-rosieos-reasons": [
              "authority_binding_mismatch",
              "control_already_owned",
              "application_generation_exhausted",
              "invalid_requested_lease",
              "control_session_stale",
              "session_principal_mismatch",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#acquire"
            }
          },
          {
            "operation": "renew",
            "tag": "Authority",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation"
            ],
            "x-rosieos-response-type": "Grant",
            "x-rosieos-reasons": [
              "expired",
              "control_session_stale",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "daemon_restarted",
              "fence"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#renew"
            }
          },
          {
            "operation": "release",
            "tag": "Authority",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation"
            ],
            "x-rosieos-response-type": "Grant",
            "x-rosieos-reasons": [
              "control_session_stale",
              "expired",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "daemon_restarted",
              "fence"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#release"
            }
          },
          {
            "operation": "stop",
            "tag": "Authority",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation"
            ],
            "x-rosieos-response-type": "Grant",
            "x-rosieos-reasons": [
              "control_session_stale",
              "expired",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "daemon_restarted",
              "fence"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#stop"
            }
          },
          {
            "operation": "enable",
            "tag": "Machine control",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation",
              "axis_mask"
            ],
            "x-rosieos-response-type": "sequence",
            "x-rosieos-reasons": [
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "control_session_stale",
              "daemon_restarted",
              "fence",
              "native_rejected",
              "outside_limits_outward"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#enable"
            }
          },
          {
            "operation": "arm",
            "tag": "Machine control",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation"
            ],
            "x-rosieos-response-type": "sequence",
            "x-rosieos-reasons": [
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "control_session_stale",
              "daemon_restarted",
              "fence",
              "native_rejected",
              "outside_limits_outward"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#arm"
            }
          },
          {
            "operation": "home",
            "tag": "Machine control",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation",
              "axis_mask"
            ],
            "x-rosieos-response-type": "sequence",
            "x-rosieos-reasons": [
              "anchor_source_invalid",
              "anchor_identity_mismatch",
              "anchor_store_io",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "control_session_stale",
              "daemon_restarted",
              "fence",
              "native_rejected",
              "outside_limits_outward"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#home"
            }
          },
          {
            "operation": "reset_fault",
            "tag": "Machine control",
            "x-rosieos-state": "interim",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation"
            ],
            "x-rosieos-response-type": "RecoveryStatus",
            "x-rosieos-reasons": [
              "program_already_executing",
              "reset_requires_inhibited",
              "recovery_observation_unavailable",
              "fault_persists",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "control_session_stale",
              "daemon_restarted",
              "fence",
              "native_rejected",
              "outside_limits_outward"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#reset-fault"
            }
          },
          {
            "operation": "recovery_status",
            "tag": "Machine control",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation"
            ],
            "x-rosieos-response-type": "RecoveryStatus",
            "x-rosieos-reasons": [
              "program_already_executing",
              "reset_requires_inhibited",
              "recovery_observation_unavailable",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "control_session_stale",
              "daemon_restarted",
              "fence"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#recovery-status"
            }
          },
          {
            "operation": "jog",
            "tag": "Jog",
            "description": "Legacy velocity jog is test-only for oracle ports and fixtures. Consumers use begin_jog/update_jog/end_jog; update_jog uses jog.sock or WSS /v1/jog.",
            "x-rosieos-state": "test_only",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation",
              "axis_mask",
              "velocity",
              "timeout_ms"
            ],
            "x-rosieos-response-type": "sequence",
            "x-rosieos-reasons": [
              "mode_conflict",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "control_session_stale",
              "daemon_restarted",
              "fence",
              "native_rejected",
              "outside_limits_outward"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#jog"
            }
          },
          {
            "operation": "begin_jog",
            "tag": "Jog",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation",
              "axis_mask",
              "source_origin_host_ns",
              "deadline_host_ns",
              "clock_incarnation"
            ],
            "x-rosieos-response-type": "handle",
            "x-rosieos-reasons": [
              "jog_clock_incarnation_mismatch",
              "independent_jog_unavailable",
              "mode_conflict",
              "outside_limits_outward",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "control_session_stale",
              "daemon_restarted",
              "fence"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#begin-jog"
            }
          },
          {
            "operation": "end_jog",
            "tag": "Jog",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation",
              "jog_generation"
            ],
            "x-rosieos-response-type": "handle",
            "x-rosieos-reasons": [
              "jog_session_stale",
              "independent_jog_unavailable",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "control_session_stale",
              "daemon_restarted",
              "fence"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#end-jog"
            }
          },
          {
            "operation": "prepare_trajectory",
            "tag": "Trajectories",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation",
              "axis_mask",
              "points"
            ],
            "x-rosieos-response-type": "handle",
            "x-rosieos-reasons": [
              "busy",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "control_session_stale",
              "daemon_restarted",
              "fence",
              "native_rejected",
              "outside_limits_outward",
              "no_grant",
              "wrong_generation",
              "inhibited",
              "io_not_configured",
              "io_not_armed",
              "io_fast_input_unsatisfied",
              "io_readback_disagreement",
              "io_torch_unqualified",
              "io_marker_late",
              "io_exchange_lost"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#prepare-trajectory"
            }
          },
          {
            "operation": "start_trajectory",
            "tag": "Trajectories",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation",
              "handle"
            ],
            "x-rosieos-response-type": "sequence",
            "x-rosieos-reasons": [
              "unknown_handle",
              "trajectory_identity_mismatch",
              "handle_started",
              "handle_consumed",
              "handle_discarded",
              "handle_superseded",
              "handle_retired",
              "mode_conflict",
              "not_ready",
              "fence",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "control_session_stale",
              "daemon_restarted",
              "native_rejected",
              "outside_limits_outward"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#start-trajectory"
            }
          },
          {
            "operation": "discard_trajectory",
            "tag": "Trajectories",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation",
              "handle"
            ],
            "x-rosieos-response-type": "sequence",
            "x-rosieos-reasons": [
              "unknown_handle",
              "handle_active",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "control_session_stale",
              "daemon_restarted",
              "fence",
              "native_rejected",
              "outside_limits_outward"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#discard-trajectory"
            }
          },
          {
            "operation": "start_program",
            "tag": "Programs",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation",
              "identity"
            ],
            "x-rosieos-response-type": "sequence",
            "x-rosieos-reasons": [
              "program_identity_mismatch",
              "program_already_executing",
              "process_io_executor_not_qualified",
              "unknown_handle",
              "handle_started",
              "handle_consumed",
              "handle_discarded",
              "handle_superseded",
              "handle_retired",
              "mode_conflict",
              "not_ready",
              "fence",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "control_session_stale",
              "daemon_restarted",
              "native_rejected",
              "outside_limits_outward",
              "no_grant",
              "wrong_generation",
              "inhibited",
              "io_not_configured",
              "io_not_armed",
              "io_fast_input_unsatisfied",
              "io_readback_disagreement",
              "io_torch_unqualified",
              "io_marker_late",
              "io_exchange_lost"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#start-program"
            }
          },
          {
            "operation": "halt",
            "tag": "Machine control",
            "description": "Controlled deceleration to enabled hold using the active trajectory acceleration, or jog acceleration when no trajectory bound is declared. Retires active motion; preserves authority and Arm. Stop and faults always inhibit immediately.",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation"
            ],
            "x-rosieos-response-type": "Response.sequence/native_result",
            "x-rosieos-reasons": [
              "no_grant",
              "wrong_generation",
              "inhibited",
              "capability_unimplemented",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "control_session_stale",
              "daemon_restarted",
              "fence"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#halt"
            }
          },
          {
            "operation": "restore_anchor",
            "tag": "Machine control",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation",
              "axis_mask"
            ],
            "x-rosieos-response-type": "RecoveryStatus",
            "x-rosieos-reasons": [
              "invalid_axis_mask",
              "mode_conflict",
              "anchor_missing",
              "anchor_identity_mismatch",
              "anchor_source_invalid",
              "anchor_disagrees",
              "anchor_store_io",
              "recovery_observation_unavailable",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "control_session_stale",
              "daemon_restarted",
              "fence",
              "native_rejected",
              "outside_limits_outward"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#restore-anchor"
            }
          },
          {
            "operation": "io_arm",
            "tag": "Machine control",
            "description": "Native cell I/O permission; torch remains unqualified (P6-05).",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation"
            ],
            "x-rosieos-response-type": "sequence",
            "x-rosieos-reasons": [
              "capability_unimplemented",
              "no_grant",
              "wrong_generation",
              "inhibited",
              "io_not_configured",
              "io_not_armed",
              "io_fast_input_unsatisfied",
              "io_readback_disagreement",
              "io_torch_unqualified",
              "io_marker_late",
              "io_exchange_lost",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "control_session_stale",
              "daemon_restarted",
              "fence",
              "native_rejected",
              "outside_limits_outward"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#io-arm"
            }
          },
          {
            "operation": "io_disarm",
            "tag": "Machine control",
            "description": "Native cell I/O permission; torch remains unqualified (P6-05).",
            "x-rosieos-state": "implemented",
            "x-rosieos-required-fields": [
              "schema",
              "operation",
              "session",
              "generation"
            ],
            "x-rosieos-response-type": "sequence",
            "x-rosieos-reasons": [
              "capability_unimplemented",
              "no_grant",
              "wrong_generation",
              "inhibited",
              "io_not_configured",
              "io_not_armed",
              "io_fast_input_unsatisfied",
              "io_readback_disagreement",
              "io_torch_unqualified",
              "io_marker_late",
              "io_exchange_lost",
              "body_too_large",
              "invalid_request_envelope",
              "duplicate_request_field",
              "schema_mismatch",
              "unknown_operation",
              "trailing_request_data",
              "request_envelope_changed",
              "invalid_request_id",
              "request_id_conflict",
              "session_principal_mismatch",
              "control_session_stale",
              "daemon_restarted",
              "fence",
              "native_rejected",
              "outside_limits_outward"
            ],
            "externalDocs": {
              "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#io-disarm"
            }
          }
        ],
        "externalDocs": {
          "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#request-envelope"
        }
      }
    },
    "/v1/telemetry": {
      "get": {
        "operationId": "telemetry",
        "summary": "Full-rate binary cycle records; observation needs no session or authority.",
        "tags": [
          "Observation"
        ],
        "parameters": [
          {
            "name": "after",
            "in": "query",
            "required": false,
            "description": "Last consumed record sequence. 0 (the default) starts at sequence 1 and reports overwritten history in dropped.",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{1,20}$",
              "description": "Unsigned decimal uint64"
            }
          }
        ],
        "x-rosieos-state": "implemented",
        "x-rosieos-response-type": "TelemetryBatch",
        "x-rosieos-reasons": [
          "invalid_telemetry_cursor",
          "telemetry_cursor_ahead",
          "telemetry_busy",
          "telemetry_unavailable",
          "session_principal_mismatch"
        ],
        "externalDocs": {
          "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#telemetry"
        },
        "responses": {
          "200": {
            "description": "One binary TelemetryBatch: a 312-byte TelemetryBatchHeaderV1 then record_count 5392-byte CycleCaptureRecordV2 records. Never JSON.",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "contentMediaType": "application/octet-stream"
                }
              }
            }
          },
          "409": {
            "description": "Refused. `error` holds the reason. Reasons this operation can return: invalid_telemetry_cursor, telemetry_cursor_ahead, telemetry_busy, telemetry_unavailable, session_principal_mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/telemetry/stream": {
      "get": {
        "operationId": "telemetry_stream",
        "summary": "Full-rate binary cycle records; observation needs no session or authority.",
        "tags": [
          "Observation"
        ],
        "parameters": [
          {
            "name": "after",
            "in": "query",
            "required": false,
            "description": "Last consumed record sequence. 0 (the default) starts at sequence 1 and reports overwritten history in dropped.",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{1,20}$",
              "description": "Unsigned decimal uint64"
            }
          }
        ],
        "x-rosieos-state": "implemented",
        "x-rosieos-response-type": "TelemetryBatch",
        "x-rosieos-reasons": [
          "invalid_telemetry_cursor",
          "telemetry_cursor_ahead",
          "telemetry_busy",
          "telemetry_unavailable",
          "session_principal_mismatch"
        ],
        "externalDocs": {
          "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#telemetry"
        },
        "responses": {
          "200": {
            "description": "One complete binary TelemetryBatch per flush, about every 20 ms, including empty batches.",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "contentMediaType": "application/octet-stream"
                }
              }
            }
          },
          "409": {
            "description": "Refused. `error` holds the reason. Reasons this operation can return: invalid_telemetry_cursor, telemetry_cursor_ahead, telemetry_busy, telemetry_unavailable, session_principal_mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/describe": {
      "get": {
        "operationId": "describe",
        "summary": "describe",
        "tags": [
          "Observation"
        ],
        "x-rosieos-state": "implemented",
        "x-rosieos-response-type": "Description",
        "x-rosieos-reasons": [],
        "externalDocs": {
          "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#describe"
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Response_describe"
                }
              }
            }
          },
          "409": {
            "description": "Refused. `error` holds the reason.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/status": {
      "get": {
        "operationId": "status",
        "summary": "status",
        "tags": [
          "Observation"
        ],
        "x-rosieos-state": "implemented",
        "x-rosieos-response-type": "ProcessStatus",
        "x-rosieos-reasons": [
          "daemon_restarted"
        ],
        "externalDocs": {
          "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#status"
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Response_status"
                }
              }
            }
          },
          "409": {
            "description": "Refused. `error` holds the reason. Reasons this operation can return: daemon_restarted.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/jog/clock": {
      "get": {
        "operationId": "jog_clock",
        "summary": "jog_clock",
        "tags": [
          "Observation"
        ],
        "x-rosieos-state": "implemented",
        "x-rosieos-response-type": "LocalJogClock",
        "x-rosieos-reasons": [
          "independent_jog_unavailable"
        ],
        "externalDocs": {
          "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#jog-clock"
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Response_jog_clock"
                }
              }
            }
          },
          "409": {
            "description": "Refused. `error` holds the reason. Reasons this operation can return: independent_jog_unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/jog": {
      "get": {
        "operationId": "jog_status",
        "summary": "jog_status",
        "tags": [
          "Observation"
        ],
        "x-rosieos-state": "implemented",
        "x-rosieos-response-type": "JogObservation",
        "x-rosieos-reasons": [
          "independent_jog_unavailable"
        ],
        "externalDocs": {
          "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#jog-status"
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Response_jog_status"
                }
              }
            }
          },
          "409": {
            "description": "Refused. `error` holds the reason. Reasons this operation can return: independent_jog_unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "description": "GET /v1/jog on the mutual-TLS listener is exclusively WebSocket upgrade; local GET /v1/jog is the JSON jog_status endpoint."
      }
    },
    "/v1/jog/ingress": {
      "get": {
        "operationId": "jog_ingress",
        "summary": "jog_ingress",
        "tags": [
          "Observation"
        ],
        "x-rosieos-state": "implemented",
        "x-rosieos-response-type": "JogIngressObservation",
        "x-rosieos-reasons": [],
        "externalDocs": {
          "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#jog-ingress"
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Response_jog_ingress"
                }
              }
            }
          },
          "409": {
            "description": "Refused. `error` holds the reason.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/program": {
      "post": {
        "operationId": "prepare_program",
        "summary": "prepare_program",
        "tags": [
          "Programs"
        ],
        "parameters": [
          {
            "name": "X-Control-Session",
            "in": "header",
            "required": true,
            "description": "Current session token.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-Control-Generation",
            "in": "header",
            "required": true,
            "description": "Current grant generation, as decimal text.",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{1,20}$",
              "description": "Unsigned decimal uint64"
            }
          }
        ],
        "x-rosieos-state": "implemented",
        "x-rosieos-required-fields": [
          "X-Control-Session",
          "X-Control-Generation"
        ],
        "x-rosieos-response-type": "Program",
        "x-rosieos-reasons": [
          "invalid_control_generation",
          "body_too_large",
          "session_principal_mismatch",
          "busy",
          "program_already_executing",
          "manifest_revision_mismatch",
          "process_io_executor_not_qualified",
          "program_identity_missing",
          "dense_axis_map_requires_nine_ids",
          "invalid_dense_axis_map",
          "unmapped_dense_axis",
          "native_limit_exceeded",
          "native_segment_rate_exceeded",
          "outside_limits_outward",
          "segment_boundary_discontinuous",
          "io_not_configured",
          "io_torch_unqualified",
          "io_marker_invalid",
          "axis_count_mismatch",
          "blob_length_mismatch",
          "block_layout_invalid",
          "block_sha256_mismatch",
          "dense_schema_mismatch",
          "duration_mismatch",
          "header_json_invalid",
          "header_truncated",
          "kind_invalid",
          "limits_invalid",
          "nonfinite_sample",
          "q_step_exceeded",
          "qd_limit_exceeded",
          "reserved_flags_set",
          "sample_count_overflow",
          "sample_encoding_mismatch",
          "segment_index_out_of_order",
          "segment_too_short",
          "segments_empty",
          "time_grid_invalid",
          "torch_outside_weld",
          "total_sample_count_mismatch",
          "trajectory_digest_mismatch",
          "boundary_q_discontinuity",
          "boundary_qd_nonzero",
          "control_session_stale",
          "daemon_restarted",
          "fence",
          "native_rejected"
        ],
        "externalDocs": {
          "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#prepare-program"
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Response_prepare_program"
                }
              }
            }
          },
          "409": {
            "description": "Refused. `error` holds the reason. Reasons this operation can return: invalid_control_generation, body_too_large, session_principal_mismatch, busy, program_already_executing, manifest_revision_mismatch, process_io_executor_not_qualified, program_identity_missing, dense_axis_map_requires_nine_ids, invalid_dense_axis_map, unmapped_dense_axis, native_limit_exceeded, native_segment_rate_exceeded, outside_limits_outward, segment_boundary_discontinuous, io_not_configured, io_torch_unqualified, io_marker_invalid, axis_count_mismatch, blob_length_mismatch, block_layout_invalid, block_sha256_mismatch, dense_schema_mismatch, duration_mismatch, header_json_invalid, header_truncated, kind_invalid, limits_invalid, nonfinite_sample, q_step_exceeded, qd_limit_exceeded, reserved_flags_set, sample_count_overflow, sample_encoding_mismatch, segment_index_out_of_order, segment_too_short, segments_empty, time_grid_invalid, torch_outside_weld, total_sample_count_mismatch, trajectory_digest_mismatch, boundary_q_discontinuity, boundary_qd_nonzero, control_session_stale, daemon_restarted, fence, native_rejected.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "body_too_large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "description": "The raw .rdt bytes (robot.v4.dense-joint-trajectory.v1).",
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "contentMediaType": "application/octet-stream"
              }
            }
          }
        }
      }
    },
    "/v1/events": {
      "get": {
        "operationId": "subscribe_events",
        "summary": "subscribe_events",
        "tags": [
          "Observation"
        ],
        "parameters": [
          {
            "name": "after",
            "in": "query",
            "required": false,
            "description": "Last consumed sequence, as unsigned decimal text. Default 0.",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{1,20}$",
              "description": "Unsigned decimal uint64"
            }
          }
        ],
        "x-rosieos-state": "implemented",
        "x-rosieos-response-type": "EventBatch",
        "x-rosieos-reasons": [
          "invalid_event_cursor",
          "event_cursor_ahead",
          "session_principal_mismatch",
          "event_cursor_lost"
        ],
        "externalDocs": {
          "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#subscribe-events"
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Response_subscribe_events"
                }
              }
            }
          },
          "409": {
            "description": "Refused. `error` holds the reason. Reasons this operation can return: invalid_event_cursor, event_cursor_ahead, session_principal_mismatch, event_cursor_lost.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/events/stream": {
      "get": {
        "operationId": "subscribe_events_stream",
        "summary": "subscribe_events",
        "tags": [
          "Observation"
        ],
        "parameters": [
          {
            "name": "after",
            "in": "query",
            "required": false,
            "description": "Last consumed sequence, as unsigned decimal text. Default 0.",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{1,20}$",
              "description": "Unsigned decimal uint64"
            }
          }
        ],
        "x-rosieos-state": "implemented",
        "x-rosieos-response-type": "EventBatch",
        "x-rosieos-reasons": [
          "invalid_event_cursor",
          "event_cursor_ahead",
          "session_principal_mismatch",
          "event_cursor_lost"
        ],
        "externalDocs": {
          "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#subscribe-events"
        },
        "responses": {
          "200": {
            "description": "Server-Sent Events: each message has id (the sequence), event (the type) and data (one Event as JSON, without the envelope).",
            "content": {
              "text/event-stream": {
                "schema": {
                  "type": "string"
                },
                "x-rosieos-event-data": {
                  "$ref": "#/components/schemas/Event"
                }
              }
            }
          },
          "409": {
            "description": "Refused. `error` holds the reason. Reasons this operation can return: invalid_event_cursor, event_cursor_ahead, session_principal_mismatch, event_cursor_lost.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/resources/{sha256}": {
      "get": {
        "operationId": "resource",
        "summary": "Read one bounded content-addressed compiled resource without a lease; remote mutual TLS required.",
        "tags": [
          "Observation"
        ],
        "parameters": [
          {
            "name": "sha256",
            "in": "path",
            "required": true,
            "description": "64 lowercase hex characters, from ResourceInfo.sha256.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "x-rosieos-state": "implemented",
        "x-rosieos-response-type": "binary",
        "x-rosieos-reasons": [
          "resource_unknown"
        ],
        "externalDocs": {
          "url": "https://advancedmetalresearch.com/docs/apis/rt-control-http#resource"
        },
        "responses": {
          "200": {
            "description": "The resource bytes, with its declared Content-Type, Content-Length and a quoted-digest ETag.",
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "contentMediaType": "application/octet-stream"
                }
              }
            }
          },
          "404": {
            "description": "resource_unknown",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "409": {
            "description": "Refused. `error` holds the reason. Reasons this operation can return: resource_unknown.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ReasonCode": {
        "type": "string",
        "enum": [
          "no_grant",
          "wrong_generation",
          "inhibited",
          "invalid_telemetry_cursor",
          "telemetry_cursor_ahead",
          "telemetry_busy",
          "telemetry_unavailable",
          "telemetry_label_invalid",
          "axis_count_mismatch",
          "blob_length_mismatch",
          "block_layout_invalid",
          "block_sha256_mismatch",
          "dense_schema_mismatch",
          "duration_mismatch",
          "header_json_invalid",
          "header_truncated",
          "kind_invalid",
          "limits_invalid",
          "nonfinite_sample",
          "q_step_exceeded",
          "qd_limit_exceeded",
          "reserved_flags_set",
          "sample_count_overflow",
          "sample_encoding_mismatch",
          "segment_index_out_of_order",
          "segment_too_short",
          "segments_empty",
          "time_grid_invalid",
          "torch_outside_weld",
          "total_sample_count_mismatch",
          "trajectory_digest_mismatch",
          "event_cursor_lost",
          "application_generation_exhausted",
          "authority_binding_mismatch",
          "body_too_large",
          "bound path is not a socket",
          "boundary_q_discontinuity",
          "boundary_qd_nonzero",
          "busy",
          "capability_unimplemented",
          "control payload too large",
          "control_already_owned",
          "control_session_stale",
          "session_principal_mismatch",
          "daemon_restarted",
          "dense_axis_map_requires_nine_ids",
          "duplicate_request_field",
          "expired",
          "fault_persists",
          "pdo_mapping_mismatch",
          "fence",
          "fragmentation rejected",
          "handle_active",
          "handle_consumed",
          "handle_discarded",
          "handle_retired",
          "handle_started",
          "handle_superseded",
          "hijacking unavailable",
          "independent_jog_unavailable",
          "invalid UTF-8",
          "invalid close code",
          "invalid close payload",
          "invalid close reason",
          "invalid frame flags",
          "invalid opcode",
          "invalid remote CRL PEM",
          "invalid remote pair SAN",
          "invalid remote principal SAN",
          "invalid websocket upgrade",
          "invalid_control_generation",
          "invalid_dense_axis_map",
          "invalid_pair_configuration_binding",
          "invalid_request_envelope",
          "invalid_request_id",
          "jog_clock_arithmetic_range",
          "jog_clock_calibration_expired",
          "jog_clock_exchange_inconsistent",
          "jog_clock_incarnation_mismatch",
          "jog_clock_invalid_budget_or_exchange",
          "jog_clock_mapping_generation_mismatch",
          "jog_clock_moved_backwards",
          "jog_clock_uncertainty_exceeded",
          "jog_clock_unqualified",
          "jog_input_deadline_expired",
          "jog_input_entirely_future",
          "jog_input_too_old",
          "jog_invalid_frame",
          "jog_publisher_busy",
          "jog_session_or_sequence_stale",
          "jog_session_stale",
          "jog_stream_idle",
          "manifest_revision_mismatch",
          "mode_conflict",
          "native_execution_failed",
          "native_limit_exceeded",
          "outside_limits_outward",
          "native_rejected",
          "native_segment_rate_exceeded",
          "noncanonical length",
          "not_ready",
          "payload too large",
          "process start time unavailable",
          "process_io_executor_not_qualified",
          "program_already_executing",
          "program_identity_mismatch",
          "program_identity_missing",
          "recovery_observation_unavailable",
          "remote CA must be a self-signed component CA",
          "remote CA must contain one CA certificate",
          "remote CA, certificate, key and CRL are required",
          "remote CRL not current",
          "remote client must be issued directly by component CA",
          "remote client revoked",
          "remote identity SAN must be an opaque token",
          "remote pair-id required",
          "remote principal/pair binding mismatch",
          "request_envelope_changed",
          "request_id_conflict",
          "reset_requires_inhibited",
          "schema_mismatch",
          "segment_boundary_discontinuous",
          "socket lock ownership cannot be verified",
          "socket lock path changed",
          "socket owned by a live process",
          "socket ownership cannot be verified",
          "trailing_request_data",
          "unknown_endpoint",
          "unknown_handle",
          "unknown_operation",
          "unmapped_dense_axis",
          "unsupported critical CRL extension",
          "unsupported socket ownership transport",
          "anchor_missing",
          "anchor_identity_mismatch",
          "anchor_source_invalid",
          "anchor_disagrees",
          "anchor_store_io",
          "invalid_axis_mask",
          "event_cursor_ahead",
          "invalid_event_cursor",
          "trajectory_identity_mismatch",
          "invalid_requested_lease",
          "io_not_configured",
          "io_not_armed",
          "io_fast_input_unsatisfied",
          "io_readback_disagreement",
          "io_torch_unqualified",
          "io_marker_late",
          "io_exchange_lost",
          "io_marker_invalid",
          "resource_unknown",
          "resource_artifact_invalid"
        ],
        "x-enum-descriptions": {
          "no_grant": "Halt requires a current valid application grant.",
          "wrong_generation": "Halt carries a different application or native generation.",
          "inhibited": "Halt requires an armed, enabled machine with current readiness; Stop or a fault takes precedence.",
          "invalid_telemetry_cursor": "Telemetry after must be one unsigned decimal uint64 cursor.",
          "telemetry_cursor_ahead": "Telemetry cursor exceeds the current ring sequence; reconcile incarnation before restarting.",
          "telemetry_busy": "Ring header remained torn after the bounded 16 samples; retry the same cursor. Established streams continue with an empty batch and unchanged cursor.",
          "telemetry_unavailable": "A compatible live telemetry ring could not be observed.",
          "telemetry_label_invalid": "Telemetry label must contain 1..128 valid UTF-8 bytes.",
          "axis_count_mismatch": "Dense axis count differs from the nine-axis format.",
          "blob_length_mismatch": "Dense payload length differs from the declared block extents.",
          "block_layout_invalid": "Dense block offsets, record lengths or segment metadata counts are inconsistent.",
          "block_sha256_mismatch": "Dense segment bytes do not match their declared SHA-256 digest.",
          "dense_schema_mismatch": "Dense header schema does not name the supported dense trajectory format.",
          "duration_mismatch": "Dense segment duration differs from its final sample clock.",
          "header_json_invalid": "Dense header cannot be decoded or encoded as JSON.",
          "header_truncated": "Dense header length or header bytes are incomplete.",
          "kind_invalid": "Dense segment kind is not freespace, weld or dwell.",
          "limits_invalid": "Dense velocity limits must contain nine positive finite values.",
          "nonfinite_sample": "Dense time, position or velocity sample is not finite.",
          "q_step_exceeded": "Dense position step exceeds the format velocity allowance.",
          "qd_limit_exceeded": "Dense supplied velocity exceeds its declared format limit.",
          "reserved_flags_set": "Dense sample sets a reserved process flag bit.",
          "sample_count_overflow": "Dense source sample count exceeds the format capacity.",
          "sample_encoding_mismatch": "Dense record encoding or record byte count is unsupported.",
          "segment_index_out_of_order": "Dense segment indices do not follow payload order.",
          "segment_too_short": "Dense segment contains fewer than two samples.",
          "segments_empty": "Dense program contains no motion segments.",
          "time_grid_invalid": "Dense sample clock is not on its declared positive time grid.",
          "torch_outside_weld": "Dense torch flag is set outside a weld segment.",
          "total_sample_count_mismatch": "Dense total sample count differs from its segment counts.",
          "trajectory_digest_mismatch": "Dense content digest differs from the declared trajectory digest.",
          "event_cursor_lost": "Event history was lost; reconcile status before resuming from a new cursor.",
          "application_generation_exhausted": "Rejected: application generation exhausted.",
          "authority_binding_mismatch": "Rejected: authority binding mismatch.",
          "body_too_large": "Rejected: body too large.",
          "bound path is not a socket": "Rejected: bound path is not a socket.",
          "boundary_q_discontinuity": "Rejected dense segment position gap or accumulated normalisation correction above the boundary tolerance.",
          "boundary_qd_nonzero": "Rejected dense segment endpoint velocity above the stationary boundary tolerance.",
          "busy": "Rejected: busy.",
          "capability_unimplemented": "The named target capability is unavailable and performs no operation.",
          "control payload too large": "The WebSocket transport refused control payload too large.",
          "control_already_owned": "Rejected: control already owned.",
          "control_session_stale": "Rejected: control session stale.",
          "session_principal_mismatch": "The session belongs to a different TLS principal/pair or local transport authority.",
          "daemon_restarted": "Rejected: daemon restarted.",
          "dense_axis_map_requires_nine_ids": "Rejected: dense axis map requires nine ids.",
          "duplicate_request_field": "Rejected: duplicate request field.",
          "expired": "Rejected: expired.",
          "fault_persists": "At least one fault condition still prevents clearing.",
          "pdo_mapping_mismatch": "Assigned PDO mapping differs from the registered layout; corrected bring-up is required.",
          "fence": "Rejected: fence.",
          "fragmentation rejected": "The WebSocket transport refused fragmentation rejected.",
          "handle_active": "Rejected: handle active.",
          "handle_consumed": "This handle completed or was replaced by a later execution.",
          "handle_discarded": "This handle was explicitly discarded.",
          "handle_retired": "Cancellation or uncertain ownership permanently retired this handle.",
          "handle_started": "This handle has already started.",
          "handle_superseded": "A committed replacement superseded this handle.",
          "hijacking unavailable": "Rejected: hijacking unavailable.",
          "independent_jog_unavailable": "Rejected: independent jog unavailable.",
          "invalid UTF-8": "The WebSocket transport refused invalid UTF-8.",
          "invalid close code": "The WebSocket transport refused invalid close code.",
          "invalid close payload": "The WebSocket transport refused invalid close payload.",
          "invalid close reason": "The WebSocket transport refused invalid close reason.",
          "invalid frame flags": "The WebSocket transport refused invalid frame flags.",
          "invalid opcode": "The WebSocket transport refused invalid opcode.",
          "invalid remote CRL PEM": "Rejected: invalid remote CRL PEM.",
          "invalid remote pair SAN": "Rejected: invalid remote pair SAN.",
          "invalid remote principal SAN": "Rejected: invalid remote principal SAN.",
          "invalid websocket upgrade": "Rejected: invalid websocket upgrade.",
          "invalid_control_generation": "Rejected: invalid control generation.",
          "invalid_dense_axis_map": "Rejected: invalid dense axis map.",
          "invalid_pair_configuration_binding": "Rejected: invalid pair configuration binding.",
          "invalid_request_envelope": "Rejected: invalid request envelope.",
          "invalid_request_id": "Rejected: invalid request id.",
          "jog_clock_arithmetic_range": "Rejected: jog clock arithmetic range.",
          "jog_clock_calibration_expired": "Rejected: jog clock calibration expired.",
          "jog_clock_exchange_inconsistent": "Rejected: jog clock exchange inconsistent.",
          "jog_clock_incarnation_mismatch": "Rejected: jog clock incarnation mismatch.",
          "jog_clock_invalid_budget_or_exchange": "Rejected: jog clock invalid budget or exchange.",
          "jog_clock_mapping_generation_mismatch": "Rejected: jog clock mapping generation mismatch.",
          "jog_clock_moved_backwards": "Rejected: jog clock moved backwards.",
          "jog_clock_uncertainty_exceeded": "Rejected: jog clock uncertainty exceeded.",
          "jog_clock_unqualified": "Rejected: jog clock unqualified.",
          "jog_input_deadline_expired": "Rejected: jog input deadline expired.",
          "jog_input_entirely_future": "Rejected: jog input entirely future.",
          "jog_input_too_old": "Rejected: jog input too old.",
          "jog_invalid_frame": "Rejected: jog invalid frame.",
          "jog_publisher_busy": "Rejected: jog publisher busy.",
          "jog_session_or_sequence_stale": "Rejected: jog session or sequence stale.",
          "jog_session_stale": "Rejected: jog session stale.",
          "jog_stream_idle": "Rejected: no complete jog stream frame within FastControlMaxJogInputAgeNs (250,000,000 ns).",
          "manifest_revision_mismatch": "Rejected: manifest revision mismatch.",
          "mode_conflict": "Another active motion mode prevents this operation.",
          "native_execution_failed": "Native execution ended without successful completion; motion completion is unverified. Inspect status and fault details, correct the cause, and explicitly prepare and start a new execution.",
          "native_limit_exceeded": "A dense sample exceeds a native position, velocity or declared sampled acceleration limit.",
          "outside_limits_outward": "A motion request increases an exterior limit excursion or crosses the opposite boundary; native command reason 8 and jog reason 15.",
          "native_rejected": "Native command admission refused; inspect native_result.",
          "native_segment_rate_exceeded": "Rejected: native segment rate exceeded.",
          "noncanonical length": "The WebSocket transport refused noncanonical length.",
          "not_ready": "The controlled axes do not satisfy native movement readiness.",
          "payload too large": "The WebSocket transport refused payload too large.",
          "process start time unavailable": "Rejected: process start time unavailable.",
          "process_io_executor_not_qualified": "Rejected: process io executor not qualified.",
          "program_already_executing": "Rejected: program already executing.",
          "program_identity_mismatch": "Rejected: program identity mismatch.",
          "program_identity_missing": "Rejected: program identity missing.",
          "recovery_observation_unavailable": "Rejected: recovery observation unavailable.",
          "remote CA must be a self-signed component CA": "Rejected: remote CA must be a self-signed component CA.",
          "remote CA must contain one CA certificate": "Rejected: remote CA must contain one CA certificate.",
          "remote CA, certificate, key and CRL are required": "Rejected: remote CA, certificate, key and CRL are required.",
          "remote CRL not current": "Rejected: remote CRL not current.",
          "remote client must be issued directly by component CA": "Rejected: remote client must be issued directly by component CA.",
          "remote client revoked": "Rejected: remote client revoked.",
          "remote identity SAN must be an opaque token": "Rejected: remote identity SAN must be an opaque token.",
          "remote pair-id required": "Rejected: remote pair-id required.",
          "remote principal/pair binding mismatch": "Rejected: remote principal/pair binding mismatch.",
          "request_envelope_changed": "Rejected: request envelope changed.",
          "request_id_conflict": "Rejected: request id conflict.",
          "reset_requires_inhibited": "Rejected: reset requires inhibited.",
          "schema_mismatch": "Rejected: schema mismatch.",
          "segment_boundary_discontinuous": "Rejected moving segment seam; boundary is the zero-based join index and gap_counts reports second minus first in source-axis counts.",
          "socket lock ownership cannot be verified": "Rejected: socket lock ownership cannot be verified.",
          "socket lock path changed": "Rejected: socket lock path changed.",
          "socket owned by a live process": "Rejected: socket owned by a live process.",
          "socket ownership cannot be verified": "Rejected: socket ownership cannot be verified.",
          "trailing_request_data": "Rejected: trailing request data.",
          "unknown_endpoint": "Rejected: unknown endpoint.",
          "unknown_handle": "Rejected: unknown handle.",
          "unknown_operation": "Rejected: unknown operation.",
          "unmapped_dense_axis": "The configured dense axis ID has no native axis mapping.",
          "unsupported critical CRL extension": "Rejected: unsupported critical CRL extension.",
          "unsupported socket ownership transport": "Rejected: unsupported socket ownership transport.",
          "anchor_missing": "No persisted anchor exists for the axis.",
          "anchor_identity_mismatch": "The persisted anchor was recorded under a different configuration digest, drive identity or home epoch.",
          "anchor_source_invalid": "The drive reports no valid absolute source for the axis.",
          "anchor_disagrees": "The current absolute source disagrees with the persisted anchor beyond the profile tolerance.",
          "anchor_store_io": "Anchor storage could not be read or persisted; unverified stored evidence cannot authorize restoration. Filesystem details are logged locally and never returned in public feedback. Retry after checking the anchor directory and disk. On restore refusal, the anchor store is not modified.",
          "invalid_axis_mask": "The requested axis mask is empty or names an axis outside the configured group.",
          "event_cursor_ahead": "Cursor exceeds this adapter incarnation's newest event; obtain current status/incarnation before resuming.",
          "invalid_event_cursor": "Event cursor must be a single unsigned decimal uint64.",
          "trajectory_identity_mismatch": "Raw trajectory Start identity differs from its immutable preparation.",
          "invalid_requested_lease": "Acquire requested lease is negative or exceeds the unverified absolute 10000 ms bound.",
          "io_not_configured": "P6-05: named cell I/O is not configured.",
          "io_not_armed": "Explicit io_arm is required before an ON intent.",
          "io_fast_input_unsatisfied": "A cyclic fast contact is invalid or not satisfied.",
          "io_readback_disagreement": "Independent physical feedback disagrees with commanded output.",
          "io_torch_unqualified": "P6-05: torch-class markers remain refused pending hardware qualification.",
          "io_marker_late": "A process marker missed its one-cycle delivery bound.",
          "io_exchange_lost": "Cell I/O has no current complete exchange.",
          "io_marker_invalid": "A marker names an unknown output or has an invalid sample association.",
          "resource_unknown": "Digest is malformed or absent from the loaded compiled resource set; HTTP 404.",
          "resource_artifact_invalid": "Startup refuses an incomplete, mismatched, malformed or over-bound compiled resource artefact."
        },
        "description": "The closed catalogue of adapter-owned reason labels. `error` holds one of these, or a diagnostic string that starts with one; treat anything else as an unknown outcome."
      },
      "HandleState": {
        "type": "string",
        "enum": [
          "prepared",
          "started",
          "consumed",
          "discarded",
          "superseded",
          "retired"
        ]
      },
      "CollisionWatchdogStatus": {
        "type": "object",
        "properties": {
          "armed": {
            "type": "boolean",
            "description": "True only while enabled, armed and receiving valid feedback; false after a trip.",
            "x-rosieos-go-type": "bool"
          },
          "torque_cycles": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Consecutive torque breaches; equality resets. Frozen at trip.",
            "x-rosieos-go-type": "uint32"
          },
          "following_error_cycles": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Consecutive following-error breaches independent of torque. Frozen at trip.",
            "x-rosieos-go-type": "uint32"
          },
          "peak_torque_raw": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Peak absolute 0x6077 raw per-mille since arm; frozen at trip.",
            "x-rosieos-go-type": "uint32"
          },
          "peak_following_error_counts": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Peak absolute counts since arm; drive 0x60F4 when valid, otherwise prior wire target minus feedback with configured wrap handling.",
            "x-rosieos-go-type": "uint64"
          },
          "last_trip_quantity": {
            "type": "string",
            "description": "none, torque, following_error or torque_and_following_error; retained across explicit reset.",
            "x-rosieos-go-type": "string"
          },
          "trip_sustained_cycles": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Configured consecutive count reached at last trip, 2..1000.",
            "x-rosieos-go-type": "uint32"
          },
          "trip_count": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Monotonic per-axis trip sequence for the daemon incarnation.",
            "x-rosieos-go-type": "uint64"
          },
          "samples": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Fresh normal armed/enabled cycles accumulated since arm, even if the watchdog is disabled; peaks include pre-motion hold. Frozen after trip or disarm.",
            "x-rosieos-go-type": "uint64"
          },
          "last_trip_peak_torque_raw": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Peak absolute torque at last trip, retained across reset and rearm.",
            "x-rosieos-go-type": "uint32"
          },
          "last_trip_peak_following_error_counts": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Peak absolute following error at last trip, retained across reset and rearm.",
            "x-rosieos-go-type": "uint64"
          }
        },
        "required": [
          "armed",
          "torque_cycles",
          "following_error_cycles",
          "peak_torque_raw",
          "peak_following_error_counts",
          "last_trip_quantity",
          "trip_sustained_cycles",
          "trip_count",
          "samples",
          "last_trip_peak_torque_raw",
          "last_trip_peak_following_error_counts"
        ]
      },
      "Fence": {
        "type": "object",
        "properties": {
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          }
        },
        "required": [
          "session",
          "generation"
        ]
      },
      "Binding": {
        "type": "object",
        "properties": {
          "pair_id": {
            "type": "string",
            "description": "Exact configured nonempty pair ID.",
            "x-rosieos-go-type": "string"
          },
          "revision": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 equal to configured pair revision.",
            "x-rosieos-go-type": "uint64"
          },
          "configuration_sha256": {
            "type": "string",
            "description": "Exact configured native SHA-256 label.",
            "x-rosieos-go-type": "string"
          },
          "machine_sha256": {
            "type": "string",
            "description": "Machine-semantics digest; omitted by clients that only know the whole-artifact digest.",
            "x-rosieos-go-type": "string"
          }
        },
        "required": [
          "pair_id",
          "revision",
          "configuration_sha256"
        ]
      },
      "Point": {
        "type": "object",
        "properties": {
          "time_ns": {
            "type": "integer",
            "format": "int64",
            "description": "Signed int64 nanoseconds from plan start; first point zero, later timestamps strictly increasing.",
            "x-rosieos-go-type": "int64"
          },
          "position": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical rad/m positions in described axis order, within native configured bounds.",
            "x-rosieos-go-type": "[]float64"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Optional finite logical rad/s or m/s velocities in described axis order; nil/empty omits feedforward.",
            "x-rosieos-go-type": "[]float64"
          },
          "io_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Eight-bit mask in configured output order; set bits require configured non-torch outputs.",
            "x-rosieos-go-type": "uint32"
          },
          "io_values": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Eight-bit output intents; every set bit must also be set in io_mask. Physical readback is independent.",
            "x-rosieos-go-type": "uint32"
          }
        },
        "required": [
          "time_ns",
          "position"
        ]
      },
      "Identity": {
        "type": "object",
        "properties": {
          "plan_id": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "program_id": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "program_digest": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "trajectory_digest": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "source_digest": {
            "type": "string",
            "description": "Verified source trajectory digest; start_program must echo the prepared value exactly.",
            "x-rosieos-go-type": "string"
          },
          "normalised_digest": {
            "type": "string",
            "description": "Canonical segment-record digest including local clocks and process bits; start_program must echo the prepared value exactly.",
            "x-rosieos-go-type": "string"
          },
          "manifest_revision": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "plan_revision": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          }
        },
        "required": [
          "plan_id",
          "program_id",
          "program_digest",
          "trajectory_digest",
          "source_digest",
          "normalised_digest",
          "manifest_revision",
          "plan_revision"
        ]
      },
      "Request": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation"
        ]
      },
      "JogObservation": {
        "type": "object",
        "properties": {
          "Ticket": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "ConnectionId": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "NativeGeneration": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "CapabilityId": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "uint8",
              "minimum": 0,
              "maximum": 255
            },
            "minItems": 16,
            "maxItems": 16,
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "[16]uint8"
          },
          "AppGrantGeneration": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "ConfigurationEpoch": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "HomeEpoch": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "ClockMappingGeneration": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "JogGeneration": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "SourceSequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "InputDeadlineHostNs": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "NowHostNs": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "ObservedSourceSequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "ObservedOriginHostNs": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "FirstObservedHostNs": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "ControlReason": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "ControlAccepted": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "UpdateReason": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "StateReason": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "AxisMask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "Open": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "HasInput": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "VelocityScalePpm": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          }
        },
        "required": [
          "Ticket",
          "ConnectionId",
          "NativeGeneration",
          "CapabilityId",
          "AppGrantGeneration",
          "ConfigurationEpoch",
          "HomeEpoch",
          "ClockMappingGeneration",
          "JogGeneration",
          "SourceSequence",
          "InputDeadlineHostNs",
          "NowHostNs",
          "ObservedSourceSequence",
          "ObservedOriginHostNs",
          "FirstObservedHostNs",
          "ControlReason",
          "ControlAccepted",
          "UpdateReason",
          "StateReason",
          "AxisMask",
          "Open",
          "HasInput",
          "VelocityScalePpm"
        ]
      },
      "CommandResult": {
        "type": "object",
        "properties": {
          "Sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "Handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "Generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "Operation": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "Result": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "Reason": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "AxisMask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          }
        },
        "required": [
          "Sequence",
          "Handle",
          "Generation",
          "Operation",
          "Result",
          "Reason",
          "AxisMask"
        ]
      },
      "Response": {
        "type": "object",
        "properties": {
          "native_jog_result": {
            "allOf": [
              {
                "$ref": "#/components/schemas/JogObservation"
              }
            ],
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "*JogObservation"
          },
          "native_result": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CommandResult"
              }
            ],
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "*CommandResult"
          },
          "schema": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "data": {
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "json"
          },
          "error": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          }
        },
        "required": [
          "schema",
          "operation"
        ]
      },
      "Grant": {
        "type": "object",
        "properties": {
          "stopping": {
            "type": "boolean",
            "description": "True means renewal keeps the lease alive while Stop is in flight; it grants no movement permission.",
            "x-rosieos-go-type": "bool"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Uint64 absolute lease deadline in host monotonic nanoseconds.",
            "x-rosieos-go-type": "uint64"
          },
          "session": {
            "type": "string",
            "description": "64-character unpredictable lowercase hexadecimal token while owned; empty after release/expiry.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Monotonically increasing uint64 application generation, fenced by Stop and acquisition.",
            "x-rosieos-go-type": "uint64"
          },
          "controller": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "Binding"
          },
          "lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Effective negotiated lease in whole milliseconds: min(client requested lease, compiled cell ceiling); zero/omitted request retains 500 ms capped by the cell. Renew preserves this value. Longer leases increase worst-case unattended-stop delay after link loss. Unverified absolute bound: 10000 ms.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "stopping",
          "deadline_host_ns",
          "session",
          "generation",
          "controller",
          "binding",
          "lease_ms"
        ]
      },
      "HandleRecord": {
        "type": "object",
        "properties": {
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "state": {
            "allOf": [
              {
                "$ref": "#/components/schemas/HandleState"
              }
            ],
            "description": "One of the handle_states labels; terminal states never regain permission.",
            "x-rosieos-go-type": "HandleState"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Application grant generation that prepared this handle.",
            "x-rosieos-go-type": "uint64"
          },
          "execution_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Count of acknowledged native Starts when this handle started; zero before Start.",
            "x-rosieos-go-type": "uint64"
          },
          "native_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Correlated native Start sequence; zero before Start.",
            "x-rosieos-go-type": "uint64"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Immutable raw trajectory identity supplied at Prepare and checked at Start; echoed unchanged through terminal observation.",
            "x-rosieos-go-type": "Identity"
          }
        },
        "required": [
          "handle",
          "state",
          "generation",
          "execution_generation",
          "native_sequence"
        ]
      },
      "Execution": {
        "type": "object",
        "properties": {
          "handles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HandleRecord"
            },
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "[]HandleRecord"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Count of acknowledged native Starts; distinct from native control generation.",
            "x-rosieos-go-type": "uint64"
          },
          "state": {
            "type": "string",
            "description": "Application execution state: empty before observation, prepared, executing, completed, faulted, cancelled, discarded or released.",
            "x-rosieos-go-type": "string"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "Identity"
          },
          "segment": {
            "type": "integer",
            "format": "int64",
            "description": "Current zero-based program segment when a program is observed.",
            "x-rosieos-go-type": "int"
          },
          "native_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "error": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          }
        },
        "required": [
          "handles",
          "generation",
          "state",
          "identity",
          "segment",
          "native_sequence"
        ]
      },
      "GrantObservation": {
        "type": "object",
        "properties": {
          "Ticket": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "ConnectionId": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "NativeGeneration": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "AppGrantGeneration": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "CapabilityId": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "uint8",
              "minimum": 0,
              "maximum": 255
            },
            "minItems": 16,
            "maxItems": 16,
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "[16]uint8"
          },
          "DeadlineHostNs": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "NowHostNs": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "ConfigurationEpoch": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "HomeEpoch": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "StopAckId": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "GrantReason": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "GrantActive": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "AxisMask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "Reserved": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "Reserved1": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "Reserved2": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "Reserved3": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          }
        },
        "required": [
          "Ticket",
          "ConnectionId",
          "NativeGeneration",
          "AppGrantGeneration",
          "CapabilityId",
          "DeadlineHostNs",
          "NowHostNs",
          "ConfigurationEpoch",
          "HomeEpoch",
          "StopAckId",
          "GrantReason",
          "GrantActive",
          "AxisMask",
          "Reserved",
          "Reserved1",
          "Reserved2",
          "Reserved3"
        ]
      },
      "FaultRecovery": {
        "type": "object",
        "properties": {
          "bit": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Native execution-fault bit index.",
            "x-rosieos-go-type": "uint32"
          },
          "name": {
            "type": "string",
            "description": "Native fault name for that bit.",
            "x-rosieos-go-type": "string"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Affected axis evidence mask.",
            "x-rosieos-go-type": "uint32"
          },
          "recovery": {
            "type": "string",
            "description": "Native recovery-policy label for the fault bit.",
            "x-rosieos-go-type": "string"
          },
          "outcome": {
            "type": "string",
            "description": "Native per-bit outcome: persists, cleared or rehome_required.",
            "x-rosieos-go-type": "string"
          },
          "rehome_axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Axes requiring qualified re-home after this outcome.",
            "x-rosieos-go-type": "uint32"
          }
        },
        "required": [
          "bit",
          "name",
          "axis_mask",
          "recovery",
          "outcome",
          "rehome_axis_mask"
        ]
      },
      "RecoveryStatus": {
        "type": "object",
        "properties": {
          "home_valid_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Native per-axis home evidence remaining after observed recovery.",
            "x-rosieos-go-type": "uint32"
          },
          "faults": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FaultRecovery"
            },
            "description": "Currently latched fault bits with axis masks and recovery policy.",
            "x-rosieos-go-type": "[]FaultRecovery"
          },
          "reset_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact native command sequence of the observed reset, zero before any reset; response sequence must match for reset_fault.",
            "x-rosieos-go-type": "uint64"
          },
          "reason": {
            "type": "string",
            "description": "Native recovery summary: empty when no fault persists, otherwise fault_persists; FaultResetRecovery refuses a persistent fault.",
            "x-rosieos-go-type": "string"
          },
          "outcomes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FaultRecovery"
            },
            "description": "Per-bit outcomes of the correlated reset; never inferred from elapsed time.",
            "x-rosieos-go-type": "[]FaultRecovery"
          }
        },
        "required": [
          "home_valid_mask",
          "faults",
          "reset_sequence",
          "reason",
          "outcomes"
        ]
      },
      "IndependentAnchorSource": {
        "type": "object",
        "properties": {
          "valid": {
            "type": "boolean",
            "description": "Native acquisition validity; never motion permission.",
            "x-rosieos-go-type": "bool"
          },
          "encoder_counts": {
            "type": "integer",
            "format": "int64",
            "description": "Independent signed raw encoder count.",
            "x-rosieos-go-type": "int64"
          },
          "completed_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Host-monotonic acquisition completion timestamp in nanoseconds.",
            "x-rosieos-go-type": "uint64"
          },
          "maximum_age_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Configured acquisition freshness bound in nanoseconds.",
            "x-rosieos-go-type": "uint64"
          }
        },
        "required": [
          "valid",
          "encoder_counts",
          "completed_ns",
          "maximum_age_ns"
        ]
      },
      "AxisStatus": {
        "type": "object",
        "properties": {
          "drive_alarm": {
            "type": "string",
            "description": "A6-EC display code from the 0x603F/0x203F low-half pair; unresolved bus candidates joined by |; empty when clear, unmapped, or another drive family.",
            "x-rosieos-go-type": "string"
          },
          "drive_alarm_text": {
            "type": "string",
            "description": "Manual meaning corresponding to drive_alarm; multiple candidates joined by | in matching order.",
            "x-rosieos-go-type": "string"
          },
          "drive_alarm_aux_code": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Full raw 0x203F auxiliary SDO word; a two-byte reply occupies the low half. Retained for the current nonzero 0x603F event and configuration epoch, zero when invalid or cleared. Separate from manufacturer_error_code, which carries the cyclic manufacturer_err PDO.",
            "x-rosieos-go-type": "uint32"
          },
          "drive_alarm_aux_valid": {
            "type": "boolean",
            "description": "True only for an admitted auxiliary reply matching the current nonzero 0x603F event and configuration epoch; false when missing, stale, or cleared, preventing zero from being mistaken for a valid reply.",
            "x-rosieos-go-type": "bool"
          },
          "logical_position": {
            "type": "number",
            "format": "double",
            "description": "Wire field; native publication is authoritative.",
            "x-rosieos-go-type": "float64"
          },
          "logical_valid": {
            "type": "boolean",
            "description": "Wire field; native publication is authoritative.",
            "x-rosieos-go-type": "bool"
          },
          "coordinate_counts": {
            "type": "integer",
            "format": "int64",
            "description": "Wire field; native publication is authoritative.",
            "x-rosieos-go-type": "int64"
          },
          "absolute_source_counts": {
            "type": "integer",
            "format": "int32",
            "description": "Wire field; native publication is authoritative.",
            "x-rosieos-go-type": "int32"
          },
          "independent_anchor_source": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IndependentAnchorSource"
              }
            ],
            "description": "Fresh independent raw acquisition; does not grant a command-frame binding or Home.",
            "x-rosieos-go-type": "*IndependentAnchorSource"
          },
          "coordinate_valid": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Wire field; native publication is authoritative.",
            "x-rosieos-go-type": "uint32"
          },
          "coordinate_source_valid": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Wire field; native publication is authoritative.",
            "x-rosieos-go-type": "uint32"
          },
          "pdo_fresh": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Wire field; native publication is authoritative.",
            "x-rosieos-go-type": "uint32"
          },
          "native_home_position_offset": {
            "type": "integer",
            "format": "int32",
            "description": "Wire field; native publication is authoritative.",
            "x-rosieos-go-type": "int32"
          },
          "observed_revision_no": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Wire field; native publication is authoritative.",
            "x-rosieos-go-type": "uint32"
          },
          "revision_readback_valid": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Wire field; native publication is authoritative.",
            "x-rosieos-go-type": "uint32"
          },
          "serial_no": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Wire field; native publication is authoritative.",
            "x-rosieos-go-type": "uint32"
          },
          "serial_readback_valid": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Wire field; native publication is authoritative.",
            "x-rosieos-go-type": "uint32"
          },
          "anchor_period_counts": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Wire field; native publication is authoritative.",
            "x-rosieos-go-type": "uint32"
          },
          "anchor_tolerance_counts": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Wire field; native publication is authoritative.",
            "x-rosieos-go-type": "uint64"
          },
          "coordinate_reason": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Wire field; native publication is authoritative.",
            "x-rosieos-go-type": "uint32"
          },
          "coordinate_identity_sha256": {
            "type": "string",
            "description": "Canonical P0-12 coordinate digest; empty means persisted anchors are unavailable.",
            "x-rosieos-go-type": "string"
          },
          "coordinate_identity": {
            "type": "string",
            "description": "Canonical P0-12 per-axis fields; empty means persisted anchors are unavailable.",
            "x-rosieos-go-type": "string"
          },
          "anchor_identity_changed_field": {
            "type": "string",
            "description": "Differing identity component for anchor_identity_mismatch, or empty.",
            "x-rosieos-go-type": "string"
          },
          "anchor_reason": {
            "type": "string",
            "description": "Wire field; native publication is authoritative.",
            "x-rosieos-go-type": "string"
          },
          "restored_anchor_home_epoch": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Wire field; native publication is authoritative.",
            "x-rosieos-go-type": "uint64"
          },
          "pos_counts": {
            "type": "integer",
            "format": "int32",
            "description": "Exact int32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "int32"
          },
          "statusword": {
            "type": "integer",
            "format": "uint16",
            "minimum": 0,
            "maximum": 65535,
            "description": "Exact uint16 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint16"
          },
          "error_code": {
            "type": "integer",
            "format": "uint16",
            "minimum": 0,
            "maximum": 65535,
            "description": "Exact uint16 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint16"
          },
          "vendor_id": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "product_code": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "slave_position": {
            "type": "integer",
            "format": "uint16",
            "minimum": 0,
            "maximum": 65535,
            "description": "Exact uint16 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint16"
          },
          "time_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "logical_target": {
            "type": "number",
            "format": "double",
            "description": "Native daemon publication; never adapter-estimated motion.",
            "x-rosieos-go-type": "float64"
          },
          "readiness": {
            "type": "string",
            "description": "Native daemon publication; never adapter-estimated motion.",
            "x-rosieos-go-type": "string"
          },
          "brake_state": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Native daemon publication; never adapter-estimated motion.",
            "x-rosieos-go-type": "uint32"
          },
          "home_valid": {
            "type": "boolean",
            "description": "Native daemon publication; never adapter-estimated motion.",
            "x-rosieos-go-type": "bool"
          },
          "logical_velocity": {
            "type": "number",
            "format": "double",
            "description": "Native daemon publication; never adapter-estimated motion.",
            "x-rosieos-go-type": "*float64"
          },
          "velocity_actual_counts_per_s": {
            "type": "integer",
            "format": "int32",
            "description": "Drive 0x606C signed reference counts/s in the position frame, sampled each cycle. Diagnostics only; never a speed-safety certification or an execution guard.",
            "x-rosieos-go-type": "int32"
          },
          "following_error_counts": {
            "type": "integer",
            "format": "int32",
            "description": "Drive 0x60F4 signed reference counts in the position frame; preferred input to the configured collision watchdog.",
            "x-rosieos-go-type": "int32"
          },
          "velocity_actual_valid": {
            "type": "boolean",
            "description": "True only when velocity_actual is mapped and this cycle has fresh PDO feedback. An absent signal is zero with false validity.",
            "x-rosieos-go-type": "bool"
          },
          "following_error_valid": {
            "type": "boolean",
            "description": "True only when following_error is mapped and this cycle has fresh PDO feedback. An absent signal is zero with false validity.",
            "x-rosieos-go-type": "bool"
          },
          "max_abs_velocity_actual_counts_per_s": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Maximum absolute valid drive velocity in counts/s since the last accepted Arm(true); zero before Arm. Retained through Stop/disarm; INT32_MIN has magnitude 2147483648.",
            "x-rosieos-go-type": "uint32"
          },
          "max_abs_following_error_counts": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Maximum absolute valid drive following error in counts since the last accepted Arm(true); zero before Arm. Retained through Stop/disarm; INT32_MIN has magnitude 2147483648.",
            "x-rosieos-go-type": "uint32"
          },
          "di_bits": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Current 0x60FD DI logic bits; interpret only when di_valid.",
            "x-rosieos-go-type": "uint32"
          },
          "di_valid": {
            "type": "boolean",
            "description": "True only for a fresh PDO and verified digital-input mapping.",
            "x-rosieos-go-type": "bool"
          },
          "external_enable_active": {
            "type": "boolean",
            "description": "A6-EC S-ON input active; interpret only when external_enable_valid. Diagnostics only; does not prove STO or torque state.",
            "x-rosieos-go-type": "bool"
          },
          "external_enable_valid": {
            "type": "boolean",
            "description": "True only with valid DI feedback and exactly one explicitly configured, verified A6-EC S-ON DI function.",
            "x-rosieos-go-type": "bool"
          },
          "torque_raw": {
            "type": "integer",
            "format": "int32",
            "description": "Drive 0x6077 raw per-mille of rated torque; use only with fresh PDO feedback.",
            "x-rosieos-go-type": "int32"
          },
          "collision_watchdog": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CollisionWatchdogStatus"
              }
            ],
            "description": "Native cycle evaluation and latched trip evidence for this axis.",
            "x-rosieos-go-type": "CollisionWatchdogStatus"
          },
          "calibration_valid": {
            "type": "boolean",
            "description": "Persistent calibration applicability; null/absent means legacy unknown.",
            "x-rosieos-go-type": "*bool"
          },
          "position_state": {
            "type": "string",
            "description": "Native state: unverified, recovering, trusted or lost; empty means legacy unknown.",
            "x-rosieos-go-type": "string"
          },
          "position_reason": {
            "type": "string",
            "description": "Native CoordinateReason name; none means no coordinate refusal; absent means legacy unknown.",
            "x-rosieos-go-type": "string"
          },
          "audit_status": {
            "type": "string",
            "description": "Last stationary audit: pending, verified or unavailable; never motion authority.",
            "x-rosieos-go-type": "string"
          },
          "audit_reason": {
            "type": "string",
            "description": "Native SampleInvalidity name; none means no reported audit failure; absent means legacy unknown.",
            "x-rosieos-go-type": "string"
          },
          "audit_last_verified_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Monotonic acquisition completion of last accepted independent evidence; zero means never.",
            "x-rosieos-go-type": "uint64"
          }
        },
        "required": [
          "drive_alarm",
          "drive_alarm_text",
          "drive_alarm_aux_code",
          "drive_alarm_aux_valid",
          "logical_position",
          "logical_valid",
          "coordinate_counts",
          "absolute_source_counts",
          "coordinate_valid",
          "coordinate_source_valid",
          "pdo_fresh",
          "native_home_position_offset",
          "observed_revision_no",
          "revision_readback_valid",
          "serial_no",
          "serial_readback_valid",
          "anchor_period_counts",
          "anchor_tolerance_counts",
          "coordinate_reason",
          "coordinate_identity_sha256",
          "coordinate_identity",
          "anchor_identity_changed_field",
          "anchor_reason",
          "restored_anchor_home_epoch",
          "pos_counts",
          "statusword",
          "error_code",
          "vendor_id",
          "product_code",
          "slave_position",
          "time_ns",
          "logical_target",
          "readiness",
          "brake_state",
          "home_valid",
          "velocity_actual_counts_per_s",
          "following_error_counts",
          "velocity_actual_valid",
          "following_error_valid",
          "max_abs_velocity_actual_counts_per_s",
          "max_abs_following_error_counts",
          "di_bits",
          "di_valid",
          "external_enable_active",
          "external_enable_valid",
          "torque_raw",
          "collision_watchdog"
        ]
      },
      "NativeStatus": {
        "type": "object",
        "properties": {
          "daemon_incarnation": {
            "type": "string",
            "description": "Wire field; native publication is authoritative.",
            "x-rosieos-go-type": "string"
          },
          "rt_cpu": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Configured RT CPU index as an exact uint32 integer.",
            "x-rosieos-go-type": "uint32"
          },
          "housekeeping_cpus": {
            "type": "string",
            "description": "Effective Linux CPU-list mask for housekeeping workers, excluding the RT CPU.",
            "x-rosieos-go-type": "string"
          },
          "affinity_applied": {
            "type": "object",
            "additionalProperties": {
              "type": "boolean"
            },
            "description": "Worker name to affinity-application success; false is not qualified placement and null means no observations.",
            "x-rosieos-go-type": "map[string]bool"
          },
          "recovery": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RecoveryStatus"
              },
              {
                "type": "null"
              }
            ],
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "*RecoveryStatus"
          },
          "time_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "backend": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "configuration_sha256": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "control_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "lease_valid": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "config_verified_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "home_valid_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "home_epoch": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "commissioning_phase": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "safety_fault_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "execution_fault_reasons": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "last_bus_failure_operation": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "last_bus_failure_code": {
            "type": "integer",
            "format": "int64",
            "description": "Exact int64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "int64"
          },
          "armed": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "axis_enable_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "native_home_active_axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "axes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AxisStatus"
            },
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "[]AxisStatus"
          },
          "configuration_epoch": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "buffer_health": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BufferHealth"
              }
            ],
            "description": "Native daemon publication; never adapter-estimated motion.",
            "x-rosieos-go-type": "BufferHealth"
          },
          "plan_cursor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PlanCursor"
              }
            ],
            "description": "Native daemon publication; never adapter-estimated motion.",
            "x-rosieos-go-type": "PlanCursor"
          },
          "bus": {
            "description": "Native bus policy and held_slaves with retained, observed and expected declared identities, presence, AL state and disposition; unreadable identity fields are null. Dispositions: held for an undeclared device allowed by hold; declared_unused for a matching declaration; refused_unknown for an undeclared device under refuse; refused_identity for a declared identity mismatch; identity_unreadable for an unavailable SII identity; refused_missing for a missing required declaration; identity_changed for a post-admission identity change under hold; disappeared for a missing unused device under hold; refused_state for a held device outside PREOP or INIT, or a configured terminal outside OP after activation. Refuse continuously requires declared identities and presence; post-admission refusal latches a readiness fault and inhibits outputs before submission, requiring public reset_fault (FaultReset), reacquisition of the application session, then explicit Enable and Arm after restoring the device and verified readiness. Enable before reset is rejected with native not_ready (reason 2); reset clears the readiness fault (reason 128) and safety mask while keeping outputs inhibited and retiring the session. Lost Home evidence requires separate qualified recovery before motion. Hold reports post-admission unused-device identity or presence changes and continues axes while axis readiness remains valid. Admission reason and reason_position identify identity_unreadable, unknown_slave, declared_identity_mismatch, declared_slave_missing, unsafe_held_state or capacity_exceeded; none means no observed refusal. No output capability is granted to held devices. A declared cell I/O terminal has disposition io_terminal and contributes one required responding slave. Its declared identity and presence remain mandatory under both hold and refuse; after activation it must be OP or admission reports io_terminal_not_operational. Held devices alone receive no PDOs or output capability.",
            "x-rosieos-go-type": "rawjson"
          },
          "io": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IoState"
              }
            ],
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "IoState"
          }
        },
        "required": [
          "daemon_incarnation",
          "rt_cpu",
          "housekeeping_cpus",
          "affinity_applied",
          "recovery",
          "time_ns",
          "backend",
          "configuration_sha256",
          "control_generation",
          "lease_valid",
          "config_verified_mask",
          "home_valid_mask",
          "home_epoch",
          "commissioning_phase",
          "safety_fault_mask",
          "execution_fault_reasons",
          "last_bus_failure_operation",
          "last_bus_failure_code",
          "armed",
          "axis_enable_mask",
          "native_home_active_axis_mask",
          "axes",
          "configuration_epoch",
          "buffer_health",
          "plan_cursor",
          "bus",
          "io"
        ]
      },
      "MotionState": {
        "type": "object",
        "properties": {
          "mode": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "state": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "trajectory_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "point_index": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "queue_depth": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "last_event": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "done": {
            "type": "boolean",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "bool"
          },
          "command_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "time_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          }
        },
        "required": [
          "mode",
          "state",
          "trajectory_id",
          "point_index",
          "queue_depth",
          "last_event",
          "done",
          "command_sequence",
          "time_ns"
        ]
      },
      "ProcessStatus": {
        "type": "object",
        "properties": {
          "daemon_incarnation": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "adapter_incarnation": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "grant": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/GrantObservation"
              },
              {
                "type": "null"
              }
            ],
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "*GrantObservation"
          },
          "jog": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/JogObservation"
              },
              {
                "type": "null"
              }
            ],
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "*JogObservation"
          },
          "jog_ingress": {
            "allOf": [
              {
                "$ref": "#/components/schemas/JogIngressObservation"
              }
            ],
            "description": "Adapter-lifetime ingress outcomes across datagram, WSS and UpdateJog; counters and latest refusal match GET /v1/jog/ingress.",
            "x-rosieos-go-type": "JogIngressObservation"
          },
          "core": {
            "allOf": [
              {
                "$ref": "#/components/schemas/NativeStatus"
              }
            ],
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "NativeStatus"
          },
          "motion": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MotionState"
              }
            ],
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "MotionState"
          },
          "execution": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Execution"
              }
            ],
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "Execution"
          },
          "time_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "axes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LogicalAxisStatus"
            },
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "[]LogicalAxisStatus"
          },
          "generations": {
            "allOf": [
              {
                "$ref": "#/components/schemas/StatusGenerations"
              }
            ],
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "StatusGenerations"
          },
          "plan_cursor": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PlanCursor"
              }
            ],
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "PlanCursor"
          },
          "buffer_health": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BufferHealth"
              }
            ],
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "BufferHealth"
          },
          "adapter": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AdapterStatus"
              }
            ],
            "description": "Adapter runtime observations; not native motion state.",
            "x-rosieos-go-type": "AdapterStatus"
          }
        },
        "required": [
          "daemon_incarnation",
          "adapter_incarnation",
          "grant",
          "jog",
          "jog_ingress",
          "core",
          "motion",
          "execution",
          "time_ns",
          "axes",
          "generations",
          "plan_cursor",
          "buffer_health",
          "adapter"
        ]
      },
      "ProcessMarker": {
        "type": "object",
        "properties": {
          "time_ns": {
            "type": "integer",
            "format": "int64",
            "description": "Exact int64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "int64"
          },
          "segment": {
            "type": "integer",
            "format": "int64",
            "description": "Exact int integer; no floating-point conversion.",
            "x-rosieos-go-type": "int"
          },
          "sample": {
            "type": "integer",
            "format": "int64",
            "description": "Exact int integer; no floating-point conversion.",
            "x-rosieos-go-type": "int"
          },
          "action": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "value": {
            "type": "boolean",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "bool"
          }
        },
        "required": [
          "time_ns",
          "segment",
          "sample",
          "action",
          "value"
        ]
      },
      "Program": {
        "type": "object",
        "properties": {
          "process_markers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProcessMarker"
            },
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "[]ProcessMarker"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "Identity"
          },
          "requires_process_io": {
            "type": "boolean",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "bool"
          },
          "segments": {
            "type": "integer",
            "format": "int64",
            "description": "Exact int integer; no floating-point conversion.",
            "x-rosieos-go-type": "int"
          },
          "samples": {
            "type": "integer",
            "format": "int64",
            "description": "Exact int integer; no floating-point conversion.",
            "x-rosieos-go-type": "int"
          },
          "normalised_samples": {
            "type": "integer",
            "format": "int64",
            "description": "Exact execution sample count after coincident segment endpoints are shared.",
            "x-rosieos-go-type": "int"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          }
        },
        "required": [
          "process_markers",
          "identity",
          "requires_process_io",
          "segments",
          "samples",
          "normalised_samples",
          "axis_mask"
        ]
      },
      "ProgramLimitData": {
        "type": "object",
        "properties": {
          "limit_violation": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProgramLimitViolation"
              }
            ],
            "description": "Logical joint-limit diagnostic for native_limit_exceeded or native_segment_rate_exceeded; supplements the unchanged refusal reason and is not a native command receipt.",
            "x-rosieos-go-type": "ProgramLimitViolation"
          }
        },
        "required": [
          "limit_violation"
        ]
      },
      "ProgramLimitViolation": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "description": "Diagnostic quantity: position or velocity.",
            "x-rosieos-go-type": "string"
          },
          "segment": {
            "type": "integer",
            "format": "int64",
            "description": "Zero-based source segment index, matching the refusal detail.",
            "x-rosieos-go-type": "int"
          },
          "sample": {
            "type": "integer",
            "format": "int64",
            "description": "Zero-based source sample index, matching the refusal detail.",
            "x-rosieos-go-type": "int"
          },
          "axis": {
            "type": "string",
            "description": "Canonical joint identifier reported by admission, for example J6.",
            "x-rosieos-go-type": "string"
          },
          "value": {
            "type": "number",
            "format": "double",
            "description": "Finite logical joint position or peak velocity in unit; command-count direction and Home offset have been removed.",
            "x-rosieos-go-type": "float64"
          },
          "limit": {
            "type": "number",
            "format": "double",
            "description": "Finite logical admission bound in unit; invalid numeric details are omitted as a whole without discarding the refusal.",
            "x-rosieos-go-type": "float64"
          },
          "unit": {
            "type": "string",
            "description": "rad for position; rad/s for velocity.",
            "x-rosieos-go-type": "string"
          }
        },
        "required": [
          "kind",
          "segment",
          "sample",
          "axis",
          "value",
          "limit",
          "unit"
        ]
      },
      "JogIngressObservation": {
        "type": "object",
        "properties": {
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "reason": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "now_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "refused": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Cumulative refused ingress count for this adapter process; accepted frames do not increment it.",
            "x-rosieos-go-type": "uint64"
          },
          "refused_by_reason": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "uint64",
              "minimum": 0
            },
            "minItems": 15,
            "maxItems": 15,
            "description": "Cumulative refusal counts indexed by protocol/control.json jog reason 0..14; index 0 remains zero. Unverified fixed capacity: 15 reason slots.",
            "x-rosieos-go-type": "[15]uint64"
          },
          "latest_refusal": {
            "allOf": [
              {
                "$ref": "#/components/schemas/JogIngressRefusal"
              }
            ],
            "description": "Most recent refusal across all ingress transports; zero before any refusal and preserved through acceptance and grant changes.",
            "x-rosieos-go-type": "JogIngressRefusal"
          }
        },
        "required": [
          "source_sequence",
          "reason",
          "now_host_ns",
          "refused",
          "refused_by_reason",
          "latest_refusal"
        ]
      },
      "JogIngressRefusal": {
        "type": "object",
        "properties": {
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Refused source sequence; zero when no complete input frame is available.",
            "x-rosieos-go-type": "uint64"
          },
          "reason": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Typed native jog reason; zero only before the first refusal.",
            "x-rosieos-go-type": "uint32"
          },
          "now_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Host monotonic ns when the adapter recorded the refusal; not an RT application timestamp.",
            "x-rosieos-go-type": "uint64"
          }
        },
        "required": [
          "source_sequence",
          "reason",
          "now_host_ns"
        ]
      },
      "AxisDescription": {
        "type": "object",
        "properties": {
          "completion_tolerance": {
            "type": "number",
            "format": "double",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "float64"
          },
          "feedback_fields": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "[]string"
          },
          "index": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "id": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "position_unit": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "counts_per_unit": {
            "type": "number",
            "format": "double",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "float64"
          },
          "sign": {
            "type": "integer",
            "format": "int64",
            "description": "Exact int integer; no floating-point conversion.",
            "x-rosieos-go-type": "int"
          },
          "feedback_wrap": {
            "type": "boolean",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "bool"
          },
          "command_wrap": {
            "type": "boolean",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "bool"
          },
          "velocity_command_mapped": {
            "type": "boolean",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "bool"
          },
          "native_home": {
            "type": "boolean",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "bool"
          },
          "require_home": {
            "type": "boolean",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "bool"
          },
          "min_position": {
            "type": "number",
            "format": "double",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "float64"
          },
          "max_position": {
            "type": "number",
            "format": "double",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "float64"
          },
          "max_velocity": {
            "type": "number",
            "format": "double",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "float64"
          },
          "jog_acceleration": {
            "type": "number",
            "format": "double",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "float64"
          },
          "max_target_lead": {
            "type": "number",
            "format": "double",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "float64"
          },
          "following_error": {
            "type": "number",
            "format": "double",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "float64"
          },
          "following_error_timeout_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "completion_timeout_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "interpolation": {
            "type": "string",
            "description": "hermite_position_with_velocity, linear_without: cubic Hermite q when both knots supply qd, otherwise linear q; configured shortest-step command wrapping applies.",
            "x-rosieos-go-type": "string"
          },
          "feedforward": {
            "type": "string",
            "description": "qd_optional: both supplied knot velocities shape Hermite position; feedforward is its derivative. If either knot lacks qd, feedforward is the linear segment slope. Endpoint hold velocity is zero.",
            "x-rosieos-go-type": "string"
          },
          "checks": {
            "description": "Object with exactly position: declared, velocity: declared, acceleration: declared or not_declared, jerk: unsupported. Prepare checks position range and supplied qd/segment velocity. With max_acceleration, check consecutive qd differences per segment or second q differences across segment midpoints when qd is absent; mixed qd presence rejects. Without the profile field acceleration is not_declared. Sampled derivatives give no continuous acceleration guarantee at linear corners or endpoint hold. Jerk is never checked.",
            "x-rosieos-go-type": "rawjson"
          },
          "endpoint": {
            "type": "string",
            "description": "hold_last_sample_then_settle: hold final q with zero velocity; fresh ready feedback within completion_tolerance by completion_timeout_ns, as evaluated by completion.hpp.",
            "x-rosieos-go-type": "string"
          },
          "max_acceleration": {
            "type": "number",
            "format": "double",
            "description": "Positive finite profile bound in position units per s^2; absent only when acceleration is not_declared.",
            "x-rosieos-go-type": "*float64"
          },
          "brake_override_reason": {
            "type": "string",
            "description": "Nonempty reason for an explicit bench brake override (effective present=false); absent without an override. Does not claim the physical brake is absent or qualified.",
            "x-rosieos-go-type": "string"
          }
        },
        "required": [
          "completion_tolerance",
          "feedback_fields",
          "index",
          "id",
          "position_unit",
          "counts_per_unit",
          "sign",
          "feedback_wrap",
          "command_wrap",
          "velocity_command_mapped",
          "native_home",
          "require_home",
          "min_position",
          "max_position",
          "max_velocity",
          "jog_acceleration",
          "max_target_lead",
          "following_error",
          "following_error_timeout_ns",
          "completion_timeout_ns",
          "interpolation",
          "feedforward",
          "checks",
          "endpoint"
        ]
      },
      "NativeDescription": {
        "type": "object",
        "properties": {
          "backend": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "schema": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "protocol_major": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "protocol_minor": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "configuration_sha256": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "machine_sha256": {
            "type": "string",
            "description": "Canonical machine-semantics digest recomputed by the daemon at startup.",
            "x-rosieos-go-type": "string"
          },
          "deployment_sha256": {
            "type": "string",
            "description": "Deployment identity digest (host, NIC, CPUs, sockets, pair, users).",
            "x-rosieos-go-type": "string"
          },
          "max_trajectory_points": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "resident_plans": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "cycle_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "interpolation": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "stop": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "axes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AxisDescription"
            },
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "[]AxisDescription"
          },
          "bus": {
            "description": "Current native bus policy and held_slaves inventory; the machine digest binds configured policy and declarations, not discovered devices. A declared cell I/O terminal has disposition io_terminal and contributes one required responding slave. Its declared identity and presence remain mandatory under both hold and refuse; after activation it must be OP or admission reports io_terminal_not_operational. Held devices alone receive no PDOs or output capability.",
            "x-rosieos-go-type": "rawjson"
          },
          "max_grant_lease_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Compiled cell lease ceiling in ns; a longer effective lease increases unattended-stop delay after link loss.",
            "x-rosieos-go-type": "uint64"
          },
          "max_jog_input_age_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Compiled cell capture-age and lifetime ceiling in ns; longer ages prolong stale velocity application before the existing expiry ramp.",
            "x-rosieos-go-type": "uint64"
          },
          "io": {
            "description": "Configured cell I/O terminal identity, torch_qualified=false, named input classes and polarities, and output classes, OFF safe states, expiry_ns budgets and independent readback wiring. Omitted when no terminal is configured; this policy is separate from NativeStatus.io observations.",
            "x-rosieos-go-type": "rawjson"
          }
        },
        "required": [
          "backend",
          "schema",
          "protocol_major",
          "protocol_minor",
          "configuration_sha256",
          "machine_sha256",
          "deployment_sha256",
          "max_trajectory_points",
          "resident_plans",
          "cycle_ns",
          "interpolation",
          "stop",
          "axes",
          "bus",
          "max_grant_lease_ns",
          "max_jog_input_age_ns"
        ]
      },
      "LocalJogClock": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "incarnation": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "mapping_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "now_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          }
        },
        "required": [
          "domain",
          "incarnation",
          "mapping_generation",
          "now_host_ns"
        ]
      },
      "Description": {
        "type": "object",
        "properties": {
          "backend": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "schema": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "protocol_major": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "protocol_minor": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "configuration_sha256": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "machine_sha256": {
            "type": "string",
            "description": "Canonical machine-semantics digest recomputed by the daemon at startup.",
            "x-rosieos-go-type": "string"
          },
          "deployment_sha256": {
            "type": "string",
            "description": "Deployment identity digest (host, NIC, CPUs, sockets, pair, users).",
            "x-rosieos-go-type": "string"
          },
          "max_trajectory_points": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "resident_plans": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exact uint32 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint32"
          },
          "cycle_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "interpolation": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "stop": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "axes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AxisDescription"
            },
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "[]AxisDescription"
          },
          "bus": {
            "description": "Current native bus policy and held_slaves inventory; the machine digest binds configured policy and declarations, not discovered devices. A declared cell I/O terminal has disposition io_terminal and contributes one required responding slave. Its declared identity and presence remain mandatory under both hold and refuse; after activation it must be OP or admission reports io_terminal_not_operational. Held devices alone receive no PDOs or output capability.",
            "x-rosieos-go-type": "rawjson"
          },
          "max_grant_lease_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Compiled cell lease ceiling in ns; a longer effective lease increases unattended-stop delay after link loss.",
            "x-rosieos-go-type": "uint64"
          },
          "max_jog_input_age_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Compiled cell capture-age and lifetime ceiling in ns; longer ages prolong stale velocity application before the existing expiry ramp.",
            "x-rosieos-go-type": "uint64"
          },
          "io": {
            "description": "Configured cell I/O terminal identity, torch_qualified=false, named input classes and polarities, and output classes, OFF safe states, expiry_ns budgets and independent readback wiring. Omitted when no terminal is configured; this policy is separate from NativeStatus.io observations.",
            "x-rosieos-go-type": "rawjson"
          },
          "contract_version": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Exactly 1.",
            "x-rosieos-go-type": "uint32"
          },
          "capabilities_digest": {
            "type": "string",
            "description": "Lowercase SHA-256 of the exact committed UTF-8 LF schema file bytes, including its final newline; no self-referential digest field.",
            "x-rosieos-go-type": "string"
          },
          "capabilities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CapabilityInfo"
            },
            "description": "Every target capability with its implementation state and transport.",
            "x-rosieos-go-type": "[]CapabilityInfo"
          },
          "control_idle_timeout_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Compiled link idle timeout in ns; clients keep reserved connections alive at one third of this bound, independently of grants. Unverified LAN and internet policy: 90000000000 ns. An omitted legacy field uses 30000000000 ns.",
            "x-rosieos-go-type": "uint64"
          },
          "program": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Program"
              }
            ],
            "description": "Detached prepared program metadata including both identity digests; absent when no program is prepared.",
            "x-rosieos-go-type": "*Program"
          },
          "robot": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RobotDescription"
              },
              {
                "type": "null"
              }
            ],
            "description": "Null when no robot definition is bound or no compiled artefact is loaded; never guessed from axis count.",
            "x-rosieos-go-type": "*RobotDescription"
          },
          "drives": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DriveDescription"
            },
            "description": "Per-axis compiled drive configuration and current verified bring-up identity; empty without a compiled artefact.",
            "x-rosieos-go-type": "[]DriveDescription"
          }
        },
        "required": [
          "backend",
          "schema",
          "protocol_major",
          "protocol_minor",
          "configuration_sha256",
          "machine_sha256",
          "deployment_sha256",
          "max_trajectory_points",
          "resident_plans",
          "cycle_ns",
          "interpolation",
          "stop",
          "axes",
          "bus",
          "max_grant_lease_ns",
          "max_jog_input_age_ns",
          "contract_version",
          "capabilities_digest",
          "capabilities",
          "drives"
        ]
      },
      "CapabilityInfo": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Canonical capability name.",
            "x-rosieos-go-type": "string"
          },
          "state": {
            "type": "string",
            "description": "implemented, interim, test_only or unimplemented. test_only operations are retained for oracle ports and fixtures; consumers use implemented operations.",
            "x-rosieos-go-type": "string"
          },
          "transport": {
            "type": "string",
            "description": "Actual ingress; unimplemented has no transport.",
            "x-rosieos-go-type": "string"
          }
        },
        "required": [
          "name",
          "state",
          "transport"
        ]
      },
      "RawResponse": {
        "type": "object",
        "properties": {
          "native_jog_result": {
            "allOf": [
              {
                "$ref": "#/components/schemas/JogObservation"
              }
            ],
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "*JogObservation"
          },
          "native_result": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CommandResult"
              }
            ],
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "*CommandResult"
          },
          "schema": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          },
          "sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact uint64 integer; no floating-point conversion.",
            "x-rosieos-go-type": "uint64"
          },
          "data": {
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "rawjson"
          },
          "error": {
            "type": "string",
            "description": "Wire field; native admission remains authoritative.",
            "x-rosieos-go-type": "string"
          }
        },
        "required": [
          "schema",
          "operation"
        ]
      },
      "LogicalAxisStatus": {
        "type": "object",
        "properties": {
          "drive_alarm": {
            "type": "string",
            "description": "A6-EC display code from the 0x603F/0x203F low-half pair; unresolved bus candidates joined by |; empty when clear, unmapped, or another drive family.",
            "x-rosieos-go-type": "string"
          },
          "drive_alarm_text": {
            "type": "string",
            "description": "Manual meaning corresponding to drive_alarm; multiple candidates joined by | in matching order.",
            "x-rosieos-go-type": "string"
          },
          "drive_alarm_aux_code": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Full raw 0x203F auxiliary SDO word; a two-byte reply occupies the low half. Retained for the current nonzero 0x603F event and configuration epoch, zero when invalid or cleared. Separate from manufacturer_error_code, which carries the cyclic manufacturer_err PDO.",
            "x-rosieos-go-type": "uint32"
          },
          "drive_alarm_aux_valid": {
            "type": "boolean",
            "description": "True only for an admitted auxiliary reply matching the current nonzero 0x603F event and configuration epoch; false when missing, stale, or cleared, preventing zero from being mistaken for a valid reply.",
            "x-rosieos-go-type": "bool"
          },
          "time_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "logical_position": {
            "type": "number",
            "format": "double",
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "float64"
          },
          "logical_valid": {
            "type": "boolean",
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "bool"
          },
          "logical_target": {
            "type": "number",
            "format": "double",
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "float64"
          },
          "logical_velocity": {
            "type": "number",
            "format": "double",
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "*float64"
          },
          "readiness": {
            "type": "string",
            "description": "ready or first failing axis gate in this order: faulted, mode_mismatch, home_required, coordinate_invalid, not_enabled, not_operation_enabled, brake_wait; group authority still applies.",
            "x-rosieos-go-type": "string"
          },
          "position_counts": {
            "type": "integer",
            "format": "int32",
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "int32"
          },
          "statusword": {
            "type": "integer",
            "format": "uint16",
            "minimum": 0,
            "maximum": 65535,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint16"
          },
          "brake_state": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint32"
          },
          "home_valid": {
            "type": "boolean",
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "bool"
          },
          "velocity_actual_counts_per_s": {
            "type": "integer",
            "format": "int32",
            "description": "Drive 0x606C signed reference counts/s in the position frame, sampled each cycle. Diagnostics only; never a speed-safety certification or an execution guard.",
            "x-rosieos-go-type": "int32"
          },
          "following_error_counts": {
            "type": "integer",
            "format": "int32",
            "description": "Drive 0x60F4 signed reference counts in the position frame; preferred input to the configured collision watchdog.",
            "x-rosieos-go-type": "int32"
          },
          "velocity_actual_valid": {
            "type": "boolean",
            "description": "True only when velocity_actual is mapped and this cycle has fresh PDO feedback. An absent signal is zero with false validity.",
            "x-rosieos-go-type": "bool"
          },
          "following_error_valid": {
            "type": "boolean",
            "description": "True only when following_error is mapped and this cycle has fresh PDO feedback. An absent signal is zero with false validity.",
            "x-rosieos-go-type": "bool"
          },
          "max_abs_velocity_actual_counts_per_s": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Maximum absolute valid drive velocity in counts/s since the last accepted Arm(true); zero before Arm. Retained through Stop/disarm; INT32_MIN has magnitude 2147483648.",
            "x-rosieos-go-type": "uint32"
          },
          "max_abs_following_error_counts": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Maximum absolute valid drive following error in counts since the last accepted Arm(true); zero before Arm. Retained through Stop/disarm; INT32_MIN has magnitude 2147483648.",
            "x-rosieos-go-type": "uint32"
          },
          "di_bits": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Current 0x60FD DI logic bits; interpret only when di_valid.",
            "x-rosieos-go-type": "uint32"
          },
          "di_valid": {
            "type": "boolean",
            "description": "True only for a fresh PDO and verified digital-input mapping.",
            "x-rosieos-go-type": "bool"
          },
          "external_enable_active": {
            "type": "boolean",
            "description": "A6-EC S-ON input active; interpret only when external_enable_valid. Diagnostics only; does not prove STO or torque state.",
            "x-rosieos-go-type": "bool"
          },
          "external_enable_valid": {
            "type": "boolean",
            "description": "True only with valid DI feedback and exactly one explicitly configured, verified A6-EC S-ON DI function.",
            "x-rosieos-go-type": "bool"
          },
          "torque_raw": {
            "type": "integer",
            "format": "int32",
            "description": "Drive 0x6077 raw per-mille of rated torque; use only with fresh PDO feedback.",
            "x-rosieos-go-type": "int32"
          },
          "collision_watchdog": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CollisionWatchdogStatus"
              }
            ],
            "description": "Native cycle evaluation and latched trip evidence for this axis.",
            "x-rosieos-go-type": "CollisionWatchdogStatus"
          },
          "calibration_valid": {
            "type": "boolean",
            "description": "Persistent calibration applicability; null/absent means legacy unknown.",
            "x-rosieos-go-type": "*bool"
          },
          "position_state": {
            "type": "string",
            "description": "Native state: unverified, recovering, trusted or lost; empty means legacy unknown.",
            "x-rosieos-go-type": "string"
          },
          "position_reason": {
            "type": "string",
            "description": "Native CoordinateReason name; none means no coordinate refusal; absent means legacy unknown.",
            "x-rosieos-go-type": "string"
          },
          "audit_status": {
            "type": "string",
            "description": "Last stationary audit: pending, verified or unavailable; never motion authority.",
            "x-rosieos-go-type": "string"
          },
          "audit_reason": {
            "type": "string",
            "description": "Native SampleInvalidity name; none means no reported audit failure; absent means legacy unknown.",
            "x-rosieos-go-type": "string"
          },
          "audit_last_verified_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Monotonic acquisition completion of last accepted independent evidence; zero means never.",
            "x-rosieos-go-type": "uint64"
          }
        },
        "required": [
          "drive_alarm",
          "drive_alarm_text",
          "drive_alarm_aux_code",
          "drive_alarm_aux_valid",
          "time_ns",
          "logical_position",
          "logical_valid",
          "logical_target",
          "readiness",
          "position_counts",
          "statusword",
          "brake_state",
          "home_valid",
          "velocity_actual_counts_per_s",
          "following_error_counts",
          "velocity_actual_valid",
          "following_error_valid",
          "max_abs_velocity_actual_counts_per_s",
          "max_abs_following_error_counts",
          "di_bits",
          "di_valid",
          "external_enable_active",
          "external_enable_valid",
          "torque_raw",
          "collision_watchdog"
        ]
      },
      "StatusGenerations": {
        "type": "object",
        "properties": {
          "time_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "native": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "configuration_epoch": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "home_epoch": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "execution": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Adapter handle execution generation; correlated native Start acknowledgement.",
            "x-rosieos-go-type": "uint64"
          },
          "jog": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "grant": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "grant_time_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Daemon fast-grant publication timestamp; zero if grant observation is unavailable. Independent of metrics time_ns.",
            "x-rosieos-go-type": "uint64"
          },
          "jog_time_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Daemon jog publication timestamp; zero if jog observation is unavailable. Independent of metrics time_ns.",
            "x-rosieos-go-type": "uint64"
          }
        },
        "required": [
          "time_ns",
          "native",
          "configuration_epoch",
          "home_epoch",
          "execution",
          "jog",
          "grant",
          "grant_time_ns",
          "jog_time_ns"
        ]
      },
      "PlanCursor": {
        "type": "object",
        "properties": {
          "time_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "active_handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "sample_index": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint32"
          },
          "native_clock_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          }
        },
        "required": [
          "time_ns",
          "active_handle",
          "sample_index",
          "native_clock_ns"
        ]
      },
      "BufferHealth": {
        "type": "object",
        "properties": {
          "time_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "slots_free": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint32"
          },
          "staging_in_progress": {
            "type": "boolean",
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "bool"
          },
          "ring_drops": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "native_slot_occupancy": {
            "type": "object",
            "additionalProperties": {
              "type": "integer",
              "format": "uint32",
              "minimum": 0,
              "maximum": 4294967295
            },
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "map[string]uint32"
          }
        },
        "required": [
          "time_ns",
          "slots_free",
          "staging_in_progress",
          "ring_drops",
          "native_slot_occupancy"
        ]
      },
      "AdapterStatus": {
        "type": "object",
        "properties": {
          "heap_inuse": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Go runtime bytes at request observation.",
            "x-rosieos-go-type": "uint64"
          },
          "sys": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Go runtime bytes at request observation.",
            "x-rosieos-go-type": "uint64"
          },
          "goroutines": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Go runtime goroutine count at request observation.",
            "x-rosieos-go-type": "uint32"
          },
          "open_preparation_slots": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Available adapter preparation admissions, from the two atomic reservations.",
            "x-rosieos-go-type": "uint32"
          }
        },
        "required": [
          "heap_inuse",
          "sys",
          "goroutines",
          "open_preparation_slots"
        ]
      },
      "GrantEvent": {
        "type": "object",
        "properties": {
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "stopping": {
            "type": "boolean",
            "description": "True for a local keepalive while Stop drains; does not confer native authority.",
            "x-rosieos-go-type": "bool"
          }
        },
        "required": [
          "generation",
          "stopping"
        ]
      },
      "HandleTransitionEvent": {
        "type": "object",
        "properties": {
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "from": {
            "type": "string",
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "string"
          },
          "to": {
            "type": "string",
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "string"
          },
          "execution_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "native_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Immutable raw trajectory identity supplied at Prepare and checked at Start; echoed unchanged through terminal observation.",
            "x-rosieos-go-type": "Identity"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Application grant generation that owns this immutable preparation.",
            "x-rosieos-go-type": "uint64"
          }
        },
        "required": [
          "handle",
          "from",
          "to",
          "execution_generation",
          "native_sequence"
        ]
      },
      "ExecutionEvent": {
        "type": "object",
        "properties": {
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "native_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "fault_bits": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint32"
          },
          "recovery": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FaultRecovery"
            },
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "[]FaultRecovery"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Immutable raw trajectory identity supplied at Prepare and checked at Start; echoed unchanged through terminal observation.",
            "x-rosieos-go-type": "Identity"
          }
        },
        "required": [
          "handle",
          "generation",
          "native_sequence",
          "fault_bits",
          "recovery"
        ]
      },
      "JogEvent": {
        "type": "object",
        "properties": {
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "reason": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint32"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity_scale_ppm": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint32"
          }
        },
        "required": [
          "generation",
          "reason",
          "axis_mask",
          "velocity_scale_ppm"
        ]
      },
      "FaultEvent": {
        "type": "object",
        "properties": {
          "bit": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint32"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint32"
          },
          "recovery_class": {
            "type": "string",
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "string"
          }
        },
        "required": [
          "bit",
          "axis_mask",
          "recovery_class"
        ]
      },
      "EnableEvent": {
        "type": "object",
        "properties": {
          "enabled_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint32"
          },
          "armed": {
            "type": "boolean",
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "bool"
          }
        },
        "required": [
          "enabled_mask",
          "armed"
        ]
      },
      "EpochEvent": {
        "type": "object",
        "properties": {
          "previous": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "current": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          }
        },
        "required": [
          "previous",
          "current"
        ]
      },
      "IncarnationEvent": {
        "type": "object",
        "properties": {
          "previous": {
            "type": "string",
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "string"
          },
          "current": {
            "type": "string",
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "string"
          }
        },
        "required": [
          "previous",
          "current"
        ]
      },
      "PublisherOverflowEvent": {
        "type": "object",
        "properties": {
          "previous_drops": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          },
          "total_drops": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "uint64"
          }
        },
        "required": [
          "previous_drops",
          "total_drops"
        ]
      },
      "EventsDropped": {
        "type": "object",
        "properties": {
          "first_lost_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Inclusive first missing event.",
            "x-rosieos-go-type": "uint64"
          },
          "last_lost_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Inclusive last missing event; synthetic drop event sequence equals this cursor, so retained sequences are never renumbered.",
            "x-rosieos-go-type": "uint64"
          }
        },
        "required": [
          "first_lost_sequence",
          "last_lost_sequence"
        ]
      },
      "TelemetryMarkEvent": {
        "type": "object",
        "properties": {
          "label": {
            "type": "string",
            "description": "Accepted mark label, 1..128 UTF-8 bytes; receipt of queued dump work, not proof of disk output.",
            "x-rosieos-go-type": "string"
          },
          "native_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted mark command sequence returned by POST /v1/control; distinct from event and telemetry sample cursors.",
            "x-rosieos-go-type": "uint64"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Authorizing application grant generation; session capability is never published.",
            "x-rosieos-go-type": "uint64"
          }
        },
        "required": [
          "label",
          "native_sequence",
          "generation"
        ]
      },
      "Event": {
        "type": "object",
        "properties": {
          "sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Strictly increasing within adapter_incarnation; drop records use last_lost_sequence; no renumbering.",
            "x-rosieos-go-type": "uint64"
          },
          "time_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native observation host time, except telemetry_mark uses adapter host monotonic time after native acceptance; never proof of motion or disk output.",
            "x-rosieos-go-type": "uint64"
          },
          "type": {
            "type": "string",
            "description": "grant_acquired, grant_renewed, grant_released, grant_expired, grant_revoked, enable_changed, arm_changed, handle_transition, execution_started, execution_completed, execution_faulted, execution_aborted, jog_begin, jog_end, jog_expired, jog_ramping, jog_limited, fault_latched, fault_cleared, home_epoch_changed, daemon_incarnation_changed, adapter_incarnation_changed, publisher_overflow, events_dropped, telemetry_mark",
            "x-rosieos-go-type": "string"
          },
          "daemon_incarnation": {
            "type": "string",
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "string"
          },
          "adapter_incarnation": {
            "type": "string",
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "string"
          },
          "grant": {
            "allOf": [
              {
                "$ref": "#/components/schemas/GrantEvent"
              }
            ],
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "*GrantEvent"
          },
          "handle": {
            "allOf": [
              {
                "$ref": "#/components/schemas/HandleTransitionEvent"
              }
            ],
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "*HandleTransitionEvent"
          },
          "execution": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ExecutionEvent"
              }
            ],
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "*ExecutionEvent"
          },
          "jog": {
            "allOf": [
              {
                "$ref": "#/components/schemas/JogEvent"
              }
            ],
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "*JogEvent"
          },
          "fault": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FaultEvent"
              }
            ],
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "*FaultEvent"
          },
          "enable": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EnableEvent"
              }
            ],
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "*EnableEvent"
          },
          "epoch": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EpochEvent"
              }
            ],
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "*EpochEvent"
          },
          "incarnation": {
            "allOf": [
              {
                "$ref": "#/components/schemas/IncarnationEvent"
              }
            ],
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "*IncarnationEvent"
          },
          "overflow": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PublisherOverflowEvent"
              }
            ],
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "*PublisherOverflowEvent"
          },
          "events_dropped": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventsDropped"
              }
            ],
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "*EventsDropped"
          },
          "mark": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TelemetryMarkEvent"
              }
            ],
            "description": "Present for telemetry_mark only, once per accepted mark command; rejected commands produce no mark event.",
            "x-rosieos-go-type": "*TelemetryMarkEvent"
          }
        },
        "required": [
          "sequence",
          "time_ns",
          "type",
          "daemon_incarnation",
          "adapter_incarnation"
        ]
      },
      "EventBatch": {
        "type": "object",
        "properties": {
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Event"
            },
            "description": "At most 64 records, including at most one leading events_dropped record; 256 retained events.",
            "x-rosieos-go-type": "[]Event"
          },
          "next_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Resume cursor after the last returned event; unchanged when empty.",
            "x-rosieos-go-type": "uint64"
          },
          "latest_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Newest retained sequence at batch capture.",
            "x-rosieos-go-type": "uint64"
          },
          "adapter_incarnation": {
            "type": "string",
            "description": "Native daemon publication; time_ns identifies the observation, never adapter-estimated motion.",
            "x-rosieos-go-type": "string"
          }
        },
        "required": [
          "events",
          "next_sequence",
          "latest_sequence",
          "adapter_incarnation"
        ]
      },
      "TelemetryBatch": {
        "type": "object",
        "properties": {
          "daemon_incarnation": {
            "type": "string",
            "description": "32 lowercase hex bytes identifying the daemon owning these sequences; reconnect must reconcile changes.",
            "x-rosieos-go-type": "string"
          },
          "adapter_incarnation": {
            "type": "string",
            "description": "32 lowercase hex bytes identifying the adapter incarnation.",
            "x-rosieos-go-type": "string"
          },
          "machine_sha256": {
            "type": "string",
            "description": "64 lowercase hex machine digest bytes.",
            "x-rosieos-go-type": "string"
          },
          "deployment_sha256": {
            "type": "string",
            "description": "64 lowercase hex deployment digest bytes.",
            "x-rosieos-go-type": "string"
          },
          "cycle_period_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Cycle period in ns.",
            "x-rosieos-go-type": "uint64"
          },
          "axis_count": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Active axes, 1 through 16.",
            "x-rosieos-go-type": "uint32"
          },
          "record_layout_digest": {
            "type": "string",
            "description": "64 ASCII hex bytes from the generated transitive CycleCaptureRecordV2 layout digest.",
            "x-rosieos-go-type": "string"
          },
          "first_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "First included sequence; zero when empty.",
            "x-rosieos-go-type": "uint64"
          },
          "last_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Last included sequence or after+dropped when empty; resume cursor.",
            "x-rosieos-go-type": "uint64"
          },
          "dropped": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact number of records lost after the requested cursor and before this batch.",
            "x-rosieos-go-type": "uint64"
          },
          "record_count": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Number of complete records, at most min(ring capacity,4096).",
            "x-rosieos-go-type": "uint32"
          },
          "records": {
            "type": "string",
            "contentEncoding": "base64",
            "description": "Opaque binary body; never encoded as JSON or base64. Each CycleCaptureAxisV2 appends velocity_actual_counts_per_s (i32), following_error_counts (i32), velocity_actual_valid (u32 0/1), following_error_valid (u32 0/1). Drive position-frame counts/s and counts; following error also feeds the configured collision watchdog. No speed-safety certification.",
            "x-rosieos-go-type": "[]uint8"
          }
        },
        "required": [
          "daemon_incarnation",
          "adapter_incarnation",
          "machine_sha256",
          "deployment_sha256",
          "cycle_period_ns",
          "axis_count",
          "record_layout_digest",
          "first_sequence",
          "last_sequence",
          "dropped",
          "record_count",
          "records"
        ],
        "description": "Binary layout, never JSON. Field order and sizes are listed as properties for reference."
      },
      "IoInput": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "string"
          },
          "value": {
            "type": "boolean",
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "bool"
          },
          "valid": {
            "type": "boolean",
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "bool"
          },
          "observed_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "uint64"
          },
          "bit": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "uint32"
          },
          "fast": {
            "type": "boolean",
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "bool"
          }
        },
        "required": [
          "name",
          "value",
          "valid",
          "observed_ns",
          "bit",
          "fast"
        ]
      },
      "IoOutput": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "string"
          },
          "intent": {
            "type": "boolean",
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "bool"
          },
          "commanded": {
            "type": "boolean",
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "bool"
          },
          "readback": {
            "type": "boolean",
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "bool"
          },
          "valid": {
            "type": "boolean",
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "bool"
          },
          "expiry_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "uint64"
          },
          "observed_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "uint64"
          },
          "changed_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "uint64"
          },
          "marker_sample_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "uint64"
          },
          "marker_cycle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "uint64"
          },
          "bit": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "uint32"
          },
          "torch": {
            "type": "boolean",
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "bool"
          }
        },
        "required": [
          "name",
          "intent",
          "commanded",
          "readback",
          "valid",
          "expiry_ns",
          "observed_ns",
          "changed_ns",
          "marker_sample_ns",
          "marker_cycle",
          "bit",
          "torch"
        ]
      },
      "IoState": {
        "type": "object",
        "properties": {
          "time_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "uint64"
          },
          "cycle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "uint64"
          },
          "armed": {
            "type": "boolean",
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "bool"
          },
          "reason": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "uint32"
          },
          "inputs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IoInput"
            },
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "[]IoInput"
          },
          "outputs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IoOutput"
            },
            "description": "Native cycle observation or bounded marker intent; physical readback is independent.",
            "x-rosieos-go-type": "[]IoOutput"
          }
        },
        "required": [
          "time_ns",
          "cycle",
          "armed",
          "reason",
          "inputs",
          "outputs"
        ]
      },
      "ResourceInfo": {
        "type": "object",
        "properties": {
          "path": {
            "type": "string",
            "description": "Description-relative path (robot_description_manifest.json, robot.urdf, meshes/<file>, rtcore_definition.json, ...) or machine_planning_calibration.json. Never a server filesystem path.",
            "x-rosieos-go-type": "string"
          },
          "sha256": {
            "type": "string",
            "description": "Lowercase SHA-256 of the exact resource bytes.",
            "x-rosieos-go-type": "string"
          },
          "bytes": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Exact resource byte count; unverified maximum 33554432 bytes.",
            "x-rosieos-go-type": "uint64"
          },
          "media_type": {
            "type": "string",
            "description": "application/json, application/xml, model/vnd.collada+xml, model/stl or application/octet-stream.",
            "x-rosieos-go-type": "string"
          }
        },
        "required": [
          "path",
          "sha256",
          "bytes",
          "media_type"
        ]
      },
      "RobotDescription": {
        "type": "object",
        "properties": {
          "model_id": {
            "type": "string",
            "description": "The robot description's model id: the directory name under robot_description/robots/ the machine was compiled with.",
            "x-rosieos-go-type": "string"
          },
          "robot_description_sha256": {
            "type": "string",
            "description": "sha256:<64 lowercase hex>, the description's manifest identity over the resources it registers (docs/ROBOT-DESCRIPTION-CONTRACT.md); the identity a plan's header must carry.",
            "x-rosieos-go-type": "string"
          },
          "machine_planning_calibration_sha256": {
            "type": "string",
            "description": "sha256:<64 lowercase hex> of the served machine_planning_calibration.json bytes, this machine's deviation from the description; the identity a plan's header must carry.",
            "x-rosieos-go-type": "string"
          },
          "resources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ResourceInfo"
            },
            "description": "The description's manifest and every file it registers, by description-relative path, plus machine_planning_calibration.json; unverified maximum 1024 entries and 134217728 distinct bytes.",
            "x-rosieos-go-type": "[]ResourceInfo"
          }
        },
        "required": [
          "model_id",
          "robot_description_sha256",
          "machine_planning_calibration_sha256",
          "resources"
        ]
      },
      "DriveIdentity": {
        "type": "object",
        "properties": {
          "expected_vendor_id": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Configured vendor expectation used by IgH slave matching; not an independent vendor readback.",
            "x-rosieos-go-type": "uint32"
          },
          "expected_product_code": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Configured product expectation used by IgH slave matching; not an independent product readback.",
            "x-rosieos-go-type": "uint32"
          },
          "observed_coe_revision": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Observed CoE 0x1018:3 firmware revision; distinct from the configured SII revision and never substituted from configuration.",
            "x-rosieos-go-type": "uint32"
          }
        },
        "required": [
          "expected_vendor_id",
          "expected_product_code",
          "observed_coe_revision"
        ]
      },
      "DriveDescription": {
        "type": "object",
        "properties": {
          "axis": {
            "type": "string",
            "description": "Configured axis ID in native axis order.",
            "x-rosieos-go-type": "string"
          },
          "config_name": {
            "type": "string",
            "description": "Compiled drive configuration name.",
            "x-rosieos-go-type": "string"
          },
          "config_sha256": {
            "type": "string",
            "description": "SHA-256 of canonical drive configuration content used in the compiled identity.",
            "x-rosieos-go-type": "string"
          },
          "slave_position": {
            "type": "integer",
            "format": "uint16",
            "minimum": 0,
            "maximum": 65535,
            "description": "Configured EtherCAT slave position.",
            "x-rosieos-go-type": "uint16"
          },
          "verified_identity": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/DriveIdentity"
              },
              {
                "type": "null"
              }
            ],
            "description": "Null unless current native configuration verification and CoE revision readback are valid. Vendor/product are configured expectations, revision is observed. Simulation synthesizes vendor/product from the profile and cannot independently inject their mismatch.",
            "x-rosieos-go-type": "*DriveIdentity"
          }
        },
        "required": [
          "axis",
          "config_name",
          "config_sha256",
          "slave_position"
        ]
      },
      "ErrorResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "required": [
              "error"
            ]
          }
        ]
      },
      "Request_mark_telemetry": {
        "type": "object",
        "title": "mark_telemetry",
        "description": "State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "mark_telemetry"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation",
          "label"
        ],
        "additionalProperties": false
      },
      "Response_mark_telemetry": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "mark_telemetry"
              }
            }
          }
        ]
      },
      "Request_acquire": {
        "type": "object",
        "title": "acquire",
        "description": "State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "acquire"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "controller",
          "binding"
        ],
        "additionalProperties": false
      },
      "Response_acquire": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "acquire"
              },
              "data": {
                "$ref": "#/components/schemas/Grant"
              }
            }
          }
        ]
      },
      "Request_renew": {
        "type": "object",
        "title": "renew",
        "description": "State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "renew"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation"
        ],
        "additionalProperties": false
      },
      "Response_renew": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "renew"
              },
              "data": {
                "$ref": "#/components/schemas/Grant"
              }
            }
          }
        ]
      },
      "Request_release": {
        "type": "object",
        "title": "release",
        "description": "State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "release"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation"
        ],
        "additionalProperties": false
      },
      "Response_release": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "release"
              },
              "data": {
                "$ref": "#/components/schemas/Grant"
              }
            }
          }
        ]
      },
      "Request_stop": {
        "type": "object",
        "title": "stop",
        "description": "State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "stop"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation"
        ],
        "additionalProperties": false
      },
      "Response_stop": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "stop"
              },
              "data": {
                "$ref": "#/components/schemas/Grant"
              }
            }
          }
        ]
      },
      "Request_enable": {
        "type": "object",
        "title": "enable",
        "description": "State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "enable"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation",
          "axis_mask"
        ],
        "additionalProperties": false
      },
      "Response_enable": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "enable"
              }
            }
          }
        ]
      },
      "Request_arm": {
        "type": "object",
        "title": "arm",
        "description": "State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "arm"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation"
        ],
        "additionalProperties": false
      },
      "Response_arm": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "arm"
              }
            }
          }
        ]
      },
      "Request_home": {
        "type": "object",
        "title": "home",
        "description": "State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "home"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation",
          "axis_mask"
        ],
        "additionalProperties": false
      },
      "Response_home": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "home"
              }
            }
          }
        ]
      },
      "Request_reset_fault": {
        "type": "object",
        "title": "reset_fault",
        "description": "State: interim.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "reset_fault"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation"
        ],
        "additionalProperties": false
      },
      "Response_reset_fault": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "reset_fault"
              },
              "data": {
                "$ref": "#/components/schemas/RecoveryStatus"
              }
            }
          }
        ]
      },
      "Request_recovery_status": {
        "type": "object",
        "title": "recovery_status",
        "description": "State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "recovery_status"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation"
        ],
        "additionalProperties": false
      },
      "Response_recovery_status": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "recovery_status"
              },
              "data": {
                "$ref": "#/components/schemas/RecoveryStatus"
              }
            }
          }
        ]
      },
      "Request_jog": {
        "type": "object",
        "title": "jog",
        "description": "Legacy velocity jog is test-only for oracle ports and fixtures. Consumers use begin_jog/update_jog/end_jog; update_jog uses jog.sock or WSS /v1/jog. State: test_only.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "jog"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation",
          "axis_mask",
          "velocity",
          "timeout_ms"
        ],
        "additionalProperties": false
      },
      "Response_jog": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "jog"
              }
            }
          }
        ]
      },
      "Request_begin_jog": {
        "type": "object",
        "title": "begin_jog",
        "description": "State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "begin_jog"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation",
          "axis_mask",
          "source_origin_host_ns",
          "deadline_host_ns",
          "clock_incarnation"
        ],
        "additionalProperties": false
      },
      "Response_begin_jog": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "begin_jog"
              }
            }
          }
        ]
      },
      "Request_end_jog": {
        "type": "object",
        "title": "end_jog",
        "description": "State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "end_jog"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation",
          "jog_generation"
        ],
        "additionalProperties": false
      },
      "Response_end_jog": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "end_jog"
              }
            }
          }
        ]
      },
      "Request_prepare_trajectory": {
        "type": "object",
        "title": "prepare_trajectory",
        "description": "State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "prepare_trajectory"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation",
          "axis_mask",
          "points"
        ],
        "additionalProperties": false
      },
      "Response_prepare_trajectory": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "prepare_trajectory"
              }
            }
          }
        ]
      },
      "Request_start_trajectory": {
        "type": "object",
        "title": "start_trajectory",
        "description": "State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "start_trajectory"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation",
          "handle"
        ],
        "additionalProperties": false
      },
      "Response_start_trajectory": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "start_trajectory"
              }
            }
          }
        ]
      },
      "Request_discard_trajectory": {
        "type": "object",
        "title": "discard_trajectory",
        "description": "State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "discard_trajectory"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation",
          "handle"
        ],
        "additionalProperties": false
      },
      "Response_discard_trajectory": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "discard_trajectory"
              }
            }
          }
        ]
      },
      "Request_start_program": {
        "type": "object",
        "title": "start_program",
        "description": "State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "start_program"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation",
          "identity"
        ],
        "additionalProperties": false
      },
      "Response_start_program": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "start_program"
              }
            }
          }
        ]
      },
      "Request_halt": {
        "type": "object",
        "title": "halt",
        "description": "Controlled deceleration to enabled hold using the active trajectory acceleration, or jog acceleration when no trajectory bound is declared. Retires active motion; preserves authority and Arm. Stop and faults always inhibit immediately. State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "halt"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation"
        ],
        "additionalProperties": false
      },
      "Response_halt": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "halt"
              }
            }
          }
        ]
      },
      "Request_restore_anchor": {
        "type": "object",
        "title": "restore_anchor",
        "description": "State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "restore_anchor"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation",
          "axis_mask"
        ],
        "additionalProperties": false
      },
      "Response_restore_anchor": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "restore_anchor"
              },
              "data": {
                "$ref": "#/components/schemas/RecoveryStatus"
              }
            }
          }
        ]
      },
      "Request_io_arm": {
        "type": "object",
        "title": "io_arm",
        "description": "Native cell I/O permission; torch remains unqualified (P6-05). State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "io_arm"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation"
        ],
        "additionalProperties": false
      },
      "Response_io_arm": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "io_arm"
              }
            }
          }
        ]
      },
      "Request_io_disarm": {
        "type": "object",
        "title": "io_disarm",
        "description": "Native cell I/O permission; torch remains unqualified (P6-05). State: implemented.",
        "properties": {
          "request_id": {
            "type": "string",
            "description": "Optional, non-null string of 1..64 printable ASCII bytes (0x20..0x7e).",
            "x-rosieos-go-type": "*string"
          },
          "schema": {
            "type": "string",
            "description": "Exactly rosie.rt-control.request.v1.",
            "x-rosieos-go-type": "string"
          },
          "operation": {
            "type": "string",
            "description": "Exact capability name; only POST /v1/control operations dispatch here. Unknown names are rejected.",
            "x-rosieos-go-type": "string",
            "const": "io_disarm"
          },
          "session": {
            "type": "string",
            "description": "Current unguessable session token; acquire omits the fence. Tokens issued by the adapter are 64 lowercase hexadecimal characters.",
            "x-rosieos-go-type": "string"
          },
          "generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero uint64 grant generation. Motion requires exact equality; renew and stop accept an older nonzero generation not above the current one for the same session.",
            "x-rosieos-go-type": "uint64"
          },
          "label": {
            "type": "string",
            "description": "mark_telemetry requires 1..128 UTF-8 bytes; free-text dump label.",
            "x-rosieos-go-type": "string"
          },
          "controller": {
            "type": "string",
            "description": "Acquire requires 1..63 bytes; opaque controller name.",
            "x-rosieos-go-type": "string"
          },
          "binding": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Binding"
              }
            ],
            "description": "Acquire requires exact equality with the configured Binding.",
            "x-rosieos-go-type": "Binding"
          },
          "axis_mask": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Uint32 configured axis group mask; interpretation is native operation-specific; reset_fault defaults zero to all axes.",
            "x-rosieos-go-type": "uint32"
          },
          "velocity": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double"
            },
            "description": "Finite logical velocities in described axis order for legacy jog; native vector and velocity-limit validation applies.",
            "x-rosieos-go-type": "[]float64"
          },
          "timeout_ms": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0,
            "maximum": 4294967295,
            "description": "Legacy jog requires an integer 1..250 milliseconds.",
            "x-rosieos-go-type": "uint32"
          },
          "handle": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Nonzero opaque uint64 handle for start/discard, owned by the current daemon incarnation and grant.",
            "x-rosieos-go-type": "uint64"
          },
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Point"
            },
            "description": "2..250000 Point records; declared axis order, native limits and continuity apply. Large bodies require the envelope before this array.",
            "x-rosieos-go-type": "[]Point"
          },
          "identity": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Identity"
              }
            ],
            "description": "Exact prepared program Identity for start_program.",
            "x-rosieos-go-type": "Identity"
          },
          "jog_generation": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "EndJog requires the exact current nonzero independent jog generation.",
            "x-rosieos-go-type": "uint64"
          },
          "source_sequence": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "Accepted envelope field retained for compatibility; current /v1/control dispatch does not consume it. Independent updates use the binary lane.",
            "x-rosieos-go-type": "uint64"
          },
          "source_origin_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog origin in the negotiated host monotonic clock, uint64 nanoseconds; native freshness validation applies.",
            "x-rosieos-go-type": "uint64"
          },
          "deadline_host_ns": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0,
            "description": "BeginJog producer deadline in host monotonic nanoseconds; after origin and never extended by admission or renewal.",
            "x-rosieos-go-type": "uint64"
          },
          "clock_incarnation": {
            "type": "string",
            "description": "BeginJog requires exact equality with GET /v1/jog/clock incarnation.",
            "x-rosieos-go-type": "string"
          },
          "requested_lease_ms": {
            "type": "integer",
            "format": "int64",
            "description": "Acquire requested lease in whole ms, 1..10000; omitted or zero retains the LAN default capped by the cell. Adapter returns min(request, cell ceiling) in Grant.lease_ms. Clients require at least three measured round trips plus renewal cadence.",
            "x-rosieos-go-type": "int"
          }
        },
        "required": [
          "schema",
          "operation",
          "session",
          "generation"
        ],
        "additionalProperties": false
      },
      "Response_io_disarm": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "io_disarm"
              }
            }
          }
        ]
      },
      "Response_describe": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "describe"
              },
              "data": {
                "$ref": "#/components/schemas/Description"
              }
            }
          }
        ]
      },
      "Response_status": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "status"
              },
              "data": {
                "$ref": "#/components/schemas/ProcessStatus"
              }
            }
          }
        ]
      },
      "Response_jog_clock": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "jog_clock"
              },
              "data": {
                "$ref": "#/components/schemas/LocalJogClock"
              }
            }
          }
        ]
      },
      "Response_jog_status": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "jog_status"
              },
              "data": {
                "$ref": "#/components/schemas/JogObservation"
              }
            }
          }
        ]
      },
      "Response_jog_ingress": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "jog_ingress"
              },
              "data": {
                "$ref": "#/components/schemas/JogIngressObservation"
              }
            }
          }
        ]
      },
      "Response_prepare_program": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "prepare_program"
              },
              "data": {
                "$ref": "#/components/schemas/Program"
              }
            }
          }
        ]
      },
      "Response_subscribe_events": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Response"
          },
          {
            "type": "object",
            "properties": {
              "operation": {
                "const": "subscribe_events"
              },
              "data": {
                "$ref": "#/components/schemas/EventBatch"
              }
            }
          }
        ]
      }
    },
    "securitySchemes": {
      "mutualTLS": {
        "type": "mutualTLS",
        "description": "Required on the remote listener only."
      }
    }
  },
  "x-rosieos-contract": {
    "contract_version": 2,
    "request_schema": "rosie.rt-control.request.v1",
    "response_schema": "rosie.rt-control.response.v1",
    "capability_states": [
      "implemented",
      "interim",
      "test_only",
      "unimplemented"
    ],
    "source": {
      "repo": "https://github.com/advanced-metal-research/RosieOS",
      "path": "rt-core/protocol/application-v1.schema.json",
      "commit": "75fee43296f2d888b55cab9e1110261dfc33386e",
      "sha256": "d63b2aee7bbcb7e4f11eca7148ce9ffda0e5d8db421f165d20918ccb4f119158",
      "copied": "2026-09-30",
      "note": "Byte-for-byte copy. Refresh by copying the file from the RosieOS repo and updating commit and sha256."
    }
  },
  "x-rosieos-non-http-operations": [
    {
      "operation": "update_jog",
      "state": "implemented",
      "transport": "jog.sock datagram or WSS /v1/jog; protocol/control.json local_jog_update",
      "websocket": {
        "endpoint": "GET /v1/jog on the mutual-TLS listener is exclusively WebSocket upgrade; local GET /v1/jog is the JSON jog_status endpoint.",
        "frames": "Two calibrate JSON exchanges establish clock bounds before binary local_jog_update frames from protocol/control.json are admitted; successful updates do not get per-update replies. Calibration replies have type, seq, source_ns, host_rx_ns, host_tx_ns; rejection replies have type, seq, reason. With jog_generation=0, send begin with seq=3, axis_mask, a fresh source_ns and the second host_tx_ns after both calibration replies. The server uses the post-calibration Begin sample's earliest host bound as the capture cutoff, independently starts the native first-input allowance at receipt, and replies begun with seq and jog_generation. The native cell age bounds cutoff freshness and the separate wait, and every input retains its original age/deadline checks. Input captured before the Begin source_ns is rejected before clock conversion. Binary input before begin and repeated begin close the stream. Existing nonzero-generation upgrades remain supported.",
        "headers": "HTTP/1.1 Connection: Upgrade, Upgrade: websocket, Sec-WebSocket-Version: 13 and a base64 Sec-WebSocket-Key decoding to 16 bytes.",
        "request_fields": [
          {
            "constraints": "Exact current session, owned by the authenticated remote principal.",
            "json_type": "string",
            "location": "query",
            "name": "session",
            "required": true
          },
          {
            "constraints": "Uint64 exact application grant generation, encoded as decimal query text.",
            "json_type": "integer",
            "location": "query",
            "name": "generation",
            "required": true
          },
          {
            "constraints": "Uint64 exact current jog generation, or zero to prepare transport without native motion, encoded as decimal query text.",
            "json_type": "integer",
            "location": "query",
            "name": "jog_generation",
            "required": true
          }
        ],
        "response": "HTTP 101 upgrades to the dedicated jog lane. Failures before upgrade may be text/plain HTTP 400, 403 or 409; unauthenticated remote requests are denied before the application handler. No Response envelope wraps WebSocket frames."
      }
    },
    {
      "operation": "abort",
      "state": "unimplemented",
      "transport": "none"
    },
    {
      "operation": "readiness",
      "state": "unimplemented",
      "transport": "none"
    }
  ]
}
