Files
ds-galo/openspec/changes/fix-edit-preview-handoff/specs/photos/spec.md
T
iu 1c29f5d961 docs(openspec): изменение fix-edit-preview-handoff
- proposal/design/tasks и delta-спеки photos, realtime
- серверный признак edit_pending, бесшовная подмена предпросмотра, мгновенный сброс
2026-10-25 10:02:04 +03:00

8.0 KiB

Spec Delta: photos

ADDED Requirements

Requirement: Признак незавершённого рендера правок

Фото в ответах API и в событиях photo.updated SHALL содержать булево поле edit_pending. Оно SHALL быть true, пока серверный рендер сохранённых правок не завершён, и false, когда рендера нет или он завершён. Пока edit_pending равно true, URL отредактированных вариантов SHALL NOT считаться актуальными, даже если они присутствуют. Поле SHALL быть аддитивным: клиент, который его не читает, продолжает работать как раньше.

Scenario: Сохранение правок

  • WHEN правки фото сохранены, а серверный рендер ещё не завершён
  • THEN ответ на сохранение и событие photo.updated содержат edit_pending=true

Scenario: Предыдущий рендер устарел

  • WHEN у фото уже есть отрендеренная версия, а для новых сохранённых правок рендер ещё не завершён
  • THEN фото содержит edit_pending=true, а URL отредактированных вариантов не выдаются за актуальные

Scenario: Готовность рендера

  • WHEN серверный рендер сохранённых правок завершён
  • THEN edit_pending=false, а URL отредактированных вариантов соответствуют сохранённым правкам

Scenario: Сброс правок

  • WHEN правки фото сброшены
  • THEN edit_pending=false и URL отредактированных вариантов отсутствуют

Requirement: Мгновенный показ сброса правок

Клиент SHALL показывать исходный вид фото сразу после возврата контролов редактора в значения по умолчанию или нажатия сброса, не дожидаясь отложенного сохранения на сервер. Пока сброс, выполненный возвратом контролов, ещё не отправлен, просмотрщик SHALL NOT показывать отредактированную версию фото.

Scenario: Сброс возвратом контролов

  • WHEN пользователь возвращает контролы редактора в значения по умолчанию (двойной клик по ползунку, шкала в нуле)
  • THEN просмотрщик сразу показывает исходный вид, не дожидаясь срабатывания отложенного сохранения

Scenario: Сброс кнопкой

  • WHEN пользователь нажимает «Сброс»
  • THEN просмотрщик показывает исходный вид не позже ответа на запрос сброса

Scenario: Сброс при готовом рендере

  • WHEN сброс выполнен, а отредактированная версия ещё существует на сервере
  • THEN просмотрщик показывает исходный вид, а не отредактированную версию

MODIFIED Requirements

Requirement: Живой предпросмотр цветовых правок

Клиент SHALL показывать результат цветовых правок в просмотрщике до завершения серверного рендера. Пока серверный рендер сохранённых правок не завершён (edit_pending) или пока локальные правки не сохранены, клиент SHALL показывать клиентский предпросмотр поверх исходной версии. После завершения рендера SHALL показываться серверная версия. Клиент SHALL NOT показывать исходную или предыдущую отрендеренную версию между предпросмотром и серверной версией: подмена SHALL выполняться только после загрузки нового изображения.

Scenario: Правки видны сразу

  • WHEN пользователь двигает цветовой контрол
  • THEN просмотрщик обновляет изображение без ожидания серверного рендера

Scenario: Серверная версия заменяет предпросмотр

  • WHEN серверный рендер цветовых правок завершён
  • THEN просмотрщик показывает отрендеренную версию

Scenario: Бесшовная подмена предпросмотра

  • WHEN серверный рендер завершён, но новое изображение ещё загружается
  • THEN просмотрщик продолжает показывать предпросмотр и не показывает оригинал или предыдущую отрендеренную версию

Requirement: Живой предпросмотр эффектов

Клиент SHALL показывать эффекты в просмотрщике до завершения серверного рендера. Пока серверный рендер сохранённых правок не завершён (edit_pending) или пока локальные правки не сохранены, клиент SHALL показывать клиентский предпросмотр поверх исходной версии. После готовности серверной версии клиент SHALL показывать её после загрузки нового изображения, не показывая в промежутке оригинал или предыдущую отрендеренную версию. Предпросмотр пространственных эффектов (текстура, чёткость, дымка) MAY отличаться от серверного рендера деталями, но SHALL передавать характер эффекта.

Scenario: Эффекты видны сразу

  • WHEN пользователь двигает ползунок эффекта
  • THEN просмотрщик обновляет изображение без ожидания серверного рендера

Scenario: Серверная версия заменяет предпросмотр

  • WHEN серверный рендер эффектов завершён
  • THEN просмотрщик показывает серверную версию

Scenario: Бесшовная подмена предпросмотра

  • WHEN серверный рендер эффектов завершён, но новое изображение ещё загружается
  • THEN просмотрщик продолжает показывать предпросмотр и не показывает оригинал или предыдущую отрендеренную версию

Scenario: Предпросмотр без WebGL

  • WHEN аппаратное ускорение недоступно
  • THEN клиент показывает эффекты доступным способом или показывает их после серверного рендера, не блокируя интерфейс