feat(site_finder): velocity coverage gap-fill (spatial+name) — #968 949-A #1076
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#1076
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/competitor-velocity-spatial-fallback-968"
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?
Что
Завершает #968 (949-A). Поднимает покрытие velocity-маппинга конкурентов.
Closes #968. Часть EPIC #949.
Состояние DoD
relevance_weight §9.1(composite geo×class×price×stage + sort) — уже был («PR B»).relevance_weight/relevance_breakdownуже вparcel.py(не дублирую).Velocity gap-fill (этот PR)
Для domrf-конкурентов, КОТОРЫХ НЕТ в
objective_complex_mapping(всего 148 строк, ~1.6%), мост к objective-velocity: ближайший data-bearing complex ≤200м с толерантным name-match →complexes.id→objective_lots.complex_id→project_name→objective_corpus_room_month.Замерено на проде (EXPLAIN+execute финального SQL): 148 → 329 distinct mapped конкурентов (2.2×).
Ключевой момент: матч ограничен complexes, у которых реально есть
objective_lots.project_name— иначе наивный nearest-any complex давал лишь +37 (ближайший complex без objective-данных съедал матч); data-bearing nearest даёт +181.Безопасность / blast-radius
NOT INсуществующий mapping). UNION дедупит,DISTINCT ON (obj_id)= ровно один complex на конкурента → нет double-count (prod: 329 objids / 2789 пар).stage_at_horizon→relevance_weightдля ново-маппленных. §22 market-pulse velocity берётся изvelocity.py(НЕ тронут).velocity.pyоставлен намеренно (его has_mapping → coverage-gate rosreestr-fallback = отдельный концерн).comm_nameguard (иначеLIKE '%%'→ spatial-only).Качество
deep-code-reviewer: ⚠️ MINOR (approved) — no regression / no double-count / SQL valid / psycopg v3 чисто. Учтены его пункты: empty-name guard, perf-комментарий, pre-prod валидация SQL (EXPLAIN+execute на проде, т.к. mock-тесты не гоняют реальный SQL).ruffclean. Покрытие тестами реального SQL — follow-up (phantom-column gate сейчас self-skip в CI; вынесу задачу).Тест-план (post-deploy)