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

This commit is contained in:
av
2026-06-28 12:00:16 +03:00
parent b269cdf8ca
commit 4f2fb5998a
5 changed files with 369 additions and 0 deletions
@@ -0,0 +1,56 @@
## 1. qBittorrent: проброс имени
- [ ] 1.1 Добавить поле `Rename string` в `qbt.AddRequest`
- [ ] 1.2 В `Client.Add` писать form-field `rename` при непустом `Rename`
- [ ] 1.3 Тест: при заданном `Rename` form-data содержит `rename`, при
пустом — поля нет
## 2. Вывод имени: структура и рендер
- [ ] 2.1 Описать структуру извлечённого имени (type, title,
original_title, year, director, season, is_russian)
- [ ] 2.2 Реализовать чистую функцию рендера структуры в короткий ярлык:
`Title (Director, Year)` с опциональными режиссёром и годом (скобка
опускается, если обоих нет), для сериала — суффикс `. Сезон N`;
очистка управляющих символов/переводов строк и обрезка по длине
- [ ] 2.3 Тесты рендера: фильм с режиссёром+годом / только год / только
режиссёр / без обоих, сериал с сезоном/без, обрезка длины, очистка
## 3. Вывод имени: LLM
- [ ] 3.1 Узкий промпт извлечения имени (RU-название для российского
контента, иначе EN/оригинал) + описание JSON-схемы ответа
- [ ] 3.2 Парсинг и валидация ответа (валидный JSON, непустой `title`);
бюджет попыток — `[llm].max_retries` (переиспользуем существующий)
- [ ] 3.3 Тесты на фикстурах (без сети): успешный разбор, выбор языка
названия, исчерпание попыток
## 4. Вывод имени: алгоритмический фолбек
- [ ] 4.1 Реализовать фолбек без сети: первая содержательная строка
контекста (без ссылок/команд/UI-мусора), отсечение тех.
характеристик, очистка и обрезка
- [ ] 4.2 Вынести/переиспользовать логику чистки строк (сейчас в
`tgbot.cleanContext`), чтобы не дублировать
- [ ] 4.3 Тесты фолбека: заголовок релиза, пустой/бесполезный контекст → ""
## 5. Интеграция в ingest
- [ ] 5.1 Ввести узкий интерфейс/функцию вывода имени (`DeriveName`),
реализованную поверх LLM + фолбек; зависимость опциональна (нет LLM →
только фолбек)
- [ ] 5.2 В `Ingest()` синхронно выводить имя из `req.Context` (подсказка —
`magnet.DisplayName`) перед `qbt.Add`, класть в `AddRequest.Rename`
- [ ] 5.3 Graceful-деградация: ошибка/таймаут вывода имени логируется и не
прерывает приём (пустое имя → без `rename`). Бюджет попыток и таймаут —
общие `[llm].max_retries` / `[llm].timeout`, новых параметров не вводим
- [ ] 5.4 Прокинуть зависимость (LLM-провайдер) в сборке сервиса
(`cmd/jellybit`)
## 6. Проверка
- [ ] 6.1 `task test` и `task lint` зелёные
- [ ] 6.2 Ручная проверка на реальном qBittorrent: имя видно в списке;
подтвердить поведение `rename` для многофайловой раздачи
- [ ] 6.3 Обновить `docs/specs` (architecture/ingest) и отметить todo
«Название из контекста» как реализованную при архивации change