tasks: очередь расставлена от базы к деталям

- порядок беклога и роадмапа назначен слоями: проверки, которым можно
  верить → долги входа → владелец записи и контракт API → конвейер под
  тестами → приложение и возможности поверх; у каждого движения записана
  причина;
- заведены восемь задач под пункты «Завершения», которых не закрывала ни
  одна запись, — цель any-audio-source была без задач вовсе;
- у четырёх задач сняты критерии, требовавшие того, что делает задача ниже
  по очереди; исправлены ссылки на несуществующий repo/sqlite и на
  отменённую разведку об очереди.
This commit is contained in:
av
2026-08-12 20:48:53 +03:00
parent ddc34b3182
commit 8739b18a9f
73 changed files with 490 additions and 139 deletions
+5 -5
View File
@@ -1,7 +1,7 @@
# 🧹 Задать таймауты обращениям к внешним сервисам
- **Тип:** chore
- **Категория:** Очередь
- **Категория:** Очередь — Молчащий внешний сервис держит шаг до истечения часового захвата — правится под свежими тестами конвейера.
- **Зачем:** Ни у Telegram, ни у Object Storage, ни у SpeechKit нет таймаута: молчащий собеседник держит шаг конвейера до истечения часового захвата.
Все обращения наружу идут с `context.Background()` либо через `http.Get` без
@@ -33,9 +33,6 @@
- У каждого обращения наружу есть таймаут, и его значение задаётся конфигом.
Оракул — тест на подставном сервере, который не отвечает: вызов
возвращается с ошибкой за назначенное время, а не висит.
- Отмена контекста при остановке приложения прерывает шаг конвейера. Оракул —
тест: отменённый контекст возвращает управление из шага, задача остаётся в
прежнем состоянии.
- Прерванная по таймауту задача достаётся повторно и доходит до текста. Оракул
— тест на повторный прогон шага после отказа по таймауту.
- Числа таймаутов записаны в `docs/database.md`. Оракул — `task gate`.
@@ -43,4 +40,7 @@
## Рамки
Повторов с нарастающей паузой не заводим — это отдельная работа; здесь только
таймаут и отмена.
таймаут. Прерывание шага отменённым контекстом сюда не входит: методы записи
хранилища контекста не принимают вовсе, и этим занимается следующая задача
`context-cancel-in-pipeline`. Контекст первым аргументом интерфейсов эта задача
всё же протаскивает — без него таймаут некуда передать.