{
  "schema_version": "qpolity-ecosystem-v1",
  "project_id": "qpolity",
  "product_name": "QPolity",
  "lifecycle": "production",
  "updated_at": "2026-08-12",
  "public_base_url": "https://qpolity.pro",
  "principles": {
    "read_only_publication": true,
    "official_source_required_for_facts": true,
    "browser_credentials_allowed": false,
    "model_output_is_public_fact_authority": false,
    "graceful_upstream_degradation": true
  },
  "systems": {
    "avds4": {
      "role": "design-system",
      "relationship": "product-profile",
      "status": "adopted",
      "public_site": "https://avds.digital",
      "legacy_sites": [
        "https://ui.qdev.run"
      ],
      "package_dependency": false,
      "profile": "qpolity-public-reference",
      "authority": [
        "interaction-patterns",
        "accessibility-rules",
        "visual-tokens"
      ],
      "interfaces": [
        "docs/avds/consumer-contract.json",
        "/.well-known/avds-consumer.json",
        "avds-ui-contract-v1"
      ],
      "evidence": [
        "client/src/components/avds",
        "client/src/index.css",
        "docs/STYLE_GUIDE.md",
        "docs/avds/consumer-contract.json",
        "docs/avds/consumer-governance.json",
        "docs/avds/avds-ui-contract-v1.schema.json"
      ],
      "boundary": "QPolity maintains product-specific React compositions; reusable stable primitives are candidates for upstream absorption, not silent copies of a package release."
    },
    "qazpipe": {
      "role": "collection-and-capture",
      "relationship": "upstream-producer",
      "status": "adopted",
      "runtime_dependency": false,
      "authority": [
        "source-capture",
        "freshness",
        "checksums",
        "capture-manifests"
      ],
      "interfaces": [
        "official-source snapshots",
        "media handoff",
        "document snapshot handoff",
        "public contract probe"
      ],
      "evidence": [
        "docs/DATA_CONTRACT.md",
        "script/collector-boundary-lint.mjs"
      ],
      "boundary": "Collectors and scheduled source acquisition stay outside the QPolity request path."
    },
    "qazlake": {
      "role": "normalized-data-and-evidence",
      "relationship": "read-only-upstream",
      "status": "adopted",
      "runtime_dependency": true,
      "read_only": true,
      "authority": [
        "entity-history",
        "normalized-media",
        "provenance",
        "quality-scorecards"
      ],
      "interfaces": [
        "/api/qazlake/health",
        "/api/qazlake/platform/health",
        "/api/mentions/stats",
        "/api/mentions/search"
      ],
      "failure_mode": "stale-cache-or-safe-empty-response",
      "evidence": [
        "server/qazlake.ts",
        "server/qazlake-media.ts",
        "server/qazlake-platform.ts"
      ]
    },
    "qazstack": {
      "role": "shared-deterministic-contracts",
      "relationship": "versioned-http-contract",
      "status": "adopted",
      "version": "1.41.1",
      "source_revision": "3b2830d1066ab784d34e4d6e8e2bb3b6b5fc7432",
      "runtime_dependency": false,
      "authority": [
        "entity-contracts",
        "geo-contracts",
        "evidence-models",
        "export-contracts",
        "resilience-contracts",
        "public-consumer-contracts",
        "public-data-sdk"
      ],
      "interfaces": [
        "docs/qazstack/consumer-contract.json",
        "/.well-known/qazstack-consumer.json",
        "qazstack-export-provenance-v1"
      ],
      "evidence": [
        "docs/qazstack/consumer-contract.json",
        "docs/qazstack/public-data-v1.json",
        "script/qazstack-contract-lint.mjs"
      ]
    },
    "qazcompute": {
      "role": "asynchronous-compute",
      "relationship": "candidate-signal-producer",
      "status": "specified",
      "runtime_dependency": false,
      "public_fact_authority": false,
      "authority": [
        "ocr-candidates",
        "entity-candidates",
        "embeddings",
        "model-signals",
        "full-document-text-extraction"
      ],
      "interfaces": [
        "review-required candidates through QazLake",
        "document text sidecars through QazPipe/QazLake"
      ],
      "boundary": "No synchronous model call is allowed in a public fact request and no model result is published without deterministic validation or review. QPolity may publish deterministic text extracted from local checksummed DOCX snapshots; full OCR and model-assisted extraction remain asynchronous QazCompute outputs."
    },
    "qazgeo": {
      "role": "geospatial-runtime",
      "relationship": "backend-adapter",
      "status": "adopted",
      "runtime_dependency": true,
      "browser_credentials": false,
      "fallback_required": true,
      "authority": [
        "region-identifiers",
        "compact-region-reference",
        "geospatial-projections"
      ],
      "interfaces": [
        "/api/qazgeo/health",
        "/api/qazgeo/regions"
      ],
      "failure_mode": "local-compact-region-fallback",
      "evidence": [
        "server/qazgeo.ts",
        "script/public-runtime-verify.mjs",
        "script/qazgeo-materialization-smoke.mjs",
        "client/public/datasets/person-profile-coverage.json",
        "client/public/datasets/role-intervals.json"
      ]
    },
    "edpol": {
      "role": "editorial-policy-and-quality-gates",
      "relationship": "optional-downstream-consumer",
      "status": "specified",
      "runtime_dependency": false,
      "writes_qpolity_production": false,
      "authority": [
        "editorial-policy",
        "publication-gate-metadata",
        "correction-policy"
      ],
      "interfaces": [
        "metadata-only evidence references",
        "review receipts",
        "https://edpol.pro/project-registry/qpolity.json",
        "https://edpol.pro/standards?project=qpolity",
        "https://edpol.pro/intake.html?project=qpolity"
      ],
      "project_registry": "https://edpol.pro/project-registry/qpolity.json",
      "mode": "metadata-only-integration-ready",
      "quality_gate": null,
      "activation_requirement": "Named owners and a signed metadata-only adapter are required before QPolity can claim a live EdPol delivery path.",
      "boundary": "Edpol may validate editorial metadata but does not own QPolity records, retained evidence, queues or production writes."
    }
  },
  "exchange": {
    "checked_at": "2026-07-27",
    "qazstack": {
      "local_reference": "QazStack HTTP/data contract; do not infer package version from a local Python checkout",
      "qpolity_gives": [
        {
          "id": "public-consumer-contract-example",
          "status": "adopted",
          "evidence": [
            "docs/qazstack/consumer-contract.json",
            "/.well-known/qazstack-consumer.json"
          ],
          "target": "QazStack public-consumer-contract validation examples"
        },
        {
          "id": "export-provenance-sidecars",
          "status": "adopted",
          "evidence": [
            "script/prerender.ts",
            "/datasets/provenance/*.provenance.json"
          ],
          "target": "QazStack export-provenance fixtures for JSON and JSONL snapshots"
        },
        {
          "id": "public-runtime-probe-profile",
          "status": "candidate",
          "evidence": [
            "script/public-runtime-verify.mjs",
            "script/local-runtime-smoke.mjs"
          ],
          "target": "QazStack audit/monitor HTTP probe profile without copying product-specific Node code"
        },
        {
          "id": "search-quality-golden-set",
          "status": "candidate",
          "evidence": [
            "script/fixtures/search-golden-cases.json",
            "script/search-benchmark.mjs"
          ],
          "target": "QazStack ranked-search regression fixture for ru/kk/en public entities"
        },
        {
          "id": "public-data-primitives",
          "status": "absorbed-upstream",
          "evidence": [
            "shared/qazstack-knowledge.ts",
            "client/src/lib/snapshotDiff.ts",
            "docs/qazstack/public-data-v1.json"
          ],
          "target": "QazStack TypeScript public-data fixture: source URL normalization, evidence-state projection, source candidates and fingerprint snapshot diff"
        },
        {
          "id": "document-text-sidecar-manifest",
          "status": "candidate",
          "evidence": [
            "script/document-text-sidecars.mjs",
            "/datasets/document-text-sidecars.json",
            "/datasets/schemas/document-text-sidecar-record.schema.json"
          ],
          "target": "QazStack public-data export fixture for bounded extracted-text sidecars with checksum-backed source files"
        },
        {
          "id": "entity-evidence-packet-api",
          "status": "candidate",
          "evidence": [
            "server/routes.ts",
            "/api/entity-packets/deputy-1",
            "/openapi.json",
            "/ai-index.json"
          ],
          "target": "QazStack reusable public-data composition pattern for bounded entity packets with roles, graph edges, documents, evidence and mention handoff"
        }
      ],
      "qpolity_takes": [
        {
          "id": "typescript-contracts-sdk",
          "status": "compatible-local-edge",
          "source": "QazStack immutable TypeScript/JSON Schema release",
          "condition": "QPolity keeps local edge helpers until package publication is operationally approved; their behavior is aligned with QazStack 1.41.1 public-data fixture at 3b2830d1066ab784d34e4d6e8e2bb3b6b5fc7432"
        },
        {
          "id": "evidence-publication-packet",
          "status": "ready-when-qazlake-publishes-record-level-evidence",
          "source": "QazStack EvidenceRecord via QazLake read-only API",
          "condition": "No public card may upgrade sourced evidence to verified without reviewed evidence"
        },
        {
          "id": "temporal-diff-and-series",
          "status": "candidate",
          "source": "QazStack temporal-event-provenance and snapshot-diff contracts",
          "condition": "Requires two official versions or source snapshots for the same entity set"
        },
        {
          "id": "ranked-search-candidate",
          "status": "benchmark-required",
          "source": "QazStack content.ranking / compute.retrieval candidate",
          "condition": "Must pass existing 60-case ru/kk/en benchmark at or above local FTS5 quality"
        }
      ]
    },
    "avds4": {
      "local_reference": "AV DS public showcase 4.7.0 and design capability 4.7.0 under avds-ui-contract-v1; QPolity remains product-profile, not package dependency",
      "qpolity_gives": [
        {
          "id": "reference-page-header-and-kpi-composition",
          "status": "absorbed-upstream",
          "evidence": [
            "client/src/components/avds/PageHeader.tsx",
            "client/src/components/avds/KpiGrid.tsx"
          ],
          "target": "AV DS PublicReferenceSummary at 9ef105a6fc7d14b79520247520d3fafa84b0eda3"
        },
        {
          "id": "source-aware-entity-mention-feed",
          "status": "absorbed-upstream",
          "evidence": [
            "client/src/components/mentions/EntityMentionsPanel.tsx",
            "docs/avds/consumer-contract.json"
          ],
          "target": "AV DS EntityMentionFeed at 9ef105a6fc7d14b79520247520d3fafa84b0eda3"
        },
        {
          "id": "provenance-and-source-foot",
          "status": "candidate",
          "evidence": [
            "client/src/components/avds/ProvenanceFoot.tsx",
            "client/src/components/avds/SourceCard.tsx",
            "client/src/pages/SourcesRegistry.tsx"
          ],
          "target": "AV DS evidence/source disclosure pattern"
        },
        {
          "id": "operator-quick-links-and-ranked-bars",
          "status": "candidate",
          "evidence": [
            "client/src/components/avds/QuickLinksRail.tsx",
            "client/src/components/avds/FilterChipRow.tsx",
            "client/src/components/avds/RankedBarList.tsx"
          ],
          "target": "AV DS dense operator navigation and compact comparison pattern"
        },
        {
          "id": "snapshot-state-panels",
          "status": "candidate",
          "evidence": [
            "client/src/components/avds/StatePanel.tsx",
            "client/src/components/avds/PublicSummaryStrip.tsx",
            "client/src/components/avds/ScoreBar.tsx"
          ],
          "target": "AV DS public data freshness and score presentation pattern"
        }
      ],
      "qpolity_takes": [
        {
          "id": "stable-foundation-primitives",
          "status": "partially-adopted-local-profile",
          "source": "AV DS SearchField, FilterChipRow and LoadingSkeleton on people, graph and timeline; SourceBadge, SourceHealthBadge, SourcePolicyBadge and SourceCard on source-aware surfaces; remaining Button, IconButton, Link, Badge, Chip, Tooltip, Tabs, Breadcrumbs, Pagination and Table stay behind the gate",
          "condition": "Adopted components remain thin local adapters without declaring an AV DS package dependency"
        },
        {
          "id": "forms-and-filter-controls",
          "status": "partially-adopted-local-profile",
          "source": "AV DS TextInput, Select, Combobox and FormField",
          "condition": "SearchField and FilterChipRow are adopted locally; Select, Combobox and FormField still require URL-state, mobile-density and keyboard checks"
        },
        {
          "id": "datatable-beta",
          "status": "defer",
          "source": "AV DS DataTable beta",
          "condition": "Use only after QPolity tables need controlled sorting/pagination beyond current list cards"
        },
        {
          "id": "chart-and-map-patterns",
          "status": "defer-to-pattern-contract",
          "source": "AV DS experimental charts and geo patterns",
          "condition": "Do not add heavy charting dependency to first viewport; keep QazGeo/source contract explicit"
        }
      ]
    }
  },
  "public_contracts": {
    "health": "https://qpolity.pro/health",
    "openapi": "https://qpolity.pro/openapi.json",
    "ai_index": "https://qpolity.pro/ai-index.json",
    "api_catalog": "https://qpolity.pro/.well-known/api-catalog",
    "institution_registry": "https://qpolity.pro/api/institutions",
    "sources": "https://qpolity.pro/sources",
    "ecosystem": "https://qpolity.pro/.well-known/qpolity-ecosystem.json",
    "qazstack_consumer": "https://qpolity.pro/.well-known/qazstack-consumer.json",
    "avds_consumer": "https://qpolity.pro/.well-known/avds-consumer.json"
  },
  "downstream_discovery": {
    "platform_qdev_run": {
      "role": "portfolio-discovery-and-schema-host",
      "status": "schema-linked-ready",
      "recognition_mode": "ai-index-and-provenance-schema-links",
      "machine_entrypoints": [
        "https://qpolity.pro/ai-index.json",
        "https://qpolity.pro/.well-known/ai-index.json",
        "https://qpolity.pro/.well-known/api-catalog",
        "https://qpolity.pro/.well-known/qpolity-ecosystem.json"
      ],
      "shared_schema_dependencies": [
        "https://platform.qdev.run/schemas/qazstack-export-provenance-v1.json"
      ],
      "consumer_expectation": "Portfolio consumers should discover QPolity through AI index, RFC 9727 API catalog, ecosystem contract and schema-linked bulk exports rather than ad hoc HTML crawling.",
      "verification_gap": "Live downstream ingestion by platform.qdev.run must be proven externally; this contract only guarantees that QPolity publishes the required discovery surfaces and shared schema links."
    }
  }
}
