Добавил документацию и описание репозитория

This commit is contained in:
2026-06-13 17:10:53 +03:00
parent 82a81c16af
commit 5b53f4e8e8
12 changed files with 647 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
# Идеи и нерешённое
Свалка мыслей на будущее. Ни к чему не обязывает; принятое переезжает в
specs/adr.
## guessit как сервис-спутник
`go-ptn` слабее питоновского `guessit`. Если точности пред-парса не
хватит — завернуть `guessit` в крошечный HTTP-сервис (один файл,
поставляется рядом с бинарём jellybit) и спрашивать его на шаге
пред-парса. Сохраняет «доставку копированием»: два файла вместо одного.
## Аниме с абсолютной нумерацией
Релизы аниме часто нумеруют серии сквозным числом (`#137`) без сезонов, а
Jellyfin ждёт `SxxEyy`. Нужен пересчёт абсолютной нумерации в
сезон/серию — надёжнее всего через TVDB (там есть absolute order).
Отдельный крайний случай распознавания.
## Завершение загрузки через webhook
Сейчас план — поллинг qBittorrent. Альтернатива: «Run external program on
torrent completion» в qBittorrent дёргает эндпоинт jellybit. Реагирует
быстрее, но связывает нас с конфигом qBittorrent. Решим по опыту
эксплуатации.
## Нотификации о готовности
Когда раскладка завершена (или нужен review) — уведомить: Telegram,
возможно ntfy/Apprise. Естественно ложится на Telegram-транспорт.
## Доступ к веб-UI
Сейчас предполагается доверенная локальная сеть. Если понадобится —
простая авторизация или вынос за reverse-proxy с аутентификацией.
## Повторный прогон распознавания
Возможность переоткрыть загрузку, поправить контекст и перераспознать без
перекачивания — полезно, когда LLM ошибся, а файлы уже скачаны.
+31
View File
@@ -0,0 +1,31 @@
# Дорожная карта
Черновик плана реализации. Ориентир, не обязательство; по ходу
уточняется. Что реализовано и как устроено — в `docs/specs`.
## Фазы
- **Ф0 — каркас.** go.mod, раскладка пакетов, загрузка TOML-конфига,
SQLite + миграции, slog-логи, Dockerfile (static → distroless),
golangci-lint, lefthook. Документация (этот этап — частично готов).
- **Ф1 — ingest + tracking (без LLM).** `Ingest()` + добавление в
qBittorrent (категория `jellybit`) + `worker`-поллинг завершения +
машина состояний. Наружу: HTTP API, список в веб-UI, `jellybit add`.
- **Ф2 — распознавание.** `go-ptn` + LLM (structured output) → план +
оценка уверенности. Без записи на диск.
- **Ф3 — раскладка + минимальный review.** Хардлинки по конвенциям
Jellyfin, субтитры, идемпотентность. Авто при высокой уверенности;
низкая → экран подтверждения (htmx).
- **Ф4 — метаданные.** TMDB/TVDB опционально, provider-id в именах,
валидация распознавания против числа серий.
- **Ф5 — Telegram + UX.** Бот-адаптер + парсер сообщений торрент-бота,
подтверждение в боте, триггер скана Jellyfin, нотификации.
- **Ф6 — деплой.** Static-образ/бинарь + обвязка в umbar
(`playbook-jellybit.yml`).
## Заметки по порядку
- Минимальный review-экран нужен уже в Ф3 (как только появляется режим
«спросить при сомнении»), полноценный UX — в Ф5.
- Jellyfin в umbar ещё не развёрнут — раскладку файлов это не блокирует,
тестируется без него; триггер скана подключаем, когда Jellyfin поднят.