Files
transcriber/tasks/items/response-code-in-journal.md
T
av b4b19db6e4 tasks: заведён урожай ревью remove-telegram-intake
- шесть записей по кластерам причин: журнал под внешним значением, нулевой
  код ответа в журнале, затирание вложения бедным ответом, открытый анониму
  адрес подтверждения почты, рубеж расшифровки без работы, пределы длительности
- находка про код 500 у отказа приёма дописана в json-api-for-spa: там живёт
  единая точка отображения доменной ошибки
- telegram-account-link и bot-api-only-through-bot-client оставлены с оговоркой,
  что предмета у них нет до возвращения входа
2026-08-15 07:46:16 +03:00

3.3 KiB

🐞 Писать в журнал код ответа отвергнутого запроса

  • Тип: fix
  • Категория: Очередь — Заведена урожаем ревью и встала в конец машинально: место в плане стройки назначает человек.
  • Зачем: У всякого запроса, отвергнутого роутером, в журнале стоит нулевой код: всплеск отказов доступа неотличим от обычного трафика.
  • Теги: review-2026-08-15

Код ответа в журнале называет исход запроса, а не ноль.

Обработчик, завершившийся отказом роутера — 401 без сессии, 403 без учётной записи, 404 на чужой записи, 500 на сбое, — пишет статус в ответ после возврата из слоя журнала. Слой читает его раньше и получает ноль. Верное значение попадает в журнал только у обработчиков, отвечающих самостоятельно.

Разграничение записей по владельцу устроено так, что чужая запись отвечает тем же, чем несуществующая. Единственное место, где виден перебор идентификаторов, — журнал; а именно эти строки и приезжают с нулём.

Воспроизведение

Поднять сервис и послать четыре запроса подряд:

/auth/login  → 302   ... http.route=/auth/login  http.status_code=302
/api/audio   → 404   ... http.route=/api/audio   http.status_code=0
/nope        → 404   ... http.route=/nope        http.status_code=0
POST /api/audio без сессии → 401 ... http.status_code=0

Первый обработчик отвечает сам и код пишет верно; три остальных отвергнуты роутером и дают ноль.

Затрагивает

  • слой журнала запроса в main.go: место, где снимается код ответа;
  • docs/conventions/logging.md — словарь полей запроса.

Критерии приёмки

  • Отвергнутый запрос пишет в журнал свой код. Оракул: те же четыре запроса — 401, 403, 404 и 500 приезжают в поле кода, ноля в нём нет ни у одного.
  • Обработчик, отвечающий самостоятельно, продолжает писать свой код. Оракул: запрос входа по-прежнему даёт 302.

Рамки

Найдено прогоном ревью задачи remove-telegram-intake 2026-08-15, враждебный проход, оракул — живой прогон. Дефект существовал до той правки: изменение этот слой не трогало. Метрики кодов ответа у сервиса нет вовсе, и заводить её этой задачей не надо — она про журнал.