From afe85f7be08a35ce13608d8c1abb5b2c9d92f861 Mon Sep 17 00:00:00 2001 From: Iu Date: Wed, 21 Oct 2026 21:01:33 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20=D0=BE=D1=82=D1=87=D1=91=D1=82=20=D0=BE?= =?UTF-8?q?=D0=B1=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=D1=85=20=E2=80=94=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20fix-copy-edit-variant-sharing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026-10-21-изменения-без-спецификаций.md | 34 ++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/Отчёты об изменениях/2026-10-21-изменения-без-спецификаций.md b/Отчёты об изменениях/2026-10-21-изменения-без-спецификаций.md index d667c45..f25ef8e 100644 --- a/Отчёты об изменениях/2026-10-21-изменения-без-спецификаций.md +++ b/Отчёты об изменениях/2026-10-21-изменения-без-спецификаций.md @@ -125,9 +125,35 @@ openspec validate --specs → 23 passed, 0 failed openspec validate fix-copy-edit-variant-sharing --type change → valid ``` -## 8. Что дальше +## 8. Реализация `fix-copy-edit-variant-sharing` -- Реализация правки копирования — из `/opsx-apply` для изменённого - `fix-copy-edit-variant-sharing`. -- После реализации и архивации изменений дельта `media-objects` будет перенесена в +Изменение реализовано полностью (9/9 задач): + +| Что | Где | +| --- | --- | +| Общий список edit-ролей `EditRoles()` и предикат `IsEditRole()` | `backend/internal/photos/edit_render.go` | +| `Clone` не переносит edit-привязки (Postgres: `role <> ALL($3::text[])`) | `backend/internal/photos/store.go` | +| То же для SQLite (`role NOT IN (...)`) | `backend/internal/photos/sqlite_store.go` | +| Сброс правок использует общий список ролей | `backend/internal/photos/edit_service.go` | +| Разовая чистка копий, созданных до фикса | `backend/migrations/000016_*.sql`, `backend/migrations/sqlite/000008_*.sql` | +| Контрактная проверка копирования (оба хранилища) | `backend/internal/repo/contract/contract.go`, кейс `Clone` | +| Сервисные тесты: копия и миграция | `backend/internal/photos/copy_test.go`, `backend/internal/e2e/copy_edit_test.go` | + +Проверки: + +- `make test` (с Postgres) — весь бэкенд зелёный; +- контрактный кейс `Clone` проходит на SQLite и Postgres; без фикса он падает + («clone shares the edited version»); +- e2e на SQLite: копия показывает исходник, `edit_params` пусты, миграция убирает + «чужие» привязки, не трогая привязки владельца; +- ручная проверка через HTTP и браузер: в просмотре копии грузится `thumb.webp` + (не `edit_preview`), все ползунки панели «Редактирование» в нуле. + +## 9. Что дальше + +- Ревью и архивация изменения `/opsx-archive` — дельта `media-objects` переедет в основную спеку. +- Изменение требует Postgres для полного прогона: в этом окружении поднимался + временный контейнер `postgres:16-alpine` на порту 55432 + (`TEST_DATABASE_URL='postgres://postgres:postgres@127.0.0.1:55432/galo?sslmode=disable'`). +