feat(rewire): scheduler_main → kit-scheduler behind USE_KIT_SCHEDULER flag, ship-dark (#2192) #2196

Merged
lekss361 merged 1 commit from feat/rewire-scheduler-kit into main 2026-07-02 18:41:13 +00:00
Owner

Закрывает #2192. Первый шаг боевой активации scraper-kit. Ship-dark — флаги дефолт off, прод НЕ меняет поведение на деплое; активация = флип env + recreate (откат за секунды).

Что (4 файла, боевые scheduler/pipeline/scrapers НЕ тронуты)

  1. config.py — 3 флага (дефолт False): use_kit_scheduler, use_proxy_pool_curl, use_proxy_pool_browser
  2. scheduler_main.py — развилка в _run(): False → старый app.services.scheduler.scheduler_loop() (дословно, lazy-import для тестов); True → SchedulerContext(config=RealScraperConfig, matcher=RealMatcherAdapter, enrichment=RealEnrichmentJobs, session_factory=RealSessionFactory, runs=app.scrape_runs) + build_registry(product_handlers=...) + kit-loop. SIGTERM/drain сохранён.
  3. product_handlers.py (new) — build_product_handlers(ctx) — 17 named + 1 wildcard. Каждый переиспользует боевую функцию (без дублирования). Особое: cian pre_claim cookie-gate, proxy_healthcheck post_claim reschedule, deactivate_stale_* wildcard.
  4. test_kit_registry_completeness.py (new) — парсит боевой dispatch → каждый source резолвится в kit registry.

Тест полноты (главный предохранитель)

Боевой dispatch = 25 exact + 1 wildcard. 8 kit-native sweeps из build_registry дефолтов + 17 product + wildcard из моих. Registry 26 ключей, каждый боевой source резолвится — пропущенный source (тихий провал) исключён.

Verify

  • флаги дефолт False; settings.use_kit_scheduler is False
  • registry completeness 11 passed; broad scheduler/adapters/registry/config 109 passed
  • ruff clean; import app.scheduler_main OK
  • боевые scheduler/pipeline/scrapers не тронуты (git status)

Активация (отдельно, НЕ в этом PR)

USE_KIT_SCHEDULER=true + recreate scraper после prod-smoke по одному source; откат = флаг false + recreate. Боевой scheduler — мгновенный fallback.

Примечание: mypy-заметка RealScraperConfig read-only property vs Protocol — pre-existing дизайн адаптеров, runtime_checkable ок, не gated (в tradein CI mypy-гейта нет).

Закрывает #2192. Первый шаг боевой активации scraper-kit. **Ship-dark** — флаги дефолт off, прод НЕ меняет поведение на деплое; активация = флип env + recreate (откат за секунды). ## Что (4 файла, боевые scheduler/pipeline/scrapers НЕ тронуты) 1. `config.py` — 3 флага (дефолт False): `use_kit_scheduler`, `use_proxy_pool_curl`, `use_proxy_pool_browser` 2. `scheduler_main.py` — развилка в `_run()`: False → старый `app.services.scheduler.scheduler_loop()` (дословно, lazy-import для тестов); True → `SchedulerContext(config=RealScraperConfig, matcher=RealMatcherAdapter, enrichment=RealEnrichmentJobs, session_factory=RealSessionFactory, runs=app.scrape_runs)` + `build_registry(product_handlers=...)` + kit-loop. SIGTERM/drain сохранён. 3. `product_handlers.py` (new) — `build_product_handlers(ctx)` — 17 named + 1 wildcard. Каждый переиспользует боевую функцию (без дублирования). Особое: cian `pre_claim` cookie-gate, proxy_healthcheck `post_claim` reschedule, `deactivate_stale_*` wildcard. 4. `test_kit_registry_completeness.py` (new) — парсит боевой dispatch → каждый source резолвится в kit registry. ## Тест полноты (главный предохранитель) Боевой dispatch = 25 exact + 1 wildcard. 8 kit-native sweeps из `build_registry` дефолтов + 17 product + wildcard из моих. **Registry 26 ключей, каждый боевой source резолвится** — пропущенный source (тихий провал) исключён. ## Verify - флаги дефолт False; `settings.use_kit_scheduler is False` - registry completeness 11 passed; broad `scheduler/adapters/registry/config` 109 passed - ruff clean; `import app.scheduler_main` OK - боевые scheduler/pipeline/scrapers не тронуты (git status) ## Активация (отдельно, НЕ в этом PR) `USE_KIT_SCHEDULER=true` + recreate scraper после prod-smoke по одному source; откат = флаг false + recreate. Боевой scheduler — мгновенный fallback. Примечание: mypy-заметка RealScraperConfig read-only property vs Protocol — pre-existing дизайн адаптеров, runtime_checkable ок, не gated (в tradein CI mypy-гейта нет).
lekss361 added 1 commit 2026-07-02 18:41:05 +00:00
feat(rewire): scheduler_main → kit-scheduler behind USE_KIT_SCHEDULER flag, ship-dark (#2192)
All checks were successful
CI / changes (pull_request) Successful in 12s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
f6dcd80fb7
lekss361 merged commit bcdec5ebd4 into main 2026-07-02 18:41:13 +00:00
lekss361 deleted branch feat/rewire-scheduler-kit 2026-07-02 18:41:14 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2196
No description provided.