Files
iu 8638d1bbfc chore(openspec): archive completed changes and sync main specs
- archive local-fs-storage-backend, sqlite-metadata-backend,
  storage-orphan-reconciliation, metadata-managed-jwt-secret, default-local-backends
- sync specs: storage-backends, metadata-backends, storage-reconciliation,
  app-secrets; update photos/share-links
- defaults reflected in specs: SQLite and local FS
2026-10-11 10:19:44 +03:00

2.4 KiB

Proposal

Why

Сборка мусора воркера управляется журналом objects и никогда не сканирует хранилище. Поэтому блобы, у которых нет строки в журнале (после сброса БД в обход журнала, исторических миграций или ошибок), накапливаются и не удаляются никогда: воркер их не видит. Нужна ручная сверка «хранилище ∖ журнал».

What Changes

  • Добавить в storage.Backend перечисление объектов под префиксом (ключ, размер, время изменения); реализовать для S3 (ListObjectsV2) и локальной ФС (обход каталога).
  • Добавить в слой метаданных чтение всех ключей журнала objects (Postgres и SQLite).
  • Добавить maintenance-команду cmd/reconcile: по умолчанию — только отчёт (сироты и пропавшие), флаг --delete удаляет сироты с учётом минимального возраста (--min-age), область ограничена префиксом objects/.
  • Пропавшие ключи (есть в журнале, нет в хранилище) только сообщаются — автоматически не «исправляются».

Capabilities

New Capabilities

  • storage-reconciliation: ручная сверка объектного хранилища с журналом метаданных и удаление осиротевших блобов.

Modified Capabilities

Impact

  • backend/internal/storage (интерфейс + перечисление для S3 и ФС).
  • backend/internal/photos (Repository.AllStorageKeys, реализации pg и sqlite).
  • Новый backend/cmd/reconcile.
  • README.md, project.md.
  • Не меняет API и существующие спеки; дополняет media-objects ручной сверкой к журнальной сборке мусора.