{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://pairling.dev/specs/coding-agent-remote-control-capability-graph/2.0.0/schema.json",
  "title": "Pairling coding-agent remote-control capability graph",
  "description": "A protocol-neutral graph of provider implementations, transports, reviewed operation bindings, semantic effects, and evidence.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "$schema",
    "schema_version",
    "observed_at",
    "evidence_policy",
    "evidence_sources",
    "providers",
    "implementations",
    "transports",
    "capabilities",
    "operation_bindings",
    "evidence_claims",
    "exclusions"
  ],
  "properties": {
    "$schema": {
      "type": "string",
      "const": "./coding-agent-remote-control-capability-map.schema.json"
    },
    "schema_version": {
      "type": "string",
      "const": "2.0.0"
    },
    "observed_at": {
      "type": "string",
      "format": "date-time"
    },
    "evidence_policy": {
      "$ref": "#/$defs/evidence_policy"
    },
    "evidence_sources": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/evidence_source"
      }
    },
    "providers": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/provider"
      }
    },
    "implementations": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/implementation"
      }
    },
    "transports": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/transport"
      }
    },
    "capabilities": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/capability"
      }
    },
    "operation_bindings": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/operation_binding"
      }
    },
    "evidence_claims": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/evidence_claim"
      }
    },
    "exclusions": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/exclusion"
      }
    }
  },
  "$defs": {
    "provider_id": {
      "type": "string",
      "pattern": "^[a-z][a-z0-9_]{0,63}$"
    },
    "graph_id": {
      "type": "string",
      "pattern": "^[a-z][a-z0-9_.-]{1,255}$"
    },
    "source_id": {
      "type": "string",
      "pattern": "^[a-z][a-z0-9-]{1,127}$"
    },
    "operation_id": {
      "type": "string",
      "pattern": "^(session|provider)(\\.[a-z][a-z0-9_]*){1,3}$"
    },
    "digest": {
      "type": "string",
      "pattern": "^sha256:[0-9a-f]{64}$"
    },
    "nonempty_string": {
      "type": "string",
      "minLength": 1
    },
    "nonempty_unique_strings": {
      "type": "array",
      "minItems": 1,
      "uniqueItems": true,
      "items": {
        "$ref": "#/$defs/nonempty_string"
      }
    },
    "graph_id_array": {
      "type": "array",
      "minItems": 1,
      "uniqueItems": true,
      "items": {
        "$ref": "#/$defs/graph_id"
      }
    },
    "source_id_array": {
      "type": "array",
      "minItems": 1,
      "uniqueItems": true,
      "items": {
        "$ref": "#/$defs/source_id"
      }
    },
    "evidence_policy": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "rule",
        "direct_sources_required",
        "missing_evidence_is_unsupported",
        "machine_readable_values",
        "machine_readable_qualification",
        "support_values",
        "safety_rule"
      ],
      "properties": {
        "rule": {
          "$ref": "#/$defs/nonempty_string"
        },
        "direct_sources_required": {
          "const": true
        },
        "missing_evidence_is_unsupported": {
          "const": true
        },
        "machine_readable_values": {
          "type": "array",
          "minItems": 3,
          "maxItems": 3,
          "uniqueItems": true,
          "items": {
            "oneOf": [
              {
                "type": "boolean"
              },
              {
                "const": "qualified"
              }
            ]
          }
        },
        "machine_readable_qualification": {
          "$ref": "#/$defs/nonempty_string"
        },
        "support_values": {
          "type": "array",
          "const": [
            "supported",
            "partial",
            "missing",
            "not_applicable"
          ]
        },
        "safety_rule": {
          "$ref": "#/$defs/nonempty_string"
        }
      }
    },
    "evidence_source": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "source_id",
        "uri",
        "kind"
      ],
      "properties": {
        "source_id": {
          "$ref": "#/$defs/source_id"
        },
        "uri": {
          "$ref": "#/$defs/nonempty_string"
        },
        "kind": {
          "enum": [
            "checked_in_source",
            "official_protocol",
            "draft_protocol",
            "official_release",
            "official_docs",
            "tagged_source",
            "official_package",
            "official_notice"
          ]
        }
      }
    },
    "implementation_eligibility": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "status",
        "reason"
      ],
      "properties": {
        "status": {
          "enum": [
            "implementation_candidate",
            "research_candidate",
            "terminal_floor",
            "map_only"
          ]
        },
        "reason": {
          "$ref": "#/$defs/nonempty_string"
        }
      }
    },
    "provider": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "provider_id",
        "display_name",
        "implementation_eligibility",
        "source_refs"
      ],
      "properties": {
        "provider_id": {
          "$ref": "#/$defs/provider_id"
        },
        "display_name": {
          "$ref": "#/$defs/nonempty_string"
        },
        "implementation_eligibility": {
          "$ref": "#/$defs/implementation_eligibility"
        },
        "source_refs": {
          "$ref": "#/$defs/source_id_array"
        }
      }
    },
    "release_membership": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "runtime_provider_id",
        "provider_version",
        "provider_channel",
        "launch_config_digest",
        "physical_device_required"
      ],
      "properties": {
        "runtime_provider_id": {
          "$ref": "#/$defs/provider_id"
        },
        "provider_version": {
          "$ref": "#/$defs/nonempty_string"
        },
        "provider_channel": {
          "$ref": "#/$defs/nonempty_string"
        },
        "launch_config_digest": {
          "$ref": "#/$defs/digest"
        },
        "physical_device_required": {
          "type": "boolean"
        }
      }
    },
    "implementation": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "implementation_id",
        "provider_id",
        "identity_status",
        "provider_version",
        "provider_channel",
        "observed_versions",
        "observed_channels",
        "transport_ids",
        "release_membership"
      ],
      "properties": {
        "implementation_id": {
          "$ref": "#/$defs/graph_id"
        },
        "provider_id": {
          "$ref": "#/$defs/provider_id"
        },
        "identity_status": {
          "enum": [
            "release_pinned",
            "source_pinned",
            "observed"
          ]
        },
        "provider_version": {
          "$ref": "#/$defs/nonempty_string"
        },
        "provider_channel": {
          "$ref": "#/$defs/nonempty_string"
        },
        "observed_versions": {
          "$ref": "#/$defs/nonempty_unique_strings"
        },
        "observed_channels": {
          "$ref": "#/$defs/nonempty_unique_strings"
        },
        "transport_ids": {
          "$ref": "#/$defs/graph_id_array"
        },
        "release_membership": {
          "oneOf": [
            {
              "$ref": "#/$defs/release_membership"
            },
            {
              "type": "null"
            }
          ]
        }
      }
    },
    "transport": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "transport_id",
        "provider_id",
        "description",
        "kind"
      ],
      "properties": {
        "transport_id": {
          "$ref": "#/$defs/graph_id"
        },
        "provider_id": {
          "$ref": "#/$defs/provider_id"
        },
        "description": {
          "$ref": "#/$defs/nonempty_string"
        },
        "kind": {
          "enum": [
            "sdk_subprocess",
            "acp_stdio",
            "jsonrpc_stdio",
            "http_loopback",
            "websocket_loopback",
            "cli_process",
            "pty",
            "manager",
            "cloud_service",
            "editor_extension",
            "unknown"
          ]
        }
      }
    },
    "capability": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "capability_id",
        "provider_id",
        "implementation_ids",
        "plane",
        "behavior",
        "exact_exposure",
        "lifecycle",
        "machine_readable",
        "maturity",
        "version_constraints",
        "remote_safety",
        "required_pairling_addition",
        "shared_semantics",
        "provider_overlay",
        "source_refs"
      ],
      "properties": {
        "capability_id": {
          "$ref": "#/$defs/graph_id"
        },
        "provider_id": {
          "$ref": "#/$defs/provider_id"
        },
        "implementation_ids": {
          "$ref": "#/$defs/graph_id_array"
        },
        "plane": {
          "enum": [
            "receive",
            "read",
            "control",
            "steer"
          ]
        },
        "behavior": {
          "$ref": "#/$defs/nonempty_string"
        },
        "exact_exposure": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/nonempty_string"
          }
        },
        "lifecycle": {
          "enum": [
            "before_turn",
            "during_turn",
            "after_turn",
            "provider_wide"
          ]
        },
        "machine_readable": {
          "oneOf": [
            {
              "type": "boolean"
            },
            {
              "const": "qualified"
            }
          ]
        },
        "maturity": {
          "enum": [
            "public",
            "experimental",
            "draft",
            "version_specific",
            "unsafe",
            "unknown"
          ]
        },
        "version_constraints": {
          "$ref": "#/$defs/nonempty_string"
        },
        "remote_safety": {
          "enum": [
            "safe",
            "confirmation",
            "required_local_only",
            "do_not_expose"
          ]
        },
        "required_pairling_addition": {
          "type": "string"
        },
        "shared_semantics": {
          "oneOf": [
            {
              "$ref": "#/$defs/graph_id"
            },
            {
              "type": "null"
            }
          ]
        },
        "provider_overlay": {
          "type": "boolean"
        },
        "source_refs": {
          "$ref": "#/$defs/source_id_array"
        }
      }
    },
    "requirement": {
      "oneOf": [
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "kind",
            "max_age_seconds"
          ],
          "properties": {
            "kind": {
              "const": "fresh_snapshot"
            },
            "max_age_seconds": {
              "type": "integer",
              "minimum": 1,
              "maximum": 30
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "kind",
            "dimensions"
          ],
          "properties": {
            "kind": {
              "const": "exact_identity"
            },
            "dimensions": {
              "type": "array",
              "minItems": 1,
              "uniqueItems": true,
              "items": {
                "enum": [
                  "provider",
                  "implementation",
                  "session",
                  "binding",
                  "generation",
                  "request",
                  "arguments"
                ]
              }
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "kind"
          ],
          "properties": {
            "kind": {
              "const": "release_membership"
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "kind",
            "owner"
          ],
          "properties": {
            "kind": {
              "const": "owned_process"
            },
            "owner": {
              "enum": [
                "driver",
                "manager"
              ]
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "kind",
            "mode"
          ],
          "properties": {
            "kind": {
              "const": "confirmation"
            },
            "mode": {
              "enum": [
                "none",
                "user_confirmation",
                "point_of_risk"
              ]
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "kind",
            "proof_kind"
          ],
          "properties": {
            "kind": {
              "const": "resource_proof"
            },
            "proof_kind": {
              "enum": [
                "none",
                "provider_binding",
                "session_truth",
                "screen_v2",
                "approval_nonce",
                "input_lease"
              ]
            }
          }
        },
        {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "kind",
            "scope"
          ],
          "properties": {
            "kind": {
              "const": "device_scope"
            },
            "scope": {
              "type": "string",
              "pattern": "^[a-z]+:[a-z]+$"
            }
          }
        }
      ]
    },
    "effect": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "kind"
      ],
      "properties": {
        "kind": {
          "enum": [
            "return_data",
            "start_inference",
            "steer_turn",
            "interrupt_turn",
            "terminate_session",
            "create_session",
            "mutate_context",
            "update_setting",
            "decide_request",
            "start_workflow",
            "reload_integration",
            "reconnect_integration",
            "enable_integration"
          ]
        },
        "target": {
          "type": "string",
          "minLength": 1,
          "maxLength": 128
        }
      }
    },
    "invalidation": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "kind"
      ],
      "properties": {
        "kind": {
          "enum": [
            "active_turn",
            "mutation_authority",
            "driver_availability",
            "snapshot",
            "input_lease",
            "approval_nonce",
            "context_generation"
          ]
        }
      }
    },
    "forbidden_action": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "kind"
      ],
      "properties": {
        "kind": {
          "enum": [
            "identity_fallback",
            "raw_transport_escape",
            "terminal_injection",
            "start_replacement_session",
            "replay_without_recovery",
            "scope_expansion",
            "credential_exposure"
          ]
        }
      }
    },
    "retry": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "replay",
        "recovery",
        "ambiguity",
        "correlation"
      ],
      "properties": {
        "replay": {
          "enum": [
            "safe",
            "same_action_only",
            "recover_only",
            "forbidden"
          ]
        },
        "recovery": {
          "enum": [
            "provider_status",
            "provider_event",
            "manager_receipt",
            "process_observation",
            "unavailable"
          ]
        },
        "ambiguity": {
          "enum": [
            "outcome_unknown",
            "rejected"
          ]
        },
        "correlation": {
          "enum": [
            "none",
            "client_action_id",
            "provider_operation_id",
            "client_and_provider"
          ]
        }
      }
    },
    "operation_binding": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "implementation_operation_id",
        "implementation_id",
        "operation_id",
        "capability_ids",
        "implementation_status",
        "release_status",
        "requires",
        "effects",
        "invalidates",
        "forbids",
        "retry",
        "runtime_proofs_required",
        "evidence_claim_ids",
        "source_refs",
        "required_pairling_addition",
        "semantic_digest"
      ],
      "properties": {
        "implementation_operation_id": {
          "$ref": "#/$defs/graph_id"
        },
        "implementation_id": {
          "$ref": "#/$defs/graph_id"
        },
        "operation_id": {
          "$ref": "#/$defs/operation_id"
        },
        "capability_ids": {
          "$ref": "#/$defs/graph_id_array"
        },
        "implementation_status": {
          "enum": [
            "implemented",
            "mapped",
            "excluded"
          ]
        },
        "release_status": {
          "enum": [
            "released",
            "not_released"
          ]
        },
        "requires": {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/$defs/requirement"
          }
        },
        "effects": {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/$defs/effect"
          }
        },
        "invalidates": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/invalidation"
          }
        },
        "forbids": {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/$defs/forbidden_action"
          }
        },
        "retry": {
          "$ref": "#/$defs/retry"
        },
        "runtime_proofs_required": {
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": {
            "enum": [
              "operation_discovered",
              "release_member",
              "exact_implementation",
              "fresh_generation",
              "exact_session",
              "owned_process_live",
              "safe_policy_active",
              "pending_request_correlated",
              "safe_choices_discovered",
              "provider_authenticated"
            ]
          }
        },
        "evidence_claim_ids": {
          "$ref": "#/$defs/graph_id_array"
        },
        "source_refs": {
          "$ref": "#/$defs/source_id_array"
        },
        "required_pairling_addition": {
          "type": "string"
        },
        "semantic_digest": {
          "$ref": "#/$defs/digest"
        }
      }
    },
    "evidence_claim": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "claim_id",
        "subject_type",
        "subject_id",
        "classification",
        "assertion",
        "source_refs"
      ],
      "properties": {
        "claim_id": {
          "$ref": "#/$defs/graph_id"
        },
        "subject_type": {
          "enum": [
            "implementation",
            "capability",
            "operation_binding"
          ]
        },
        "subject_id": {
          "$ref": "#/$defs/graph_id"
        },
        "classification": {
          "enum": [
            "vendor_surface",
            "pairling_support",
            "behavioral_evidence"
          ]
        },
        "assertion": {
          "$ref": "#/$defs/nonempty_string"
        },
        "source_refs": {
          "$ref": "#/$defs/source_id_array"
        }
      }
    },
    "exclusion": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "item",
        "reason"
      ],
      "properties": {
        "item": {
          "$ref": "#/$defs/nonempty_string"
        },
        "reason": {
          "$ref": "#/$defs/nonempty_string"
        },
        "source_refs": {
          "$ref": "#/$defs/source_id_array"
        }
      }
    }
  }
}
