fix(tradein/matching): город развёртки доезжает до стража Tier-2a — межгородские склейки домов (#2777) #2808
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
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#2808
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/2777-cross-city-matching"
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?
Что чинится
Бескоординатная карточка областного формата — «ул. Кирова,4», города в адресе НЕТ — садилась в одноимённый дом другого города. Ключ Tier-2a
address_fingerprint(address, lat, lon)без координат вырождается в один нормализованный адрес и становится глобально уникальным вhouse_address_aliases.Страж от ровно этой коллизии в матчере был (
_skip_oblast_alias), но выводил город из текста адреса — а областной Avito SERP города не называет. Комментарий в коде это и описывал: «a BARE oblast card … carries no signal here … that residual needs sweep-context».Sweep-context был собран и не доезжал.
save_listingsзнает город-цель batch'а, прогоняет его через собственный гео-guard (city_anchor/city_radius_km) и пишет вlistings.city. А_link_listing_to_houseгорода не получал, и уmatch_or_create_houseтакого параметра не было. Признак лежал в соседней колонке той же строки.Город здесь — независимое наблюдение (какой город запрашивала развёртка), не второе поле из той же строки адреса. Именно на этом различии в #2690 сорвалось усиление ключа через
gar_house_guid.Перемеренные числа (прод, 2026-08-10, после схлопывания #2704)
Три случая разведены
fingerprintиnewбез адреса с номером дома структурно невозможны (алиасов с пустым ключом на проде 0, P1-гейтno_house_numberне даёт создать дом). Адрес в момент матчинга был. Дефект в другом:listings.addressне обновлялся приON CONFLICTвообще — строка, вставленная без адреса, оставалась безадресной навсегда. Прод: 862 таких строки. Это же кормит геокодер мусором (худший дом всей таблицы, радиус 2086 км, — одна безадресная карточка, улетевшая в Балтику).Потолок, названный числом (в коде)
house_address_aliasesего нет. Апгрейд — city-ключ у алиаса: миграция + перекладка 7303 бескоординатных ключей, и до неё нужен журнал слияний;Размен назван вслух: страж увеличит число New-домов на областных бескоординатных карточках (их 479 из ~50k avito) — то есть подкормит дробление #1772/#2690. Лишний дубль восстановим схлопыванием, межгородская склейка необратима и молча портит всё, что агрегируется по
house_id.Чего НЕ сделано намеренно
house_merge_log);Test plan
origin/main: 5 упавших (TypeError: unexpected keyword argument 'city'+ недостижимость параметра на границе вызова)city=lot_cityscripts/check-migration-lock-timeout.py(миграций нет):✓ проверено новых миграций: 3Критерий приёмки — записан ДО факта
База 2026-08-10: 35 домов с объявлениями далёких пар городов, 35 «чужегородних» объявлений. Из них 20 приросли 08-01, 4 — уже 08-09, то есть счёт растёт.
Проверка 2026-08-17 тем же запросом: если далёких домов ≤ 35 + (новые склейки только из 5 незакрытых направлений и посёлков) — страж работает. Рост по направлению «областная карточка → чужой дом» = не работает. Замер воспроизводится без координат, поэтому не завязан на геокодер.
Второй наблюдаемый признак — строка лога
house tier2a/2b skip: coord-less non-ЕКБ city … (sweep_city=…)с непустымsweep_cityвtradein-scraper: раньше её на бескоординатных областных карточках не было ни одной.Refs #2777