{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://qazpolit.com/contracts/qazpolit-operations-slo-v1.schema.json",
  "title": "QazPolit operations, SLO and recovery contract",
  "type": "object",
  "additionalProperties": false,
  "required": ["schema", "slo", "telemetry", "recovery", "supply_chain"],
  "properties": {
    "schema": {"const": "qazpolit.operations-slo.v1"},
    "slo": {
      "type": "object",
      "required": ["availability_target", "latency_target_ms", "error_budget_policy"],
      "properties": {
        "availability_target": {"type": "number", "minimum": 0.9, "maximum": 1},
        "latency_target_ms": {"type": "integer", "minimum": 1},
        "error_budget_policy": {"type": "string", "minLength": 10}
      },
      "additionalProperties": false
    },
    "telemetry": {
      "type": "object",
      "required": ["metrics_format", "trace_correlation", "low_cardinality_routes"],
      "properties": {
        "metrics_format": {"const": "prometheus"},
        "trace_correlation": {"const": "request_id"},
        "low_cardinality_routes": {"const": true}
      },
      "additionalProperties": false
    },
    "recovery": {
      "type": "object",
      "required": ["pitr_owner", "restore_drill_frequency", "rollback_is_reversible"],
      "properties": {
        "pitr_owner": {"type": "string", "minLength": 2},
        "restore_drill_frequency": {"type": "string", "minLength": 2},
        "rollback_is_reversible": {"const": true}
      },
      "additionalProperties": false
    },
    "supply_chain": {
      "type": "object",
      "required": ["sbom_format", "dependency_audit", "image_scan_gate"],
      "properties": {
        "sbom_format": {"const": "cyclonedx-json"},
        "dependency_audit": {"const": true},
        "image_scan_gate": {"const": true}
      },
      "additionalProperties": false
    }
  }
}
