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

915 B
Raw Blame History

1. Код

  • 1.1 В Worker.Retry заменить ветку alive && classify(state)==classErrored: вместо reAdd=true — отказ ErrConflict с понятным сообщением (починить раздачу recheck в qBittorrent), без изменения состояния и без Add
  • 1.2 reAdd оставить true только когда раздачи нет (!alive)

2. Тесты

  • 2.1 TestRetryRejectsLiveErroredTorrenterror/missingFiles: retry возвращает ErrConflict, состояние failed не тронуто, Add не вызван
  • 2.2 TestRetryReattachesLiveHealthyTorrent — контроль: живой здоровый торрент перецепляется без Add

3. Спека

  • 3.1 MODIFIED-требование в state-reconciliation; openspec validate --strict