- порядок беклога и роадмапа назначен слоями: проверки, которым можно верить → долги входа → владелец записи и контракт API → конвейер под тестами → приложение и возможности поверх; у каждого движения записана причина; - заведены восемь задач под пункты «Завершения», которых не закрывала ни одна запись, — цель any-audio-source была без задач вовсе; - у четырёх задач сняты критерии, требовавшие того, что делает задача ниже по очереди; исправлены ссылки на несуществующий repo/sqlite и на отменённую разведку об очереди.
3.9 KiB
3.9 KiB
🧹 Разобрать мелочи слоя хранилища
- Тип: chore
- Категория: Очередь — Мелочи слоя хранилища разбираются, пока слой в руках.
- Зачем: Три мелочи ниже потолка триажа: цикл воркера пишет потерю захвата уровнем ERROR и считает её отказом, тип ошибки заведён там, где конвенция просит sentinel, а FileName несёт два разных смысла.
Все три пришли ревью задачи pocketbase-storage 2026-08-12 и остались ниже
потолка отчёта — то есть реальны, но не блокировали. Собраны одной задачей,
потому что живут в одном пакете и правятся одним заходом.
- Потеря захвата — не отказ шага. Значение «задачу за время работы забрал
другой» доезжает до цикла воркера, который пишет его уровнем
ERRORи увеличивает счётчик отказов.docs/conventions/logging.mdотносит «задача досталась повторно» кWARN, а метрика отказов после этого считает не отказы. - Тип ошибки против sentinel.
docs/conventions/errors.mdпросит sentinel там, где данных у ошибки не читает никто; у значения о потерянном захвате вызывающий читает только сам факт. - Одно поле в двух смыслах. У местной копии
entity.File.FileName— имя в хранилище и последняя часть ссылки на скачивание, у внешней — ключ объекта. Различает их только соседнее поле, а совпадают они сегодня дословно: на этом совпадении держится верность строкиdocs/architecture.mdпро ключ объекта.
Затрагивает
internal/contract/error.go— значение о потерянном захвате;- цикл воркера
internal/controller/worker— уровень записи и счётчик отказов; internal/entity/file.goи его потребители вinternal/service;- строка про ключ объекта в
docs/architecture.md, «Внешние границы и форматы».
Критерии приёмки
- Потеря захвата не считается отказом и не пишется на уровне владельца сервиса.
Оракул — тест воркера: после прогона с потерянным захватом счётчик отказов не
вырос, а строка в журнале идёт уровнем
WARN. - Форма значения об отказе совпадает с конвенцией. Оракул —
golangci-lint runплюс чтениеdocs/conventions/errors.mdрядом с кодом. - Два смысла имени файла разведены либо названы в документе. Оракул —
grepпо потребителям поля: каждый читает его в одном смысле, аdocs/architecture.mdговорит про ключ объекта то же, что делает код.
Рамки
Раскладку файлов на диске и имена коллекций не трогаем: формат хранения объявлен необратимым, а шаг схемы, уехавший на сервер, не переписывается.