# 🐞 Писать в журнал код ответа отвергнутого запроса - **Тип:** fix - **Категория:** Очередь — Заведена урожаем ревью и встала в конец машинально: место в плане стройки назначает человек. - **Зачем:** У всякого запроса, отвергнутого роутером, в журнале стоит нулевой код: всплеск отказов доступа неотличим от обычного трафика. - **Теги:** review-2026-08-15 Код ответа в журнале называет исход запроса, а не ноль. Обработчик, завершившийся отказом роутера — `401` без сессии, `403` без учётной записи, `404` на чужой записи, `500` на сбое, — пишет статус в ответ **после** возврата из слоя журнала. Слой читает его раньше и получает ноль. Верное значение попадает в журнал только у обработчиков, отвечающих самостоятельно. Разграничение записей по владельцу устроено так, что чужая запись отвечает тем же, чем несуществующая. Единственное место, где виден перебор идентификаторов, — журнал; а именно эти строки и приезжают с нулём. ## Воспроизведение Поднять сервис и послать четыре запроса подряд: ``` /auth/login → 302 ... http.route=/auth/login http.status_code=302 /app/audiorecords → 404 ... http.route=/app/audiorecords http.status_code=0 /nope → 404 ... http.route=/nope http.status_code=0 POST /app/audiorecords без сессии → 401 ... http.status_code=0 ``` Первый обработчик отвечает сам и код пишет верно; три остальных отвергнуты роутером и дают ноль. Прогон снят до того, как приложение переехало из `/api/` в `/app/` решением владельца 2026-08-15: тогда те же строки стояли с адресом `/api/audio`. Предмет находки от переезда не зависит — ноль пишет роутер, а не обработчик, — и воспроизводится она с любым адресом, который роутер отверг. ## Затрагивает - слой журнала запроса в `cmd/transcriber`: место, где снимается код ответа; - `docs/conventions/logging.md` — словарь полей запроса. ## Критерии приёмки - Отвергнутый запрос пишет в журнал свой код. Оракул: те же четыре запроса — `401`, `403`, `404` и `500` приезжают в поле кода, ноля в нём нет ни у одного. - Обработчик, отвечающий самостоятельно, продолжает писать свой код. Оракул: запрос входа по-прежнему даёт `302`. ## Рамки Найдено прогоном ревью задачи `remove-telegram-intake` 2026-08-15, враждебный проход, оракул — живой прогон. Дефект существовал до той правки: изменение этот слой не трогало. Метрики кодов ответа у сервиса нет вовсе, и заводить её этой задачей не надо — она про журнал.