Беклог: груминг трёх задач из Tududi (значок типа, download id code, ревью уведомлений)

Перенос сырых задач проекта jellybit из Tududi в беклог с контекстом и
кросс-ссылками:
- значок типа (фильм/сериал) в списке загрузок;
- download id моноширинным (code) в Telegram — упирается в parse mode + escape;
- зонтичный аудит уведомлений бота.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
av
2026-07-11 09:15:56 +03:00
co-authored by Claude Opus 4.8
parent e8ce828296
commit c4c0c6bb3f
4 changed files with 74 additions and 0 deletions
+3
View File
@@ -40,6 +40,9 @@ Tududi (проект `jellybit`) больше **не** держит беклог
## Низкий
- [Значок типа (фильм/сериал) в списке загрузок](spisok-znachok-tipa.md) — показать 🎬/📺 в строке списка; media type сейчас не доходит до листинга (нужно протащить в запрос и card.html)
- [Ревью уведомлений в Telegram (аудит текстов и формата)](telegram-revyu-uvedomleniy.md) — зонтичный проход по всем текстам бота: полнота карточек, единый язык, оформление; порождает под-задачи
- [Download id в Telegram моноширинным (code) для tap-to-copy](telegram-download-id-code.md) — слать id как `code`; требует включить parse mode (HTML) в send() + escape всех текстов
- [Кнопка «Обновить имя»: полный формат ярлыка (Название (режиссёр, год), сезон)](knopka-obnovit-imya-polnyj-format.md) — Перелив имени даёт усечённое «Title (Year)» вместо полного формата add-шага (режиссёр+сезон); нужный `render` уже есть
- [Скрывать отменённые (cancelled) в общем списке наравне с удалёнными](skryvat-otmenennye-v-spiske.md) — cancelled шумит в ленте; тумблер «показать удалённые» должен раскрывать и cancelled, и deleted
- [Панель действий ревью вне htmx-свопа блока источника](panel-review-vne-swap.md) — При выборе источника одним кликом обновляется только блок источника (#source-block)…
+25
View File
@@ -0,0 +1,25 @@
# Значок типа (фильм/сериал) в списке загрузок
**Приоритет:** низкий
В строке списка загрузок показывать значок типа контента — 🎬 фильм / 📺 сериал,
как уже делается на экране деталей/ревью и в карточке бота
(`internal/tgbot/render.go:231-233`). Сейчас партиал строки списка
`web/templates/partials/card.html` (define `"card"`) типа не показывает — только
заголовок, ID, дату/размер, статус-бейдж и прогресс.
Что учесть:
- Media type в модели строки списка отсутствует: `downloadView`
(`internal/httpapi/httpapi.go:200`) и `store.Download`
(`internal/store/download.go:175`) его не несут. В detail/review он берётся из
`rd.Plan.Type` (`internal/httpapi/download.go:139`). Каноничный тип —
`recognize.MediaType` (`movie`/`series`).
- Нужно протащить `MediaType`/`IsSeries` в листинг: расширить запрос
`ListDownloadsPage` (сейчас через LEFT JOIN тянет только `rec_title`) и сборку
`buildCardView`, затем добавить значок в `card.html`.
- Тип может быть ещё не распознан (загрузка на раннем шаге) — предусмотреть
отсутствие значка/нейтральный плейсхолдер.
Связано: `internal/httpapi`, `web/templates/partials/card.html`,
[docs/specs/architecture.md](../specs/architecture.md).
+21
View File
@@ -0,0 +1,21 @@
# Download id в Telegram моноширинным (code) для tap-to-copy
**Приоритет:** низкий
Сейчас download id выводится в уведомлениях бота обычным текстом с префиксом `#`
(`internal/tgbot/bot.go:288`, `render.go:26/50/151`). Хотим слать id как
`code`-текст (моноширинный) — в клиентах Telegram по нему работает tap-to-copy,
удобно скопировать id для перехода на `/download/{id}` или для диагностики.
Что учесть:
- `send()` (`internal/tgbot/bot.go:442`) сейчас не выставляет `ParseMode` — всё
уходит plain text. Для `code` нужно включить parse mode. Рекомендуется **HTML**
(`<code>%s</code>`) — экранирование проще и локальнее, чем у MarkdownV2.
- Включение parse mode затрагивает **все** исходящие сообщения: спецсимволы в
display name, путях, названиях сломают разметку, если их не экранировать.
Escape-хелпера сейчас нет — нужен, плюс аккуратный проход по всем текстам
`render.go`. Это часть общего [[telegram-revyu-uvedomleniy]] — имеет смысл делать
вместе.
Связано: `internal/tgbot` (`render.go`, `bot.go`).
@@ -0,0 +1,25 @@
# Ревью уведомлений в Telegram (аудит текстов и формата)
**Приоритет:** низкий
Зонтичная задача: пройтись по всем исходящим уведомлениям и запросам подтверждения
бота, выправить формулировки, состав данных и оформление. Тексты формируются в
`internal/tgbot/render.go`, отправка — `internal/tgbot/bot.go`; parse mode не задан
(plain text), моноширинных/жирных акцентов нет.
На что смотреть при аудите:
- **Полнота карточек:** показываем ли нужное — название, тип (фильм/сериал), год,
запись матча в метабазе, download id, причину `failed`.
- **Единый язык:** в текстах бота вперемешку «задача»/«раздача»/«загрузка» —
свести к доменному `Download` (см. [[ubiquitous-language-slovar]]).
- **Оформление:** моноширинный download id [[telegram-download-id-code]], возможно
акценты — упирается в parse mode + escape (общая развилка с задачей про code).
- **Не дублировать** уже заведённое: матч метабазы в боте
[[telegram-match-metabazy]], мульти-бот адресация уведомлений
[[uvedomleniya-multi-bot]], выбор из нескольких находок [[telegram-vybor-nahodok]].
Итог аудита — конкретные под-задачи (эта их порождает). Проход дешёвый, при желании
приоритет можно поднять.
Связано: `internal/tgbot`, [docs/specs/review-ux.md](../specs/review-ux.md).