fix(mera/b2c): /estimate снова закрывался гвардом — короткий адрес завели в Caddy, но не в RouteGuard #2918

Merged
lekss361 merged 1 commit from fix/mera-estimate-guard-bypass into main 2026-08-16 07:40:55 +00:00
Owner

Замер на живом домене сразу после выкатки #2913.

Симптом

meraocenka.ru/estimate отдаёт 200 и выглядит правильно, но после гидратации монтируется GuardedRoute:

404  /trade-in/api/v1/me                            ×3
404  /trade-in/api/v1/trade-in/support/anon/unread

плюс виджет чата поддержки из закрытого контура и экран «Не удалось проверить доступ» внизу страницы.

Хуже видимого: форма переставала работать вовсе. Разметка с сервера отрисована, поле принимает текст — а обработчики не подключены, поэтому человек печатает адрес и не получает ни подсказок, ни ошибки. Проверено, что дело не в API: ручной fetch из той же страницы отдаёт 200 items=8.

Причина

Ровно та же, что чинил #2910 для /: список публичных путей в гварде и матчер @meraPages в Caddyfile — это одно множество, записанное в двух местах.

Тогда разошлись на / (домен появился, гвард о нём не знал). Теперь — на /estimate: короткий адрес завели в конфиге прокси, добавить в гвард забыли. Оба раза страница отдавала 200, ломалась только в браузере, и ни один тест этого не видел.

Почему комментария оказалось мало

В шапке гварда уже стоял разбор прошлого инцидента. Он не помог: правка была в другом файле, и человек, добавляющий строку в Caddyfile, этот комментарий не открывает.

Поэтому совпадение запинено тестом, который читает Caddyfile и требует, чтобы каждый путь из @meraPages проходил isPublicPath. Сверка с источником вместо третьей копии списка.

Мутация — вернуть список ровно к тому состоянию, которое уехало на прод:

мутация → 2 failed / 3 passed
   × пропускает короткие адреса публичного домена
   × совпадает с тем, что публичный домен реально раздаёт (Caddyfile)
откат   → 5 passed

Проверено

vitest 56 passed, tsc, next lint, isolation guard 41 файл.

Caddyfile уже входит в paths-фильтр фронтового лэйна (добавлен в #2913), поэтому правка одного лишь конфига прокси теперь тоже запускает этот гейт.

Замер на живом домене сразу после выкатки #2913. ## Симптом `meraocenka.ru/estimate` отдаёт 200 и выглядит правильно, но после гидратации монтируется `GuardedRoute`: ``` 404 /trade-in/api/v1/me ×3 404 /trade-in/api/v1/trade-in/support/anon/unread ``` плюс виджет чата поддержки из закрытого контура и экран «Не удалось проверить доступ» внизу страницы. Хуже видимого: **форма переставала работать вовсе**. Разметка с сервера отрисована, поле принимает текст — а обработчики не подключены, поэтому человек печатает адрес и не получает ни подсказок, ни ошибки. Проверено, что дело не в API: ручной `fetch` из той же страницы отдаёт `200 items=8`. ## Причина Ровно та же, что чинил #2910 для `/`: список публичных путей в гварде и матчер `@meraPages` в `Caddyfile` — это одно множество, записанное в двух местах. Тогда разошлись на `/` (домен появился, гвард о нём не знал). Теперь — на `/estimate`: короткий адрес завели в конфиге прокси, добавить в гвард забыли. Оба раза страница отдавала 200, ломалась только в браузере, и ни один тест этого не видел. ## Почему комментария оказалось мало В шапке гварда уже стоял разбор прошлого инцидента. Он не помог: правка была в другом файле, и человек, добавляющий строку в Caddyfile, этот комментарий не открывает. Поэтому совпадение запинено **тестом**, который читает `Caddyfile` и требует, чтобы каждый путь из `@meraPages` проходил `isPublicPath`. Сверка с источником вместо третьей копии списка. Мутация — вернуть список ровно к тому состоянию, которое уехало на прод: ``` мутация → 2 failed / 3 passed × пропускает короткие адреса публичного домена × совпадает с тем, что публичный домен реально раздаёт (Caddyfile) откат → 5 passed ``` ## Проверено `vitest` 56 passed, `tsc`, `next lint`, isolation guard 41 файл. `Caddyfile` уже входит в paths-фильтр фронтового лэйна (добавлен в #2913), поэтому правка одного лишь конфига прокси теперь тоже запускает этот гейт.
lekss361 added 1 commit 2026-08-16 07:39:35 +00:00
fix(mera/b2c): /estimate снова закрывался гвардом — короткий адрес завели в Caddy, но не в RouteGuard
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 9s
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 / 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 55s
e74e9106b3
Замер на проде сразу после выкатки #2913: страница `/estimate` отдаёт 200 и
выглядит правильно, но после гидратации монтируется `GuardedRoute` —

  404 /trade-in/api/v1/me                             ×3
  404 /trade-in/api/v1/trade-in/support/anon/unread

плюс виджет чата поддержки из закрытого контура и экран «Не удалось проверить
доступ» внизу страницы. Форма при этом переставала работать ВОВСЕ: разметка с
сервера видна, поле принимает текст, а обработчики не подключены — человек
печатает адрес и не получает ни подсказок, ни ошибки. Проверено, что дело не в
API: ручной `fetch` из той же страницы отдаёт 200 и восемь подсказок.

Причина ровно та же, что чинил PR #2910 для `/`: список публичных путей в
гварде и матчер `@meraPages` в Caddyfile — одно множество, записанное в двух
местах. Тогда разошлись на `/`, теперь на `/estimate`. Оба раза страница
отдавала 200, ломалась только в браузере, и ни один тест этого не видел.

Комментарий в шапке гварда инцидент не предотвратил (он там был), поэтому
совпадение теперь запинено ТЕСТОМ: он читает Caddyfile и требует, чтобы каждый
путь из `@meraPages` проходил `isPublicPath`. Сверяемся с источником, а не
дублируем список третий раз.

Мутация — вернуть список к состоянию, которое уехало на прод:
  2 failed / 3 passed
  × пропускает короткие адреса публичного домена
  × совпадает с тем, что публичный домен реально раздаёт (Caddyfile)
откат → 5 passed.

Плюс vitest 56 passed, tsc, lint, isolation guard 41 файл.

`Caddyfile` уже в paths-фильтре фронтового лэйна (#2913), так что правка одного
лишь конфига теперь тоже гоняет этот гейт.
lekss361 merged commit d38e83df82 into main 2026-08-16 07:40:55 +00:00
lekss361 deleted branch fix/mera-estimate-guard-bypass 2026-08-16 07:40:55 +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#2918
No description provided.