fix(tradein/yandex): снести признак «панорама» — его нет на площадке #2851

Merged
bot-backend merged 3 commits from fix/2674-has-panorama into main 2026-08-12 20:44:12 +00:00

3 commits

Author SHA1 Message Date
bot-backend
b96b74b79d chore(tradein/db): миграция панорамы 259 → 260 — номер занят соседним PR
All checks were successful
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 10s
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 4m20s
#2850 (снятие показателя «доля с кадастром») смержен первым и занял 259.
Git такую коллизию не видит: имена файлов разные, конфликта нет, а номер один.
Ровно этот случай ловит гейт номеров миграций (#2786, ждёт владельца).

Обновлено вместе с файлом: ссылка в tests/test_dead_code_sweep_2674.py и
запись в _manifest_applied.txt.
2026-08-13 01:38:17 +05:00
bb4e5eadb4 Merge remote-tracking branch 'origin/main' into fix/2674-has-panorama 2026-08-13 01:37:39 +05:00
3e30b97d6b fix(tradein/yandex): снести признак «панорама» — его нет на площадке
All checks were successful
CI Trade-In / backend-tests (pull_request) Successful in 4m30s
CI / changes (pull_request) Successful in 11s
CI Trade-In / changes (pull_request) Successful in 11s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
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
2026-08-13 01:04:18 +05:00