OpenSpec: архив change retry-reject-broken-torrent (синк state-reconciliation)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -153,17 +153,20 @@ Retry SHALL переводить задачу обратно в `downloading`,
|
|||||||
Если источник задачи уже жив и ЗДОРОВ в qBittorrent, retry SHALL перецепляться
|
Если источник задачи уже жив и ЗДОРОВ в qBittorrent, retry SHALL перецепляться
|
||||||
к существующему торренту, а не добавлять источник повторно вслепую. Если же
|
к существующему торренту, а не добавлять источник повторно вслепую. Если же
|
||||||
живой торрент в состоянии ошибки qBittorrent (`error`/`missingFiles`), retry
|
живой торрент в состоянии ошибки qBittorrent (`error`/`missingFiles`), retry
|
||||||
перецепляться к нему SHALL NOT (перецепка к сломанному торренту тут же вернула
|
SHALL отклоняться с понятным пользователю сообщением — починить раздачу
|
||||||
бы задачу в `failed` по сверке) и SHALL повторно отдать источник, как при
|
(`recheck`/восстановить файлы) в qBittorrent и повторить. Повторная отдача
|
||||||
отсутствии раздачи. Повторный `Add` выполняется, только когда раздачи в
|
источника такой торрент не чинит (qBittorrent отверг бы дубль), а простой
|
||||||
qBittorrent нет ЛИБО она сломана.
|
возврат в `downloading` тут же снова упал бы `qbit_error` по сверке (+ дебаунс
|
||||||
|
уведомления) — retry выглядел бы сломанным. При отказе состояние задачи
|
||||||
|
(`failed`/`stuck`) система менять SHALL NOT и повторный `Add` выполнять SHALL NOT.
|
||||||
|
|
||||||
Повторный `Add` при retry система SHALL выполнять **по типу источника**
|
Повторный `Add` при retry система SHALL выполнять, только когда раздачи в
|
||||||
(`source_type`), как и добавление пойманной загрузки (см. `download-tracking`
|
qBittorrent нет, — **по типу источника** (`source_type`), как и добавление
|
||||||
«Добавление пойманной загрузки в qBittorrent»): magnet/url — ссылкой; torrent —
|
пойманной загрузки (см. `download-tracking` «Добавление пойманной загрузки в
|
||||||
сохранёнными байтами `.torrent` файлом. Для torrent-источника retry БЕЗ живой
|
qBittorrent»): magnet/url — ссылкой; torrent — сохранёнными байтами `.torrent`
|
||||||
раздачи система SHALL добавлять раздачу байтами и SHALL NOT активировать задачу
|
файлом. Для torrent-источника retry БЕЗ живой раздачи система SHALL добавлять
|
||||||
в `downloading`, не добавив её (иначе задача повиснет как «нет в qBittorrent»).
|
раздачу байтами и SHALL NOT активировать задачу в `downloading`, не добавив её
|
||||||
|
(иначе задача повиснет как «нет в qBittorrent»).
|
||||||
|
|
||||||
#### Scenario: Retry упавшей magnet-загрузки из веб-UI
|
#### Scenario: Retry упавшей magnet-загрузки из веб-UI
|
||||||
|
|
||||||
@@ -195,14 +198,15 @@ qBittorrent нет ЛИБО она сломана.
|
|||||||
torrent сохранёнными байтами файлом
|
torrent сохранёнными байтами файлом
|
||||||
- **AND** задача переходит в `downloading`
|
- **AND** задача переходит в `downloading`
|
||||||
|
|
||||||
#### Scenario: Retry сломанного живого торрента повторно отдаёт источник
|
#### Scenario: Retry сломанного живого торрента отклоняется
|
||||||
|
|
||||||
- **GIVEN** задача в `failed`, её торрент присутствует в qBittorrent, но в
|
- **GIVEN** задача в `failed`, её торрент присутствует в qBittorrent, но в
|
||||||
состоянии ошибки (`error`/`missingFiles`)
|
состоянии ошибки (`error`/`missingFiles`)
|
||||||
- **WHEN** пользователь инициирует retry
|
- **WHEN** пользователь инициирует retry
|
||||||
- **THEN** источник отдаётся заново (перецепка к сломанному торренту не
|
- **THEN** retry отклоняется с сообщением починить раздачу (`recheck`) в
|
||||||
выполняется)
|
qBittorrent
|
||||||
- **AND** задача переходит в `downloading`
|
- **AND** состояние задачи не меняется (остаётся `failed`), повторный `Add` не
|
||||||
|
выполняется
|
||||||
|
|
||||||
#### Scenario: Retry torrent-загрузки без живого источника
|
#### Scenario: Retry torrent-загрузки без живого источника
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user