feat(mera/b2c): витрина лэндинга переезжает с выдуманных чисел на замеренные #3243
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3243
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/b2c-landing-honest-copy"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Последний шаг, ради которого делались метрики (#3228) и витрина реальных сделок (#3229): числа на лэндинге перестают быть реквизитом макета.
marketing-v3.tsудалён целиком. Корневая страница стала async-серверной, один раз фетчит/api/public/mera/statsи/api/public/mera/showcaseи раздаёт данные секциям.Таблица замен
Все числа перепроверены на проде лично, а не взяты со слов агента.
deals.days_on_marketзаполнен 0 раз из 108 623. Сверки не существует/showcaseЧто снято сверх таблицы
«Каждый такой прогноз мы потом сверяем с фактом сделки» — было на первом экране, в голосе продукта, рядом с ценой. Контура сверки не существует:
trade_in_leads— 4 строки без полей исхода,paymentsпуст, связки объявления со сделкой в данных нет.«Проверить за 30 секунд» — ветка сняла величину из бейджа, но ревьюеры нашли её ещё в четырёх видимых местах, включая липкую панель, которая висит на экране всегда. Замера времени заполнения формы никто не делал. Заменено на проверяемое: у формы шесть полей.
Фальшивая точка «объект на карте» — координат в витрине на тот момент не было, точка рисовалась из макета.
Честная деградация — проверена, а не заявлена
Ручка недоступна, вернула пустой объект, часть метрик, ноль строк витрины,
stats: null,district: null— во всех случаях блок не рендерится. Ни нуля, ни прочерка, ни прошлогоднего значения. Ошибка загрузки не роняет страницу в 500. Ревьюер прогнал все шесть состояний фактически, а не мысленно.Гейт переписан и починен
Старый гейт охранял «плейсхолдеры существуют ↔ noindex стоит». После честной замены его второй тест («ни один плейсхолдер не найден — зонд сломан») покраснел бы по построению, то есть за правильную работу. Заменён на сканер величин, вписанных руками мимо источника.
Ревьюер сломал первую версию нового гейта и был прав: он ловил формат числа, а не его происхождение. В охраняемый компонент прошли «Точность 9 из 10 прогнозов», «Проверено более 42700 квартир по всей России», «МЕРА в 2 раза точнее риелтора», «Работаем в 42 городах» — последнее дословно из таблицы расхождений старого гейта. Дыры закрыты, все четыре строки внесены в контроль как обязательные к отлову.
Отдельно: новый гейт проверял
noindexслабее старого — переворотindex: false → trueоставлял его зелёным. Восстановлено не слабее прежнего, и теперь по двум файлам: у страницы своя метадата, которая перекрывает layout, чего старый гейт не видел вовсе.Список сканируемых файлов больше не пишется руками — выводится из каталога компонентов, плюс проверка, что каждый импорт корня туда попал. Было 11 файлов, стало 17, и на первом же прогоне поймало живое нарушение.
Проверено
tsc·next lint·vitest·check:mera-public-isolation— чисто. Три ревьюера с разными линзами (честность / деградация / гейт), все minor. Каждая починка фальсифицирована руками: сломал → красный → вернул.noindex НЕ снят
Индексация остаётся выключенной. Числа теперь честные, но открытие наружу — отдельное решение владельца.
Ревьюер нашёл три дыры и воспроизвёл каждую на живом коде. 1. Сканер проверял ФОРМУ. Четыре маркетинговых утверждения, вписанные в DealsTickerV3, оставляли гейт зелёным 17/17: «9 из 10» (доля словами), «42700 квартир» (разделитель тысяч никакой + единица вне списка), «в 2 раза точнее» (кратность словами), «42 городах». Последнее — строка из таблицы расхождений СТАРОГО гейта, то есть новый пропускал ровно тот класс вранья, ради которого заводился. Добавлены четыре формы; эти же четыре строки внесены в контроль на инструмент — прежние шесть образцов повторяли то, что сканер и так знал, и покрытия не расширяли. 2. noindex перестал охраняться. `toContain("robots")` остаётся зелёным при `index: true` — проверено переворотом флага. Вернулась проверка значения (не слабее прежней `noindexIsOn()`), и не только в layout, но и в метаданных самой страницы, которые layout перекрывают. 3. Список файлов отставал от страницы: корень рендерил 15 компонентов, сканировались 11 — «возражения», шапка, подвал и sticky-CTA были вне охраны. Список больше не пишется руками: он выводится из каталога компонентов, а отдельная проверка требует, чтобы всё, что импортирует корень, попало в этот список (ловит компонент, положенный мимо каталога). Гейт на этой ветке КРАСНЫЙ и красный по делу: расширенный список нашёл «Проверить за 30 секунд» в HeaderV3, StickyCtaV3, ObjectionsV3 и FreeCheckCard. Замера времени заполнения формы нет и не было — это записано в landing-facts.ts и в StepsV3, откуда ту же фразу уже сняли. Правка текста — вне участка этой задачи (файлы вёрстки правит соседняя ветка).