compliance: заменить маркетинговые метрики лэндинга на вычисляемые до снятия noindex #2904

Closed
opened 2026-08-15 16:04:27 +00:00 by lekss361 · 1 comment
Owner

Лэндинг v3 верстается с числами из макета: «средняя ошибка прогноза 1,8%», «±6 дн», «83% сделок попали в диапазон», «42 700 проверок за год, из них 3 180 сверены», «−4,3% за месяц простоя», «×2,4 дольше», «данные по 42 городам РФ». Решение владельца — оставить их как продающие.

Что с ними не так по замерам (зафиксировать, чтобы не потерялось)

Заявлено Факт
средняя ошибка 1,8% 13,2% медиана по модулю (бэктест n=277), held-out 16,1%
83% в диапазон 81,95%, но коридор шириной 74% от точки
±6 дн по сроку сверки срока с фактом не существует
42 700 проверок за год 1 084 оценки всего (база живёт 2,5 месяца), 141 за 30 дней, платежей 0
42 города РФ 6 городов области в реестре, полное покрытие — 1 (ЕКБ)

Что сделать

  • Держать все эти величины в одном модуле констант с пометкой «плейсхолдер, не подтверждено замером».
  • Гейт: до снятия robots: {index:false} и открытия домена наружу каждая цифра либо заменяется вычисляемой, либо снимается со страницы. Публикация недостоверных характеристик платной услуги — это ст. 5 ФЗ «О рекламе» и ЗоЗПП.
  • Ближайшая честная замена для точности — офлайн-бэктест с подписью, чем он является (см. задачу про контур сверки).
Лэндинг v3 верстается с числами из макета: «средняя ошибка прогноза 1,8%», «±6 дн», «83% сделок попали в диапазон», «42 700 проверок за год, из них 3 180 сверены», «−4,3% за месяц простоя», «×2,4 дольше», «данные по 42 городам РФ». Решение владельца — оставить их как продающие. ## Что с ними не так по замерам (зафиксировать, чтобы не потерялось) | Заявлено | Факт | |---|---| | средняя ошибка 1,8% | **13,2%** медиана по модулю (бэктест n=277), held-out 16,1% | | 83% в диапазон | **81,95%**, но коридор шириной 74% от точки | | ±6 дн по сроку | сверки срока с фактом **не существует** | | 42 700 проверок за год | **1 084** оценки всего (база живёт 2,5 месяца), 141 за 30 дней, платежей 0 | | 42 города РФ | 6 городов области в реестре, полное покрытие — **1** (ЕКБ) | ## Что сделать - Держать все эти величины в **одном** модуле констант с пометкой «плейсхолдер, не подтверждено замером». - **Гейт:** до снятия `robots: {index:false}` и открытия домена наружу каждая цифра либо заменяется вычисляемой, либо снимается со страницы. Публикация недостоверных характеристик платной услуги — это ст. 5 ФЗ «О рекламе» и ЗоЗПП. - Ближайшая честная замена для точности — офлайн-бэктест с подписью, чем он является (см. задачу про контур сверки).
lekss361 added the
compliance
priority/p1
labels 2026-08-15 16:04:27 +00:00
lekss361 added the
scope/frontend
tradein
labels 2026-08-16 10:25:33 +00:00
Collaborator

Сделано и проверено, включая то, что гейт действительно краснеет — закрываю

Все три пункта задачи закрыты, причём вторым — механически, а не комментарием.

1. Числа в одном модуле с пометкой

frontend/src/app/mera-public/marketing-v3.ts — четыре экспорта (ACCURACY_PLACEHOLDER, COST_OF_ERROR_PLACEHOLDER, FREE_SAMPLE_PLACEHOLDER, PROOF_ROWS_PLACEHOLDER). В шапке — таблица «здесь / факт по замеру» ровно в том виде, в каком она записана в этой задаче: 1,8% против 13,2%, 83% против 81,95% при коридоре 74%, ±6 дн при отсутствующей сверке срока, 42 700 против 1 084, 42 города против одного с полным покрытием.

Проверил, что модуль не обходят: поиск литералов 1,8%, 42 700, 83%, ±6, −4,3%, ×2,4, «42 город» по всем компонентам v3 и по странице — ни одного вхождения. Числа живут только в модуле, замена действительно будет одной правкой.

2. Гейт — и он работает, а не декларируется

__tests__/marketing-placeholders-gate.test.ts читает layout.tsx и компоненты v3 с диска и падает, если плейсхолдеры используются, а robots: { index: false } снят.

Проверил обе стороны, а не только зелёную:

как есть                      → 3 passed
временно index: true          → 1 failed:
  «лэндинг v3 всё ещё использует непроверенные величины:
   ACCURACY_PLACEHOLDER, COST_OF_ERROR_PLACEHOLDER, FREE_SAMPLE_PLACEHOLDER,
   PROOF_ROWS_PLACEHOLDER, но robots: { index: false } в layout.tsx снят»

layout.tsx после проверки возвращён в исходное состояние (git status чист).

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

3. Расхождения зафиксированы там, где их прочтут

Не только в задаче, но и в шапках обоих файлов — то есть у того, кто будет править числа, а не у того, кто откроет трекер.

Что этим НЕ сделано

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

## Сделано и проверено, включая то, что гейт действительно краснеет — закрываю Все три пункта задачи закрыты, причём вторым — механически, а не комментарием. ### 1. Числа в одном модуле с пометкой `frontend/src/app/mera-public/marketing-v3.ts` — четыре экспорта (`ACCURACY_PLACEHOLDER`, `COST_OF_ERROR_PLACEHOLDER`, `FREE_SAMPLE_PLACEHOLDER`, `PROOF_ROWS_PLACEHOLDER`). В шапке — таблица «здесь / факт по замеру» ровно в том виде, в каком она записана в этой задаче: 1,8% против 13,2%, 83% против 81,95% при коридоре 74%, ±6 дн при отсутствующей сверке срока, 42 700 против 1 084, 42 города против одного с полным покрытием. Проверил, что модуль не обходят: поиск литералов `1,8%`, `42 700`, `83%`, `±6`, `−4,3%`, `×2,4`, «42 город» по всем компонентам v3 и по странице — **ни одного вхождения**. Числа живут только в модуле, замена действительно будет одной правкой. ### 2. Гейт — и он работает, а не декларируется `__tests__/marketing-placeholders-gate.test.ts` читает `layout.tsx` и компоненты v3 с диска и падает, если плейсхолдеры используются, а `robots: { index: false }` снят. Проверил обе стороны, а не только зелёную: ``` как есть → 3 passed временно index: true → 1 failed: «лэндинг v3 всё ещё использует непроверенные величины: ACCURACY_PLACEHOLDER, COST_OF_ERROR_PLACEHOLDER, FREE_SAMPLE_PLACEHOLDER, PROOF_ROWS_PLACEHOLDER, но robots: { index: false } в layout.tsx снят» ``` `layout.tsx` после проверки возвращён в исходное состояние (`git status` чист). Это важнее, чем кажется: правило, записанное только в комментарии, не мешает снять одну строку в метаданных и выкатить страницу. Теперь снятие `noindex` физически не проходит мимо решения о числах. ### 3. Расхождения зафиксированы там, где их прочтут Не только в задаче, но и в шапках обоих файлов — то есть у того, кто будет править числа, а не у того, кто откроет трекер. ### Что этим НЕ сделано Вычисляемых метрик не появилось: `noindex` стоит, страница наружу не открыта, числа остаются продающими по решению владельца. Задача и требовала не заменить их сейчас, а сделать замену обязательной к моменту открытия. Ближайшая честная замена для точности — офлайн-бэктест с подписью, чем он является; это отдельная работа про контур сверки.
Sign in to join this conversation.
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2904
No description provided.