From d059d042f0280e47499d583ecc0809d21eaffd1f Mon Sep 17 00:00:00 2001 From: Iu Date: Sun, 11 Oct 2026 19:57:12 +0300 Subject: [PATCH] chore(openspec): archive thumbnail-variants and sync main specs --- .../.openspec.yaml | 0 .../2026-10-11-thumbnail-variants}/design.md | 0 .../proposal.md | 0 .../specs/albums/spec.md | 0 .../specs/media-objects/spec.md | 0 .../specs/photos/spec.md | 0 .../specs/ui-workspace/spec.md | 0 .../2026-10-11-thumbnail-variants}/tasks.md | 0 openspec/specs/albums/spec.md | 15 +++++++++++--- openspec/specs/media-objects/spec.md | 9 ++++++--- openspec/specs/photos/spec.md | 13 ++++++++++-- openspec/specs/ui-workspace/spec.md | 20 +++++++++++++++++++ 12 files changed, 49 insertions(+), 8 deletions(-) rename openspec/changes/{thumbnail-variants => archive/2026-10-11-thumbnail-variants}/.openspec.yaml (100%) rename openspec/changes/{thumbnail-variants => archive/2026-10-11-thumbnail-variants}/design.md (100%) rename openspec/changes/{thumbnail-variants => archive/2026-10-11-thumbnail-variants}/proposal.md (100%) rename openspec/changes/{thumbnail-variants => archive/2026-10-11-thumbnail-variants}/specs/albums/spec.md (100%) rename openspec/changes/{thumbnail-variants => archive/2026-10-11-thumbnail-variants}/specs/media-objects/spec.md (100%) rename openspec/changes/{thumbnail-variants => archive/2026-10-11-thumbnail-variants}/specs/photos/spec.md (100%) rename openspec/changes/{thumbnail-variants => archive/2026-10-11-thumbnail-variants}/specs/ui-workspace/spec.md (100%) rename openspec/changes/{thumbnail-variants => archive/2026-10-11-thumbnail-variants}/tasks.md (100%) diff --git a/openspec/changes/thumbnail-variants/.openspec.yaml b/openspec/changes/archive/2026-10-11-thumbnail-variants/.openspec.yaml similarity index 100% rename from openspec/changes/thumbnail-variants/.openspec.yaml rename to openspec/changes/archive/2026-10-11-thumbnail-variants/.openspec.yaml diff --git a/openspec/changes/thumbnail-variants/design.md b/openspec/changes/archive/2026-10-11-thumbnail-variants/design.md similarity index 100% rename from openspec/changes/thumbnail-variants/design.md rename to openspec/changes/archive/2026-10-11-thumbnail-variants/design.md diff --git a/openspec/changes/thumbnail-variants/proposal.md b/openspec/changes/archive/2026-10-11-thumbnail-variants/proposal.md similarity index 100% rename from openspec/changes/thumbnail-variants/proposal.md rename to openspec/changes/archive/2026-10-11-thumbnail-variants/proposal.md diff --git a/openspec/changes/thumbnail-variants/specs/albums/spec.md b/openspec/changes/archive/2026-10-11-thumbnail-variants/specs/albums/spec.md similarity index 100% rename from openspec/changes/thumbnail-variants/specs/albums/spec.md rename to openspec/changes/archive/2026-10-11-thumbnail-variants/specs/albums/spec.md diff --git a/openspec/changes/thumbnail-variants/specs/media-objects/spec.md b/openspec/changes/archive/2026-10-11-thumbnail-variants/specs/media-objects/spec.md similarity index 100% rename from openspec/changes/thumbnail-variants/specs/media-objects/spec.md rename to openspec/changes/archive/2026-10-11-thumbnail-variants/specs/media-objects/spec.md diff --git a/openspec/changes/thumbnail-variants/specs/photos/spec.md b/openspec/changes/archive/2026-10-11-thumbnail-variants/specs/photos/spec.md similarity index 100% rename from openspec/changes/thumbnail-variants/specs/photos/spec.md rename to openspec/changes/archive/2026-10-11-thumbnail-variants/specs/photos/spec.md diff --git a/openspec/changes/thumbnail-variants/specs/ui-workspace/spec.md b/openspec/changes/archive/2026-10-11-thumbnail-variants/specs/ui-workspace/spec.md similarity index 100% rename from openspec/changes/thumbnail-variants/specs/ui-workspace/spec.md rename to openspec/changes/archive/2026-10-11-thumbnail-variants/specs/ui-workspace/spec.md diff --git a/openspec/changes/thumbnail-variants/tasks.md b/openspec/changes/archive/2026-10-11-thumbnail-variants/tasks.md similarity index 100% rename from openspec/changes/thumbnail-variants/tasks.md rename to openspec/changes/archive/2026-10-11-thumbnail-variants/tasks.md diff --git a/openspec/specs/albums/spec.md b/openspec/specs/albums/spec.md index d47ed17..f6488a9 100644 --- a/openspec/specs/albums/spec.md +++ b/openspec/specs/albums/spec.md @@ -43,17 +43,26 @@ - **THEN** фото альбома попадают в корзину без привязки к альбому и файлы сохраняются, участники и share-ссылки удаляются ### Requirement: Отображение обложки альбома -Данные альбома SHALL включать URL миниатюры обложки, когда обложка задана, чтобы клиенты -могли показать её в списке, рейле и карточке. + +Данные альбома SHALL включать URL обложки, когда обложка задана, чтобы клиенты могли +показать её в списке, рейле и карточке; URL SHALL указывать на вариант, достаточный для +крупного отображения, с откатом на миниатюру, пока крупный вариант не готов. #### Scenario: Обложка задана + - **WHEN** клиент запрашивает список альбомов или альбом по id, и у альбома есть обложка -- **THEN** ответ содержит URL миниатюры обложки +- **THEN** ответ содержит URL обложки #### Scenario: Обложка отсутствует + - **WHEN** у альбома нет обложки или фото обложки удалено - **THEN** ответ не содержит URL обложки, и клиент показывает плейсхолдер +#### Scenario: Крупный вариант ещё не готов + +- **WHEN** у обложки готов только вариант-миниатюра +- **THEN** ответ содержит URL миниатюры обложки + ### Requirement: Выбор обложки Владелец и админ SHALL иметь возможность назначить обложкой любое фото альбома или сбросить обложку; после сброса обложка SHALL становиться не заданной (без возврата к значению по diff --git a/openspec/specs/media-objects/spec.md b/openspec/specs/media-objects/spec.md index f91c045..7f3d598 100644 --- a/openspec/specs/media-objects/spec.md +++ b/openspec/specs/media-objects/spec.md @@ -22,17 +22,20 @@ - **THEN** ключи его объектов остаются неизменными ### Requirement: Журнал объектов + Каждый физический объект SHALL иметь ровно одну запись в слое метаданных с ключом, MIME-типом, размером, габаритами и состоянием; фото SHALL ссылаться на объекты по -ролям original, thumb и preview. +ролям original, thumb, medium и preview. #### Scenario: Привязка ролей + - **WHEN** фото загружено и обработано -- **THEN** фото ссылается на объект-оригинал и, когда они готовы, на объекты thumb и preview +- **THEN** фото ссылается на объект-оригинал и, когда они готовы, на объекты thumb, medium и preview #### Scenario: Оригинал без вариантов + - **WHEN** варианты ещё не сгенерированы -- **THEN** фото доступно с оригиналом, а thumb и preview отсутствуют +- **THEN** фото доступно с оригиналом, а thumb, medium и preview отсутствуют ### Requirement: Совместные объекты Несколько фото SHALL иметь возможность ссылаться на один и тот же физический diff --git a/openspec/specs/photos/spec.md b/openspec/specs/photos/spec.md index f8c174e..0e0924f 100644 --- a/openspec/specs/photos/spec.md +++ b/openspec/specs/photos/spec.md @@ -18,11 +18,20 @@ - **THEN** система отклоняет запрос ### Requirement: Варианты изображений -Система SHALL генерировать три варианта: thumb (200px), preview (1200px) и оригинал, с WebP для превью, и извлекать EXIF (дата, координаты, размеры). + +Система SHALL генерировать четыре варианта: thumb (200×200, квадратный кроп), medium +(800×800, квадратный кроп), preview (1200×1200, вписанный) и оригинал, в WebP, и извлекать +EXIF (дата, координаты, размеры). #### Scenario: Генерация вариантов + - **WHEN** фото загружено -- **THEN** система асинхронно генерирует thumb и preview и заполняет EXIF-поля +- **THEN** система асинхронно генерирует thumb, medium и preview и заполняет EXIF-поля + +#### Scenario: Форма вариантов сетки + +- **WHEN** генерируются thumb и medium +- **THEN** они обрезаны до квадрата, а preview вписан с сохранением пропорций ### Requirement: Листинг фото с пагинацией Система SHALL возвращать фото альбома с cursor-пагинацией. diff --git a/openspec/specs/ui-workspace/spec.md b/openspec/specs/ui-workspace/spec.md index 453fab7..f8b100f 100644 --- a/openspec/specs/ui-workspace/spec.md +++ b/openspec/specs/ui-workspace/spec.md @@ -570,3 +570,23 @@ Ctrl/Cmd-клик — добавить или убрать, Shift-клик — #### Scenario: Публичная share-страница - **WHEN** фото открыто по публичной share-ссылке - **THEN** панорамный режим не активируется, показывается плоское изображение + +### Requirement: Резкость миниатюр + +Сетка фото и обзор альбомов SHALL подбирать вариант изображения под фактический размер +плитки, чтобы миниатюры не отображались крупнее доступного разрешения. + +#### Scenario: Крупные плитки + +- **WHEN** пользователь увеличивает миниатюры до крупных плиток +- **THEN** показывается вариант изображения, достаточный для их размера, без расплывания + +#### Scenario: Мелкие плитки + +- **WHEN** миниатюры показаны мелкими плитками +- **THEN** показывается компактный вариант, чтобы не загружать крупное изображение + +#### Scenario: Вариант ещё не готов + +- **WHEN** для фото доступен только оригинал или только миниатюра +- **THEN** показывается доступный вариант, и сетка отображается корректно