From 70b3c7ae14308ee7b9ba40b24f823fedd3dc01cb Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Mon, 15 Jun 2026 11:50:49 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20to?= =?UTF-8?q?do=20=D1=81=20=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/todo.md | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 docs/todo.md diff --git a/docs/todo.md b/docs/todo.md new file mode 100644 index 0000000..b5234bb --- /dev/null +++ b/docs/todo.md @@ -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`.