- Раскладка 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.
3.0 KiB
3.0 KiB
1. Preflight готовности источника
- 1.1 В
internal/worker/errors.goдобавить sentinelvar ErrNotReady = errors.New(...)(отдельный отErrConflict). - 1.2 В
internal/worker/reconcile.goдобавитьensureSourceReady(ctx, d, op): найти торрент черезtorrentByInfohash; нет источника →reconcileToReality(false)+ErrConflict «источник удалён из qBittorrent»; есть, ноclassify(t.State) != classReady→ErrNotReady «op: торрент ещё качается»безreconcileToReality. - 1.3 Заменить
ensureSourcePresentнаensureSourceReadyв командахRerecognize,Refine,SetType,Relink(internal/worker/review.go); удалить осиротевшийensureSourcePresent. - 1.4 В
Applyдобавить проверку класса на уже полученном торренте (classify(t.State) != classReady → ErrNotReady «торрент ещё качается»), без второго запроса к qBittorrent.
2. Трансляция ошибки в транспортах
- 2.1
internal/httpapiclassifyErr: кейсerrors.Is(err, worker.ErrNotReady) → 409, «торрент ещё качается, дождитесь докачки»(отдельно от генерик-ErrConflict). - 2.2
internal/tgbot: в обработчике callback-действий веткаerrors.Is(err, worker.ErrNotReady)→ сообщение «Торрент ещё качается…», иначе прежнийopErr(...).
3. Тесты
- 3.1 Тест: недокачанный источник (
downloading-класс) отклоняетRerecognize/Refine/SetType/RelinkсErrNotReady, состояние задачи не меняется, авто-раскладка не запускается. - 3.2 Тест: недокачанный источник отклоняет
Apply— хардлинки не создаются, состояние не меняется. - 3.3 Тест: готовый источник (
classReady) пропускает те же команды как раньше (регресс не сломан); отсутствие источника по-прежнему приводит к реальности и отказывает. - 3.4 Тест транспорта:
classifyErr(ErrNotReady) == 409с конкретным текстом (internal/httpapi).
4. Ревью и сверка
- 4.1
task testиtask lintзелёные. - 4.2 Ревью кода (второй чекпоинт) перед archive.
- 4.3
openspec validate review-readiness-preflight --strictзелёный; удалитьdocs/tasks/items/review-major5-readiness-preflight.mdиз беклога и строку из индекса (суть переехала в спеку).