Скан Jellyfin (POST /Library/Refresh) слался только при входе в done.
После Undo (reverted) и Delete (deleted) наши хардлинки сняты, а Jellyfin
держал битые записи до скана по расписанию.
Гейт скана в едином чекпоинте transitionErr переведён с state == done на
предикат triggersScan(state) по множеству {done, reverted, deleted}: гейт по
состоянию-цели естественно ловит пользовательские Undo/Delete и
reconcile-производный deleted, идемпотентно. target_missing/orphaned —
промежуточный рассинхрон (ждём relink/лечения) — исключены.
OpenSpec: заведена и влита дельта file-layout (требование
«Пересканирование Jellyfin после изменения библиотечных ссылок»); change
архивирован. Синк рукописных доков architecture.md/workflow.md. Тесты:
скан стреляет на reverted и deleted, молчит на входе вне множества.
Закрыта задача беклога jellyfin-skan-posle-udaleniya.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
35 lines
2.3 KiB
Markdown
35 lines
2.3 KiB
Markdown
## 1. worker — расширить гейт скана
|
||
|
||
- [x] 1.1 В `internal/worker/worker.go` (`transitionErr`) заменить условие
|
||
`state == store.StateDone` на проверку принадлежности `state` множеству
|
||
`{done, reverted, deleted}` (небольшой предикат-хелпер для читаемости).
|
||
Остальную механику скана (фоновый ctx, `capFileLayout`-scoped-логгер,
|
||
неблокирующая горутина, `w.scanner != nil`) переиспользовать как есть.
|
||
- [x] 1.2 Обновить поясняющий комментарий: скан не только «раскладка завершена»,
|
||
а «наши библиотечные хардлинки изменились» (разложены при `done`, сняты при
|
||
`reverted`/`deleted`).
|
||
|
||
## 2. Тесты
|
||
|
||
- [x] 2.1 `internal/worker/review_test.go`: тест, что скан стреляет на входе в
|
||
`reverted` (после `Undo`).
|
||
- [x] 2.2 Тест, что скан стреляет на входе в `deleted` (после `Delete`).
|
||
- [x] 2.3 (Опц.) Негативный точечный тест: на входе, не меняющем наши ссылки,
|
||
скан не дёргается.
|
||
|
||
## 3. Доки
|
||
|
||
- [x] 3.1 `docs/specs/architecture.md` («Пересканирование Jellyfin» и строка
|
||
«Решённые вопросы»): формулировку «при входе в `done`» заменить на «после
|
||
раскладки (`done`) и после снятия наших ссылок (`reverted`/`deleted`)».
|
||
- [x] 3.2 `docs/specs/workflow.md`: в описании `done` и снятия ссылок отразить,
|
||
что скан дёргается и после Undo/Delete.
|
||
|
||
## 4. Ревью и сверка
|
||
|
||
- [x] 4.1 `task test` и `task lint` зелёные.
|
||
- [x] 4.2 Ревью кода (второй чекпоинт) перед archive.
|
||
- [x] 4.3 `openspec validate 2026-07-17-jellyfin-scan-on-revert-delete --strict` зелёный.
|
||
- [x] 4.4 Синк дельты в `openspec/specs/file-layout`, архив change; удалить
|
||
`docs/backlog/jellyfin-skan-posle-udaleniya.md` и строку из индекса беклога.
|