{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://qazpolit.com/contracts/qazpolit-ingestion-queue-v1.schema.json",
  "title": "QazPolit durable ingestion queue summary",
  "type": "object",
  "additionalProperties": false,
  "required": ["schema", "generated_at", "read_only", "counts", "dead_letter_count", "review_pending_count", "idempotency", "retry", "replay"],
  "properties": {
    "schema": {"const": "qazpolit.ingestion-queue.v1"},
    "generated_at": {"type": "string", "format": "date-time"},
    "read_only": {"const": true},
    "status": {"type": "string", "enum": ["migration_required"]},
    "counts": {
      "type": "object",
      "additionalProperties": {"type": "integer", "minimum": 0}
    },
    "dead_letter_count": {"type": "integer", "minimum": 0},
    "review_pending_count": {"type": "integer", "minimum": 0},
    "oldest_available_age_seconds": {"type": ["integer", "null"], "minimum": 0},
    "oldest_review_age_seconds": {"type": ["integer", "null"], "minimum": 0},
    "max_attempt_count": {"type": "integer", "minimum": 0, "maximum": 50},
    "watermark_supported": {"type": "boolean"},
    "idempotency": {"const": "job_key"},
    "retry": {
      "type": "object",
      "required": ["strategy", "max_attempts", "dead_letter"],
      "properties": {
        "strategy": {"const": "exponential_backoff"},
        "max_attempts": {"type": "integer", "minimum": 1, "maximum": 50},
        "dead_letter": {"const": true}
      },
      "additionalProperties": false
    },
    "replay": {
      "type": "object",
      "required": ["supported", "preserves_attempt_history"],
      "properties": {
        "supported": {"const": true},
        "preserves_attempt_history": {"const": true}
      },
      "additionalProperties": false
    }
  }
}
