fix(tradein/estimator): устранить остаточные кросс-сорс дубли (#2291) #2417
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#2417
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/tradein-dedup-residual-2291"
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?
Summary
После трёх итераций (#2269, #2290, #2265) выживало 10.9% кросс-сорс дублей (705 из 6442; 127 — кадастр-конфликты by design, не трогаем). Этот PR закрывает 2 из 4 оставшихся классов (473 из ~578 нерешённых пар):
s.replace("ё","е")в_parse_street_house._parse_street_house, между существующими type-word ветками и mkr-fallback. Для адресов вида «Заречный м-н, Готвальда, 24» (голая улица без типа-слова после района) — раньше mkr-fallback хватал район вместо реальной улицы._dedup_cross_source(banker's rounding: 38.5→38 vs 39.0→39 держал живой дубль «Рассветной 6к1»). Скоуп строго на street-union, cadnum-union и самаarea_bucketне тронуты.Класс 4 (пустые токены, ~50 пар — «40-летия Комсомола,32Г» и т.п.) явно НЕ фиксится в этом PR — низкий ROI, частично нефиксируем регексом.
Adversarial review (deep-code-reviewer, 2 раунда):
1-й раунд — verdict
major: bare-street ветка фабриковала уличный токен на голых 2-сегментных адресах без mkr/район-контекста («ВИЗ, 24», «Академический, 24», «ЖК Некий, 24» — раньше безопасно("", ""), over-merge риск хуже исходного бага).Fixup — ветка теперь требует явный mkr/район-маркер в БОЛЕЕ РАННЕМ сегменте (не просто «сегмент перед домом похож на улицу»). Reviewer протестировал живьём доп. 7+ adversarial-адресов (Компрессорный/Уралмаш/Химмаш/Ботанический/Пионерский и т.п.) — все корректно
("", "").2-й раунд — verdict
approve.Regression guards (проверены живьём reviewer'ом)
мкр. ЖБИ, улица Сыромолотова→("сыромолотова", "")(#2265, branch 1)мкр Пионерский, 5→ mkr-fallback как раньшеЗаречный м-н, Готвальда, 24→("готвальда", "24")(целевой кейс)Test plan
uv run --project backend pytest backend/tests/test_estimator_dedup_cross_source_2087.py backend/tests/test_estimator_anchor_dedup_gap_2265.py backend/tests/test_backtest_regression_gate.py -q— 58 passedtest_search_cache_hit, известный ordering-артефакт)Refs #2291
Deep-review нашёл over-merge риск: bare-street ветка фабриковала уличный токен на голых 2-сегментных адресах без mkr/район-контекста ("ВИЗ, 24" и т.п.) — теперь требует явный mkr-маркер в более раннем сегменте, ограничивая ветку заявленным 3-сегментным паттерном.