Files
jellybit/docs/drafts/roadmap.md
T
av 08bef2cac0 deploy: переход на локальную сборку образа и доставку docker save/load
- task image принимает BUILD_ID и тегает <app>:$BUILD_ID (контракт роли app_image в umbar)
- добавлен ADR-2026-07-24-local-image-build, старый docker-deploy помечен superseded
- README/architecture/roadmap/Dockerfile обновлены под новую схему (без сборки на сервере)
2026-07-24 18:33:51 +03:00

46 lines
3.5 KiB
Markdown

# Дорожная карта
Черновик плана реализации. Ориентир, не обязательство; по ходу
уточняется. Что реализовано и как устроено — в `docs/specs`.
## Фазы
- **Ф0 — каркас.** go.mod, раскладка пакетов, загрузка TOML-конфига,
SQLite + миграции, slog-логи, `Dockerfile` (минимальный рантайм-образ,
копирует готовый бинарь), golangci-lint, lefthook. Документация (этот
этап — частично готов).
- **Ф1 — ingest + tracking (без LLM).** `Ingest()` + добавление в
qBittorrent (источник отдаём ему, категория `jellybit`, ключ
идемпотентности по infohash) + `worker`-поллинг завершения
(`savepath=/srv/media/downloads`, путь из API) + машина состояний. Наружу:
HTTP API, список в веб-UI, `jellybit add`.
- **Ф2 — распознавание.** `go-ptn` + LLM (structured output) → план +
оценка уверенности. Без записи на диск.
- **Ф3 — раскладка + минимальный review.** Хардлинки по конвенциям
Jellyfin (санитизация пути, never-overwrite), субтитры, идемпотентность,
**undo**. Авто только при матче в базе и чистой валидации; иначе → review
(htmx): подсказка + перераспознавание, из ручного — тип, выбор кандидата
базы, пометка «игнор». Полный редактор маппинга — Ф5. См.
[review-ux.md](../specs/review-ux.md).
- **Ф4 — метаданные.** TMDB/TVDB опционально (с HTTP-прокси на клиента),
provider-id в именах, валидация распознавания против числа серий.
- **Ф5 — Telegram + UX.** Бот-адаптер + парсер сообщений торрент-бота,
подтверждение в боте (карточка + кнопки + reply-подсказка, эскалация в
веб), полный редактор маппинга «файл → серия», триггер скана Jellyfin,
нотификации.
- **Ф6 — деплой.** Полный образ собирается локально на control-хосте
(`task image`) и едет на сервер через `docker save`/`load` (роль
`app_image` в umbar), там и запускается — `docker build` на сервере нет;
оркестрация — `playbook-jellybit.yml` в umbar: общая docker-сеть,
`user 1000:1000`,
mount `/srv/media` + data-том `/srv/applications/jellybit/data`,
healthcheck. Сопутствующие правки qBit (том `/srv/media`, savepath/temp
под `/srv/media`, `WebUI\ServerDomains=*`).
## Заметки по порядку
- Минимальный review-экран нужен уже в Ф3 (как только появляется режим
«спросить при сомнении»), полноценный UX — в Ф5.
- Jellyfin в umbar ещё не развёрнут — раскладку файлов это не блокирует,
тестируется без него; триггер скана подключаем, когда Jellyfin поднят.