diff --git a/CLAUDE.md b/CLAUDE.md index 23c2dea..7647741 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -111,8 +111,9 @@ Go 1.26, один статический бинарь (`CGO_ENABLED=0`). Module проверяет проход `ops` рассуждением, и это идёт в границы покрытия. - Ничего не гоняется против **живого** qBittorrent, LLM и метабаз: интеграционные тесты за env-гейтами, запускает человек вручную. - - Качество распознавания гейтом не проверяется вовсе — нужен корпус кейсов - (задача `recognition-eval-harness`). + - Качество распознавания гейтом не проверяется вовсе и проверяться не будет: + размеченный корпус решено не собирать (`docs/tasks/REJECTED.md`, + 2026-08-06). Сдвиг точности виден только по рабочему потоку. ## Запреты diff --git a/docs/research/README.md b/docs/research/README.md index 1608006..fe1e7a2 100644 --- a/docs/research/README.md +++ b/docs/research/README.md @@ -14,8 +14,9 @@ Наблюдения снимались вручную, по ходу разработки, на домашнем контуре: реальные сообщения торрент-бота в Telegram, реальные ответы qBittorrent WebUI API и LLM-эндпоинта на живых раздачах. Автоматического сбора и корпуса кейсов **нет** — -это отдельная задача (eval-харнес распознавания), до неё числа здесь единичные -и приведены как условия, а не как статистика. +и не планируется: размеченный корпус решено не собирать +(`../tasks/REJECTED.md`, 2026-08-06). Числа здесь единичные и приведены как +условия, а не как статистика. Зафиксированные образцы чужих форматов лежат прямо в тестах пакета-разборщика — там они заодно и проверяются; где именно и почему без каталога `testdata/`, см. diff --git a/docs/review.md b/docs/review.md index 29d63a3..b93477c 100644 --- a/docs/review.md +++ b/docs/review.md @@ -164,7 +164,9 @@ merge-раскладка при повторном добавлении разд - Завязка внешних потребителей (Jellyfin, закладки, чужие ссылки) на текущее поведение. - Качество распознавания как таковое: правильно ли LLM определил фильм — вопрос - eval-харнеса и корпуса кейсов, а не ревью кода. + тюнинга модели и промпта, а не ревью кода. Размеченный корпус, по которому это + можно было бы судить числом, решено не собирать (`tasks/REJECTED.md`, + 2026-08-06). - Суждение «этой функциональности не должно существовать». **Перестали проверять сознательно** — пересматривается первым, как только diff --git a/docs/tasks/BACKLOG.md b/docs/tasks/BACKLOG.md index 5ac3a12..53c1a00 100644 --- a/docs/tasks/BACKLOG.md +++ b/docs/tasks/BACKLOG.md @@ -18,7 +18,6 @@ - [✨ Принимать ссылку на .torrent и скачивать файл самим (нужен SSRF-гард)](items/torrent-url-fetch.md) — magnet и .torrent-файл приняты; остался фетч .torrent по URL (нужен SSRF-гард) - [✨ Узаконить confidence-гейт авто-раскладки в спеке и сделать его выключаемым (дефолт 0.7)](items/auto-link-confidence-gate.md) — Решено (B): гейт оставляем как доп. проверку на ревью — выключаемый порог, дефолт 0.85→0.7, записать в спеку - [✨ Докладывать недостающие эпизоды merge-раскладкой при повторной заливке](items/merge-incremental-redownload.md) — повторная заливка сериала целиком должна доложить недостающие эпизоды merge-раскладкой, не трогая существующие ссылки — блокирует типовой сценарий свежих сериалов -- [✨ Подмешивать прошлые правки человека в промпт распознавания (few-shot)](items/learn-from-user-corrections.md) — правки человека (матч/тип/нумерация) не переиспользуются — few-shot из прошлых ревью поднял бы точность на «своих» трекерах без смены модели - [🐞 Связать v1/v2-хеши одного торрента и не доверять паре xt из магнета (F4, F5)](items/infohash-identity-integrity.md) — split v1/v2 идентичность и крафт-магнет отравляют владение инфохэшами _(ревью 2026-07-08)_ - [🧹 Закрыть мелочи приёма: NoName в контексте, устаревшие комментарии, лог без причины, bencode-аллокации (N1, N3, N4, N5)](items/ingest-nits.md) — косметика приёма: NoName в контексте, устаревшие комментарии, лог, bencode-аллокации _(ревью 2026-07-08)_ - [✨ Слать живые обновления через SSE вместо htmx-поллинга](items/sse-live-updates.md) — живые обновления на htmx-поллинге дают задержку и холостые запросы — SSE убрал бы то и другое (поллинг работает, поэтому улучшение, не блокер) @@ -42,7 +41,6 @@ - [🧹 Откалибровать проходы ревью и завести ревьювер наименований](items/quality-review-agents.md) — конвейер ревью переехал в плагин `av-dev-pipeline`; осталась калибровка проходов на этом проекте и ревьювер наименований (ждёт словарь единого языка) - [✨ Закрыть веб-UI авторизацией, когда доверенной LAN станет мало](items/web-ui-auth.md) — для v1 решено без авторизации (доверенная LAN, опц. allowlist подсетей) — задел на случай, если понадобится защита - [🧹 Бэкапить SQLite по расписанию с ротацией](items/sqlite-backup.md) — architecture требует бекапить data-том, но стратегия не описана — сбой или редеплой стирают всё in-flight состояние (проще, пока БД маленькая) -- [🧹 Завести eval-харнес распознавания: корпус кейсов и метрику точности](items/recognition-eval-harness.md) — смена модели или правка промпта распознавания сейчас вслепую — нет корпуса кейсов и метрики точности, регрессии не видно - [✨ Проверять в healthcheck доступность qBittorrent, LLM и метабаз и показывать её в UI](items/deep-healthcheck-dependencies.md) — /healthz проверяет только сам сервис — недоступность qBittorrent/LLM/метабазы видна лишь по застрявшим задачам, нет readiness и бейджа в UI - [✨ Хранить историю переходов загрузки отдельной таблицей](items/download-transition-history.md) — хранится только текущий статус загрузки — разбор «как сюда попали» идёт по логам сервера, нет таблицы истории переходов - [🧹 Кэшировать ответы метабаз с TTL (и опционально LLM)](items/metadata-cache.md) — повторные и ретраящиеся прогоны бьют TMDB/TVDB/TVMaze одним запросом — кэш с TTL сэкономил бы лимиты и ускорил «Распознать заново» diff --git a/docs/tasks/REJECTED.md b/docs/tasks/REJECTED.md index cac85e8..0a7ea53 100644 --- a/docs/tasks/REJECTED.md +++ b/docs/tasks/REJECTED.md @@ -5,3 +5,5 @@ есть коммит. Это первое место, куда смотрит дедупликация при заведении. +- 2026-08-06 `learn-from-user-corrections` — ✨ Подмешивать прошлые правки человека в промпт распознавания (few-shot). Причина: решено не собирать базу правок человека: направление — тюнинг автоматического распознавания без участия человека. Была секция: ядро продукта. +- 2026-08-06 `recognition-eval-harness` — 🧹 Завести eval-харнес распознавания: корпус кейсов и метрику точности. Причина: решено не собирать размеченный корпус руками: направление — тюнинг автоматического распознавания без участия человека. Была секция: инфраструктура. diff --git a/docs/tasks/ROADMAP.md b/docs/tasks/ROADMAP.md index 2400483..1c08e22 100644 --- a/docs/tasks/ROADMAP.md +++ b/docs/tasks/ROADMAP.md @@ -16,7 +16,7 @@ ## Направления -- [🎯 Раздача узнаётся верно, и точность этого измерима](items/recognition-accuracy.md) — смена модели или правка промпта сегодня вслепую — нет ни метрики, ни способа переиспользовать уже сделанные человеком правки +- [🎯 Раздача узнаётся верно без подсказок человека](items/recognition-accuracy.md) — распознавание ошибается молча и правдоподобно, а смена модели или правка промпта идёт вслепую — сдвига точности не видно ни до, ни после - [🎯 Раскладывается не только типовая раздача](items/complex-releases.md) — типовая раздача раскладывается, а всё, что сложнее одного сезона одного тайтла, упирается в ручной разбор - [🎯 Раздача приносится и подтверждается из любого транспорта](items/ingest-and-review-interfaces.md) — путь «принести раздачу и подтвердить догадку» упирается в незакрытые куски интерфейсов, а не в логику - [🎯 По записи загрузки видно, как она сюда попала](items/state-integrity.md) — известные окна рассинхрона и потери маркеров: каждое по отдельности самоисцеляется, вместе — источник необъяснимых состояний diff --git a/docs/tasks/items/auto-link-confidence-gate.md b/docs/tasks/items/auto-link-confidence-gate.md index 302ab94..d2112b6 100644 --- a/docs/tasks/items/auto-link-confidence-gate.md +++ b/docs/tasks/items/auto-link-confidence-gate.md @@ -44,12 +44,13 @@ задача не должна. 5. **Тесты:** `decide` с `threshold=0` (гейт выключен, авто при чистых 1–3); confidence ниже/выше порога при выполненных 1–3. -6. Точное число порога откалибровать позже — для этого есть задача - [eval-харнес распознавания](recognition-eval-harness.md) (сейчас гейтим по - неизмеренному сигналу). +6. Точное число порога откалибровать позже по рабочему потоку — сколько раздач + ушло в ревью и сколько из них пришлось поправить. Размеченный корпус, по + которому порог можно было бы подобрать заранее, решено не собирать + (`../REJECTED.md`, 2026-08-06), так что первое значение остаётся оценкой. Оформить как OpenSpec-change (дельта `recognition` + правки `validate.go`/`recognize.go`/`config`). Связано: openspec/specs/recognition, ADR-2026-06-13-auto-link-requires-db-match, -[eval-харнес](recognition-eval-harness.md), пакет recognize. +пакет recognize. diff --git a/docs/tasks/items/learn-from-user-corrections.md b/docs/tasks/items/learn-from-user-corrections.md deleted file mode 100644 index e3ed326..0000000 --- a/docs/tasks/items/learn-from-user-corrections.md +++ /dev/null @@ -1,10 +0,0 @@ -# ✨ Подмешивать прошлые правки человека в промпт распознавания (few-shot) - -- **Тип:** feature -- **Категория:** Ядро продукта -- **Зачем:** правки человека (матч/тип/нумерация) не переиспользуются — few-shot из прошлых ревью поднял бы точность на «своих» трекерах без смены модели -- **Теги:** goal:recognition-accuracy - -Когда человек поправил матч, тип или нумерацию — сохранять это как пример и подмешивать похожие в будущие промпты. Системно повышает точность на «твоих» трекерах и форматах имён без смены модели. Развитие идеи многоступенчатой верификации, но дешевле: учимся на уже собранных hint/override. - -Связано: specs/recognition.md (конвейер, промпт), «Многоступенчатая верификация», specs/architecture.md → «Хранилище» (hint, override). diff --git a/docs/tasks/items/recognition-accuracy.md b/docs/tasks/items/recognition-accuracy.md index 429f314..fb06326 100644 --- a/docs/tasks/items/recognition-accuracy.md +++ b/docs/tasks/items/recognition-accuracy.md @@ -1,12 +1,14 @@ -# 🎯 Раздача узнаётся верно, и точность этого измерима +# 🎯 Раздача узнаётся верно без подсказок человека - **Тип:** goal - **Секция:** Направления -- **Зачем:** смена модели или правка промпта сегодня вслепую — нет ни метрики, ни способа переиспользовать уже сделанные человеком правки +- **Зачем:** распознавание ошибается молча и правдоподобно, а смена модели или правка промпта идёт вслепую — сдвига точности не видно ни до, ни после - **Теги:** decomposed -Ради чего: распознавание — единственное место, где система может ошибиться молча и правдоподобно. Сегодня её точность не измеряется ничем, кроме впечатления, а накопленные правки человека пропадают. +Ради чего: распознавание — единственное место, где система может ошибиться молча и правдоподобно. Сегодня о его точности судят по впечатлению, и сдвиг от смены модели или правки промпта заметен только задним числом. + +Размеченный корпус и обучение на правках человека из этой цели исключены сознательно (`REJECTED.md`, 2026-08-06): базу руками не собираем, точность поднимаем тюнингом автоматического распознавания. ## Завершение -Достигнута, когда точность распознавания меряется числом на фиксированном корпусе реальных раздач, смена модели или правка промпта прогоняются через этот корпус до выкатки, а решение auto/review опирается на измеримую силу совпадения, а не на самооценку модели. +Достигнута, когда решение auto/review опирается на измеримую силу совпадения с записью метабазы, а не на самооценку модели, и доля раздач, ушедших в ревью или поправленных после авто-раскладки, видна по рабочему потоку и не растёт от версии к версии. diff --git a/docs/tasks/items/recognition-eval-harness.md b/docs/tasks/items/recognition-eval-harness.md deleted file mode 100644 index d100bad..0000000 --- a/docs/tasks/items/recognition-eval-harness.md +++ /dev/null @@ -1,10 +0,0 @@ -# 🧹 Завести eval-харнес распознавания: корпус кейсов и метрику точности - -- **Тип:** chore -- **Категория:** Инфраструктура -- **Зачем:** смена модели или правка промпта распознавания сейчас вслепую — нет корпуса кейсов и метрики точности, регрессии не видно -- **Теги:** goal:recognition-accuracy - -Распознавание — ядро продукта, но смена модели или правка промпта сейчас вслепую: регрессий не видно. Нужен корпус размеченных кейсов (русские релизы, аниме, сезон-паки, репаки, спецвыпуски) и прогон распознавания по нему с метрикой точности (тип/название/год/нумерация). Тогда можно сравнивать LLM-провайдеры и версии промпта по числам. Прогон — отдельной командой (jellybit eval или тестом), на фикстурах, без реального qBittorrent. - -Связано: specs/recognition.md (конвейер, модель уверенности), пакет recognize.