From 70ac12db1083fcf3cbb65d9136642137d8c4b84d Mon Sep 17 00:00:00 2001 From: Iu Date: Wed, 21 Oct 2026 21:01:33 +0300 Subject: [PATCH] =?UTF-8?q?chore(openspec):=20=D0=BE=D1=82=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D0=B8=D1=82=D1=8C=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B8?= =?UTF-8?q?=20fix-copy-edit-variant-sharing=20=D0=B2=D1=8B=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=BD=D0=B5=D0=BD=D0=BD=D1=8B=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Все 9 задач закрыты; в design.md уточнено, что удалённые привязки не осиротевают объекты: отредактированная версия живёт вместе с фото. --- .../fix-copy-edit-variant-sharing/design.md | 5 +++-- .../fix-copy-edit-variant-sharing/tasks.md | 18 +++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/openspec/changes/fix-copy-edit-variant-sharing/design.md b/openspec/changes/fix-copy-edit-variant-sharing/design.md index ea62403..6f55497 100644 --- a/openspec/changes/fix-copy-edit-variant-sharing/design.md +++ b/openspec/changes/fix-copy-edit-variant-sharing/design.md @@ -84,8 +84,9 @@ WHERE role IN ('edit', 'edit_thumb', 'edit_medium', 'edit_preview') местах и не отражается в данных. - **Альтернатива: ничего не чистить.** Отклонено: старые копии продолжат показывать отредактированную версию, и расхождение останется в данных. -- После удаления привязок объекты становятся мусором и подбираются `ClaimGarbage` — - отдельной уборки не требуется. +- Удалённые привязки не осиротевают объекты: отредактированная версия остаётся + привязана к своему фото, поэтому её объекты живут, пока живёт фото, и обычный + `ClaimGarbage` уберёт их вместе с ним. ### 4. Проверка — в существующем тесте копирования diff --git a/openspec/changes/fix-copy-edit-variant-sharing/tasks.md b/openspec/changes/fix-copy-edit-variant-sharing/tasks.md index 9c6e698..bf0f770 100644 --- a/openspec/changes/fix-copy-edit-variant-sharing/tasks.md +++ b/openspec/changes/fix-copy-edit-variant-sharing/tasks.md @@ -2,34 +2,34 @@ ## 1. Список edit-ролей -- [ ] 1.1 В `backend/internal/photos/edit_render.go` собрать общий список ролей +- [x] 1.1 В `backend/internal/photos/edit_render.go` собрать общий список ролей (`RoleEdit`, `RoleEditThumb`, `RoleEditMedium`, `RoleEditPreview`) и хелпер проверки роли; проверить, что список используется в обоих хранилищах и не дублируется строковыми литералами ## 2. Копирование без отредактированной версии -- [ ] 2.1 В `Store.Clone` (`backend/internal/photos/store.go`) исключить edit-роли из +- [x] 2.1 В `Store.Clone` (`backend/internal/photos/store.go`) исключить edit-роли из переносимых привязок `photo_objects`; проверить тестом `copy_test.go`: копия получает обычные варианты и не получает edit-объекты -- [ ] 2.2 В `SQLiteStore.Clone` (`backend/internal/photos/sqlite_store.go`) сделать то же +- [x] 2.2 В `SQLiteStore.Clone` (`backend/internal/photos/sqlite_store.go`) сделать то же для SQLite; проверить тем же тестом, прогнанным на SQLite-хранилище ## 3. Разовая чистка существующих копий -- [ ] 3.1 Добавить миграцию Postgres `backend/migrations/000016_*.up.sql` и `.down.sql`, +- [x] 3.1 Добавить миграцию Postgres `backend/migrations/000016_*.up.sql` и `.down.sql`, удаляющую edit-привязки у фото с пустыми `edit_params`; проверить на тестовой базе, что привязки исходных фото с правками остались, а «чужие» удалены -- [ ] 3.2 Добавить миграцию SQLite `backend/migrations/sqlite/000008_*.up.sql` и +- [x] 3.2 Добавить миграцию SQLite `backend/migrations/sqlite/000008_*.up.sql` и `.down.sql` с тем же действием; проверить тем же сценарием на SQLite -- [ ] 3.3 Убедиться, что удалённые объекты подбираются сборщиком мусора +- [x] 3.3 Убедиться, что удалённые объекты подбираются сборщиком мусора (`ClaimGarbage` не возвращает объекты с привязками); проверить существующим тестом `objects_test.go` ## 4. Интеграционная проверка -- [ ] 4.1 Прогнать `cd backend && go test ./internal/photos/ -v`; убедиться, что тесты +- [x] 4.1 Прогнать `cd backend && go test ./internal/photos/ -v`; убедиться, что тесты зелёные -- [ ] 4.2 Прогнать `make test`; убедиться, что весь бэкенд зелёный -- [ ] 4.3 Проверить вручную: отредактировать фото, скопировать его в другой альбом и +- [x] 4.2 Прогнать `make test`; убедиться, что весь бэкенд зелёный +- [x] 4.3 Проверить вручную: отредактировать фото, скопировать его в другой альбом и убедиться, что копия показывает исходник, а панель правок у копии пустая