{
  "contract": "edpol-qazstack-editorial-compatibility-v3",
  "schema_version": "2026-07-15",
  "updated": "2026-07-15",
  "status": "available-in-qazstack-1.36.0",
  "purpose": "Maps Edpol's public, metadata-only editorial contracts to deterministic QazStack primitives. Edpol stays dependency-free; CMS adapters import the pinned package and keep all article state and side effects local.",
  "related_profiles": {
    "knowledge_provenance": "/qazstack-knowledge-compatibility.json",
    "schema_overlays": "/qazstack-schema-overlays.json",
    "portable_fixtures": "/qazstack-portable-fixtures.json"
  },
  "qazstack": {
    "package": "qazstack",
    "release": "v1.36.0",
    "modules": [
      "qazstack.editorial",
      "qazstack.factcheck",
      "qazstack.evidence",
      "qazstack.compute",
      "qazstack.analytics",
      "qazstack.databus",
      "qazstack.contracts"
    ],
    "minimum_package_version": "1.36.0",
    "minimum_contract_version": "qazstack-editorial-control-plane-v1",
    "source_contract": "https://github.com/belilovsky/qazstack",
    "source_revision": "932f3d6a5d05fbb496730b163e47b027fcbc28af",
    "required_exports": [
      "EditorialPolicyBundle",
      "EditorialPipeline",
      "EditorialDecision",
      "EditorialDecisionState",
      "QualityGatePolicy",
      "GateRule",
      "evaluate_quality_gate",
      "EditorialCase",
      "EditorialChecks",
      "evaluate_editorial_case",
      "EditorialRemedy",
      "RemedyStatus",
      "apply_remedy_transition",
      "PropagationReceipt",
      "evaluate_remedy",
      "ArticleTrustMetadata",
      "public_correction_record",
      "EditorialWebhookEnvelope",
      "sign_editorial_webhook",
      "verify_editorial_webhook",
      "EvidenceReference",
      "EvidenceCaptureRecord",
      "AtomicClaim",
      "ReviewItem",
      "ReviewDecision",
      "RetrievalQuery",
      "RetrievalHit",
      "SourceTrustFactors",
      "PrivacySafeEvidenceEnvelope",
      "EvaluationTrack",
      "EvaluationSlice",
      "evaluate_release_candidate"
    ],
    "canonical_schemas": [
      "qazstack-editorial-policy-v1.json",
      "qazstack-editorial-pipeline-v1.json",
      "qazstack-editorial-quality-gate-v1.json",
      "qazstack-editorial-case-v1.json",
      "qazstack-editorial-remedy-v1.json",
      "qazstack-editorial-propagation-receipt-v1.json",
      "qazstack-editorial-trust-v1.json",
      "qazstack-editorial-webhook-v1.json"
    ]
  },
  "edpol": {
    "policy_contract": "/policy-bundle.json",
    "pipeline_contract": "/pipeline.json",
    "decision_schema": "/schemas/editorial-decision.schema.json",
    "case_schema": "/schemas/editorial-case.schema.json",
    "evidence_schema": "/schemas/evidence-reference.schema.json",
    "event_schema": "/schemas/editorial-event-envelope.schema.json",
    "trust_schema": "/schemas/article-trust-metadata.schema.json",
    "correction_schema": "/schemas/correction-record.schema.json",
    "quality_gate_template": "/quality-gates/{projectId}.json",
    "event_contract": "/event-contract.json",
    "ecosystem_contract": "/ecosystem-contract.json"
  },
  "mappings": [
    {
      "edpol": "policy-bundle.json and pipeline.json",
      "qazstack": "EditorialPolicyBundle.from_dict and EditorialPipeline.from_dict",
      "rule": "Validate policy scope, acyclic stages, owners, SLAs and artifacts without moving workflow state into Edpol or QazStack."
    },
    {
      "edpol": "editorial-decision.schema.json",
      "qazstack": "EditorialDecision.from_dict",
      "rule": "Validate a CMS-owned decision for one content fingerprint while keeping article content and raw artifacts private."
    },
    {
      "edpol": "evidence-reference.schema.json",
      "qazstack": "EvidenceReference and EvidenceCaptureRecord",
      "rule": "Bind evidence to claims and require digest, archive reference, retention class and provider before capture is completed."
    },
    {
      "edpol": "editorial-case.schema.json",
      "qazstack": "EditorialCase, EditorialChecks and evaluate_editorial_case",
      "rule": "Represent a case as independently testable claims, traceable evidence and explicit human review state."
    },
    {
      "edpol": "quality-gates/{projectId}.json machineRules",
      "qazstack": "QualityGatePolicy.from_dict and evaluate_quality_gate",
      "rule": "Evaluate only the closed metadata vocabulary; free-form expressions and model scores are rejected."
    },
    {
      "edpol": "correction-record.schema.json",
      "qazstack": "EditorialRemedy, PropagationReceipt, evaluate_remedy and public_correction_record",
      "rule": "Keep remedy state in the CMS and channel delivery receipts in Qposter while exposing a reader-visible correction record."
    },
    {
      "edpol": "article-trust-metadata.schema.json",
      "qazstack": "ArticleTrustMetadata.from_dict",
      "rule": "Validate reader-facing disclosure without exposing private review notes."
    },
    {
      "edpol": "event-contract.json preferredProfile",
      "qazstack": "EditorialWebhookEnvelope and verify_editorial_webhook",
      "rule": "Use timestamped HMAC, key rotation and durable consumer idempotency; producers retain their outbox and retry state."
    },
    {
      "edpol": "model-evaluation.json",
      "qazstack": "EvaluationTrack, EvaluationSlice and evaluate_release_candidate",
      "rule": "Require benchmark evidence before a provider or model becomes eligible; the editorial verdict remains human and product-owned."
    }
  ],
  "boundaries": {
    "edpol": ["policy contracts", "project registry", "public transparency", "public intake contract"],
    "cms": ["article state", "approval state", "case and remedy state", "outbox", "delivery audit", "publication side effects"],
    "qazpipe": ["collectors", "parsing", "deduplication", "freshness", "evidence manifest creation"],
    "qazlake": ["raw evidence", "immutable capture artifacts", "retention", "access control", "retrieval indexes"],
    "qazgeo": ["canonical geographies", "geocoding", "geographic enrichment"],
    "qazcompute": ["provider execution", "model measurements", "resource scheduling"],
    "shield": ["risk signals", "privacy and legal escalation", "safety casework"],
    "qalam": ["translation", "terminology", "RU/KK parity evidence"],
    "qposter": ["channel delivery", "correction propagation receipts"],
    "qazstack": ["typed contracts", "deterministic validation", "quality-gate evaluation", "signature verification", "model release evaluation"],
    "avds4": ["interface tokens", "accessible components", "presentation quality gates"]
  },
  "not_supported": [
    "Using LLM scoring as a publication gate",
    "Using QazStack's in-process EventBus as a cross-service outbox",
    "Fetching evidence from Edpol or QazStack gate evaluation",
    "Treating an evidence URL as a completed immutable capture",
    "Moving article, collector, raw evidence or channel state into Edpol"
  ]
}
