{
  "contract": "editorial-orchestrator-boundaries-v1",
  "schema_version": "2026-07-09",
  "updated": "2026-07-09",
  "principle": "edpol.pro is the editorial policy and orchestration layer; it does not collect, scrape, normalize, or enrich source material.",
  "owns": [
    {
      "system": "edpol",
      "scope": "policy-shell",
      "responsibilities": [
        "public editorial policy UI",
        "machine-readable policy contracts",
        "project registry",
        "editorial pipeline definitions",
        "public request intake",
        "transparency and correction logs",
        "CMS bootstrap SDK"
      ]
    }
  ],
  "external_systems": [
    {
      "system": "QazPipe",
      "scope": "collectors-and-ingestion",
      "responsibilities": [
        "source collectors",
        "RSS and page parsing",
        "crawler scheduling",
        "deduplication",
        "source freshness checks",
        "raw evidence storage",
        "collector health metrics"
      ],
      "edpol_contract": "edpol may reference QazPipe evidence and freshness status, but collector code and ingestion state should remain in QazPipe."
    },
    {
      "system": "CMS",
      "scope": "publication-runtime",
      "responsibilities": [
        "article editing",
        "publication workflow",
        "author identity",
        "project-local approvals",
        "project-local legal sign-off state"
      ],
      "edpol_contract": "CMS should store projectId, policyVersion, pipeline status references, and links to public policy/intake endpoints."
    },
    {
      "system": "Shield",
      "scope": "risk-and-safety-layer",
      "responsibilities": [
        "threat classification",
        "security escalations",
        "sensitive material handling",
        "abuse and takedown review support"
      ],
      "edpol_contract": "edpol defines when Shield-like checks are required; Shield should own risk scoring and operational casework."
    },
    {
      "system": "Qposter",
      "scope": "distribution-layer",
      "responsibilities": [
        "channel-specific posting",
        "social copy variants",
        "publishing schedules",
        "correction propagation to social channels"
      ],
      "edpol_contract": "edpol defines cross-platform correction rules; Qposter should execute and report distribution state."
    },
    {
      "system": "Qalam",
      "scope": "language-and-style-layer",
      "responsibilities": [
        "translation workflow",
        "terminology memory",
        "style consistency",
        "ru-kk parity checks"
      ],
      "edpol_contract": "edpol defines bilingual parity requirements; Qalam should own translation tooling and language QA."
    }
  ],
  "migration_candidates": [
    {
      "name": "collectors",
      "decision": "keep-out-of-edpol",
      "target": "QazPipe",
      "reason": "Collectors create operational coupling, source-specific failure modes, and raw evidence state that belongs in the ingestion platform, not in the public policy hub."
    },
    {
      "name": "source-freshness-metrics",
      "decision": "reference-only",
      "target": "QazPipe",
      "reason": "edpol can surface freshness status through contracts, but the measurements should be produced by QazPipe."
    },
    {
      "name": "publication-workflow-state",
      "decision": "reference-only",
      "target": "CMS",
      "reason": "edpol should define workflow stages and SLAs while each CMS stores the project-local article state."
    }
  ],
  "allowed_inside_edpol": [
    "static policy content",
    "orchestrator API contract assembly",
    "public request validation and logging",
    "project registry templates",
    "CMS bootstrap UI"
  ],
  "not_allowed_inside_edpol": [
    "crawler implementations",
    "source-specific parsers",
    "long-running collector jobs",
    "raw article corpus storage",
    "publication database ownership",
    "secret-backed source integrations"
  ]
}
