Files
ds-galo/openspec/changes/archive/2026-10-11-storage-orphan-reconciliation/tasks.md
T
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.2 KiB

Tasks

1. Перечисление в хранилище

  • 1.1 Добавить List(ctx, prefix) ([]ObjectInfo{Key,Size,ModTime}) в storage.Backend и реализовать в storage.S3 через ListObjectsV2 с пагинацией; проверка — тест перечисления под префиксом (под S3_ENDPOINT, иначе пропуск).
  • 1.2 Реализовать List в storage.FS обходом корня с относительными ключами; проверка — юнит-тест на временном каталоге.

2. Ключи журнала в метаданных

  • 2.1 Добавить AllStorageKeys в photos.Repository и реализовать в pg- и sqlite-store; проверка — контрактный тест на обоих бэкендах.

3. Команда reconcile

  • 3.1 Реализовать cmd/reconcile: инвентаризация обеих сторон, классификация сирот/пропавших, отчёт по умолчанию; проверка — юнит-тесты классификации.
  • 3.2 Добавить флаги --delete, --min-age, --sample с ограничением области objects/ и защитой свежих блобов; проверка — тест: молодой блоб не удаляется, старый сирота удаляется, пропавшие не трогаются.
  • 3.3 Собрать бэкенды через конфиг (storage.Open + бандл репозиториев) для postgres/sqlite и s3/fs; проверка — запуск на fs и s3.

4. Документация и интеграция

  • 4.1 Обновить README.md и project.md с описанием команды и её безопасного использования; проверка — документированный запуск работает.
  • 4.2 Интеграционная проверка: создать сироту, прогнать отчёт, затем --delete, убедиться в удалении и в том, что журнальные записи не затронуты.