feat(tradein): schedule cian_full_load (exhaustive secondary) + anchor sweep NB-only #1752
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#1752
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/cian-schedule-fullload-nb-only"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Проблема
run_cian_full_load(exhaustive room×price-бисекция вторички, secondary-only, incremental save, checkpoint/resume) построен, протестирован и прод-проверен (#926/#929/#930/#938) — run #46 от 2026-05-31 собрал 29511 уникальных вторичных листингов за 25 мин. Но запускается ТОЛЬКО вручную через admin API, в scheduler НЕ зарегистрирован → 18 дней не запускался → набор протух,deactivate_stale_cianвыкосил неподтверждённые. Recurringcian_city_sweepгоняет anchor-овскую стратегию (5 гео-точек × pagination-cap), которая теряет хвост: cian vtorichka просел до 5520/7748 active (71%) против эталона yandex (бисекция) 4442/4598 (97%).Решение
run_cian_full_loadв in-app scheduler как recurring-источникcian_full_load(окно 20-22 UTC — не конфликтует на shared kf-прокси сcian_city_sweep/cian_history_backfillв 2-5). Логику загрузки НЕ трогал.run_cian_city_sweep→ newbuilding-only (newbuilding_only: bool = True): SERP-лоты фильтруются доlisting_segment == "novostroyki"передsave_listings, т.к. full_load теперь авторитетно владеет вторичкой. DETAIL/HOUSES-фазы не изменены. Убирает дубль secondary SERP-сейва и двойной расход прокси.Изменения
scheduler.py— importrun_cian_full_load;trigger_cian_full_load_run(по образцуtrigger_cian_city_sweep_run); dispatchelif source == "cian_full_load";trigger_cian_city_sweep_runпрокидываетnewbuilding_only; обновлён docstring-registry.scrape_pipeline.py—run_cian_city_sweep(newbuilding_only=True)+ counterlots_dropped_secondary.data/sql/126_scrape_schedules_seed_cian_full_load.sql— idempotent seed (enabled=true, 20-22 UTC,ON CONFLICT DO UPDATEбез затирания enabled).tests/test_scheduler.py(+3),tests/test_cian_city_sweep.py(+2).Тесты
Full suite: 1844 passed, 2 deselected (per test-gate). 2 yandex
test_scraper_proxyпадения — pre-existing, от незакоммиченного WIP другого окна в shared worktree; в diff этого PR yandex-файлов НЕТ (5 файлов, подтвержденоgit diff main...HEAD --stat); на чистом дереве зелёные. Targeted:test_scheduler.py test_cian_city_sweep.py test_scheduler_main.py→ 36 passed. Ruff clean.Прод-смоук после merge
Сравнить cian vtorichka active ДО/ПОСЛЕ первого
cian_full_load(ручной trigger или дождаться окна 20-22 UTC): ожидается рост 5520 → ~25-29k. Подтвердить чтоrun_cian_city_sweepбольше не сейвит вторичку (lots_dropped_secondary> 0 в counters).✅ APPROVE — reviewed on clean worktree at head
158a24c2.Проверено (4 концерна):
Тесты на чистом дереве: 1945 passed, 1 skipped, 0 failed (2 cache-теста deselected per gate). test_scraper_proxy зелёный — подтверждает что 2 падения в shared worktree = несвязанный yandex WIP. Ruff clean.
Информационно (не блокер): ручной admin-эндпоинт /scrape/cian-city-sweep не прокидывает newbuilding_only → теперь по дефолту тоже NB-only. Согласуется с архитектурой «full_load владеет вторичкой».
Merge (merge style).