Реализованы и прошли ревью параллельной волной (worktree): - F1 (гард дедуп-дозаписи) + F6 (апгрейд catched-magnet→torrent) - MAJOR-1/2 (сброс базиса ретрая + простой от last_activity) + клэмп last_activity из будущего - MAJOR-4 (sweep linking + persist→review) + MINOR-7 (transitionErr) Суть переехала в openspec/specs (ingest, state-reconciliation, file-layout) и в код. В F2 добавлен указатель на смежное окно F6↔воркер, найденное этим ревью. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
20 lines
2.3 KiB
Markdown
20 lines
2.3 KiB
Markdown
# processCatched: promote-without-add если торрент уже в qBittorrent (F2)
|
||
|
||
**Приоритет:** средний · **Теги:** ingest, review-2026-07-08, lifecycle
|
||
|
||
Ревью Fable 2026-07-08 (приём). worker.go:361-391, sourceAddParts :407-432, qbt.go:243-246.
|
||
|
||
Сценарий: торрент уже в qBittorrent БЕЗ нашей категории/тега (юзер добавил вручную раньше → discover не усыновляет). Юзер грузит тот же .torrent в jellybit → catched → qbt.Add файлом; для file-add дубль → «Fails.» → Add ошибка → «will retry» каждый тик, вечно, до catch_timeout → failed/qbit_add, который reconcileRecovery НЕ воскрешает (worker.go:124-132). Торрент жив всё это время; юзер видит failed. Retry уже решает это alive-проверкой (worker.go:692-698 «повторный Add вреден»), а processCatched — нет, хотя live-снимок byHash того же тика доступен. Также лечит сценарий B (Add успех, PromoteCatched падает на транзиентной ошибке → снова Add дубля).
|
||
|
||
Замечание: поведение qBit на дубль file-add версионно-зависимо («Fails.» vs «Ok.») — проверить на целевой версии.
|
||
|
||
Фикс: перед Add проверить присутствие хешей в qBit; есть → promote без Add (зеркалит Retry).
|
||
|
||
Смежное (ревью 2026-07-08, кластер A): апгрейд F6 (`UpgradeCatchedMagnetToTorrent`)
|
||
оставил узкое окно — `processCatched` читает снимок `source_type` вне `w.mu`, поэтому
|
||
при точном оверлапе тика воркера с апгрейдом воркер добавит magnet из устаревшего
|
||
снимка, хотя БД уже `torrent`. Тот же фикс закрывает и это: перечитать источник под
|
||
`w.mu` (или проверить присутствие хешей в qBit) перед Add.
|
||
|
||
Вердикт: change (малая спека-дельта download-tracking + код).
|