{
  "generated_at": "2026-07-21T18:17:06+00:00",
  "inputs": {
    "handoff_url": "https://qgeo.tech/api/v1/atlas/enrichment-handoff",
    "qgeo_base_url": "https://qgeo.tech",
    "selected_jobs": [
      "basemap_sources.transport",
      "regional_statistics.health_education",
      "basemap_sources.elevation",
      "ecology_sources.protected_areas",
      "eo_derivatives.burn_area_hint",
      "eo_derivatives.ndvi_vegetation_anomaly",
      "eo_derivatives.ndwi_water_change",
      "basemap_sources.geographic_names"
    ],
    "shadow_health_url": "https://shadow.qdev.run/api/health"
  },
  "jobs": [
    {
      "collector_status": {
        "available": [
          "collector_osm.py",
          "collector_nsdi.py",
          "collector_geo_boundaries.py"
        ],
        "missing": [],
        "status": "ready"
      },
      "handoff": {
        "acceptance_gates": [
          "license_attribution",
          "geometry_quality",
          "field_projection",
          "consumer_smoke"
        ],
        "first_run_mode": "audit-only-no-import",
        "job_family": "basemap_source_audit",
        "owner": "qazpipe",
        "qazgeo_contract": "/api/v1/atlas/basemap-source-gate",
        "qazlake_namespace": "qazlake.geo.basemap_candidates"
      },
      "id": "basemap_sources.transport",
      "notes": [
        "Проверить дорожную и железнодорожную сеть только по лицензии и покрытию."
      ],
      "priority": "P0",
      "qgeo_contract": {
        "error": null,
        "http_status": 200,
        "keys": [
          "candidate_groups",
          "import_gates",
          "principles",
          "public_policy",
          "schema_version",
          "summary",
          "target",
          "title"
        ],
        "status": "ready",
        "url": "https://qgeo.tech/api/v1/atlas/basemap-source-gate"
      },
      "ready_for_first_run": true,
      "recommended_next_mode": "audit-only-no-import",
      "shadow_required": false
    },
    {
      "collector_status": {
        "available": [
          "collector_stat_gov.py",
          "collector_egov_v2.py",
          "collector_who.py"
        ],
        "missing": [],
        "status": "ready"
      },
      "handoff": {
        "acceptance_gates": [
          "coverage_20_regions",
          "unit_period_normalization",
          "territorial_lineage",
          "public_projection"
        ],
        "first_run_mode": "dry-run-snapshot",
        "job_family": "official_statistics_series_sync",
        "owner": "qazpipe",
        "qazgeo_contract": "/api/v1/atlas/statistics-enrichment-gate",
        "qazlake_namespace": "qazlake.stats.official_regional_series"
      },
      "id": "regional_statistics.health_education",
      "notes": [
        "Первый прогон должен нормализовать период, единицы измерения и 20 регионов."
      ],
      "priority": "P0",
      "qgeo_contract": {
        "error": null,
        "http_status": 200,
        "keys": [
          "current_snapshot",
          "indicator_groups",
          "principles",
          "public_policy",
          "quality_gates",
          "schema_version",
          "summary",
          "title"
        ],
        "status": "ready",
        "url": "https://qgeo.tech/api/v1/atlas/statistics-enrichment-gate"
      },
      "ready_for_first_run": true,
      "recommended_next_mode": "dry-run-snapshot",
      "shadow_required": false
    },
    {
      "collector_status": {
        "available": [
          "collector_copernicus_dem.py",
          "collector_geo_boundaries.py"
        ],
        "missing": [],
        "status": "ready"
      },
      "handoff": {
        "acceptance_gates": [
          "license_attribution",
          "geometry_quality",
          "field_projection",
          "consumer_smoke"
        ],
        "first_run_mode": "audit-only-no-import",
        "job_family": "basemap_source_audit",
        "owner": "qazpipe",
        "qazgeo_contract": "/api/v1/atlas/basemap-source-gate",
        "qazlake_namespace": "qazlake.geo.basemap_candidates"
      },
      "id": "basemap_sources.elevation",
      "notes": [
        "Публиковать только metadata/coverage, не сырые тайлы высот."
      ],
      "priority": "P0",
      "qgeo_contract": {
        "error": null,
        "http_status": 200,
        "keys": [
          "candidate_groups",
          "import_gates",
          "principles",
          "public_policy",
          "schema_version",
          "summary",
          "target",
          "title"
        ],
        "status": "ready",
        "url": "https://qgeo.tech/api/v1/atlas/basemap-source-gate"
      },
      "ready_for_first_run": true,
      "recommended_next_mode": "audit-only-no-import",
      "shadow_required": false
    },
    {
      "collector_status": {
        "available": [
          "collector_hdx.py",
          "collector_global_forest_watch.py",
          "collector_hydrolakes.py"
        ],
        "missing": [],
        "status": "ready"
      },
      "handoff": {
        "acceptance_gates": [
          "license_attribution",
          "sensitivity_review",
          "coverage_freshness",
          "methodology_note"
        ],
        "first_run_mode": "metadata-and-license-audit",
        "job_family": "ecology_source_audit",
        "owner": "qazpipe",
        "qazgeo_contract": "/api/v1/atlas/ecology-source-gate",
        "qazlake_namespace": "qazlake.geo.ecology_candidates"
      },
      "id": "ecology_sources.protected_areas",
      "notes": [
        "Нужна sensitivity-review перед публикацией точных природоохранных объектов."
      ],
      "priority": "P0",
      "qgeo_contract": {
        "error": null,
        "http_status": 200,
        "keys": [
          "principles",
          "public_policy",
          "quality_gates",
          "schema_version",
          "source_groups",
          "summary",
          "target",
          "title"
        ],
        "status": "ready",
        "url": "https://qgeo.tech/api/v1/atlas/ecology-source-gate"
      },
      "ready_for_first_run": true,
      "recommended_next_mode": "metadata-and-license-audit",
      "shadow_required": false
    },
    {
      "collector_status": {
        "available": [
          "collector_copernicus_cds.py",
          "collector_usgs.py",
          "collector_jrc_gsw.py"
        ],
        "missing": [],
        "status": "ready"
      },
      "handoff": {
        "acceptance_gates": [
          "source_license",
          "method_note",
          "coverage_confidence",
          "safe_projection"
        ],
        "first_run_mode": "metadata-and-methodology-first",
        "job_family": "eo_derivative_product_audit",
        "owner": "qazpipe",
        "qazgeo_contract": "/api/v1/atlas/eo-derivative-gate",
        "qazlake_namespace": "qazlake.eo.derivative_candidates"
      },
      "id": "eo_derivatives.burn_area_hint",
      "notes": [
        "Начать с методологии и confidence, без публикации сырых сцен."
      ],
      "priority": "P0",
      "qgeo_contract": {
        "error": null,
        "http_status": 200,
        "keys": [
          "current_inputs",
          "derivative_products",
          "methodology_gates",
          "principles",
          "public_policy",
          "schema_version",
          "summary",
          "target",
          "title"
        ],
        "status": "ready",
        "url": "https://qgeo.tech/api/v1/atlas/eo-derivative-gate"
      },
      "ready_for_first_run": true,
      "recommended_next_mode": "metadata-and-methodology-first",
      "shadow_required": true
    },
    {
      "collector_status": {
        "available": [
          "collector_copernicus_cds.py",
          "collector_usgs.py",
          "collector_global_forest_watch.py"
        ],
        "missing": [],
        "status": "ready"
      },
      "handoff": {
        "acceptance_gates": [
          "source_license",
          "method_note",
          "coverage_confidence",
          "safe_projection"
        ],
        "first_run_mode": "metadata-and-methodology-first",
        "job_family": "eo_derivative_product_audit",
        "owner": "qazpipe",
        "qazgeo_contract": "/api/v1/atlas/eo-derivative-gate",
        "qazlake_namespace": "qazlake.eo.derivative_candidates"
      },
      "id": "eo_derivatives.ndvi_vegetation_anomaly",
      "notes": [
        "Проверить сезонность и базовую линию до операторской интерпретации."
      ],
      "priority": "P0",
      "qgeo_contract": {
        "error": null,
        "http_status": 200,
        "keys": [
          "current_inputs",
          "derivative_products",
          "methodology_gates",
          "principles",
          "public_policy",
          "schema_version",
          "summary",
          "target",
          "title"
        ],
        "status": "ready",
        "url": "https://qgeo.tech/api/v1/atlas/eo-derivative-gate"
      },
      "ready_for_first_run": true,
      "recommended_next_mode": "metadata-and-methodology-first",
      "shadow_required": true
    },
    {
      "collector_status": {
        "available": [
          "collector_jrc_gsw.py",
          "collector_hydrolakes.py",
          "collector_dahiti.py"
        ],
        "missing": [],
        "status": "ready"
      },
      "handoff": {
        "acceptance_gates": [
          "source_license",
          "method_note",
          "coverage_confidence",
          "safe_projection"
        ],
        "first_run_mode": "metadata-and-methodology-first",
        "job_family": "eo_derivative_product_audit",
        "owner": "qazpipe",
        "qazgeo_contract": "/api/v1/atlas/eo-derivative-gate",
        "qazlake_namespace": "qazlake.eo.derivative_candidates"
      },
      "id": "eo_derivatives.ndwi_water_change",
      "notes": [
        "Проверить устойчивость водных объектов и период наблюдения."
      ],
      "priority": "P0",
      "qgeo_contract": {
        "error": null,
        "http_status": 200,
        "keys": [
          "current_inputs",
          "derivative_products",
          "methodology_gates",
          "principles",
          "public_policy",
          "schema_version",
          "summary",
          "target",
          "title"
        ],
        "status": "ready",
        "url": "https://qgeo.tech/api/v1/atlas/eo-derivative-gate"
      },
      "ready_for_first_run": true,
      "recommended_next_mode": "metadata-and-methodology-first",
      "shadow_required": true
    },
    {
      "collector_status": {
        "available": [
          "collector_osm.py",
          "collector_nsdi.py",
          "collector_geo_boundaries.py"
        ],
        "missing": [],
        "status": "ready"
      },
      "handoff": {
        "acceptance_gates": [
          "license_attribution",
          "geometry_quality",
          "field_projection",
          "consumer_smoke"
        ],
        "first_run_mode": "audit-only-no-import",
        "job_family": "basemap_source_audit",
        "owner": "qazpipe",
        "qazgeo_contract": "/api/v1/atlas/basemap-source-gate",
        "qazlake_namespace": "qazlake.geo.basemap_candidates"
      },
      "id": "basemap_sources.geographic_names",
      "notes": [
        "Нужна сверка RU/KK названий и устойчивых кодов."
      ],
      "priority": "P0",
      "qgeo_contract": {
        "error": null,
        "http_status": 200,
        "keys": [
          "candidate_groups",
          "import_gates",
          "principles",
          "public_policy",
          "schema_version",
          "summary",
          "target",
          "title"
        ],
        "status": "ready",
        "url": "https://qgeo.tech/api/v1/atlas/basemap-source-gate"
      },
      "ready_for_first_run": true,
      "recommended_next_mode": "audit-only-no-import",
      "shadow_required": false
    }
  ],
  "mode": "metadata_only_audit_no_db_write",
  "qazlake_snapshot": {
    "articles": 0,
    "latest_article_timestamp": null,
    "latest_article_timestamp_column": "updated_at",
    "media": 0,
    "raw_sources": 0,
    "status": "ready"
  },
  "rules": [
    "No QazLake production table writes are performed by this script.",
    "No raw rasters, storage keys, local paths, or sensitive coordinates are exported.",
    "Move a job to write-enabled staging only after source license, coverage, methodology, and consumer smoke pass."
  ],
  "schema_version": 1,
  "shadow_snapshot": {
    "error": null,
    "http_status": 200,
    "local_geo_modules": [
      "/opt/shadowbroker/backend/routers/sar.py",
      "/opt/shadowbroker/backend/services/sentinel_search.py",
      "/opt/shadowbroker/backend/services/thermal_sentinel.py"
    ],
    "local_root_exists": true,
    "status": "ready",
    "summary": {
      "last_updated": "2026-07-21T18:16:57.058907",
      "sources": {
        "cctv": 13613,
        "earthquakes": 41,
        "firms_fires": 5000,
        "flights": 9285,
        "gdelt": 1425,
        "liveuamap": 0,
        "military": 332,
        "news": 49,
        "satellites": 491,
        "ships": 11,
        "uap_sightings": 245,
        "uavs": 0
      },
      "version": "0.9.7"
    },
    "url": "https://shadow.qdev.run/api/health"
  },
  "summary": {
    "jobs_checked": 8,
    "partial_or_blocked": 0,
    "qazlake_status": "ready",
    "ready_for_first_run": 8,
    "shadow_status": "ready"
  }
}
