Добавил todo с доработками
This commit is contained in:
@@ -0,0 +1,96 @@
|
|||||||
|
# TODO
|
||||||
|
|
||||||
|
Конкретные задачи на будущее, ранжированные по приоритету. Это не план
|
||||||
|
реализации (он — в [drafts/roadmap.md](drafts/roadmap.md)) и не свалка
|
||||||
|
идей ([drafts/ideas.md](drafts/ideas.md)): сюда попадает то, что уже решили
|
||||||
|
сделать, но ещё не сделали. Принятое и реализованное переезжает в
|
||||||
|
`docs/specs`/`docs/adr`.
|
||||||
|
|
||||||
|
Приоритет — грубая оценка «ценность / стоимость», не обязательство к
|
||||||
|
порядку.
|
||||||
|
|
||||||
|
## Высокий
|
||||||
|
|
||||||
|
### Проблема второго сезона
|
||||||
|
|
||||||
|
Если первый сезон сериала уже разложен, а мы добавляем второй/третий/…,
|
||||||
|
распознавание должно привязать новый сезон к **тому же** названию и папке,
|
||||||
|
а не завести рядом почти одинаковую вторую папку. Ключ — стабильный
|
||||||
|
`provider_id`: один и тот же `[tvdbid-…]` → одна папка сериала, новые
|
||||||
|
`Season NN` доливаются внутрь. Нужно: при матче учитывать уже существующие
|
||||||
|
в библиотеке сериалы (или прошлые распознавания с тем же провайдер-id) и
|
||||||
|
склонять LLM/выбор кандидата к согласованности с ними.
|
||||||
|
|
||||||
|
Связано: [recognition.md](specs/recognition.md) (модель уверенности,
|
||||||
|
матч в базе), [jellyfin-layout.md](specs/jellyfin-layout.md) (папка
|
||||||
|
сериала с провайдер-id).
|
||||||
|
|
||||||
|
### Название из контекста при добавлении в qBittorrent
|
||||||
|
|
||||||
|
При создании magnet-загрузки передавать в qBittorrent человекочитаемое имя
|
||||||
|
из контекста (если оно есть), чтобы в списке qBit не было безликих
|
||||||
|
`rutracker-topic-6852853`. Небольшая задача с заметной отдачей в
|
||||||
|
повседневной эксплуатации.
|
||||||
|
|
||||||
|
Связано: [architecture.md](specs/architecture.md) → «Транспорты», пакет
|
||||||
|
`ingest`/`qbt`.
|
||||||
|
|
||||||
|
## Средний
|
||||||
|
|
||||||
|
### Машина состояний на go-библиотеке
|
||||||
|
|
||||||
|
Сейчас FSM реализована вручную в `worker`. Выбрать подходящую go-библиотеку
|
||||||
|
для описания воркфлоу/машины состояний и перевести переходы на неё — ради
|
||||||
|
декларативности, проверяемости переходов и единого места правды. Кандидаты
|
||||||
|
для оценки: `looplab/fsm`, `qmuntal/stateless` (и аналоги). Граф и переходы
|
||||||
|
уже формализованы — переносим один в один.
|
||||||
|
|
||||||
|
Связано: [workflow.md](specs/workflow.md) (текущий граф состояний).
|
||||||
|
|
||||||
|
### Привязка уведомлений к источнику в ботах (мульти-бот)
|
||||||
|
|
||||||
|
Уведомления и запросы подтверждения должен получать тот, кто прислал
|
||||||
|
загрузку: автор сообщения о новой раздаче — адресат пингов и ревью по ней.
|
||||||
|
Транспортов-ботов может быть несколько (Telegram, в перспективе Matrix и
|
||||||
|
др.); каждый адресует «своему» отправителю. Веб-интерфейс остаётся
|
||||||
|
**единым для всех** и точкой правды по функциональности (боты — тонкие
|
||||||
|
адаптеры над тем же ядром). Нужно: хранить у загрузки источник/транспорт и
|
||||||
|
идентификатор отправителя, маршрутизировать пинги по нему.
|
||||||
|
|
||||||
|
Связано: [review-ux.md](specs/review-ux.md) (разделение труда транспортов,
|
||||||
|
веб = точные правки), [architecture.md](specs/architecture.md) →
|
||||||
|
«Транспорты».
|
||||||
|
|
||||||
|
### Добавление торрентов файлом/ссылкой — «единое окно»
|
||||||
|
|
||||||
|
Поддержать источники помимо magnet: `.torrent`-файл и URL (отдаём их в
|
||||||
|
qBittorrent, без исходящих запросов на пользовательский URL — SSRF
|
||||||
|
исключён). Идеал — одно поле «единого окна»: кидаем туда текст или файл, а
|
||||||
|
сервис сам разбирает, что это (magnet / ссылка / .torrent / сообщение
|
||||||
|
бота), и заводит загрузку.
|
||||||
|
|
||||||
|
Связано: [architecture.md](specs/architecture.md) → «Транспорты»
|
||||||
|
(`source_type = magnet|torrent|url` уже в схеме), пакет `ingest` (сейчас
|
||||||
|
поддержан только magnet).
|
||||||
|
|
||||||
|
## Низкий
|
||||||
|
|
||||||
|
### Многоступенчатая верификация привязки (тема для размышления)
|
||||||
|
|
||||||
|
Идея: несколько раз извлекать данные из раздачи и контекста разными
|
||||||
|
промптами, искать в метабазах, затем сводить результаты в общий вердикт
|
||||||
|
(голосование/консенсус) — выше точность ценой нескольких вызовов LLM и
|
||||||
|
запросов к базам. Требует проработки: когда включать, как мерджить
|
||||||
|
расхождения, стоимость/латентность.
|
||||||
|
|
||||||
|
Связано: [recognition.md](specs/recognition.md) (конвейер и модель
|
||||||
|
уверенности).
|
||||||
|
|
||||||
|
### Современный Web-UI как PWA
|
||||||
|
|
||||||
|
Переделать веб-интерфейс в современное PWA-приложение (устанавливаемое,
|
||||||
|
отзывчивое, удобное с телефона). Текущий server-rendered UI функционален,
|
||||||
|
поэтому это улучшение, а не блокер; большой объём работы.
|
||||||
|
|
||||||
|
Связано: [review-ux.md](specs/review-ux.md) (веб = точные правки),
|
||||||
|
пакет `httpapi`.
|
||||||
Reference in New Issue
Block a user