Live-аудит на проде (2026-08-02): headline-медиана строилась даже по 1-4
листингам без проверки достаточности выборки (Серов 2к/45м2, n=3 листинга ->
42 391 руб/м2 vs честный ДКП-коридор 54 126, -36%; соседняя улица того же
города на других 1-2 лотах давала разброс до 1.3x). Каменск-Уральский на
редких room-count давал буквальный median_price_rub=0 без явного отказа.
Fix:
- HEADLINE_LISTINGS_MIN_N=5 (estimator.py) - ниже порога радиусная медиана
подавляется (listings_clean НЕ очищается - нужен ghost-anchor guard'у #1871)
и маршрутизируется на уже существующий deals-headline-fallback (#oblast-D,
сделки Росреестра) или честный insufficient_data, если сделок тоже мало.
- deals-headline-fallback гейт исправлен с anchor_tier is None на anchor is
None - anchor_tier оставался stale (не сбрасывался в None), когда
_compute_same_building_anchor отклонял кандидата целиком, блокируя fallback
даже при большом ДКП-покрытии (найдено live regen'ом бэктест-фикстуры).
- Честные explanation-тексты: отличают "объявлений действительно нет" от
"нашли N, но недостаточно для доверия" - не показывают противоречивые
сообщения одновременно.
- insufficient_data (computed field, median_price_rub<=0) остаётся
единственным источником истины - PDF/API уже не показывают 0 как число.
Regenerated tests/fixtures/backtest_baseline.json: 8 из 277 прод-сделок
теперь используют deals-fallback вместо шумной 2-4-листинговой медианы
(mape_pct 13.23%->13.18%, headline spread_pct 17.98%->16.65%).