fix(tradein/scrapers): подключить geoportal coords backfill в scheduler (#1967) #2346
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
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2346
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/tradein-avito-geo-backfill"
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?
Closes #1967
Премиса issue устарела — живой прод-замер (2026-07-04) вместо исходных "47% NULL lat":
geocode_missing_listingsкрутится с PR #1549 (2026-06-16), 18 дней прогонов.Реальная находка: точный street+house геокодер против локального
ekb_geoportal_buildings(34735 строк, pure local DB op без внешнего HTTP/rate-limit) —backfill_listings_coords_geoportal.py(#1841) — существовал, но был manual-only script, ни разу не запускавшийся recurring.Фикс: подключил его в in-app scheduler по паттерну уже существующего
cadastral_geo_match:backfill_listings_coords_geoportal.py—to_counters()+run_geoportal_coords_backfill()run-lifecycle wrapper.scheduler.py—trigger_geoportal_coords_backfill_run+ dispatch.product_handlers.py— kit-registry entry (обязательно для scraper_kit strangler-migration completeness —test_kit_registry_completeness.pyиначе красный).data/sql/171_scrape_schedules_seed_geoportal_coords_backfill.sql— seed на окно 05:00-06:00 UTC, доgeocode_missing_listings(06:00-09:00) — точный house-level матч забирает адрес раньше грубого Nominatim-геокода.Честная оценка эффекта: проблема уже маргинальна на момент фикса — текущих live-кандидатов всего ~210 (avito active, address есть, lat NULL), по прошлому 5.8% match-rate эффект — единицы-десятки строк. Ценность: устранение up-to-24h задержки для новых NULL-coord листингов + приоритет точности над грубым геокодом.
Не в этом PR: dedup-на-ингесте (вторая половина исходного DoD issue #1967) — отдельный follow-up, out of scope здесь. Backoff-механизм для permanently-unmatchable строк (job пересканирует ~14.7k inactive backlog каждую ночь, дёшево но не идеально) — minor follow-up, не блокер.
Проверено: ruff чисто, migration идемпотентна (
ON CONFLICT (source) DO NOTHING), нет basename-коллизии, окно не пересекается сgeocode_missing_listings. Live SQL независимо перепроверен reviewer'ом (4.3%/9181 — день-в-день совпадение). code-reviewer APPROVE, 67/67 relevant tests + kit-registry-completeness passed.Post-merge:
UPDATE scrape_schedules SET next_run_at=now() WHERE source='geoportal_coords_backfill'для форс-прогона smoke на проде.