- порядок беклога и роадмапа назначен слоями: проверки, которым можно верить → долги входа → владелец записи и контракт API → конвейер под тестами → приложение и возможности поверх; у каждого движения записана причина; - заведены восемь задач под пункты «Завершения», которых не закрывала ни одна запись, — цель any-audio-source была без задач вовсе; - у четырёх задач сняты критерии, требовавшие того, что делает задача ниже по очереди; исправлены ссылки на несуществующий repo/sqlite и на отменённую разведку об очереди.
3.4 KiB
🧹 Покрыть тестами шаги конвейера и захват задачи
- Тип: chore
- Категория: Очередь — Шаги конвейера не покрыты ничем, а удаление, уровни текста и резка длинных записей переписывают именно их: дальше без тестов идти вслепую.
- Зачем: Тестовых файлов в проекте два, и оба мимо конвейера: потеря ссылки на файл, двойной ответ пользователю и гонка при захвате не поймаются ничем.
- Теги: review-2026-08-11
Тестовых файлов в проекте два: приём по HTTP и деление длинного сообщения
Telegram. Шаги конвейера — FindAndRunConversionJob, FindAndRunTranscribeJob,
FindAndRunTranscribeCheckJob — и воркеры, которые их выполняют, не покрыты ничем.
Свойства, названные типовым узлом «Шаг конвейера» в
review.md, сегодня не проверяет ни одна команда: что
«задач нет» отличается от отказа, что ссылка на файл не теряется, что повтор не
плодит лишних записей, что пользователю отвечают ровно один раз. Три воркера
читают общий *sql.DB, и теста с параллельным доступом нет тоже.
Найдено проходом review-autotests ревью кода change
2026-08-11-fix-http-handler-tests, вопросом темы autotests.
Затрагивает
internal/service— новые тесты шагов конвейера;internal/controller/worker— тест на одновременную работу трёх воркеров против одной базы;- подстановки:
internal/adapter/recognizer/memory.goуже есть, конвертеру и источнику метаданных нужны свои.
Критерии приёмки
- «Задач нет» отличается от отказа и не считается ошибкой. Оракул — тест на
пустой базе: шаг возвращает
NoopJobError, метрика отказов не растёт. - Задача, брошенная на середине шага, достаётся снова по истечении захвата и
проходит шаг заново, не плодя вторых файлов. Оракул — тест: прервать шаг,
отмотать время захвата, прогнать снова, сверить число записей в
files. - Три воркера против одной базы не выдают одну задачу дважды. Оракул — тест с
параллельным прогоном под
-race.
Рамки
Модель очереди решена 2026-08-11 — очередь коллекцией PocketBase, — и разведки о ней больше нет. Тесты пишутся под сегодняшний захват.