diff --git a/openspec/changes/trash-permanent-delete-and-empty/.openspec.yaml b/openspec/changes/archive/2026-10-11-trash-permanent-delete-and-empty/.openspec.yaml similarity index 100% rename from openspec/changes/trash-permanent-delete-and-empty/.openspec.yaml rename to openspec/changes/archive/2026-10-11-trash-permanent-delete-and-empty/.openspec.yaml diff --git a/openspec/changes/trash-permanent-delete-and-empty/design.md b/openspec/changes/archive/2026-10-11-trash-permanent-delete-and-empty/design.md similarity index 100% rename from openspec/changes/trash-permanent-delete-and-empty/design.md rename to openspec/changes/archive/2026-10-11-trash-permanent-delete-and-empty/design.md diff --git a/openspec/changes/trash-permanent-delete-and-empty/proposal.md b/openspec/changes/archive/2026-10-11-trash-permanent-delete-and-empty/proposal.md similarity index 100% rename from openspec/changes/trash-permanent-delete-and-empty/proposal.md rename to openspec/changes/archive/2026-10-11-trash-permanent-delete-and-empty/proposal.md diff --git a/openspec/changes/trash-permanent-delete-and-empty/specs/photos/spec.md b/openspec/changes/archive/2026-10-11-trash-permanent-delete-and-empty/specs/photos/spec.md similarity index 100% rename from openspec/changes/trash-permanent-delete-and-empty/specs/photos/spec.md rename to openspec/changes/archive/2026-10-11-trash-permanent-delete-and-empty/specs/photos/spec.md diff --git a/openspec/changes/trash-permanent-delete-and-empty/specs/ui-workspace/spec.md b/openspec/changes/archive/2026-10-11-trash-permanent-delete-and-empty/specs/ui-workspace/spec.md similarity index 100% rename from openspec/changes/trash-permanent-delete-and-empty/specs/ui-workspace/spec.md rename to openspec/changes/archive/2026-10-11-trash-permanent-delete-and-empty/specs/ui-workspace/spec.md diff --git a/openspec/changes/trash-permanent-delete-and-empty/tasks.md b/openspec/changes/archive/2026-10-11-trash-permanent-delete-and-empty/tasks.md similarity index 100% rename from openspec/changes/trash-permanent-delete-and-empty/tasks.md rename to openspec/changes/archive/2026-10-11-trash-permanent-delete-and-empty/tasks.md diff --git a/openspec/specs/photos/spec.md b/openspec/specs/photos/spec.md index 44d6c9d..6170a3c 100644 --- a/openspec/specs/photos/spec.md +++ b/openspec/specs/photos/spec.md @@ -162,7 +162,8 @@ SHALL отвечать понятной ошибкой при превышени ### Requirement: Корзина фото Удаление фото SHALL помещать его в корзину (мягкое удаление). Восстановление SHALL возвращать фото в его альбом. Окончательное удаление SHALL удалять запись, а объекты хранилища SHALL -удаляться только когда на них не остаётся ссылок ни в одном альбоме. +удаляться только когда на них не остаётся ссылок ни в одном альбоме. Окончательное удаление +SHALL быть доступно и для фото без альбома (например, после удаления альбома). #### Scenario: Удаление в корзину - **WHEN** пользователь удаляет фото @@ -180,6 +181,10 @@ SHALL отвечать понятной ошибкой при превышени - **WHEN** на объект хранилища ссылается копия в другом альбоме - **THEN** запись удаляется, а объект хранилища сохраняется +#### Scenario: Окончательное удаление фото без альбома +- **WHEN** пользователь удаляет навсегда фото из корзины, у которого нет альбома +- **THEN** запись удаляется, а операция не завершается ошибкой отсутствующего альбома + ### Requirement: Удаление альбома и восстановление фото без альбома Удаление альбома SHALL помещать его фото в корзину, не удаляя объекты хранилища. Если при восстановлении фото его альбом отсутствует, система SHALL предложить выбрать существующий @@ -238,3 +243,20 @@ SHALL отвечать понятной ошибкой при превышени #### Scenario: Запись видео с готовым вариантом - **WHEN** видео-вариант готов - **THEN** данные медиа содержат адрес воспроизведения + +### Requirement: Очистка корзины +Пользователь SHALL иметь возможность окончательно удалить все элементы корзины одним действием. +Система SHALL удалять только те элементы, которые пользователь вправе удалить навсегда, и SHALL +пропускать остальные. Операция SHALL возвращать число удалённых элементов. + +#### Scenario: Очистка корзины +- **WHEN** пользователь очищает корзину +- **THEN** все элементы, которые он вправе удалить навсегда, удаляются + +#### Scenario: Чужие элементы +- **WHEN** в корзине есть фото, которые пользователь не вправе удалить навсегда +- **THEN** они остаются в корзине, а остальные удаляются + +#### Scenario: Пустая корзина +- **WHEN** пользователь очищает пустую корзину +- **THEN** операция завершается успешно, удалив ноль элементов diff --git a/openspec/specs/ui-workspace/spec.md b/openspec/specs/ui-workspace/spec.md index 0d7d1e2..93779c3 100644 --- a/openspec/specs/ui-workspace/spec.md +++ b/openspec/specs/ui-workspace/spec.md @@ -632,3 +632,20 @@ SHALL открывать режим просмотра. #### Scenario: Открытие из сетки - **WHEN** пользователь открывает плитку видео - **THEN** открывается режим просмотра видео + +### Requirement: Очистка корзины в интерфейсе +Экран корзины SHALL содержать действие «Очистить корзину», доступное, когда в корзине есть +элементы. Действие SHALL открывать подтверждение и после подтверждения очищать корзину, а +список и счётчик корзины в рейле SHALL отражать результат. + +#### Scenario: Наличие действия +- **WHEN** пользователь открывает корзину с элементами +- **THEN** на экране показано действие «Очистить корзину» + +#### Scenario: Подтверждение очистки +- **WHEN** пользователь выбирает «Очистить корзину» +- **THEN** открывается диалог подтверждения, и только после подтверждения корзина очищается + +#### Scenario: Обновление после очистки +- **WHEN** корзина очищена +- **THEN** на экране показывается пустая корзина, а счётчик корзины в рейле обновляется