# Отметка «последняя копия» на подтверждении удаления выводится из состояния, а не из файловой системы

- **Дата:** 2026-08-10
- **Источник:** openspec/changes/archive/2026-08-10-bulk-delete-page/design.md

## Решение

Экран подтверждения группового удаления помечает загрузку как последнюю копию
данных по её **состоянию** (`orphaned`), не спрашивая файловую систему. Случай,
когда байты источника исчезли с диска, а раздача осталась в списке qBittorrent,
такой отметки не получает — и это записано границей в спеке `web-ui`, а не
оставлено умолчанием.

## Почему

Гард последней копии в `Delete` выключен сознательно (инвариант «источник
неприкосновенен», исключение 1), поэтому осведомлённость человека — единственный
оставшийся предохранитель. Отсюда решение D2 источника:

> Признак берётся из состояния (`orphaned` по определению значит «источник
> пропал, цель — последняя копия»), а не обходом файловой системы.

Враждебный проход ревью построил путь, где это неверно: сверка берёт присутствие
источника из ответа `torrents/info`, а не с диска, поэтому задача с пропавшими
байтами остаётся `done` сколько угодно долго и отметки не получает. Дыра
признана и оставлена открытой по решению человека: поштучное удаление такой
отметки не несёт **вовсе**, то есть групповой путь не ухудшил положение, а
улучшил его не до конца. Закрывать её обходом файловой системы на экране
подтверждения значит завести чтение диска в транспорте ради предупреждения,
которое и сегодня лучше прежнего.

## Рассмотренные варианты

- **Спрашивать файловую систему на подтверждении** (`nlink` по живым ссылкам
  последнего батча) — отметка стала бы правдой, но транспорт начал бы ходить в
  файловую систему ради показа, а пачка ограничена двадцатью строками только
  сегодня.
- **Вернуть гард последней копии в `Delete`** — отменяет само назначение
  команды: она затем и существует, чтобы снять последнюю копию осознанно.
- **Убрать отметку совсем** — честно, но теряет полезный сигнал про пропавший
  источник, который в подавляющем большинстве случаев и есть последняя копия.

## Последствия

- `+` Подтверждение предупреждает о последней копии там, где раньше не
  предупреждало ничто; признак берётся из домена, второго перечня состояний не
  заводится.
- `+` Транспорт не ходит в файловую систему ради показа.
- `−` Случай «`done` с пропавшими байтами источника» отметки не получает. Дыра
  названа в спеке прямо, чтобы отметка не читалась как гарантия.
- `−` Пока сверка берёт присутствие источника из списка раздач, а не с диска,
  закрыть дыру нельзя ни на одном экране.
