test(tradein): гейт «снять noindex можно только вместе с плейсхолдерами» (#2904) #2948

Merged
bot-backend merged 1 commit from test/2904-noindex-gate into main 2026-08-20 07:00:10 +00:00

1 commit

Author SHA1 Message Date
2bffb178e3 test(tradein): гейт «снять noindex можно только вместе с плейсхолдерами» (#2904)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 9s
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
CI Trade-In / frontend-checks (pull_request) Successful in 52s
Задача владельца требует: до снятия robots:{index:false} каждая маркетинговая
цифра лэндинга либо заменяется вычисляемой, либо снимается со страницы —
публикация недостоверных характеристик платной услуги подпадает под ст. 5 ФЗ
«О рекламе» и ЗоЗПП.

Модуль констант marketing-v3.ts уже существует и несёт в шапке таблицу
«заявлено против замера»:

    ошибка 1,8%            против 13,2% медианы |%| (бэктест n=277)
    83% в диапазон         против 81,95% при коридоре шириной 74% от точки
    ±6 дн по сроку         против «сверки срока с фактом НЕ СУЩЕСТВУЕТ»
    42 700 проверок за год против 1 084 оценок всего (база живёт 2,5 месяца)
    42 города РФ           против 6 городов области, полное покрытие — 1

Но САМ ГЕЙТ жил только в комментарии. Правило, записанное словами, не мешает
снять одну строку в layout.tsx и выкатить страницу: комментарий не участвует в
сборке. Здесь он становится механическим — тест краснеет ровно в момент, когда
noindex исчезает, а плейсхолдеры остаются на странице.

Тест НЕ запрещает открывать лэндинг. Он требует, чтобы открытие шло вместе с
заменой чисел, то есть чтобы это было решением, а не побочным следствием правки
метаданных. Когда плейсхолдеры уйдут из компонентов, гейт сам перестанет
срабатывать (ранний возврат при пустом списке).

Проверено фальсификацией, а не рассуждением:
* снял robots:{index:false} → тест краснеет и перечисляет, какие именно величины
  ещё на странице;
* сломал зонд (переименовал пути компонентов) → краснеет ВТОРОЙ тест
  («ни один плейсхолдер не найден — зонд сломан»). Без него первый проходил бы
  вхолостую: пустой список плейсхолдеров означает «всё заменено».
Оба исходника восстановлены, дерево чистое.

Третья проверка держит в шапке модуля таблицу расхождений: потеряется она — и
следующий читатель решит, что цифры подтверждены замером.

vitest (tradein-mvp/frontend): 11 файлов, 59 тестов, rc=0
type-check: rc=0 (локальный прогон ронял устаревший .next/types со ссылкой на
удалённую страницу scrapers/cian-cookies — артефакт старой сборки, в CI чекаут
чистый; проверено отдельно)
2026-08-20 11:20:24 +05:00