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#2271
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/tradein-yandex-url-dedup"
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?
Root cause (verified на данных, :35432 SELECT-only)
Все 204 дубль-группы (1253 активных строк) — yandex
novostroyki. В каждой группе строки с разными source_id и ценами = реальные разные квартиры, делящие URL застройщика/редиректа (na100.pro/go.php — 732 строки, atlasdevelopment.su — 279→1 URL, unistroyrf.ru — 127→1 и т.д.): gate-API отдаётentity["url"]= лендинг ЖК,_entity_to_lotсохранял его verbatim. Row-level dedup (dedup_hash = sha256(source|source_id)) работает корректно — дублировалась только колонкаsource_url. Vtorichka (4193 строки) несёт каноническиеrealty.yandex.ru/offer/<id>и дублей не даёт.Решение: вариант Б из issue (ETL-уникальность, БЕЗ unique index)
Partial unique index на
(source, source_url) WHERE is_activeотвергнут — верифицировано ревьюером по коду: conflict target upsert'а =dedup_hash(base.py:455), конфликт по URL не имеет арбитра → IntegrityError → reconcile по(source, source_id)не найдёт новую строку → легитимное объявление молча дропается. «Схлопнуть до свежайшего» деактивировало бы ~1049 реальных объявлений.Вместо этого:
_canonical_source_url()вyandex_realty.py+ зеркало в scraper-kit (golden-parity #2133) — не-realty.yandex URL заменяется наhttps://realty.yandex.ru/offer/<source_id>/.164_yandex_url_canonicalize_active_dups.sql— переписывает shared URL у активных yandex-строк,is_activeне трогает. Upsert/reconcile/enrichment не пишутsource_url→ хил переживает ре-скрейпы (проверено ревьюером по всем трём write-путям).162_seed_deals_freshness_monitor.sqlв_manifest_applied.txt(stale manifest из #2228); manifest 159→164 без дыр.Как проверено
uv run pytest(deselect толькоtest_search_cache_hit): 3033 passed, 6 skipped;test_migrations_manifest.py4 passed._ENTITY_PARTNER_URL, статические гарды миграции (транзакционность/идемпотентность/недеструктивность).Post-deploy: проверить на проде дубль-группы 204 → 0 и что инвентарь yandex не упал.
Closes #2235