- Раскладка 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.
46 lines
3.0 KiB
Markdown
46 lines
3.0 KiB
Markdown
## 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` из беклога и
|
||
строку из индекса (суть переехала в спеку).
|