Скан 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>
2.3 KiB
2.3 KiB
1. worker — расширить гейт скана
- 1.1 В
internal/worker/worker.go(transitionErr) заменить условиеstate == store.StateDoneна проверку принадлежностиstateмножеству{done, reverted, deleted}(небольшой предикат-хелпер для читаемости). Остальную механику скана (фоновый ctx,capFileLayout-scoped-логгер, неблокирующая горутина,w.scanner != nil) переиспользовать как есть. - 1.2 Обновить поясняющий комментарий: скан не только «раскладка завершена»,
а «наши библиотечные хардлинки изменились» (разложены при
done, сняты приreverted/deleted).
2. Тесты
- 2.1
internal/worker/review_test.go: тест, что скан стреляет на входе вreverted(послеUndo). - 2.2 Тест, что скан стреляет на входе в
deleted(послеDelete). - 2.3 (Опц.) Негативный точечный тест: на входе, не меняющем наши ссылки, скан не дёргается.
3. Доки
- 3.1
docs/specs/architecture.md(«Пересканирование Jellyfin» и строка «Решённые вопросы»): формулировку «при входе вdone» заменить на «после раскладки (done) и после снятия наших ссылок (reverted/deleted)». - 3.2
docs/specs/workflow.md: в описанииdoneи снятия ссылок отразить, что скан дёргается и после Undo/Delete.
4. Ревью и сверка
- 4.1
task testиtask lintзелёные. - 4.2 Ревью кода (второй чекпоинт) перед archive.
- 4.3
openspec validate 2026-07-17-jellyfin-scan-on-revert-delete --strictзелёный. - 4.4 Синк дельты в
openspec/specs/file-layout, архив change; удалитьdocs/backlog/jellyfin-skan-posle-udaleniya.mdи строку из индекса беклога.