diff --git a/tasks/BACKLOG.md b/tasks/BACKLOG.md index 6dc3eaa..cc20c90 100644 --- a/tasks/BACKLOG.md +++ b/tasks/BACKLOG.md @@ -49,7 +49,6 @@ - [✨ Резать длинную запись на фрагменты и продолжать с места остановки](items/long-audio-chunking.md) — Шаг конвейера повторяется целиком: перезапуск на пятом часу шестичасовой записи начинает распознавание заново и оплачивает его второй раз. - [✨ Отдавать текст в сотни килобайт файлом, а не сотней сообщений](items/long-text-delivery.md) — Отправитель Telegram режет текст по 4000 знаков: расшифровка шестичасовой записи придёт сотней сообщений подряд. - [🔬 Загрузка большого файла частями](items/chunked-upload-choice.md) — Гигабайтный файл едет одним запросом, и обрыв на девяноста процентах начинает его заново. -- [🧹 Сравнивать доменные ошибки через errors.As](items/errors-as-instead-of-typecast.md) — NoopJobError и JobNotFoundError проверяются приведением типа: первая же обёртка %w между слоями сломает проверку молча. - [🧹 Покрыть тестами разбор вывода ffprobe](items/metaviewer-adapter-tests.md) — Проверки приёма перестали звать настоящий ffprobe 2026-08-11, а своего теста у адаптера метаданных нет: разбор JSON и отличие «программы нет в PATH» от «обработка отказала» не проверяет ничто. - [🧹 Покрыть тестами шаги конвейера и захват задачи](items/pipeline-step-tests.md) — Тестовых файлов в проекте два, и оба мимо конвейера: потеря ссылки на файл, двойной ответ пользователю и гонка при захвате не поймаются ничем. - [🧹 Разобрать мелочи http-транспорта](items/http-transport-nits.md) — Маршруты зарегистрированы дважды, и переименование пути в main.go проходит проверки зелёным; обработчик пишет в журнал через стандартный log и дублирует запись, уже сделанную сервисом. diff --git a/tasks/items/errors-as-instead-of-typecast.md b/tasks/items/errors-as-instead-of-typecast.md deleted file mode 100644 index 3f62c24..0000000 --- a/tasks/items/errors-as-instead-of-typecast.md +++ /dev/null @@ -1,35 +0,0 @@ -# 🧹 Сравнивать доменные ошибки через errors.As - -- **Тип:** chore -- **Категория:** Очередь -- **Зачем:** NoopJobError и JobNotFoundError проверяются приведением типа: первая же обёртка %w между слоями сломает проверку молча. - -Сегодня это работает только потому, что ошибку на этом пути никто не -оборачивает. Сломается тихо: воркер перестанет отличать «задач нет» от отказа и -начнёт писать `ERROR` раз в секунду на каждый из трёх воркеров, а `NoopJobError` -попадёт в метрику отказов. - -Правило записано в [conventions/errors.md](../../docs/conventions/errors.md), -линтер на этих двух местах уже красный. - -## Затрагивает - -- `internal/controller/worker/worker.go`, проверка `NoopJobError`; -- `internal/service/transcribe.go`, метод `findJob`, проверка - `JobNotFoundError`; -- `internal/contract/error.go` — оба типа полей не несут и годятся в sentinel; -- `.golangci.yml` — после правки `errorlint` на этих местах должен молчать. - -## Критерии приёмки - -- Обе проверки идут через `errors.As` либо через `errors.Is` по sentinel. - Оракул — `golangci-lint run` не даёт замечаний `errorlint`. -- Обёртка `fmt.Errorf("…: %w", err)` в середине пути не ломает распознавание. - Оракул — тест: обёрнутый `NoopJobError` воркер по-прежнему считает пустым - прогоном и не пишет ни лога, ни метрики. -- Метрика `transcriber_worker_job_count` на пустом прогоне не растёт. Оракул — - тот же тест, проверка значения счётчика до и после. - -## Рамки - -Поведение снаружи не меняется; конвейер не трогаем.