# 🧹 Писать об одном отказе шага одну строку журнала - **Тип:** chore - **Категория:** Очередь — Правит цикл воркера следом за мелочами того же цикла: уровень записи и число записей — один заход - **Зачем:** Временный отказ шага доезжает до владельца двумя строками ERROR: шаг пишет ошибку и возвращает её, воркер пишет её снова — в журнале отказов вдвое больше, чем было. - **Теги:** review-2026-08-23 Временный отказ шага конвейера доезжает до владельца сервиса дважды: шаг пишет ошибку в журнал и возвращает её, а цикл воркера пишет её снова строкой `Worker error` — `internal/controller/worker/worker.go`. Вопрос стоит триггером ревью в [review.md](../../docs/review.md) с 2026-08-10 — «не удвоилась ли запись об одном сбое» — и остаётся открытым: на прогоне ревью change `2026-08-23-storage-without-pocketbase` удвоение воспроизведено дословным выводом (проход `review-ops`, O2). Цена — счёт: всплеск отказов в журнале вдвое больше настоящего, и владелец судит по нему о поломке. То же правило для транспорта записано критерием задачи [http-transport-nits](http-transport-nits.md); порознь они потому, что живут в разных пакетах и правятся разными заходами. ## Затрагивает - цикл воркера `internal/controller/worker/worker.go` — строка `Worker error`; - шаги конвейера `internal/service` — их собственные записи об отказе; - конвенция [logging.md](../../docs/conventions/logging.md) — кто отвечает за запись об ошибке, родивший её слой или получивший. ## Критерии приёмки - Об одном временном отказе шага в журнале одна запись. **Оракул:** тест с перехваченным журналом — шаг отказывает один раз, строк уровня `ERROR` про этот отказ ровно одна. - Запись несёт то, чего у второй стороны нет. **Оракул:** тот же тест — в строке есть имя шага, идентификатор записи и причина. - Молчание не заводится. **Оракул:** тот же тест — отказ шага без записи в журнал не проходит: строк по нему не ноль. ## Рамки `NoopJobError` не логируется и не считается — инвариант, и эта задача его не трогает. Уровни `WARN` и `ERROR` не переопределяются: правит кто пишет, а не чем.