{
  "schema": "amr.rosieos.error-codes.v1",
  "docs": "https://advancedmetalresearch.com/docs/reference/error-codes",
  "source": {
    "contract": {
      "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."
    },
    "page": "src/docs/reference/error-codes.md"
  },
  "description": "rt-control refusals return HTTP 409 (413 for body_too_large, 404 for resource_unknown) with the reason in `error`. Names and meanings are the contract's; groups and callers come from the error codes page. Some reasons are raised only at startup, during TLS handshakes or by clients; see returned_by_text.",
  "count": 153,
  "groups": [
    {
      "id": "reasons-envelope",
      "title": "Request envelope and transport",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-envelope"
    },
    {
      "id": "reasons-authority",
      "title": "Authority and session",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-authority"
    },
    {
      "id": "reasons-handles",
      "title": "Handles",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-handles"
    },
    {
      "id": "reasons-native",
      "title": "Native admission",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-native"
    },
    {
      "id": "reasons-program",
      "title": "Program admission and execution",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-program"
    },
    {
      "id": "reasons-dense",
      "title": "Dense program format (.rdt)",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "id": "reasons-recovery",
      "title": "Recovery and anchors",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-recovery"
    },
    {
      "id": "reasons-io",
      "title": "Cell I/O",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-io"
    },
    {
      "id": "reasons-jog",
      "title": "Jog lane and jog clock",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "id": "reasons-observation",
      "title": "Events, telemetry and resources",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-observation"
    },
    {
      "id": "reasons-websocket",
      "title": "WebSocket transport (remote jog)",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-websocket"
    },
    {
      "id": "reasons-tls",
      "title": "Remote TLS (startup and handshake)",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-tls"
    },
    {
      "id": "reasons-startup",
      "title": "Startup and socket ownership",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-startup"
    }
  ],
  "reasons": [
    {
      "name": "no_grant",
      "meaning": "Halt requires a current valid application grant.",
      "group": "reasons-authority",
      "http_status": 409,
      "returned_by": [
        "halt",
        "io_arm",
        "io_disarm",
        "prepare_trajectory",
        "start_program"
      ],
      "returned_by_text": "halt, io_arm, io_disarm, prepare_trajectory, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-authority"
    },
    {
      "name": "wrong_generation",
      "meaning": "Halt carries a different application or native generation.",
      "group": "reasons-authority",
      "http_status": 409,
      "returned_by": [
        "halt",
        "io_arm",
        "io_disarm",
        "prepare_trajectory",
        "start_program"
      ],
      "returned_by_text": "halt, io_arm, io_disarm, prepare_trajectory, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-authority"
    },
    {
      "name": "inhibited",
      "meaning": "Halt requires an armed, enabled machine with current readiness; Stop or a fault takes precedence.",
      "group": "reasons-authority",
      "http_status": 409,
      "returned_by": [
        "halt",
        "io_arm",
        "io_disarm",
        "prepare_trajectory",
        "start_program"
      ],
      "returned_by_text": "halt, io_arm, io_disarm, prepare_trajectory, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-authority"
    },
    {
      "name": "invalid_telemetry_cursor",
      "meaning": "Telemetry after must be one unsigned decimal uint64 cursor.",
      "group": "reasons-observation",
      "http_status": 409,
      "returned_by": [
        "telemetry"
      ],
      "returned_by_text": "telemetry",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-observation"
    },
    {
      "name": "telemetry_cursor_ahead",
      "meaning": "Telemetry cursor exceeds the current ring sequence; reconcile incarnation before restarting.",
      "group": "reasons-observation",
      "http_status": 409,
      "returned_by": [
        "telemetry"
      ],
      "returned_by_text": "telemetry",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-observation"
    },
    {
      "name": "telemetry_busy",
      "meaning": "Ring header remained torn after the bounded 16 samples; retry the same cursor. Established streams continue with an empty batch and unchanged cursor.",
      "group": "reasons-observation",
      "http_status": 409,
      "returned_by": [
        "telemetry"
      ],
      "returned_by_text": "telemetry",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-observation"
    },
    {
      "name": "telemetry_unavailable",
      "meaning": "A compatible live telemetry ring could not be observed.",
      "group": "reasons-observation",
      "http_status": 409,
      "returned_by": [
        "telemetry"
      ],
      "returned_by_text": "telemetry",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-observation"
    },
    {
      "name": "telemetry_label_invalid",
      "meaning": "Telemetry label must contain 1..128 valid UTF-8 bytes.",
      "group": "reasons-observation",
      "http_status": 409,
      "returned_by": [
        "mark_telemetry"
      ],
      "returned_by_text": "mark_telemetry",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-observation"
    },
    {
      "name": "axis_count_mismatch",
      "meaning": "Dense axis count differs from the nine-axis format.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "blob_length_mismatch",
      "meaning": "Dense payload length differs from the declared block extents.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "block_layout_invalid",
      "meaning": "Dense block offsets, record lengths or segment metadata counts are inconsistent.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "block_sha256_mismatch",
      "meaning": "Dense segment bytes do not match their declared SHA-256 digest.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "dense_schema_mismatch",
      "meaning": "Dense header schema does not name the supported dense trajectory format.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "duration_mismatch",
      "meaning": "Dense segment duration differs from its final sample clock.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "header_json_invalid",
      "meaning": "Dense header cannot be decoded or encoded as JSON.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "header_truncated",
      "meaning": "Dense header length or header bytes are incomplete.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "kind_invalid",
      "meaning": "Dense segment kind is not freespace, weld or dwell.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "limits_invalid",
      "meaning": "Dense velocity limits must contain nine positive finite values.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "nonfinite_sample",
      "meaning": "Dense time, position or velocity sample is not finite.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "q_step_exceeded",
      "meaning": "Dense position step exceeds the format velocity allowance.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "qd_limit_exceeded",
      "meaning": "Dense supplied velocity exceeds its declared format limit.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "reserved_flags_set",
      "meaning": "Dense sample sets a reserved process flag bit.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "sample_count_overflow",
      "meaning": "Dense source sample count exceeds the format capacity.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "sample_encoding_mismatch",
      "meaning": "Dense record encoding or record byte count is unsupported.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "segment_index_out_of_order",
      "meaning": "Dense segment indices do not follow payload order.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "segment_too_short",
      "meaning": "Dense segment contains fewer than two samples.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "segments_empty",
      "meaning": "Dense program contains no motion segments.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "time_grid_invalid",
      "meaning": "Dense sample clock is not on its declared positive time grid.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "torch_outside_weld",
      "meaning": "Dense torch flag is set outside a weld segment.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "total_sample_count_mismatch",
      "meaning": "Dense total sample count differs from its segment counts.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "trajectory_digest_mismatch",
      "meaning": "Dense content digest differs from the declared trajectory digest.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "event_cursor_lost",
      "meaning": "Event history was lost; reconcile status before resuming from a new cursor.",
      "group": "reasons-observation",
      "http_status": 409,
      "returned_by": [
        "subscribe_events"
      ],
      "returned_by_text": "subscribe_events. Client side: the C++ EventCursorLost exception.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-observation"
    },
    {
      "name": "application_generation_exhausted",
      "meaning": "Rejected: application generation exhausted.",
      "group": "reasons-authority",
      "http_status": 409,
      "returned_by": [
        "acquire"
      ],
      "returned_by_text": "acquire",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-authority"
    },
    {
      "name": "authority_binding_mismatch",
      "meaning": "Rejected: authority binding mismatch.",
      "group": "reasons-authority",
      "http_status": 409,
      "returned_by": [
        "acquire"
      ],
      "returned_by_text": "acquire",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-authority"
    },
    {
      "name": "body_too_large",
      "meaning": "Rejected: body too large.",
      "group": "reasons-envelope",
      "http_status": 413,
      "returned_by": [],
      "returned_by_text": "Every POST /v1/control operation and prepare_program (HTTP 413)",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-envelope"
    },
    {
      "name": "bound path is not a socket",
      "meaning": "Rejected: bound path is not a socket.",
      "group": "reasons-startup",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "rt-control startup; exits.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-startup"
    },
    {
      "name": "boundary_q_discontinuity",
      "meaning": "Rejected dense segment position gap or accumulated normalisation correction above the boundary tolerance.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "boundary_qd_nonzero",
      "meaning": "Rejected dense segment endpoint velocity above the stationary boundary tolerance.",
      "group": "reasons-dense",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-dense"
    },
    {
      "name": "busy",
      "meaning": "Rejected: busy.",
      "group": "reasons-program",
      "http_status": 409,
      "returned_by": [
        "prepare_trajectory",
        "prepare_program"
      ],
      "returned_by_text": "prepare_trajectory, prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-program"
    },
    {
      "name": "capability_unimplemented",
      "meaning": "The named target capability is unavailable and performs no operation.",
      "group": "reasons-envelope",
      "http_status": 409,
      "returned_by": [
        "halt",
        "io_arm",
        "io_disarm",
        "mark_telemetry",
        "abort",
        "readiness"
      ],
      "returned_by_text": "halt, io_arm, io_disarm, mark_telemetry, abort, readiness. Also abort, readiness.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-envelope"
    },
    {
      "name": "control payload too large",
      "meaning": "The WebSocket transport refused control payload too large.",
      "group": "reasons-websocket",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "WSS: control frame over 125 bytes; closed with code 1002.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-websocket"
    },
    {
      "name": "control_already_owned",
      "meaning": "Rejected: control already owned.",
      "group": "reasons-authority",
      "http_status": 409,
      "returned_by": [
        "acquire"
      ],
      "returned_by_text": "acquire",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-authority"
    },
    {
      "name": "control_session_stale",
      "meaning": "Rejected: control session stale.",
      "group": "reasons-authority",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "Every POST /v1/control operation that carries a fence",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-authority"
    },
    {
      "name": "session_principal_mismatch",
      "meaning": "The session belongs to a different TLS principal/pair or local transport authority.",
      "group": "reasons-authority",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "Every POST /v1/control operation that carries a fence",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-authority"
    },
    {
      "name": "daemon_restarted",
      "meaning": "Rejected: daemon restarted.",
      "group": "reasons-authority",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "Every POST /v1/control operation that carries a fence",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-authority"
    },
    {
      "name": "dense_axis_map_requires_nine_ids",
      "meaning": "Rejected: dense axis map requires nine ids.",
      "group": "reasons-program",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-program"
    },
    {
      "name": "duplicate_request_field",
      "meaning": "Rejected: duplicate request field.",
      "group": "reasons-envelope",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "Every POST /v1/control operation",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-envelope"
    },
    {
      "name": "expired",
      "meaning": "Rejected: expired.",
      "group": "reasons-authority",
      "http_status": 409,
      "returned_by": [
        "renew",
        "release",
        "stop"
      ],
      "returned_by_text": "renew, release, stop",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-authority"
    },
    {
      "name": "fault_persists",
      "meaning": "At least one fault condition still prevents clearing.",
      "group": "reasons-recovery",
      "http_status": 409,
      "returned_by": [
        "reset_fault"
      ],
      "returned_by_text": "reset_fault",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-recovery"
    },
    {
      "name": "pdo_mapping_mismatch",
      "meaning": "Assigned PDO mapping differs from the registered layout; corrected bring-up is required.",
      "group": "reasons-native",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "Native command reason 7 in native_result, and fault bit 11 (restart_required) in RecoveryStatus.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-native"
    },
    {
      "name": "fence",
      "meaning": "Rejected: fence.",
      "group": "reasons-authority",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "Every POST /v1/control operation that carries a fence",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-authority"
    },
    {
      "name": "fragmentation rejected",
      "meaning": "The WebSocket transport refused fragmentation rejected.",
      "group": "reasons-websocket",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "WSS: connection closed with code 1009.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-websocket"
    },
    {
      "name": "handle_active",
      "meaning": "Rejected: handle active.",
      "group": "reasons-handles",
      "http_status": 409,
      "returned_by": [
        "discard_trajectory"
      ],
      "returned_by_text": "discard_trajectory",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-handles"
    },
    {
      "name": "handle_consumed",
      "meaning": "This handle completed or was replaced by a later execution.",
      "group": "reasons-handles",
      "http_status": 409,
      "returned_by": [
        "start_trajectory",
        "start_program"
      ],
      "returned_by_text": "start_trajectory, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-handles"
    },
    {
      "name": "handle_discarded",
      "meaning": "This handle was explicitly discarded.",
      "group": "reasons-handles",
      "http_status": 409,
      "returned_by": [
        "start_trajectory",
        "start_program"
      ],
      "returned_by_text": "start_trajectory, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-handles"
    },
    {
      "name": "handle_retired",
      "meaning": "Cancellation or uncertain ownership permanently retired this handle.",
      "group": "reasons-handles",
      "http_status": 409,
      "returned_by": [
        "start_trajectory",
        "start_program"
      ],
      "returned_by_text": "start_trajectory, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-handles"
    },
    {
      "name": "handle_started",
      "meaning": "This handle has already started.",
      "group": "reasons-handles",
      "http_status": 409,
      "returned_by": [
        "start_trajectory",
        "start_program"
      ],
      "returned_by_text": "start_trajectory, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-handles"
    },
    {
      "name": "handle_superseded",
      "meaning": "A committed replacement superseded this handle.",
      "group": "reasons-handles",
      "http_status": 409,
      "returned_by": [
        "start_trajectory",
        "start_program"
      ],
      "returned_by_text": "start_trajectory, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-handles"
    },
    {
      "name": "hijacking unavailable",
      "meaning": "Rejected: hijacking unavailable.",
      "group": "reasons-websocket",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "WSS upgrade: internal; the upgrade is abandoned.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-websocket"
    },
    {
      "name": "independent_jog_unavailable",
      "meaning": "Rejected: independent jog unavailable.",
      "group": "reasons-jog",
      "http_status": 409,
      "returned_by": [
        "jog_clock",
        "jog_status",
        "begin_jog",
        "update_jog",
        "end_jog"
      ],
      "returned_by_text": "jog_clock, jog_status, begin_jog, update_jog, end_jog",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "name": "invalid UTF-8",
      "meaning": "The WebSocket transport refused invalid UTF-8.",
      "group": "reasons-websocket",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "WSS: text frame; closed with code 1007.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-websocket"
    },
    {
      "name": "invalid close code",
      "meaning": "The WebSocket transport refused invalid close code.",
      "group": "reasons-websocket",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "WSS: closed with code 1002.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-websocket"
    },
    {
      "name": "invalid close payload",
      "meaning": "The WebSocket transport refused invalid close payload.",
      "group": "reasons-websocket",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "WSS: closed with code 1002.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-websocket"
    },
    {
      "name": "invalid close reason",
      "meaning": "The WebSocket transport refused invalid close reason.",
      "group": "reasons-websocket",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "WSS: closed with code 1007.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-websocket"
    },
    {
      "name": "invalid frame flags",
      "meaning": "The WebSocket transport refused invalid frame flags.",
      "group": "reasons-websocket",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "WSS: reserved bits set or unmasked frame; closed with code 1002.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-websocket"
    },
    {
      "name": "invalid opcode",
      "meaning": "The WebSocket transport refused invalid opcode.",
      "group": "reasons-websocket",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "WSS: closed with code 1002.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-websocket"
    },
    {
      "name": "invalid remote CRL PEM",
      "meaning": "Rejected: invalid remote CRL PEM.",
      "group": "reasons-tls",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "rt-control startup; exits with status 2.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-tls"
    },
    {
      "name": "invalid remote pair SAN",
      "meaning": "Rejected: invalid remote pair SAN.",
      "group": "reasons-tls",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "TLS handshake: the client is refused before any HTTP request.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-tls"
    },
    {
      "name": "invalid remote principal SAN",
      "meaning": "Rejected: invalid remote principal SAN.",
      "group": "reasons-tls",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "TLS handshake: the client is refused before any HTTP request.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-tls"
    },
    {
      "name": "invalid websocket upgrade",
      "meaning": "Rejected: invalid websocket upgrade.",
      "group": "reasons-websocket",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "WSS upgrade: HTTP 400, text/plain.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-websocket"
    },
    {
      "name": "invalid_control_generation",
      "meaning": "Rejected: invalid control generation.",
      "group": "reasons-envelope",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-envelope"
    },
    {
      "name": "invalid_dense_axis_map",
      "meaning": "Rejected: invalid dense axis map.",
      "group": "reasons-program",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-program"
    },
    {
      "name": "invalid_pair_configuration_binding",
      "meaning": "Rejected: invalid pair configuration binding.",
      "group": "reasons-startup",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "rt-control startup; exits.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-startup"
    },
    {
      "name": "invalid_request_envelope",
      "meaning": "Rejected: invalid request envelope.",
      "group": "reasons-envelope",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "Every POST /v1/control operation",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-envelope"
    },
    {
      "name": "invalid_request_id",
      "meaning": "Rejected: invalid request id.",
      "group": "reasons-envelope",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "Every POST /v1/control operation",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-envelope"
    },
    {
      "name": "jog_clock_arithmetic_range",
      "meaning": "Rejected: jog clock arithmetic range.",
      "group": "reasons-jog",
      "http_status": 409,
      "returned_by": [
        "update_jog"
      ],
      "returned_by_text": "update_jog",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "name": "jog_clock_calibration_expired",
      "meaning": "Rejected: jog clock calibration expired.",
      "group": "reasons-jog",
      "http_status": 409,
      "returned_by": [
        "update_jog"
      ],
      "returned_by_text": "update_jog",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "name": "jog_clock_exchange_inconsistent",
      "meaning": "Rejected: jog clock exchange inconsistent.",
      "group": "reasons-jog",
      "http_status": 409,
      "returned_by": [
        "update_jog"
      ],
      "returned_by_text": "update_jog",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "name": "jog_clock_incarnation_mismatch",
      "meaning": "Rejected: jog clock incarnation mismatch.",
      "group": "reasons-jog",
      "http_status": 409,
      "returned_by": [
        "begin_jog",
        "update_jog"
      ],
      "returned_by_text": "begin_jog, update_jog",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "name": "jog_clock_invalid_budget_or_exchange",
      "meaning": "Rejected: jog clock invalid budget or exchange.",
      "group": "reasons-jog",
      "http_status": 409,
      "returned_by": [
        "update_jog"
      ],
      "returned_by_text": "update_jog",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "name": "jog_clock_mapping_generation_mismatch",
      "meaning": "Rejected: jog clock mapping generation mismatch.",
      "group": "reasons-jog",
      "http_status": 409,
      "returned_by": [
        "update_jog"
      ],
      "returned_by_text": "update_jog",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "name": "jog_clock_moved_backwards",
      "meaning": "Rejected: jog clock moved backwards.",
      "group": "reasons-jog",
      "http_status": 409,
      "returned_by": [
        "update_jog"
      ],
      "returned_by_text": "update_jog",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "name": "jog_clock_uncertainty_exceeded",
      "meaning": "Rejected: jog clock uncertainty exceeded.",
      "group": "reasons-jog",
      "http_status": 409,
      "returned_by": [
        "update_jog"
      ],
      "returned_by_text": "update_jog",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "name": "jog_clock_unqualified",
      "meaning": "Rejected: jog clock unqualified.",
      "group": "reasons-jog",
      "http_status": 409,
      "returned_by": [
        "update_jog"
      ],
      "returned_by_text": "update_jog",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "name": "jog_input_deadline_expired",
      "meaning": "Rejected: jog input deadline expired.",
      "group": "reasons-jog",
      "http_status": 409,
      "returned_by": [
        "update_jog"
      ],
      "returned_by_text": "update_jog",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "name": "jog_input_entirely_future",
      "meaning": "Rejected: jog input entirely future.",
      "group": "reasons-jog",
      "http_status": 409,
      "returned_by": [
        "update_jog"
      ],
      "returned_by_text": "update_jog",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "name": "jog_input_too_old",
      "meaning": "Rejected: jog input too old.",
      "group": "reasons-jog",
      "http_status": 409,
      "returned_by": [
        "update_jog"
      ],
      "returned_by_text": "update_jog",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "name": "jog_invalid_frame",
      "meaning": "Rejected: jog invalid frame.",
      "group": "reasons-jog",
      "http_status": 409,
      "returned_by": [
        "update_jog"
      ],
      "returned_by_text": "update_jog",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "name": "jog_publisher_busy",
      "meaning": "Rejected: jog publisher busy.",
      "group": "reasons-jog",
      "http_status": 409,
      "returned_by": [
        "update_jog"
      ],
      "returned_by_text": "update_jog",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "name": "jog_session_or_sequence_stale",
      "meaning": "Rejected: jog session or sequence stale.",
      "group": "reasons-jog",
      "http_status": 409,
      "returned_by": [
        "update_jog"
      ],
      "returned_by_text": "update_jog",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "name": "jog_session_stale",
      "meaning": "Rejected: jog session stale.",
      "group": "reasons-jog",
      "http_status": 409,
      "returned_by": [
        "update_jog",
        "end_jog"
      ],
      "returned_by_text": "update_jog, end_jog",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "name": "jog_stream_idle",
      "meaning": "Rejected: no complete jog stream frame within FastControlMaxJogInputAgeNs (250,000,000 ns).",
      "group": "reasons-jog",
      "http_status": 409,
      "returned_by": [
        "update_jog"
      ],
      "returned_by_text": "update_jog",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-jog"
    },
    {
      "name": "manifest_revision_mismatch",
      "meaning": "Rejected: manifest revision mismatch.",
      "group": "reasons-program",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-program"
    },
    {
      "name": "mode_conflict",
      "meaning": "Another active motion mode prevents this operation.",
      "group": "reasons-native",
      "http_status": 409,
      "returned_by": [
        "restore_anchor",
        "begin_jog",
        "jog",
        "start_trajectory",
        "start_program"
      ],
      "returned_by_text": "restore_anchor, begin_jog, jog, start_trajectory, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-native"
    },
    {
      "name": "native_execution_failed",
      "meaning": "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.",
      "group": "reasons-program",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "execution.error in GET /v1/status when a started program ends without completing.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-program"
    },
    {
      "name": "native_limit_exceeded",
      "meaning": "A dense sample exceeds a native position, velocity or declared sampled acceleration limit.",
      "group": "reasons-program",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-program"
    },
    {
      "name": "outside_limits_outward",
      "meaning": "A motion request increases an exterior limit excursion or crosses the opposite boundary; native command reason 8 and jog reason 15.",
      "group": "reasons-native",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "Every POST /v1/control operation",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-native"
    },
    {
      "name": "native_rejected",
      "meaning": "Native command admission refused; inspect native_result.",
      "group": "reasons-native",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "Every POST /v1/control operation",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-native"
    },
    {
      "name": "native_segment_rate_exceeded",
      "meaning": "Rejected: native segment rate exceeded.",
      "group": "reasons-program",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-program"
    },
    {
      "name": "noncanonical length",
      "meaning": "The WebSocket transport refused noncanonical length.",
      "group": "reasons-websocket",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "WSS: closed with code 1002.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-websocket"
    },
    {
      "name": "not_ready",
      "meaning": "The controlled axes do not satisfy native movement readiness.",
      "group": "reasons-native",
      "http_status": 409,
      "returned_by": [
        "start_trajectory",
        "start_program"
      ],
      "returned_by_text": "start_trajectory, start_program. Also native command reason 2 inside native_result.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-native"
    },
    {
      "name": "payload too large",
      "meaning": "The WebSocket transport refused payload too large.",
      "group": "reasons-websocket",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "WSS: frame over 4096 bytes; closed with code 1009.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-websocket"
    },
    {
      "name": "process start time unavailable",
      "meaning": "Rejected: process start time unavailable.",
      "group": "reasons-startup",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "rt-control startup; exits.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-startup"
    },
    {
      "name": "process_io_executor_not_qualified",
      "meaning": "Rejected: process io executor not qualified.",
      "group": "reasons-program",
      "http_status": 409,
      "returned_by": [
        "prepare_program",
        "start_program"
      ],
      "returned_by_text": "prepare_program, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-program"
    },
    {
      "name": "program_already_executing",
      "meaning": "Rejected: program already executing.",
      "group": "reasons-program",
      "http_status": 409,
      "returned_by": [
        "reset_fault",
        "recovery_status",
        "prepare_program",
        "start_program"
      ],
      "returned_by_text": "reset_fault, recovery_status, prepare_program, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-program"
    },
    {
      "name": "program_identity_mismatch",
      "meaning": "Rejected: program identity mismatch.",
      "group": "reasons-program",
      "http_status": 409,
      "returned_by": [
        "start_program"
      ],
      "returned_by_text": "start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-program"
    },
    {
      "name": "program_identity_missing",
      "meaning": "Rejected: program identity missing.",
      "group": "reasons-program",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-program"
    },
    {
      "name": "recovery_observation_unavailable",
      "meaning": "Rejected: recovery observation unavailable.",
      "group": "reasons-recovery",
      "http_status": 409,
      "returned_by": [
        "restore_anchor",
        "reset_fault",
        "recovery_status"
      ],
      "returned_by_text": "restore_anchor, reset_fault, recovery_status",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-recovery"
    },
    {
      "name": "remote CA must be a self-signed component CA",
      "meaning": "Rejected: remote CA must be a self-signed component CA.",
      "group": "reasons-tls",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "rt-control startup; exits with status 2.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-tls"
    },
    {
      "name": "remote CA must contain one CA certificate",
      "meaning": "Rejected: remote CA must contain one CA certificate.",
      "group": "reasons-tls",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "rt-control startup; exits with status 2.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-tls"
    },
    {
      "name": "remote CA, certificate, key and CRL are required",
      "meaning": "Rejected: remote CA, certificate, key and CRL are required.",
      "group": "reasons-tls",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "rt-control startup; exits with status 2.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-tls"
    },
    {
      "name": "remote CRL not current",
      "meaning": "Rejected: remote CRL not current.",
      "group": "reasons-tls",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "Startup (exit 2), and every later TLS handshake.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-tls"
    },
    {
      "name": "remote client must be issued directly by component CA",
      "meaning": "Rejected: remote client must be issued directly by component CA.",
      "group": "reasons-tls",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "TLS handshake: the client is refused before any HTTP request.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-tls"
    },
    {
      "name": "remote client revoked",
      "meaning": "Rejected: remote client revoked.",
      "group": "reasons-tls",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "TLS handshake: the client is refused before any HTTP request.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-tls"
    },
    {
      "name": "remote identity SAN must be an opaque token",
      "meaning": "Rejected: remote identity SAN must be an opaque token.",
      "group": "reasons-tls",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "TLS handshake: the client is refused before any HTTP request.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-tls"
    },
    {
      "name": "remote pair-id required",
      "meaning": "Rejected: remote pair-id required.",
      "group": "reasons-tls",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "rt-control startup; exits with status 2.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-tls"
    },
    {
      "name": "remote principal/pair binding mismatch",
      "meaning": "Rejected: remote principal/pair binding mismatch.",
      "group": "reasons-tls",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "TLS handshake: the client is refused before any HTTP request.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-tls"
    },
    {
      "name": "request_envelope_changed",
      "meaning": "Rejected: request envelope changed.",
      "group": "reasons-envelope",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "Every POST /v1/control operation",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-envelope"
    },
    {
      "name": "request_id_conflict",
      "meaning": "Rejected: request id conflict.",
      "group": "reasons-envelope",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "Every POST /v1/control operation",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-envelope"
    },
    {
      "name": "reset_requires_inhibited",
      "meaning": "Rejected: reset requires inhibited.",
      "group": "reasons-recovery",
      "http_status": 409,
      "returned_by": [
        "reset_fault",
        "recovery_status"
      ],
      "returned_by_text": "reset_fault, recovery_status",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-recovery"
    },
    {
      "name": "schema_mismatch",
      "meaning": "Rejected: schema mismatch.",
      "group": "reasons-envelope",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "Every POST /v1/control operation",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-envelope"
    },
    {
      "name": "segment_boundary_discontinuous",
      "meaning": "Rejected moving segment seam; boundary is the zero-based join index and gap_counts reports second minus first in source-axis counts.",
      "group": "reasons-program",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-program"
    },
    {
      "name": "socket lock ownership cannot be verified",
      "meaning": "Rejected: socket lock ownership cannot be verified.",
      "group": "reasons-startup",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "rt-control startup; exits.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-startup"
    },
    {
      "name": "socket lock path changed",
      "meaning": "Rejected: socket lock path changed.",
      "group": "reasons-startup",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "rt-control startup; exits.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-startup"
    },
    {
      "name": "socket owned by a live process",
      "meaning": "Rejected: socket owned by a live process.",
      "group": "reasons-startup",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "rt-control startup; exits with status 3.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-startup"
    },
    {
      "name": "socket ownership cannot be verified",
      "meaning": "Rejected: socket ownership cannot be verified.",
      "group": "reasons-startup",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "rt-control startup; exits.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-startup"
    },
    {
      "name": "trailing_request_data",
      "meaning": "Rejected: trailing request data.",
      "group": "reasons-envelope",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "Every POST /v1/control operation",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-envelope"
    },
    {
      "name": "unknown_endpoint",
      "meaning": "Rejected: unknown endpoint.",
      "group": "reasons-envelope",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "Any unknown method or path.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-envelope"
    },
    {
      "name": "unknown_handle",
      "meaning": "Rejected: unknown handle.",
      "group": "reasons-handles",
      "http_status": 409,
      "returned_by": [
        "start_trajectory",
        "discard_trajectory",
        "start_program"
      ],
      "returned_by_text": "start_trajectory, discard_trajectory, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-handles"
    },
    {
      "name": "unknown_operation",
      "meaning": "Rejected: unknown operation.",
      "group": "reasons-envelope",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "Every POST /v1/control operation",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-envelope"
    },
    {
      "name": "unmapped_dense_axis",
      "meaning": "The configured dense axis ID has no native axis mapping.",
      "group": "reasons-program",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-program"
    },
    {
      "name": "unsupported critical CRL extension",
      "meaning": "Rejected: unsupported critical CRL extension.",
      "group": "reasons-tls",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "rt-control startup; exits with status 2.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-tls"
    },
    {
      "name": "unsupported socket ownership transport",
      "meaning": "Rejected: unsupported socket ownership transport.",
      "group": "reasons-startup",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "rt-control startup; exits.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-startup"
    },
    {
      "name": "anchor_missing",
      "meaning": "No persisted anchor exists for the axis.",
      "group": "reasons-recovery",
      "http_status": 409,
      "returned_by": [
        "restore_anchor"
      ],
      "returned_by_text": "restore_anchor",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-recovery"
    },
    {
      "name": "anchor_identity_mismatch",
      "meaning": "The persisted anchor was recorded under a different configuration digest, drive identity or home epoch.",
      "group": "reasons-recovery",
      "http_status": 409,
      "returned_by": [
        "home",
        "restore_anchor"
      ],
      "returned_by_text": "home, restore_anchor",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-recovery"
    },
    {
      "name": "anchor_source_invalid",
      "meaning": "The drive reports no valid absolute source for the axis.",
      "group": "reasons-recovery",
      "http_status": 409,
      "returned_by": [
        "home",
        "restore_anchor"
      ],
      "returned_by_text": "home, restore_anchor",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-recovery"
    },
    {
      "name": "anchor_disagrees",
      "meaning": "The current absolute source disagrees with the persisted anchor beyond the profile tolerance.",
      "group": "reasons-recovery",
      "http_status": 409,
      "returned_by": [
        "restore_anchor"
      ],
      "returned_by_text": "restore_anchor",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-recovery"
    },
    {
      "name": "anchor_store_io",
      "meaning": "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.",
      "group": "reasons-recovery",
      "http_status": 409,
      "returned_by": [
        "home",
        "restore_anchor"
      ],
      "returned_by_text": "home, restore_anchor",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-recovery"
    },
    {
      "name": "invalid_axis_mask",
      "meaning": "The requested axis mask is empty or names an axis outside the configured group.",
      "group": "reasons-recovery",
      "http_status": 409,
      "returned_by": [
        "restore_anchor"
      ],
      "returned_by_text": "restore_anchor",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-recovery"
    },
    {
      "name": "event_cursor_ahead",
      "meaning": "Cursor exceeds this adapter incarnation's newest event; obtain current status/incarnation before resuming.",
      "group": "reasons-observation",
      "http_status": 409,
      "returned_by": [
        "subscribe_events"
      ],
      "returned_by_text": "subscribe_events",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-observation"
    },
    {
      "name": "invalid_event_cursor",
      "meaning": "Event cursor must be a single unsigned decimal uint64.",
      "group": "reasons-observation",
      "http_status": 409,
      "returned_by": [
        "subscribe_events"
      ],
      "returned_by_text": "subscribe_events",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-observation"
    },
    {
      "name": "trajectory_identity_mismatch",
      "meaning": "Raw trajectory Start identity differs from its immutable preparation.",
      "group": "reasons-handles",
      "http_status": 409,
      "returned_by": [
        "start_trajectory"
      ],
      "returned_by_text": "start_trajectory",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-handles"
    },
    {
      "name": "invalid_requested_lease",
      "meaning": "Acquire requested lease is negative or exceeds the unverified absolute 10000 ms bound.",
      "group": "reasons-authority",
      "http_status": 409,
      "returned_by": [
        "acquire"
      ],
      "returned_by_text": "acquire",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-authority"
    },
    {
      "name": "io_not_configured",
      "meaning": "P6-05: named cell I/O is not configured.",
      "group": "reasons-io",
      "http_status": 409,
      "returned_by": [
        "io_arm",
        "io_disarm",
        "prepare_trajectory",
        "prepare_program",
        "start_program"
      ],
      "returned_by_text": "io_arm, io_disarm, prepare_trajectory, prepare_program, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-io"
    },
    {
      "name": "io_not_armed",
      "meaning": "Explicit io_arm is required before an ON intent.",
      "group": "reasons-io",
      "http_status": 409,
      "returned_by": [
        "io_arm",
        "io_disarm",
        "prepare_trajectory",
        "start_program"
      ],
      "returned_by_text": "io_arm, io_disarm, prepare_trajectory, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-io"
    },
    {
      "name": "io_fast_input_unsatisfied",
      "meaning": "A cyclic fast contact is invalid or not satisfied.",
      "group": "reasons-io",
      "http_status": 409,
      "returned_by": [
        "io_arm",
        "io_disarm",
        "prepare_trajectory",
        "start_program"
      ],
      "returned_by_text": "io_arm, io_disarm, prepare_trajectory, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-io"
    },
    {
      "name": "io_readback_disagreement",
      "meaning": "Independent physical feedback disagrees with commanded output.",
      "group": "reasons-io",
      "http_status": 409,
      "returned_by": [
        "io_arm",
        "io_disarm",
        "prepare_trajectory",
        "start_program"
      ],
      "returned_by_text": "io_arm, io_disarm, prepare_trajectory, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-io"
    },
    {
      "name": "io_torch_unqualified",
      "meaning": "P6-05: torch-class markers remain refused pending hardware qualification.",
      "group": "reasons-io",
      "http_status": 409,
      "returned_by": [
        "io_arm",
        "io_disarm",
        "prepare_trajectory",
        "prepare_program",
        "start_program"
      ],
      "returned_by_text": "io_arm, io_disarm, prepare_trajectory, prepare_program, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-io"
    },
    {
      "name": "io_marker_late",
      "meaning": "A process marker missed its one-cycle delivery bound.",
      "group": "reasons-io",
      "http_status": 409,
      "returned_by": [
        "io_arm",
        "io_disarm",
        "prepare_trajectory",
        "start_program"
      ],
      "returned_by_text": "io_arm, io_disarm, prepare_trajectory, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-io"
    },
    {
      "name": "io_exchange_lost",
      "meaning": "Cell I/O has no current complete exchange.",
      "group": "reasons-io",
      "http_status": 409,
      "returned_by": [
        "io_arm",
        "io_disarm",
        "prepare_trajectory",
        "start_program"
      ],
      "returned_by_text": "io_arm, io_disarm, prepare_trajectory, start_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-io"
    },
    {
      "name": "io_marker_invalid",
      "meaning": "A marker names an unknown output or has an invalid sample association.",
      "group": "reasons-io",
      "http_status": 409,
      "returned_by": [
        "prepare_program"
      ],
      "returned_by_text": "prepare_program",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-io"
    },
    {
      "name": "resource_unknown",
      "meaning": "Digest is malformed or absent from the loaded compiled resource set; HTTP 404.",
      "group": "reasons-observation",
      "http_status": 404,
      "returned_by": [
        "resource"
      ],
      "returned_by_text": "resource",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-observation"
    },
    {
      "name": "resource_artifact_invalid",
      "meaning": "Startup refuses an incomplete, mismatched, malformed or over-bound compiled resource artefact.",
      "group": "reasons-startup",
      "http_status": 409,
      "returned_by": [],
      "returned_by_text": "rt-control startup; exits.",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#reasons-startup"
    }
  ],
  "tables": {
    "native-command-reasons": {
      "title": "Native command reasons",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#native-command-reasons",
      "rows": [
        {
          "code": "0",
          "name": "none"
        },
        {
          "code": "1",
          "name": "invalid_command"
        },
        {
          "code": "2",
          "name": "not_ready"
        },
        {
          "code": "3",
          "name": "mode_conflict"
        },
        {
          "code": "4",
          "name": "unknown_handle"
        },
        {
          "code": "5",
          "name": "capacity"
        },
        {
          "code": "6",
          "name": "invalid_trajectory"
        },
        {
          "code": "7",
          "name": "pdo_mapping_mismatch"
        },
        {
          "code": "8",
          "name": "outside_limits_outward"
        },
        {
          "code": "9",
          "name": "no_grant"
        },
        {
          "code": "10",
          "name": "wrong_generation"
        },
        {
          "code": "11",
          "name": "inhibited"
        },
        {
          "code": "12",
          "name": "io_not_configured"
        },
        {
          "code": "13",
          "name": "io_not_armed"
        },
        {
          "code": "14",
          "name": "io_fast_input_unsatisfied"
        },
        {
          "code": "15",
          "name": "io_readback_disagreement"
        },
        {
          "code": "16",
          "name": "io_torch_unqualified"
        },
        {
          "code": "17",
          "name": "io_marker_late"
        },
        {
          "code": "18",
          "name": "io_exchange_lost"
        }
      ]
    },
    "native-jog-reasons": {
      "title": "Native jog reasons",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#native-jog-reasons",
      "rows": [
        {
          "code": "0",
          "name": "none"
        },
        {
          "code": "1",
          "name": "closed"
        },
        {
          "code": "2",
          "name": "mode_conflict"
        },
        {
          "code": "3",
          "name": "not_ready"
        },
        {
          "code": "4",
          "name": "wrong_identity"
        },
        {
          "code": "5",
          "name": "invalid_generation"
        },
        {
          "code": "6",
          "name": "stale_sequence"
        },
        {
          "code": "7",
          "name": "invalid_vector"
        },
        {
          "code": "8",
          "name": "invalid_timing"
        },
        {
          "code": "9",
          "name": "expired"
        },
        {
          "code": "10",
          "name": "authority_lost"
        },
        {
          "code": "11",
          "name": "clock_reset"
        },
        {
          "code": "12",
          "name": "generation_exhausted"
        },
        {
          "code": "13",
          "name": "ramping"
        },
        {
          "code": "14",
          "name": "limited"
        },
        {
          "code": "15",
          "name": "outside_limits_outward"
        }
      ]
    },
    "native-grant-reasons": {
      "title": "Native grant reasons",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#native-grant-reasons",
      "rows": [
        {
          "code": "0",
          "name": "none"
        },
        {
          "code": "1",
          "name": "invalid"
        },
        {
          "code": "2",
          "name": "connection_mismatch"
        },
        {
          "code": "3",
          "name": "native_generation_mismatch"
        },
        {
          "code": "4",
          "name": "disconnected"
        },
        {
          "code": "5",
          "name": "busy"
        },
        {
          "code": "6",
          "name": "not_inhibited"
        },
        {
          "code": "7",
          "name": "stale_generation"
        },
        {
          "code": "8",
          "name": "identity_mismatch"
        },
        {
          "code": "9",
          "name": "expired"
        },
        {
          "code": "10",
          "name": "clock_regression"
        },
        {
          "code": "11",
          "name": "inactive"
        },
        {
          "code": "12",
          "name": "axis_mask_mismatch"
        }
      ]
    },
    "fault-bits": {
      "title": "Execution fault bits",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#fault-bits",
      "rows": [
        {
          "bit": "0",
          "name": "start_discontinuity",
          "invalidates home": "No",
          "needs drive reset": "No",
          "needs reverification": "No",
          "recovery class": "reset_clears"
        },
        {
          "bit": "1",
          "name": "position_rate",
          "invalidates home": "Yes",
          "needs drive reset": "No",
          "needs reverification": "No",
          "recovery class": "rehome_required"
        },
        {
          "bit": "2",
          "name": "cycle_deadline",
          "invalidates home": "No",
          "needs drive reset": "No",
          "needs reverification": "No",
          "recovery class": "reset_clears"
        },
        {
          "bit": "3",
          "name": "cycle_sleep",
          "invalidates home": "No",
          "needs drive reset": "No",
          "needs reverification": "No",
          "recovery class": "reset_clears"
        },
        {
          "bit": "4",
          "name": "target_lead",
          "invalidates home": "Yes",
          "needs drive reset": "No",
          "needs reverification": "No",
          "recovery class": "rehome_required"
        },
        {
          "bit": "5",
          "name": "following_error",
          "invalidates home": "No",
          "needs drive reset": "No",
          "needs reverification": "No",
          "recovery class": "reset_after_condition_clears"
        },
        {
          "bit": "6",
          "name": "coordinate_reference",
          "invalidates home": "Yes",
          "needs drive reset": "No",
          "needs reverification": "No",
          "recovery class": "rehome_required"
        },
        {
          "bit": "7",
          "name": "drive_readiness",
          "invalidates home": "No",
          "needs drive reset": "Yes",
          "needs reverification": "Yes",
          "recovery class": "reset_after_condition_clears"
        },
        {
          "bit": "8",
          "name": "bus_transport",
          "invalidates home": "No",
          "needs drive reset": "No",
          "needs reverification": "Yes",
          "recovery class": "reset_after_condition_clears"
        },
        {
          "bit": "9",
          "name": "completion_timeout",
          "invalidates home": "No",
          "needs drive reset": "No",
          "needs reverification": "No",
          "recovery class": "reset_clears"
        },
        {
          "bit": "10",
          "name": "brake_hold",
          "invalidates home": "No",
          "needs drive reset": "No",
          "needs reverification": "Yes",
          "recovery class": "restart_required"
        },
        {
          "bit": "11",
          "name": "pdo_mapping_mismatch",
          "invalidates home": "Yes",
          "needs drive reset": "No",
          "needs reverification": "Yes",
          "recovery class": "restart_required"
        },
        {
          "bit": "12",
          "name": "collision_watchdog",
          "invalidates home": "No",
          "needs drive reset": "No",
          "needs reverification": "No",
          "recovery class": "reset_after_condition_clears"
        },
        {
          "bit": "13",
          "name": "cell_io",
          "invalidates home": "No",
          "needs drive reset": "No",
          "needs reverification": "No",
          "recovery class": "restart_required"
        }
      ]
    },
    "axis-readiness": {
      "title": "Axis readiness",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#axis-readiness",
      "rows": [
        {
          "order": "1",
          "value": "faulted",
          "what to do": "A drive alarm or latched safety fault. Diagnose it and follow its recovery class."
        },
        {
          "order": "2",
          "value": "mode_mismatch",
          "what to do": "The drive is not in CSP mode (8). Wait for an expected commissioning transition, or restore the mode."
        },
        {
          "order": "3",
          "value": "home_required",
          "what to do": "Home, or a qualified restore_anchor, before Start."
        },
        {
          "order": "4",
          "value": "coordinate_invalid",
          "what to do": "Coordinates are not trustworthy. Restore feedback, configuration or Home evidence."
        },
        {
          "order": "5",
          "value": "not_enabled",
          "what to do": "Enable the axis under a live grant."
        },
        {
          "order": "6",
          "value": "not_operation_enabled",
          "what to do": "Wait for the CiA402 transition to Operation Enabled."
        },
        {
          "order": "7",
          "value": "brake_wait",
          "what to do": "Wait for the brake release delay."
        },
        {
          "order": "8",
          "value": "ready",
          "what to do": "This axis passes. Check the whole selected group and the grant before Start."
        }
      ]
    },
    "handle-states": {
      "title": "Handle states",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#handle-states",
      "rows": [
        {
          "state": "prepared",
          "meaning": "Native preparation acknowledged. Start may be attempted under current authority."
        },
        {
          "state": "started",
          "meaning": "Native Start accepted. Observe completion."
        },
        {
          "state": "consumed",
          "meaning": "Completed, or a later execution replaced it."
        },
        {
          "state": "discarded",
          "meaning": "Discarded."
        },
        {
          "state": "superseded",
          "meaning": "A newer preparation replaced it."
        },
        {
          "state": "retired",
          "meaning": "Stop, grant or connection loss, or an uncertain outcome. Never startable again."
        }
      ]
    },
    "other-components": {
      "title": "Other components",
      "docs_url": "https://advancedmetalresearch.com/docs/reference/error-codes#other-components",
      "rows": [
        {
          "component": "Dense trajectory daemon",
          "codes": "native_grant_active, native_acquisition_required, native_home_unavailable, native_torch_unsupported, pause_unsupported, cleanup_uncertain, home_required",
          "page": "Dense trajectory daemon"
        },
        {
          "component": "Cartesian motion server",
          "codes": "rt_core_position_input_unresolved, rt_core_run_not_admitted, rt_core_home_abandoned",
          "page": "Cartesian motion server"
        },
        {
          "component": "Offline programming server",
          "codes": "target_changed, cell_configuration_mismatch, backend_retired, motion_plan_seam_refused, motion_plan_unjoined, motion_plan_no_trajectory",
          "page": "Offline programming HTTP API"
        },
        {
          "component": "Weld planner admission",
          "codes": "motion_join_failed, seam_not_planned, motion_not_verified, motion_result_invalid, candidate_only_requires_m4",
          "page": "Weld planner HTTP API"
        }
      ]
    }
  }
}
