#2850 (снятие показателя «доля с кадастром») смержен первым и занял 259.
Git такую коллизию не видит: имена файлов разные, конфликта нет, а номер один.
Ровно этот случай ловит гейт номеров миграций (#2786, ждёт владельца).
Обновлено вместе с файлом: ссылка в tests/test_dead_code_sweep_2674.py и
запись в _manifest_applied.txt.
has_panorama разбирался, писался и обещался публичным контрактом
market.v_houses, но положительных значений не имел ни одного: 0 true из
1536 страниц yandex_valuation за 24.05–12.08.2026 (false 1536, ключ
отсутствует 0), houses — 12 непустых из 9468, все false.
Соседний has_lift выглядел контрольной группой («текст читается, разбор
работает»), но контролирует он только факт отрисовки страницы: "Лифт" in
body_text ловит подстроку внутри отрицания, и на живой пятиэтажке 1977 г.
со строкой «Лифт отсутствует» парсер отдаёт True. На проде 300 из 313
пятиэтажек «с лифтом». Гейт отрицания для has_lift — отдельной правкой,
здесь не смешиваю.
Живая проверка боевым трактом 13.08.2026 (curl_cffi impersonate=chrome120
+ прод-прокси, RealScraperConfig + get_scraper_delay — ровно как
estimator.py; только чтение, в БД не писал): три адреса Екатеринбурга,
все HTTP 200, полный HTML ~1.19 МБ каждый. Вхождений «анорам» без учёта
регистра — 0/0/0, равно как panorama / 3D-тур / Виртуальн / Street.
Мета при этом разобралась целиком (1974/9эт/панель/2,50/46 объектов;
2020/18эт; 1977/5эт/кирпич/184 объекта). Метка не «переехала» в атрибут
или JSON-стейт — её нет в документе вовсе.
Это третий вид нуля: не «уже починено» и не «заблокировано выше по
потоку», а НЕПРИМЕНИМО к предметной области. Ноль был механически
гарантирован самим кодом — поиск подстроки по тексту, где такого слова не
бывает, — и о доме не говорил ничего.
Цена: снос ломает публичный контракт market.v_houses (мигр. 154 прямо
называет удаление колонки ломающим изменением). Принято осознанно —
читателей вне tradein-mvp нет (git grep пуст, в т.ч. newbuilding_crossload.py).
CREATE OR REPLACE VIEW колонку не удаляет, поэтому DROP VIEW → DROP COLUMN
→ CREATE VIEW, и вместе с DROP VIEW теряются гранты: GRANT SELECT для
gendesign_reader восстановлен явно.
Оговорка честности: сырой HTML прошлых сборов не хранится (raw_payload
держит только body_len/items_count), поэтому «метка была и исчезла в мае»
доказательно не опровергается — но и в измеренной истории 1536 страниц
положительных ноль.
Refs #2674