From b450ab1fd55ed336cb8691e90837b2a173131786 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Thu, 6 Aug 2026 18:15:14 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B7=D0=B0=D0=BA=D1=80=D1=8B=D1=82=D0=B0=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=20ingest-nits?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/tasks/SPRINT.md | 1 - docs/tasks/items/ingest-nits.md | 40 --------------------------------- 2 files changed, 41 deletions(-) delete mode 100644 docs/tasks/items/ingest-nits.md diff --git a/docs/tasks/SPRINT.md b/docs/tasks/SPRINT.md index 3827c77..e8cf8d6 100644 --- a/docs/tasks/SPRINT.md +++ b/docs/tasks/SPRINT.md @@ -11,4 +11,3 @@ - [✨ Брать у TVDB название на языке настройки и оригинальное название](items/tvdb-title-locale.md) — [general].language правит только TMDB и промпт LLM — TVDB отдаёт primary name, и при language=ru в карточку ревью и имя папки попадает 哪吒之魔童降世 вместо «Нэчжа» - [✨ Узаконить confidence-гейт авто-раскладки в спеке и сделать его выключаемым (дефолт 0.7)](items/auto-link-confidence-gate.md) — Решено (B): гейт оставляем как доп. проверку на ревью — выключаемый порог, дефолт 0.85→0.7, записать в спеку - [🐞 Тормозить опрос qBittorrent бэкоффом при недоступности и эскалировать устойчивый сбой](items/background-error-noise.md) — недоступный qBittorrent опрашивается каждые 5 с и даёт WARN на каждом тике: нужен экспоненциальный бэкофф до минутного потолка со сбросом по первому успеху и ERROR на устойчивой деградации -- [🧹 Закрыть мелочи приёма: NoName в контексте, устаревшие комментарии, лог без причины, bencode-аллокации (N1, N3, N4, N5)](items/ingest-nits.md) — косметика приёма: NoName в контексте, устаревшие комментарии, лог, bencode-аллокации _(ревью 2026-07-08)_ diff --git a/docs/tasks/items/ingest-nits.md b/docs/tasks/items/ingest-nits.md deleted file mode 100644 index b8862bd..0000000 --- a/docs/tasks/items/ingest-nits.md +++ /dev/null @@ -1,40 +0,0 @@ -# 🧹 Закрыть мелочи приёма: NoName в контексте, устаревшие комментарии, лог без причины, bencode-аллокации (N1, N3, N4, N5) - -- **Тип:** chore -- **Категория:** Ядро продукта -- **Зачем:** косметика приёма: NoName в контексте, устаревшие комментарии, лог, bencode-аллокации _(ревью 2026-07-08)_ - -Ревью Fable 2026-07-08 (приём). Косметические нити. - -N1 — torrent.go:114: Context() включает NoName-сентинел «-» как строку-название (name != "" проходит); ingest.parse фильтрует «-» только для source_ref (ingest.go:160-162). Одна грязная строка контекста для безымянных торрентов. Фикс: фильтровать «-» и в Context(). - -N3 — устаревшие комментарии. httpapi.go:574-577 и tgbot/bot.go:256-258 утверждают, что res.DownloadID может быть непуст при ошибке приёма («сбой после создания задачи, напр. qbit»). После fast-catch рефактора Ingest возвращает Result{} на КАЖДОМ пути ошибки (ingest.go:74-75,86,106-107) → корреляция всегда падает на request_id / без ключа. Фикс: поправить комментарии. - -N4 — qbt.go:246 логирует «Fails.» со счётчиками, но qBittorrent не даёт причину; вместе с F2 оператор не отличит «дубль» от «битый файл». Идея: логировать хеши/первые байты для корреляции. - -N5 — anacrolix bencode (v1.61.0, bencode/decode.go:17,250) аллоцирует до MaxStrLen (~128MiB) на объявленную строку до чтения — крафт-8MiB-торрент может форсить транзиентные ~128MiB аллокации при metainfo.Load. Ограничено и завершается ошибкой; на umbar приемлемо, но знать стоит. (files()-panic-guard torrent.go НЕ покрывает Load/UnmarshalInfo/HashBytes, но panic-путей там не найдено.) - -Вердикт: простые фиксы/принять. - -## Затрагивает - -- `internal/torrent/torrent.go` — `Context()` и фильтр NoName-сентинела «-»; -- `internal/httpapi/httpapi.go` и `internal/tgbot/bot.go` — устаревшие - комментарии про непустой `DownloadID` на пути ошибки; -- `internal/qbt/qbt.go` — лог `Fails.` без причины; -- N5 (аллокации bencode в `anacrolix/torrent`) — граница чужой библиотеки, - правке не подлежит: исход пункта — запись наблюдения, а не код. - -## Критерии приёмки - -- Для безымянного торрента `Context()` не отдаёт «-» как название — поле пустое - (оракул: тест разбора на фикстуре безымянного торрента в - `internal/torrent`). -- Комментарии в `httpapi` и `tgbot` описывают фактическое поведение `Ingest`: - на любом пути ошибки возвращается пустой `Result`, корреляция идёт по - `request_id` (оракул: чтение диффа на ревью — механического оракула нет). -- Лог неудачного добавления в qBittorrent несёт инфохэш для корреляции (оракул: - тест клиента с подставным сервером, проверяющий поля записи). -- Наблюдение про аллокации bencode до `MaxStrLen` записано в - `docs/research/` с провенансом либо явно отклонено строкой в теле задачи - (оракул: `task gate`, шаг канона).