{
  "schema_version": "qazpolit.agent-actions.v1",
  "service": "qazpolit",
  "status": "contract_fixture",
  "protocol": "protocol-neutral",
  "execution_enabled": false,
  "public_data_only": true,
  "authentication": "none",
  "request_receipt": {
    "header": "X-Request-ID",
    "caller_supplied": "optional",
    "safe_pattern": "^[A-Za-z0-9._:-]{1,128}$"
  },
  "actions": [
    {
      "id": "qazpolit.search",
      "title": "Search published profiles",
      "method": "GET",
      "path": "/api/v1/search",
      "mutation": false,
      "parameters": {
        "q": {"in": "query", "type": "string", "required": true, "min_length": 1, "max_length": 128},
        "lang": {"in": "query", "type": "string", "required": false, "enum": ["ru", "kz", "en"], "default": "ru"},
        "limit": {"in": "query", "type": "integer", "required": false, "minimum": 1, "maximum": 100, "default": 20}
      },
      "output": "Published search results only",
      "evidence_boundary": "A match is a retrieval result, not an identity or factual verdict."
    },
    {
      "id": "qazpolit.compare",
      "title": "Compare two published profiles",
      "method": "GET",
      "path": "/api/compare",
      "mutation": false,
      "parameters": {
        "left": {"in": "query", "type": "string", "required": true, "min_length": 1, "max_length": 255},
        "right": {"in": "query", "type": "string", "required": true, "min_length": 1, "max_length": 255},
        "lang": {"in": "query", "type": "string", "required": false, "enum": ["ru", "kz", "en"], "default": "ru"}
      },
      "output": "Coverage metrics and shared reviewed context",
      "evidence_boundary": "Comparison uses published profiles and reviewed relationships and is not a ranking."
    },
    {
      "id": "qazpolit.graph_path",
      "title": "Find an evidence-aware path",
      "method": "GET",
      "path": "/api/graph/path",
      "mutation": false,
      "fixed_parameters": {"reviewed_only": true},
      "parameters": {
        "source_slug": {"in": "query", "type": "string", "required": true, "min_length": 1, "max_length": 255},
        "target_slug": {"in": "query", "type": "string", "required": true, "min_length": 1, "max_length": 255},
        "lang": {"in": "query", "type": "string", "required": false, "enum": ["ru", "kz", "en"], "default": "ru"},
        "max_hops": {"in": "query", "type": "integer", "required": false, "minimum": 1, "maximum": 10, "default": 6}
      },
      "output": "Shortest inspectable path through reviewed public relationships",
      "evidence_boundary": "A graph path shows recorded context and does not prove coordination, control or causality."
    },
    {
      "id": "qazpolit.export_profile",
      "title": "Export a public research bundle",
      "method": "GET",
      "path": "/api/v1/export/entity/{slug}",
      "mutation": false,
      "parameters": {
        "slug": {"in": "path", "type": "string", "required": true, "min_length": 1, "max_length": 255},
        "lang": {"in": "query", "type": "string", "required": false, "enum": ["ru", "kz", "en"], "default": "ru"}
      },
      "output": "Source-aware JSON-LD projection of one published profile",
      "evidence_boundary": "Consumers must preserve source URLs, evidence states and the canonical profile URL."
    }
  ],
  "excluded_capabilities": [
    "create_or_restore_persona",
    "publish_or_edit_content",
    "change_evidence_state",
    "resolve_identity_or_merge_entities",
    "access_admin_or_unpublished_data",
    "store_credentials",
    "run_background_jobs"
  ],
  "promotion_gate": "Execution remains disabled until fixture requests, response bounds, receipts and public-only projections pass a dedicated acceptance review."
}
