Files
ds-galo/openspec/changes/archive/2026-10-11-fix-large-album-load/tasks.md
T
iu d99ac77587 chore(openspec): archive completed changes and sync main specs
- fix-large-album-load -> photos, realtime, media-objects
- fix-album-cover -> photos, albums
2026-10-11 14:16:38 +03:00

3.9 KiB
Raw Blame History

Tasks

1. Стабильные подписанные URL и кэширование объектов

  • 1.1 Добавить параметр окна подписи (OBJECT_URL_SIGN_WINDOW, по умолчанию 10m) в internal/config/config.go и квантовать срок в Signer.URL (exp = now.Truncate(window) + ttl); проверить cd backend && go test ./internal/storage/ — новый тест подтверждает, что URL совпадает в пределах окна и меняется за его границей
  • 1.2 Выставить Cache-Control для ответов объектов в internal/app/app.go (serveObject), используя параметр срока свежести; проверить cd backend && go test ./internal/app/ — тест утверждает наличие заголовка в ответе
  • 1.3 Задокументировать новые переменные окружения в .env.example и проверить, что описанные значения совпадают с дефолтами в config.go

2. Семантика событий готовности вариантов

  • 2.1 Переключить уведомление worker'а на photo.updated в internal/photos/worker.go (notify), оставив photo.created только для реального появления фото; проверить тестом с подпиской на hub, что после генерации вариантов публикуется photo.updated
  • 2.2 Добавить photo.updated в knownEvents в frontend/src/lib/sse.ts; проверить cd frontend && npm run check
  • 2.3 В frontend/src/routes/(app)/albums/[id]/+page.svelte сделать photo.updated заменой только уже присутствующих фото, а photo.created — по-прежнему добавлением; проверить npm run check и наблюдаемым поведением: событие обновления для отсутствующего фото не добавляет его в сетку

3. Пропускная способность и приоритет очереди вариантов

  • 3.1 Добавить WORKER_CONCURRENCY в internal/config/config.go и пул параллельной обработки в internal/photos/worker.go; проверить cd backend && go test ./internal/photos/ — тест подтверждает обработку не менее N заданий за проход при concurrency > 1
  • 3.2 Изменить порядок в ClaimVariantJobs (internal/photos/sqlite_objects.go): свежие задания — по свежести фото (created_at DESC), задания с ошибками (attempts > 0) — по next_attempt_at, сохраняя backoff; проверить тестом на порядок выдачи
  • 3.3 Задокументировать WORKER_CONCURRENCY и пороги очереди в .env.example; проверить соответствие дефолтов config.go

4. Интеграционная проверка

  • 4.1 Собрать (make build), запустить и открыть существующий большой альбом (seed-1791714157-0 #2): первый экран заполняется превью первыми, сетка не перетасовывается при доготовке вариантов; подтвердить повторным открытием без перекачки неизменившихся превью (Network)
  • 4.2 Прогнать полный набор: cd backend && go test ./... и cd frontend && npm run check — оба зелёные; замерить рост пропускной способности по убыванию variant_jobs