app/services/product_handlers.py::_job_domclick_city_sweep — app-side override
kit-native джобы (issue 3264, инъекция куки Sber ID для обхода QRATOR PoW).
Домклик по расписанию идёт именно через этот override, а не через kit-native
_job_domclick_city_sweep напрямую (build_registry отдаёт последнее слово
продукту) — предыдущий коммит добавил region_code только в kit-джобу, оставив
override с прежним поведением. CI поймал дрейф штатным тестом
test_product_override_matches_kit_native_call_except_cookies: он сравнивает
kwargs обеих джоб и требует расхождения ровно в cookies.
Валидацию не дублирую — импортирую _resolve_region_code из scraper_kit.
orchestration.scheduler (как уже сделано для _pick_resume/_defer_next_run_at
в этом же файле), чтобы список разрешённых регионов остался в одном месте.
Другие дубли джоб в product_handlers.py, зовущие run_*_sweep/run_*_full_load,
не найдены (grep по обоим паттернам — только domclick).
pipeline.py уже принимал region_code параметром в каждой run_*-функции, но
scheduler.py его ни разу не читал из scrape_schedules.default_params — все
8 job-обработчиков, вызывающих run_*, звали их с дефолтным DEFAULT_REGION_CODE
(66), независимо от того, что лежит в строке расписания. Это была единственная
причина, по которой московский обход нельзя было завести конфигом: нижний слой
готов, а верхний молча игнорировал параметр.
Добавлен _resolve_region_code(params): читает params["region_code"] (дефолт —
DEFAULT_REGION_CODE, импортированный из pipeline.py, а не второй литерал 66),
приводит к int и валидирует по _KNOWN_REGION_CODES. Kit намеренно не
импортирует app.* (contracts.py, strangler-граница), поэтому реестр
app.services.regions.REGIONS сюда не дотянуть напрямую — _KNOWN_REGION_CODES
суженная копия его ключей с явным комментарием синхронизации. Неизвестный
region_code роняет job ValueError'ом ДО вызова run_* (тот же путь, что и любой
другой crash хендлера — `_dispatch`'s `except Exception` → `logger.exception`),
а не тихо пишет мусор в listings.region_code.
Отсутствие ключа даёт ровно прежнее поведение (66) — проверено тестами и
прогоном полного набора scheduler-тестов кита (70 passed, 0 failed).