fix(site-finder): velocity fallback 4500→750, coverage/proxy disclosure, market_trend staleness honesty (audit #1871 P2) #1876
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#1876
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "audit/1871-p2-velocity-market"
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
Audit-issue #1871 — три 🟠 P2 honesty/correctness-фикса (market/velocity домен). Все факты подтверждены prod-DB. ETL не трогаем (почему rosreestr встал на янв-2026 — отдельная тяжёлая задача).
Изменения (9 файлов, +376/-78)
Fix 1 — velocity fallback 4500→750 (
velocity.py:41)Audit-verified медиана ЕКБ 593-766 м²/мес; 4500 завышало знаменатель нормализации 7.6× → занижало velocity_score при DB-error fallback (latent). Консервативно 750.
Fix 2 — velocity coverage/proxy disclosure (
velocity.pyVelocityResult + as_dict)Новые поля
objective_coverage_pct,proxy_used,proxy_sqm_per_deal— видно что объём rosreestr-пути фабрикуетсяcount×45 м²/сделкапри покрытии Objective <50%. Проброшено во все 4 конструктора, additive (codegen не нужен —dict[str,Any]в schemas).Fix 3 — market_trend staleness (
parcels.py:2385-2455)rosreestr_deals MAX(period_start_date)=2026-01-01(stale 5.5 мес, prod-verified) → recent-окно пусто → раньше голыйnull. Теперьstatus ∈ {ok, source_stale, no_deals}+as_of_date+label+recent_deals_count. Consumer scoring читает defensively (без регрессии).Frontend (types + MarketTrendBlock + VelocityBlock + ptica market-drawer + Section3 verdict + legacy guard): staleness/no_deals → честный caveat вместо фейкового тренда; velocity → caption «объём оценочный (прокси N м²/сделка, покрытие P%)»;
formatAsOfMonthTZ-safe.Honesty contract
Числа не выдумываются — раскрываем proxy/coverage/staleness, не молчим null. Genuine measured data не понижается. velocity 750 — консервативный floor (занижает, не завышает горячесть рынка).
Test plan
Follow-ups (вне scope)
rosreestr_dealsвстал на 2026-01-01 (внешний лаг Росреестра / скрейпер) — отдельный P2source_stale/no_dealsкогда появится route test harnessRefs #1871
🤖 Generated with Claude Code