"""Оркестрация sweep-pipeline scraper_kit (#2135 strangler, завершён #2397 Part E1).

Координирует полный прогон скрапа (SERP → save → houses → detail → IMV) поверх
провайдеров `scraper_kit.providers.*` и базового слоя `scraper_kit.base`. Развязана
от `app.*` через Protocol-инжекцию (`scraper_kit.contracts`):

  - `app.core.config.settings`          → инжектируемый `ScraperConfig`
  - `app.services.matching`             → инжектируемый `HouseMatcher`
  - `app.services.house_imv_backfill`   → инжектируемый `EnrichmentJobs`
  - `app.core.shutdown.shutdown_requested` → инжектируемый `Callable[[], bool]`
  - `app.services.scrape_runs`          → локальная копия `scraper_kit.orchestration.runs`

Единственный оркестратор в проде: legacy `app.services.scrape_pipeline` (изначальный
strangler-COPY-источник) удалён (#2397 Part E1). Боевой scheduler и admin-роуты
вызывают этот модуль напрямую.
"""
