- main.go и journal_route_test.go переехали в cmd/transcriber без правок содержимого; образ собирает ./cmd/transcriber поимённо - cmd/oidcstub отвечает на /authorize, /token и /userinfo, проверок не делает и слушает петлевой адрес: войти без Authelia стало чем - ступень сборки приложения переехала на node:24 с alpine — musl ждёт ответа на AAAA, которого нет, и npm ci висел вместо отказа
3.8 KiB
🐞 Писать в журнал код ответа отвергнутого запроса
- Тип: 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, враждебный
проход, оракул — живой прогон. Дефект существовал до той правки: изменение этот
слой не трогало. Метрики кодов ответа у сервиса нет вовсе, и заводить её этой задачей не
надо — она про журнал.