Прод-замер 2026-08-07 (94 373 объявления): признак жил в двух колонках,
источники разложены по ним не пересекаясь.
source | всего | ceiling_height | ceiling_height_m | обе | расходятся
avito | 48 592 | 0 | 7 149 | 0 | 0
cian | 21 951 | 855 | 0 | 0 | 0
yandex | 16 854 | 7 699 | 7 675 | 7 675 | 0
Расхождений НЕТ: где заполнены обе (7 675 строк), значения совпадают до
последнего знака. Значит это не «две правды», а одна правда в двух ящиках:
855 циановских + 24 яндексовых значения не видел ни один потребитель.
Канон — ceiling_height_m: единицы в имени (так этот признак назван везде
в проекте: domrf_kn_flats/objects, фронт), её читает эстиматор,
numeric(5,2) против numeric(3,2) у 019-колонки, чей потолок 9.99 роняет
весь батч DataError'ом на out-of-range.
Что сделано:
- scraper_kit.ceiling_height.plausible_ceiling_m — единый гейт 2.0–6.0 м.
Раньше гейт был инлайн только у yandex SERP, поэтому avito detail нагнал
26 значений > 6 м (максимум 29.90) и 83 ровных 0.00 в колонку, которую
читает эстиматор. Корень — _parse_height_m брал первое число строки.
- base.save_listings больше не пишет ceiling_height (писал один param в обе
колонки — источник дубля); cian_detail и yandex_detail переведены на канон.
- Миграция 238: чистка невозможных значений + перенос 879 уникальных.
DROP COLUMN намеренно НЕ здесь — сначала прод должен подтвердить, что
колонку никто не пишет; снос отдельным шагом.
- HOUSE_FIELD_PRIORITY["ceiling_height"] удалён: колонки с таким именем в
houses нет, правило не могло сработать ни разу. Тест на него зеленел,
проверяя фантом.
- Coverage-дашборд показывает одну строку вместо двух.
Денежный эффект замерен, а не предположен: backtest (200 сделок, полный
ценовой спайн, --resolve-house-id) в трёх конфигурациях — флаг OFF (прод),
флаг ON на текущих данных, флаг ON на данных после этой правки. Оценка не
сдвинулась НИ У ОДНОЙ сделки. Причина структурная: сигнал только
переупорядочивает аналоги, а медиана ₽/м² к порядку безразлична; состав
меняется лишь когда пул перевалит за 50 (медиана пула — 2, у 1 из 200).
Refs #2699