chore(openspec): archive add-phone-album-sync and sync main specs
Sync the deltas into phpne...
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
# Tasks
|
||||
|
||||
## 1. Предпосылки
|
||||
|
||||
- [x] 1.1 Убрать правило `data/` из `.gitignore` и убедиться, что `git status` показывает файлы `android/app/src/main/java/com/galo/android/data/**` (проверка: `git status --porcelain` и `git check-ignore` больше не игнорируют их)
|
||||
- [x] 1.2 Проверить, что проект Android собирается и тесты проходят после включения слоя данных в git (проверка: `cd android && ./gradlew test lintDebug`)
|
||||
|
||||
## 2. Сервер: контрольная сумма оригинала
|
||||
|
||||
- [x] 2.1 Добавить контрольную сумму оригинала в данные фото (модели, запросы, ответы) на существующем `objects.checksum`, без миграций БД (проверка: юнит-тест на сопоставление и на одинаковое содержимое)
|
||||
- [x] 2.2 Убедиться, что контрольная сумма присутствует и в одиночной выдаче фото, и в листинге альбома (проверка: интеграционный тест ответов `GET /api/photos/:id` и `GET /api/albums/:id/photos`)
|
||||
|
||||
## 3. Источник MediaStore, индекс и просмотр (режим A)
|
||||
|
||||
- [x] 3.1 Добавить права `READ_MEDIA_IMAGES`/`READ_MEDIA_VIDEO` (и legacy `READ_EXTERNAL_STORAGE`) и запрос доступа; проверить поведение при предоставленном и непредоставленном доступе
|
||||
- [x] 3.2 Реализовать источник альбомов устройства (bucket'ы) и их содержимого через MediaStore (проверка: тест перечисления на подготовленном наборе)
|
||||
- [x] 3.3 Добавить в Room индекс содержимого синхронизируемого альбома, провенанс загрузок и связь с серверным альбомом; проверить миграцию схемы
|
||||
- [x] 3.4 Реализовать генерацию превью на устройстве (фото и постер видео, длинная сторона ~1600, q80) в приватный кэш (проверка: тест размеров и наличия файлов кэша)
|
||||
- [x] 3.5 Сделать смешанный список альбомов (серверные + устройства) с пометкой источника и указателем связи (проверка: UI-тест списка и связанной пары)
|
||||
- [x] 3.6 Сделать экран альбома устройства с сеткой и настройками синхронизации по свайпу вправо (только выбор режима; целевой альбом выбирается при включении) (проверка: UI-тест открытия и панели)
|
||||
- [x] 3.7 Реализовать режим A: просмотр альбома локально без запросов к серверу (проверка: тест, что при режиме A исходящих запросов по альбому нет)
|
||||
- [x] 3.8 Описать в `android/README.md` доступ к альбомам устройства, права и режим A (проверка: описанные команды/шаги соответствуют поведению)
|
||||
|
||||
## 4. Идентичность и синхронизация изменений (режим B)
|
||||
|
||||
- [x] 4.1 Реализовать content-hash уходящего содержимого и сопоставление с контрольной суммой сервера, чтобы не загружать уже имеющееся (проверка: тест повторной синхронизации без новых загрузок)
|
||||
- [x] 4.2 Реализовать движок обнаружения изменений на устройстве (`getGeneration`/`ContentObserver`) — добавление, удаление вне приложения, переименование, перенос, изменение содержимого (проверка: тесты на каждый вид изменения)
|
||||
- [x] 4.3 Подключить синхронизацию изменений к существующей очереди `UploadRepository`/`UploadWorker` (проверка: интеграционный тест загрузки нового содержимого в целевой альбом)
|
||||
- [x] 4.4 Реализовать политику удалений «только собственные загрузки» (проверка: тесты на удаление своей загрузки и на сохранение чужих фото)
|
||||
- [x] 4.5 Реализовать синхронизацию переименования, переноса и правки контента (как новая загрузка + удаление устаревшей) (проверка: тесты на `PATCH`/move и на замену контента)
|
||||
- [x] 4.6 Реализовать отражение серверных изменений (SSE + `?since=`) в локальном представлении без изменения оригиналов на устройстве (проверка: тесты нового фото с другого устройства и удаления на сервере)
|
||||
- [x] 4.7 Включить автоматическую синхронизацию: observer в foreground и периодический WorkManager с ограничением сети из настроек (проверка: тест, что при «только Wi-Fi» синхронизация не стартует на сотовой сети)
|
||||
- [x] 4.8 Описать в `android/README.md` режим B, дедуп и правила фоновой синхронизации (проверка: описание соответствует реализованному поведению)
|
||||
|
||||
## 5. Разгрузка места (режим C)
|
||||
|
||||
- [x] 5.1 Реализовать разгрузку фото: автоматическая перезапись файла превью с сохранением даты съёмки и места в альбоме (широкий доступ к файлам запрашивается при включении режима) (проверка: тест/ручная проверка сохранения `_ID`, даты и папки)
|
||||
- [x] 5.2 Реализовать разгрузку видео как постер: удаление видео-записи и вставка постера-картинки в ту же папку (проверка: тест типа и расположения записи)
|
||||
- [x] 5.3 Реализовать автоматическую разгрузку после успешной загрузки, без отдельного действия в настройках альбома (проверка: тест, что исходный ассет после загрузки становится превью)
|
||||
- [x] 5.4 Писать и читать EXIF-метку провенанса (`server_album`, `server_photo`, `original_hash`, `device`, `mode`) на разгруженных превью и постерах (проверка: тест записи и чтения метки)
|
||||
- [x] 5.5 Реализовать восстановление связи и провенанса из метки после переустановки, с безопасным поведением при утрате метки (проверка: тест восстановления и тест «неопознанный элемент не удаляется и не перезагружается»)
|
||||
- [x] 5.6 Описать в `android/README.md` режим C, широкий доступ к файлам, постер видео и метку провенанса (проверка: описание соответствует поведению)
|
||||
|
||||
## 6. Обратимость и переходы режимов
|
||||
|
||||
- [x] 6.1 Реализовать возврат оригиналов из режима C на устройство с проверкой свободного места (проверка: тест возврата и предупреждения при нехватке места)
|
||||
- [x] 6.2 Реализовать предупреждения при выходе из C и при отказе от возврата (проверка: UI-тест текста предупреждения)
|
||||
- [x] 6.3 Реализовать отвязку альбома и выключение синхронизации без удаления фото с сервера (проверка: тест, что серверные фото остаются)
|
||||
- [x] 6.4 Реализовать и проверить переходы A↔B↔C, включая безопасный повторный выбор цели после переустановки (проверка: тесты переходов, отсутствие дублей при возврате с оригиналом)
|
||||
- [x] 6.5 Описать в `android/README.md` обратимость, отвязку и переходы режимов (проверка: описание соответствует поведению)
|
||||
|
||||
## 7. Интеграция
|
||||
|
||||
- [x] 7.1 Прогнать сквозной сценарий на устройстве против запущенного galo: A → B → C → возврат, включая разгрузку и переустановку (проверка: ручной сценарий выполняется без потери и без дублей)
|
||||
- [x] 7.2 Убедиться, что весь набор проверок клиента проходит (проверка: `cd android && ./gradlew test lintDebug assembleDebug`)
|
||||
- [x] 7.3 Убедиться, что серверные тесты проходят с новым полем (проверка: `go test ./...` в `backend`)
|
||||
|
||||
## Workflow follow-up
|
||||
|
||||
- Запустить `openspec validate add-phone-album-sync --strict` перед архивацией.
|
||||
- Архивировать изменение после выполнения требований ревью проекта.
|
||||
- Проверить архивированный результат (обновлённые основные спеки).
|
||||
Reference in New Issue
Block a user