«Для бизнеса» вела на форму входа — заведена страница /business #3294

Merged
bot-backend merged 2 commits from feat/mera-business-page into main 2026-08-31 09:14:35 +00:00
Collaborator

Владелец просил это дважды. Прокликал прод и подтвердил цепочку целиком:

/trade-in/ → 308 → /trade-in → 307 → /trade-in/v2 → клиентский редирект → /trade-in/login

Итог — «Вход. Логин / Пароль». Бизнес-клиент получал форму входа в аккаунт, которого у него нет. Та же ссылка стояла и в подвале («МЕРА для бизнеса»), и в шапке внутренних страниц.

Что сделано

Публичная /business на meraocenka.ru: кому полезен бизнес-контур, чем отличается от бесплатной проверки, как связаться. Три ссылки переведены на неё. Вход в существующий аккаунт остался — но второстепенным, «Уже работаете с нами?», а не главным действием.

Контакты переиспользованы, а не выдуманы: та же почта и тот же телеграм, что в подвале и на /docs.

Копия описывает только то, что в контуре есть

Первая версия обещала «расчёты по потоку адресов» и «не для одной сделки, а потоком». Массовой загрузки в контуре нет — ни CSV, ни импорта, ни пакетной ручки (проверено grep-ом по src/app/v2).

Заменено на проверяемое: учётные записи команды (api/v1/team.py), история своих расчётов (useEstimateHistory, оверлей «Предыдущие оценки»), месячный лимит на аккаунт (account_quota_overrides), выдача доступа вручную.

Это ровно тот дефект, который на этом лендинге выкорчёвывали весь день — возможность, которой никто не делал, в продуктовом голосе. Новая страница не имеет права начинать заново.

Формы заявки нет — сознательно

Анонимной ручки под B2B-лид в бэкенде не существует; форма писала бы в никуда. Каналы — почта и телеграм. Нужна форма — это отдельная работа с ручкой на бэке.

Периметр согласован в четырёх местах

PUBLIC_ROUTES · три матчера Caddy (@meraPages, @meraShortSlash, @meraLongPages) · PUBLIC_SHORT_PATHS в RouteGuard · тесты, которые эту тройку и сверяют. Плюс строка в канарейке периметра. Рассогласование дало бы 404 на проде.

Фальсификация автором и ревьюером независимо и в разных местах: убрать |business из @meraShortSlash → краснеет public-perimeter.test.ts; убрать /business из PUBLIC_SHORT_PATHS → краснеет RouteGuard.publicPaths.test.ts.

Гейт чисел накрыл подстраницы

Ревьюер заметил: сканер знал два места — корневой page.tsx и _components/v3. Новая публичная страница под него не попадала, и правило держалось на памяти автора.

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

Юридические страницы исключены явно и с обоснованием: они состоят из ссылок на законы («Закон РФ от 07.02.1992 № 2300-1», «152-ФЗ», «ст. 18.1»), а по форме это те же числа, что и замеры — регулярным выражением не различить. Расширение на них давало 4 ложных срабатывания; это проверено, а не предположено.

Фальсификация: вписанные в /business «42 700 квартир» роняют гейт по значению с указанием файла.

Проверки

vitest 150 passed · tsc rc=0 · eslint --max-warnings 0 rc=0.

Не проверено живьём

Страницы на проде ещё нет и Caddy не перезагружался — 200 по meraocenka.ru/business подтвердится только после деплоя фронта И reload Caddy. Смоук-строка добавлена под это.

Оставшиеся мелочи ревьюера, не блокеры: карточка «Бизнес-контур» — <span> с тем же классом, что у кликабельной соседки, и с :hover (выглядит ссылкой, не кликается); на самой /business пункт шапки ведёт сам на себя; у B2B_URL остались два JSDoc-блока подряд.

Владелец просил это дважды. Прокликал прод и подтвердил цепочку целиком: ``` /trade-in/ → 308 → /trade-in → 307 → /trade-in/v2 → клиентский редирект → /trade-in/login ``` Итог — «Вход. Логин / Пароль». **Бизнес-клиент получал форму входа в аккаунт, которого у него нет.** Та же ссылка стояла и в подвале («МЕРА для бизнеса»), и в шапке внутренних страниц. ## Что сделано Публичная `/business` на `meraocenka.ru`: кому полезен бизнес-контур, чем отличается от бесплатной проверки, как связаться. Три ссылки переведены на неё. Вход в существующий аккаунт остался — но второстепенным, «Уже работаете с нами?», а не главным действием. Контакты **переиспользованы**, а не выдуманы: та же почта и тот же телеграм, что в подвале и на `/docs`. ## Копия описывает только то, что в контуре есть Первая версия обещала «расчёты по потоку адресов» и «не для одной сделки, а потоком». Массовой загрузки в контуре **нет** — ни CSV, ни импорта, ни пакетной ручки (проверено grep-ом по `src/app/v2`). Заменено на проверяемое: учётные записи команды (`api/v1/team.py`), история своих расчётов (`useEstimateHistory`, оверлей «Предыдущие оценки»), месячный лимит на аккаунт (`account_quota_overrides`), выдача доступа вручную. Это ровно тот дефект, который на этом лендинге выкорчёвывали весь день — возможность, которой никто не делал, в продуктовом голосе. Новая страница не имеет права начинать заново. ## Формы заявки нет — сознательно Анонимной ручки под B2B-лид в бэкенде не существует; форма писала бы в никуда. Каналы — почта и телеграм. Нужна форма — это отдельная работа с ручкой на бэке. ## Периметр согласован в четырёх местах `PUBLIC_ROUTES` · три матчера Caddy (`@meraPages`, `@meraShortSlash`, `@meraLongPages`) · `PUBLIC_SHORT_PATHS` в `RouteGuard` · тесты, которые эту тройку и сверяют. Плюс строка в канарейке периметра. Рассогласование дало бы 404 на проде. Фальсификация автором и ревьюером **независимо и в разных местах**: убрать `|business` из `@meraShortSlash` → краснеет `public-perimeter.test.ts`; убрать `/business` из `PUBLIC_SHORT_PATHS` → краснеет `RouteGuard.publicPaths.test.ts`. ## Гейт чисел накрыл подстраницы Ревьюер заметил: сканер знал два места — корневой `page.tsx` и `_components/v3`. Новая **публичная** страница под него не попадала, и правило держалось на памяти автора. Теперь подстраницы находятся **обходом каталога**, а не списком: список — снимок, следующую страницу в него снова забудут вписать. Юридические страницы исключены явно и с обоснованием: они состоят из ссылок на законы («Закон РФ от 07.02.1992 № 2300-1», «152-ФЗ», «ст. 18.1»), а по форме это те же числа, что и замеры — регулярным выражением не различить. Расширение на них давало 4 ложных срабатывания; это проверено, а не предположено. Фальсификация: вписанные в `/business` «42 700 квартир» роняют гейт по значению с указанием файла. ## Проверки `vitest` 150 passed · `tsc` rc=0 · `eslint --max-warnings 0` rc=0. ## Не проверено живьём Страницы на проде ещё нет и Caddy не перезагружался — **200 по `meraocenka.ru/business` подтвердится только после деплоя фронта И reload Caddy**. Смоук-строка добавлена под это. Оставшиеся мелочи ревьюера, не блокеры: карточка «Бизнес-контур» — `<span>` с тем же классом, что у кликабельной соседки, и с `:hover` (выглядит ссылкой, не кликается); на самой `/business` пункт шапки ведёт сам на себя; у `B2B_URL` остались два JSDoc-блока подряд.
bot-backend added 2 commits 2026-08-31 08:03:21 +00:00
Кнопка «Для бизнеса» в шапке и «МЕРА для бизнеса» в подвале вели на B2B_URL.
Реальная цепочка на проде: 308 → /trade-in → 307 → /trade-in/v2 → клиентский
редирект → /trade-in/login. Посетитель публичного сайта упирался в форму
«Логин / Пароль» от аккаунта, которого у него нет.

Заведена страница /business: кому полезен бизнес-контур, чем он отличается от
бесплатной проверки, и как связаться (почта и телеграм — те же константы, что
в подвале и в документах, не выдуманные для страницы). Ни цен, ни сроков, ни
объёмов: этих величин никто не мерил. Ссылка на вход оставлена внутри страницы
второстепенной — «уже работаете с нами».

Периметр согласован во всех четырёх местах: PUBLIC_ROUTES, три матчера Caddy
(@meraPages, @meraShortSlash, @meraLongPages), PUBLIC_SHORT_PATHS в RouteGuard,
плюс строка в smoke-mera-perimeter.sh. Гейт периметра проверен фальсификацией:
удаление /business из @meraShortSlash роняет public-perimeter.test.ts.

noindex — тем же способом, что у /docs (metadata.robots).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
для бизнеса: убраны обещания, которых нет в контуре; гейт чисел накрыл подстраницы
All checks were successful
CI Trade-In / changes (pull_request) Successful in 10s
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) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 1m3s
c4beee29ff
Снимает два замечания ревью.

1. КОПИЯ ОБЕЩАЛА НЕСУЩЕСТВУЮЩЕЕ. «Расчёты по потоку адресов», «не для одной
сделки, а потоком», «по вашему потоку адресов» — всё это подразумевает
массовую загрузку, которой в контуре нет: ни CSV, ни импорта, ни пакетной
ручки. Проверено grep-ом по src/app/v2.

Что там ЕСТЬ на самом деле и теперь названо: учётные записи команды
(app/api/v1/team.py), история своих расчётов (useEstimateHistory, оверлей
«Предыдущие оценки»), месячный лимит на аккаунт (account_quota_overrides,
monthly_limit/unlimited), выдача доступа вручную.

Это ровно тот дефект, который на этом лендинге выкорчёвывали весь день:
величина или возможность, которой никто не мерил и не делал, в продуктовом
голосе. Новая страница не имеет права начинать заново.

2. ГЕЙТ ЧИСЕЛ НЕ ВИДЕЛ НОВУЮ СТРАНИЦУ. Сканер знал два места: корневой
page.tsx и каталог _components/v3. Публичная /business под него не попадала —
правило держалось на памяти автора. Теперь подстраницы находятся ОБХОДОМ
каталога, а не списком: список — снимок, следующую страницу в него снова
забудут вписать.

Юридические страницы (оферта, политика, возврат, документы) исключены явно и
с обоснованием: они состоят из ссылок на законы («Закон РФ от 07.02.1992
№ 2300-1», «152-ФЗ», «ст. 18.1»), а по форме это те же числа, что и замеры.
Отличить регулярным выражением нельзя, и правило гейта к ним не относится —
там числа цитируются из нормативных актов, а не утверждаются о рынке.
Расширение проверено: включение этих страниц давало 4 ложных срабатывания.

Фальсификация: вписанные в /business «42 700 квартир» роняют гейт по значению
с указанием файла. 150 passed, tsc и eslint чисто.
bot-backend merged commit 078f102841 into main 2026-08-31 09:14:35 +00:00
bot-backend deleted branch feat/mera-business-page 2026-08-31 09:14:36 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
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#3294
No description provided.