Files
jellybit/docs/passport.md
T
av c5d62d76ee docs: канон поднят с версии 7 до 12
- каталог задач переехал в tasks/ в корне, спринт упразднён — приоритет
  теперь порядок строк в BACKLOG.md, четыре задачи набора вернулись в беклог
- гейт: путь docs.py переведён на av-dev-docs вместо снесённого av-dev-pm,
  добавлены шаги tasks.py check и openspec.py check
- относительные ссылки внутри задач и ссылки из docs/ на задачи починены
2026-08-09 19:09:53 +03:00

85 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Паспорт проекта
Зачем это и для кого. [architecture.md](architecture.md) отвечает «как
устроено», [tasks/ROADMAP.md](../tasks/ROADMAP.md) — «что уже умеет», паспорт —
«зачем и для кого».
## Цель
Сократить путь «нашёл раздачу → смотрю на телевизоре» до одного действия:
кинуть торрент с парой слов контекста и получить фильм или сериал в библиотеке
Jellyfin, без ручного переименования и без каталога индексаторов.
**Потребители** — список закрытый: он определяет, что считать нужным, а что
интересным.
| Кто | Что ему нужно от нас |
| --- | --- |
| Владелец медиасервера (единственный оператор) | одна точка входа для magnet/`.torrent` + контекста; когда система не уверена — чтобы позвали, а не замяли молча; чтобы ошибку можно было откатить |
| Домашние зрители (через Jellyfin, о jellybit не знают) | правильные названия, годы, сезоны и серии — иначе Jellyfin подтянет чужие метаданные |
| Jellyfin | файлы, разложенные по его конвенциям имён, и сигнал пересканировать библиотеку, когда они изменились |
Цель достигнута, когда:
- русский контент и аниме раскладываются так же буднично, как англоязычные —
это ровно то, на чём разваливается arr-стек;
- типовое добавление не требует ни одного ручного действия после отправки
торрента, а нетиповое требует ровно одного — подтверждения в ревью;
- ошибочная раскладка откатывается одной кнопкой, не задев раздачу.
## Что целью не является
Граница домена. По ней архитектурный проход судит, не перенесено ли понятие
через границу.
- **Не индексатор и не поисковик по трекерам** (роль prowlarr). Раздачу находит
человек и приносит сам — вместе с контекстом, который он и так видит глазами.
- **Не менеджер качества релизов** (правила radarr/sonarr). Версии, репаки и
апгрейд 1080p → 2160p не отслеживаем; коллизия уходит в ревью, а не в
политику качества.
- **Не подписка на выходящие серии.** Никакого monitoring: система не ищет
ничего сама и не добавляет загрузок по своей инициативе.
- **Не торрент-клиент.** Качает qBittorrent, мы им управляем и не подменяем его
функциональность.
- **Не медиасервер.** Обложки, метаданные, учёт просмотренного и сам просмотр —
забота Jellyfin. Мы отвечаем только за то, чтобы файл лежал там, где Jellyfin
его правильно опознает.
- **Не хранилище медиа.** Данные живут в раздаче, мы создаём хардлинки и не
дублируем контент намеренно. Два исключения хранилищем нас не делают, но байты
у нас появляются: copy-fallback, когда хардлинк невозможен
([file-layout](../openspec/specs/file-layout/spec.md)), и состояние
`orphaned`, где библиотечная ссылка осталась последней копией
([state-reconciliation](../openspec/specs/state-reconciliation/spec.md)).
Сохранность мы и в этих случаях на себя не берём — резервных копий медиа у нас
нет.
- **Не мультипользовательский сервис.** Контур один, оператор один; разграничение
доступа сводится к allowlist Telegram (см. [security.md](security.md)).
## Типовые сценарии
1. **Фильм через Telegram.** Переслать боту сообщение торрент-бота → magnet и
текст сообщения становятся источником и контекстом → загрузка → распознавание
→ при подтверждённом матче в метабазе авто-раскладка → пинг «готово».
2. **Сезон сериала.** То же, но файлов много; они раскладываются сериями, а
второй сезон ложится в **ту же** папку тайтла, что и первый.
3. **Русский фильм, которого нет в базе.** Уходит в ревью: подсказка текстом и
перераспознавание, выбор источника совпадения из списка, ручной ввод id или
URL записи, предпросмотр целевых путей, «Применить».
4. **Ошиблись с привязкой.** Undo снимает наши ссылки (раздача цела) →
«Привязать заново» → правка в ревью → повторное применение.
5. **Раздачу или файлы удалили руками.** Фоновая сверка констатирует рассинхрон
(`target_missing`/`orphaned`/`deleted`), не теряя последнюю копию данных, и
лечится сама, если реальность вернулась.
## Референсы
Где смотреть prior art, когда упёрлись.
- [Jellyfin: Movies](https://jellyfin.org/docs/general/server/media/movies) и
[Shows](https://jellyfin.org/docs/general/server/media/shows) — целевые
конвенции имён, источник истины по формату, в который раскладываем.
- **arr-стек** (radarr/sonarr/prowlarr) — прежде всего как каталог того, чего мы
намеренно **не** берём; полезен по крайним случаям именования.
- **umbar** (`/home/av/projects/private/umbar`) — соседний проект того же
хозяйства: форма деплоя, раскладка `/srv`, стиль «минимум компонентов».