Files
jellybit/openspec/changes/archive/2026-07-08-review-readiness-preflight/tasks.md
T
av 42d5b73a04 docs: перевод документации на канон av-dev
- Раскладка docs/ приведена к канону 2: заведены passport/architecture/
  database/security/review и research; docs/specs, drafts, backlog, review/
  и BRIEF.md разобраны и удалены, беклог переехал в docs/tasks (34 задачи,
  6 целей, слаги на английский).
- Нарративы specs удалены как дубли openspec-спек после поимённой сверки;
  остаток заведён задачами (редактор маппинга ревью, крайние случаи
  именования), отказ от сущности title промоутнут в ADR.
- Проектные копии агентов и скиллов ревью/пайплайна удалены в пользу
  плагинов av-dev-pm и av-dev-pipeline; в task gate добавлен шаг canon
  вместо er-schema.
2026-08-04 09:27:26 +03:00

46 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 1. Preflight готовности источника
- [x] 1.1 В `internal/worker/errors.go` добавить sentinel
`var ErrNotReady = errors.New(...)` (отдельный от `ErrConflict`).
- [x] 1.2 В `internal/worker/reconcile.go` добавить `ensureSourceReady(ctx, d, op)`:
найти торрент через `torrentByInfohash`; нет источника →
`reconcileToReality(false)` + `ErrConflict «источник удалён из qBittorrent»`;
есть, но `classify(t.State) != classReady``ErrNotReady «op: торрент ещё
качается»` без `reconcileToReality`.
- [x] 1.3 Заменить `ensureSourcePresent` на `ensureSourceReady` в командах
`Rerecognize`, `Refine`, `SetType`, `Relink` (`internal/worker/review.go`);
удалить осиротевший `ensureSourcePresent`.
- [x] 1.4 В `Apply` добавить проверку класса на уже полученном торренте
(`classify(t.State) != classReady → ErrNotReady «торрент ещё качается»`),
без второго запроса к qBittorrent.
## 2. Трансляция ошибки в транспортах
- [x] 2.1 `internal/httpapi` `classifyErr`: кейс
`errors.Is(err, worker.ErrNotReady) → 409, «торрент ещё качается, дождитесь
докачки»` (отдельно от генерик-`ErrConflict`).
- [x] 2.2 `internal/tgbot`: в обработчике callback-действий ветка
`errors.Is(err, worker.ErrNotReady)` → сообщение «Торрент ещё качается…»,
иначе прежний `opErr(...)`.
## 3. Тесты
- [x] 3.1 Тест: недокачанный источник (`downloading`-класс) отклоняет
`Rerecognize`/`Refine`/`SetType`/`Relink` с `ErrNotReady`, состояние задачи
не меняется, авто-раскладка не запускается.
- [x] 3.2 Тест: недокачанный источник отклоняет `Apply` — хардлинки не
создаются, состояние не меняется.
- [x] 3.3 Тест: готовый источник (`classReady`) пропускает те же команды как
раньше (регресс не сломан); отсутствие источника по-прежнему приводит к
реальности и отказывает.
- [x] 3.4 Тест транспорта: `classifyErr(ErrNotReady) == 409` с конкретным
текстом (`internal/httpapi`).
## 4. Ревью и сверка
- [x] 4.1 `task test` и `task lint` зелёные.
- [x] 4.2 Ревью кода (второй чекпоинт) перед archive.
- [x] 4.3 `openspec validate review-readiness-preflight --strict` зелёный;
удалить `docs/tasks/items/review-major5-readiness-preflight.md` из беклога и
строку из индекса (суть переехала в спеку).