доменные ошибки сравниваются через errors.As, отказ Close не теряется
- признаки «работы нет» и «задача не найдена» узнаются по смыслу, а не приведением типа: обёртка `%w` на пути больше не превращает пустой прогон воркера в отказ раз в секунду - отказ закрытия соединения с распознавателем доходит до вызывающего (`errors.Join`) либо до журнала; у `errcheck` включён `check-blank`, иначе критерий принимал реализацию, выбрасывающую отказ в пустоту - заведены первые тесты пакета worker и capability `pipeline`; долг из четырёх замечаний линтера закрыт, гейт зелёный целиком
This commit is contained in:
+15
-7
@@ -8,11 +8,19 @@
|
||||
[passport.md](passport.md) и в [tasks/ROADMAP.md](../tasks/ROADMAP.md); что из
|
||||
этого ещё не решено — в разделе «Открытые вопросы».
|
||||
|
||||
Заведена одна capability — [intake](../openspec/specs/intake/spec.md), и в ней
|
||||
описан **только приём по HTTP**: его нормируют проверки, написанные задачей
|
||||
`http-handler-tests-never-green` 2026-08-11. Поведение прочих узлов, включая
|
||||
приём из Telegram, по-прежнему живёт только в коде. Задача, которая его трогает,
|
||||
дописывает спеку своей capability.
|
||||
Заведены две capability, и каждая описана частично:
|
||||
|
||||
- [intake](../openspec/specs/intake/spec.md) — **только приём по HTTP**: его
|
||||
нормируют проверки, написанные задачей `http-handler-tests-never-green`
|
||||
2026-08-11;
|
||||
- [pipeline](../openspec/specs/pipeline/spec.md) — **только пустой прогон
|
||||
воркера**: задача `errors-as-instead-of-typecast` 2026-08-11. Переходы
|
||||
состояний, захват и срок его протухания, отмена контекста посреди шага в неё
|
||||
**не** переехали и остаются долгом; что именно не описано, перечисляет раздел
|
||||
`Purpose` самой спеки.
|
||||
|
||||
Поведение прочих узлов, включая приём из Telegram, по-прежнему живёт только в
|
||||
коде. Задача, которая его трогает, дописывает спеку своей capability.
|
||||
|
||||
## Принципы
|
||||
|
||||
@@ -24,7 +32,7 @@
|
||||
решено 2026-08-11,
|
||||
[ADR](adr/ADR-2026-08-11-queue-as-pocketbase-collection.md), сравнение
|
||||
кандидатов в [research/job-queue.md](research/job-queue.md).
|
||||
<!-- канон: поведение → openspec/specs/pipeline -->
|
||||
<!-- канон: поведение → openspec/specs/pipeline; ещё НЕ переехало: спека заведена, но это в ней не описано -->
|
||||
- **Шаг конвейера идемпотентен по повтору.** Задача, брошенная на середине,
|
||||
достаётся снова по истечении срока захвата и проходит шаг заново.
|
||||
- **Ядро зависит от интерфейсов.** `internal/service` знает только
|
||||
@@ -48,7 +56,7 @@
|
||||
| Отправитель Telegram | `internal/adapter/telegram` | Отправка текста, деление длинного по словам |
|
||||
| Репозитории | `internal/adapter/repo/sqlite` | Задачи и файлы, запросы через goqu |
|
||||
|
||||
<!-- канон: поведение → openspec/specs/pipeline -->
|
||||
<!-- канон: поведение → openspec/specs/pipeline; ещё НЕ переехало: спека заведена, но это в ней не описано -->
|
||||
|
||||
Конвейер: `created` → `converted` → `transcribe` → `done` либо `failed`. Три
|
||||
воркера двигают по одному переходу, каждый опрашивает базу раз в секунду.
|
||||
|
||||
Reference in New Issue
Block a user