Files
jellybit/openspec/changes/2026-07-17-retry-reject-broken-torrent/tasks.md
T
avandClaude Opus 4.8 bcc7b2d76b Жизненный цикл: claim-токен распознавания, индексация хешей, retry сломанного торрента
Три мелких фикса из docs/backlog/review-lifecycle-minor.md (ревью Fable
2026-07-08). MINOR-9 (I/O под глобальным w.mu) осознанно waive для
one-user home-сервера — не трогаем.

MINOR-8: claim-токен распознавания. recognizeOne фиксирует updated_at на
момент claim (перечитывая запись после перехода в recognizing), а
finishRecognition коммитит результат, только если токен совпал. Иначе за
время LLM-вызова задачу увели из recognizing и вернули обратно
(cancel → relink revive) — это уже другой эпизод, устаревший результат
отбрасываем, задача остаётся в recognizing для перезапуска поллингом.

NIT-11: lookup-мапы (byHash/live/torrentByInfohash) больше не индексируют
усечённый 40-hex t.Hash v2-only торрентов. Новый хелпер torrentIndexHashes
зеркалит выбор torrentHashes: t.Hash берём только при отсутствии обоих
infohash_v1/v2. Убирает теоретический ложный матч по коллизии длины.

NIT-12: retry живого, но сломанного торрента (error/missingFiles) теперь
отклоняется с подсказкой починить раздачу (recheck) в qBittorrent, вместо
бессмысленной переотдачи источника (сверка тут же вернула бы задачу в
failed). Повторный Add — только когда раздачи в qBittorrent нет. Меняет
спеку state-reconciliation → дельта openspec/changes/2026-07-17-retry-reject-broken-torrent
(не архивировал).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 20:35:14 +03:00

18 lines
915 B
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. Код
- [x] 1.1 В `Worker.Retry` заменить ветку `alive && classify(state)==classErrored`:
вместо `reAdd=true` — отказ `ErrConflict` с понятным сообщением (починить
раздачу `recheck` в qBittorrent), без изменения состояния и без `Add`
- [x] 1.2 `reAdd` оставить `true` только когда раздачи нет (`!alive`)
## 2. Тесты
- [x] 2.1 `TestRetryRejectsLiveErroredTorrent``error`/`missingFiles`: retry
возвращает `ErrConflict`, состояние `failed` не тронуто, `Add` не вызван
- [x] 2.2 `TestRetryReattachesLiveHealthyTorrent` — контроль: живой здоровый
торрент перецепляется без `Add`
## 3. Спека
- [x] 3.1 MODIFIED-требование в `state-reconciliation`; `openspec validate --strict`