закрыта задача errors-as-instead-of-typecast
This commit is contained in:
@@ -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` на пустом прогоне не растёт. Оракул —
|
||||
тот же тест, проверка значения счётчика до и после.
|
||||
|
||||
## Рамки
|
||||
|
||||
Поведение снаружи не меняется; конвейер не трогаем.
|
||||
Reference in New Issue
Block a user