chore(openspec): архивировать android-live-albums и fix-album-cover-readiness

Дельта android-live-albums: android-client (+3 требования: живое обновление
списка, догон при переподключении, потеря доступа) и realtime (порядок списка
теперь правило отображения клиента).

Дельта fix-album-cover-readiness: realtime (+1 требование: album.updated при
готовности вариантов фото-обложки).
This commit is contained in:
iu
2026-10-16 12:48:32 +03:00
parent d0d6362a01
commit 14db79632a
13 changed files with 521 additions and 1 deletions
@@ -0,0 +1,41 @@
# Proposal
## Why
Обложка альбома на карточке в списке не обновляется вживую: после загрузки фото счётчик
`photos_count` приходит, а обложка остаётся заглушкой до ручного обновления. Ссылка на
обложку (`cover_thumb_url` / `cover_medium_url`) появляется в объекте альбома только после
генерации вариантов thumb/medium, но событие об этом в персональные потоки не публикуется.
Дефект серверной стороны способности `realtime`, поэтому затрагивает и веб-клиент, и Android.
## What Changes
- Когда для фото, являющегося обложкой альбома, готовы варианты, система публикует
`album.updated` с актуальным объектом альбома в персональные потоки владельца и
участников — именно тогда объект впервые получает ссылку на обложку.
- Готовность вариантов фото, которое обложкой не является, объект альбома не меняет и
события не порождает: иначе массовая загрузка даёт лишний веер `album.updated` на каждый
файл.
- Контракт существующих событий и REST не меняется, новых эндпоинтов и миграций нет.
- **BREAKING**: нет.
## Capabilities
### New Capabilities
_Нет — поведение расширяет существующую способность `realtime`._
### Modified Capabilities
- `realtime`: добавляется публикация `album.updated` в персональные потоки при готовности
вариантов фото-обложки, поскольку только тогда объект альбома получает ссылку на обложку.
## Impact
- **Код (backend):** `internal/albums/service.go` (новая публикация), порт `AlbumAccess` в
`internal/photos/service.go`, вызов из `internal/photos/worker.go` (готовность вариантов),
стаб порта в `internal/photos/helpers_test.go`.
- **Документация:** `project.md` (§11 «Real-time (SSE)», §12 «SSE — детали реализации»).
- **Не затрагивается:** схема БД, миграции, REST, пер-альбомный контракт (`photo.updated`
по-прежнему приходит в канал альбома), клиенты — веб и Android уже применяют
`album.updated` из персонального потока.