Files
ds-galo/openspec/changes/fix-copy-edit-variant-sharing/proposal.md
T
iu b075f4c3a4 chore(openspec): предложить fix-copy-edit-variant-sharing
Копирование фото переносит и отредактированную версию, хотя правка
принадлежит фото, чьи правки её породили. Изменение описывает фильтр
edit-ролей в Clone, разовую чистку копий миграцией и дельту требования
«Совместные объекты».
2026-10-21 20:31:39 +03:00

3.0 KiB

Proposal

Why

Отредактированная версия фото задумана принадлежащей только тому фото, чьи правки её породили: воркер создаёт edit-объекты с владельцем []string{photoID} и комментирует это прямо. Но копирование фото (Clone) переносит все привязки photo_objects, включая роли edit, edit_thumb, edit_medium, edit_preview. Копия фото, сделанная после рендера правок, поэтому показывает отредактированную картинку, но не наследует edit_params: в панели правок у копии параметров нет, и первая же новая правка перезаписывает исходную обработку с нуля. Поведение расходится с замыслом и с описанием в спеке.

What Changes

  • Копирование фото перестаёт переносить отредактированную версию: в копию попадают только обычные роли (original, thumb, medium, preview, playback).
  • Копия фото с правками показывается в исходном виде, параметры правок копии остаются пустыми — как и сейчас.
  • Обычные варианты по-прежнему разделяются между копиями одного оригинала: правка принадлежит фото, а не объекту.
  • Спека media-objects приводится к этому правилу: уточняется, кому принадлежит отредактированная версия и что происходит при копировании.

Capabilities

New Capabilities

Нет.

Modified Capabilities

  • media-objects: копирование фото не переносит отредактированную версию на копию; отредактированная версия остаётся привязанной только к фото, чьи правки её создали.

Impact

  • backend/internal/photos/store.go — Store.Clone (Postgres): при копировании photo_objects исключаются роли edit*.
  • backend/internal/photos/sqlite_store.go — SQLiteStore.Clone (SQLite): то же поведение.
  • backend/internal/photos/edit_render.go — константы ролей edit* используются как список исключений (без дублирования строк в двух хранилищах).
  • backend/internal/photos/copy_test.go — тест на копию фото с отрендеренной отредактированной версией.
  • Схема БД, HTTP API и клиенты не меняются; миграций нет.