{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://qazpolit.com/contracts/qazstack-review-queue-v1.schema.json",
  "title": "Qazpolit to QazStack relationship review queue",
  "description": "Read-only human review queue for relationship candidates. The payload never authorizes automatic mutation or publication.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schema_version",
    "producer",
    "source_schema",
    "read_only",
    "automatic_mutation",
    "items",
    "summary"
  ],
  "properties": {
    "schema_version": {"const": "qazstack.human-review-queue.v1"},
    "producer": {"const": "qazpolit"},
    "source_schema": {"const": "qazpolit.graph-review-backlog.v1"},
    "read_only": {"const": true},
    "automatic_mutation": {"const": false},
    "items": {
      "type": "array",
      "items": {"$ref": "#/$defs/review_queue_item"}
    },
    "summary": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "total_candidates",
        "sampled_candidates",
        "with_source_or_lead",
        "source_coverage",
        "resolved_coverage"
      ],
      "properties": {
        "total_candidates": {"type": "integer", "minimum": 0},
        "sampled_candidates": {"type": "integer", "minimum": 0},
        "with_source_or_lead": {"type": "integer", "minimum": 0},
        "source_coverage": {"type": "number", "minimum": 0, "maximum": 1},
        "resolved_coverage": {"type": "number", "minimum": 0, "maximum": 1}
      }
    }
  },
  "$defs": {
    "entity_ref": {
      "type": "object",
      "additionalProperties": false,
      "required": ["slug", "title", "category_slug"],
      "properties": {
        "slug": {"type": "string"},
        "title": {"type": "string"},
        "category_slug": {"type": ["string", "null"]}
      }
    },
    "evidence_lead": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "schema_version",
        "id",
        "kind",
        "title",
        "url",
        "source_title",
        "privacy",
        "promotes_relationship"
      ],
      "properties": {
        "schema_version": {"const": "qazstack.evidence-lead.v1"},
        "id": {"type": "string", "pattern": "^qazpolit:relationship:[0-9]+:lead:[a-z0-9_-]+:.+$"},
        "kind": {"enum": ["section", "event", "reference", "source"]},
        "title": {"type": ["string", "null"]},
        "url": {"type": "string", "format": "uri"},
        "source_title": {"type": ["string", "null"]},
        "privacy": {"const": "public-url-only"},
        "promotes_relationship": {"const": false}
      }
    },
    "review_queue_item": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "schema_version",
        "id",
        "producer",
        "kind",
        "status",
        "priority",
        "reason_codes",
        "subject",
        "evidence_leads",
        "decision_policy"
      ],
      "properties": {
        "schema_version": {"const": "qazstack.review-queue-item.v1"},
        "id": {"type": "string", "pattern": "^qazpolit:relationship:[0-9]+$"},
        "producer": {"const": "qazpolit"},
        "kind": {"const": "relationship-review"},
        "status": {"enum": ["pending"]},
        "priority": {"enum": ["high", "medium", "low"]},
        "reason_codes": {
          "type": "array",
          "minItems": 1,
          "items": {"enum": ["structural", "has_source", "has_context", "needs_source"]}
        },
        "subject": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "type",
            "local_id",
            "relationship_type",
            "review_status",
            "confidence",
            "source_entity",
            "target_entity"
          ],
          "properties": {
            "type": {"const": "relationship"},
            "local_id": {"type": "integer", "minimum": 1},
            "relationship_type": {"type": "string", "minLength": 1},
            "review_status": {"type": ["string", "null"]},
            "confidence": {"type": ["number", "integer", "null"]},
            "source_entity": {"$ref": "#/$defs/entity_ref"},
            "target_entity": {"$ref": "#/$defs/entity_ref"}
          }
        },
        "evidence_leads": {
          "type": "array",
          "items": {"$ref": "#/$defs/evidence_lead"}
        },
        "decision_policy": {
          "type": "object",
          "additionalProperties": false,
          "required": [
            "automatic_mutation",
            "allowed_decisions",
            "publication_requires_reviewed_evidence"
          ],
          "properties": {
            "automatic_mutation": {"const": false},
            "allowed_decisions": {
              "type": "array",
              "items": {"enum": ["attach-evidence", "dismiss", "keep-pending"]},
              "uniqueItems": true,
              "minItems": 3
            },
            "publication_requires_reviewed_evidence": {"const": true}
          }
        }
      }
    }
  }
}
