docs: перевод документации на канон av-dev
- Раскладка docs/ приведена к канону 2: заведены passport/architecture/ database/security/review и research; docs/specs, drafts, backlog, review/ и BRIEF.md разобраны и удалены, беклог переехал в docs/tasks (34 задачи, 6 целей, слаги на английский). - Нарративы specs удалены как дубли openspec-спек после поимённой сверки; остаток заведён задачами (редактор маппинга ревью, крайние случаи именования), отказ от сущности title промоутнут в ADR. - Проектные копии агентов и скиллов ревью/пайплайна удалены в пользу плагинов av-dev-pm и av-dev-pipeline; в task gate добавлен шаг canon вместо er-schema.
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
# Разведка
|
||||
|
||||
Наблюдения за внешним миром: что реально шлёт источник, чем документация формата
|
||||
расходится с практикой. Источник истины — этот каталог, а не чужая документация.
|
||||
|
||||
**Каждый вывод — с числами и командой или условиями, которыми получен**, чтобы
|
||||
его можно было перепроверить. Число без провенанса проход обязан читать как
|
||||
условие, а не как замер. Число, чей источник по ссылке не подтвердился, не
|
||||
выбрасывается и не переписывается по догадке — остаётся с пометкой «расходится
|
||||
с источником: там <что нашли>».
|
||||
|
||||
## Как снималось
|
||||
|
||||
Наблюдения снимались вручную, по ходу разработки, на домашнем контуре: реальные
|
||||
сообщения торрент-бота в Telegram, реальные ответы qBittorrent WebUI API и
|
||||
LLM-эндпоинта на живых раздачах. Автоматического сбора и корпуса кейсов **нет** —
|
||||
это отдельная задача (eval-харнес распознавания), до неё числа здесь единичные
|
||||
и приведены как условия, а не как статистика.
|
||||
|
||||
Зафиксированные образцы чужих форматов лежат прямо в тестах пакета-разборщика
|
||||
(`internal/tgbot/parse_test.go`, `internal/magnet`, `internal/torrent`) — там
|
||||
они заодно и проверяются; каталог `testdata/` под них не заводился.
|
||||
|
||||
## Записи
|
||||
|
||||
- [torrent-bot-message.md](torrent-bot-message.md) — формат сообщения
|
||||
торрент-бота, из которого приходит magnet и контекст.
|
||||
@@ -0,0 +1,75 @@
|
||||
# Формат сообщения торрент-бота
|
||||
|
||||
Основной способ добавления загрузки — переслать в jellybit сообщение стороннего
|
||||
торрент-бота (`exfreedomist`, поиск по rutracker и соседним трекерам). Из
|
||||
сообщения берутся **источник** (magnet) и **контекст** для распознавания. Формат
|
||||
чужой, ничем не документирован и может измениться без предупреждения.
|
||||
|
||||
**Провенанс.** Образец снят вручную из личного чата Telegram (сообщение
|
||||
датировано 2026-03-21) и зафиксирован в [BRIEF.md] проекта; второй образец,
|
||||
меньшего размера, живёт константой `botMessage` в
|
||||
`internal/tgbot/parse_test.go` и проверяется тестами разборщика. Статистики по
|
||||
вариантам формата нет — наблюдений всего два, и это условие, а не замер.
|
||||
|
||||
[BRIEF.md]: перенесён в [../passport.md](../passport.md); полный текст образца —
|
||||
ниже и в истории git.
|
||||
|
||||
## Образец
|
||||
|
||||
```
|
||||
[1] #6514485 [rutracker], 2026-03-21 (https://hashurl.ru/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…):
|
||||
Дюна: Часть вторая / Dune: Part Two (Дени Вильнёв / Denis Villeneuve) [2024, США, Канада, фантастика, WEB-DL 2160p, HDR10+, Dolby Vision] Dub (Bravo Records Georgia, RHS, Jaskier, HDrezka) + MVO (LostFilm, TVShows, Jaskier) + AVO (Сербин, Яроцкий) + (Ukr) + Original (Eng) + Sub (Rus, Eng, Ukr)
|
||||
|
||||
✅ (проверено) | 34.82 GB
|
||||
|
||||
magnet:?xt=urn:btih:541ADCFF3B6DD5DBA7088EA83317D9D6FAC331D6&tr=http%3A%2F%2Fbt.t-ru.org%2Fann%3Fmagnet&dn=rutracker-topic-6514485
|
||||
|
||||
Открыть magnet в вашем клиенте (https://hashurl.ru/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…)
|
||||
или получить .torrent: /tr_5c054
|
||||
|
||||
Оцените раздачу:
|
||||
👍: /g_eabdce или 👎🏿: /r_eabdce
|
||||
|
||||
[список файлов] (https://download.exfreedomist.com/files/541ADCFF3B6DD5DBA7088EA83317D9D6FAC331D6)
|
||||
|
||||
Следить: /us_5c054
|
||||
Добавить в закладки: /mka_96423
|
||||
|
||||
cправка: /help, index (https://exfreedomist.com/stats/)
|
||||
```
|
||||
|
||||
## Что из этого наблюдается
|
||||
|
||||
- **Заголовок строки 1** — порядковый номер выдачи, `#<topic-id>`, имя трекера в
|
||||
квадратных скобках, дата раздачи и ссылка-редирект `hashurl.ru` с JWT в пути.
|
||||
Токен в ссылке **имеет срок жизни** (`exp` в payload) — как долгоживущий
|
||||
идентификатор он не годится.
|
||||
- **Строка описания** — самый ценный кусок: локализованное название, оригинальное
|
||||
название через `/`, режиссёр в скобках (тоже через `/`), затем блок в
|
||||
квадратных скобках `[год, страны, жанры, качество, HDR…]` и перечисление
|
||||
дорожек и субтитров. Именно она уходит контекстом в распознавание.
|
||||
- **Разделитель `/`** используется одновременно для пары «локализованное /
|
||||
оригинальное» и для пары «имя режиссёра кириллицей / латиницей». По позиции
|
||||
они не различаются — только по тому, что вторая пара стоит в скобках.
|
||||
- **magnet отдельной строкой**, с `dn=rutracker-topic-<id>` — то есть `dn`
|
||||
здесь **не** содержит названия фильма и как имя раздачи бесполезен.
|
||||
Инфохэш в magnet — v1, uppercase hex; нормализуем в lowercase.
|
||||
- **`.torrent` не приложен** — предлагается командой бота (`/tr_…`), то есть
|
||||
вторым шагом в чужом чате. Поэтому источник, приходящий этим путём, —
|
||||
практически всегда magnet.
|
||||
- **Размер раздачи** в человекочитаемом виде (`34.82 GB`) и отметка
|
||||
«✅ (проверено)».
|
||||
- **Команды бота** (`/g_…`, `/r_…`, `/us_…`, `/mka_…`, `/help`) и ссылка на
|
||||
список файлов — шум для распознавания, но безвредный: попадают в контекст как
|
||||
есть.
|
||||
- Весь текст — **недоверенный вход**: он полностью составляется чужим ботом по
|
||||
данным трекера и уезжает в промпт LLM. См. [../security.md](../security.md).
|
||||
|
||||
## Чего не знаем
|
||||
|
||||
- Насколько формат стабилен: наблюдений два, оба от одного бота, разница между
|
||||
ними — только в наличии строки «сохранённая копия описания раздачи».
|
||||
- Как выглядит сообщение для сериала-сезонника и для аниме — образцов не
|
||||
снимали, а именно на них строится самый сложный случай раскладки.
|
||||
- Что бот присылает при неудачном поиске и при слишком длинном описании
|
||||
(обрезка Telegram — 4096 символов на сообщение).
|
||||
Reference in New Issue
Block a user