Беклог: перенос четырёх задач из инбокса Tududi

Инбокс Tududi разгружен: четыре открытые задачи проекта оформлены файлами
в docs/backlog и помечены выполненными в Tududi.

- режиссёр в блоке «Распознано как» на странице загрузки (средний);
- карточка информации о торренте вылезает за экран на мобильном (средний);
- сигнал Jellyfin после отката и удаления файлов (средний);
- кнопки выглядят как кнопки: btn-ghost и рассогласование весов (низкий).

Каждая задача проверена по коду: все четыре актуальны, ни одну не закрыли
прошлые коммиты. В телах — точки правки, развилки и нужные дельты спек.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
av
2026-07-15 21:02:22 +03:00
co-authored by Claude Opus 4.8
parent 02d4ecc2aa
commit 3e470e3ae6
5 changed files with 233 additions and 0 deletions
@@ -0,0 +1,64 @@
# Кнопки выглядят как кнопки: `btn-ghost` и рассогласование весов
**Приоритет:** низкий
Кнопка «Откатить» в списке загрузок неотличима от текста/ссылки. Это **не**
разметка — там уже `<button type="submit">` внутри `<form>`; проблема чисто
визуальная, в классе `btn-ghost`:
- `web/static/css/jellybit.css:165-166` — `.btn-ghost{background:transparent;
border-color:transparent;color:var(--text-dim)}`. Прозрачный фон + прозрачный
бордер + приглушённый текст = в покое нет аффорданса. Он появляется только на
`:hover`, а на тач-устройствах hover'а нет вообще.
## Инвентаризация
| Действие | Список (`card.html`) | Страница (`download_main.html`) |
|---|---|---|
| Ревью | `:28` `btn btn-primary btn-sm` | `:21` `btn btn-primary` |
| **Откатить** | `:29` **`btn btn-sm btn-ghost`** | `:23` **`btn btn-danger`** «↩ Откатить» |
| Привязать заново | `:30` `btn btn-sm` | `:24` `btn` |
| Повторить | `:31` `btn btn-sm` | `:25` `btn` |
| **Отменить/Отклонить** | `:32` **`btn btn-sm btn-danger`** | `:26` **`btn btn-ghost`** |
| Обновить имя | — | `:22` `btn btn-ghost` |
Расхождения:
1. `btn-ghost` — корень проблемы, 3 места: `card.html:29`,
`download_main.html:22`, `download_main.html:26`.
2. «Откатить» несогласован сам с собой: невидимая `btn-ghost` в списке против
красной `btn-danger` на странице.
3. «Отменить» инвертирован ровно наоборот: `btn-danger` в списке против
`btn-ghost` на странице. В списке Откатить тише Отменить, на странице — наоборот.
4. Эмодзи-префиксы несогласованы: `↩ Откатить` (страница) vs `Откатить` (список);
`review_main.html:76-78` — эмодзи на всех (`🕗/❌/✅`), `card.html` — ни одного.
5. Вероятно ок: `review_main.html:54,58`, `review_source_block.html:49`,
`index.html:32,65-67` (пагинация — ссылка-как-кнопка законно),
`download_main.html:112,124` (danger-zone).
6. `.copy-btn` (`card.html:9`, `download_main.html:15,90`) — отдельная система
классов (`jellybit.css:210-214`), не `.btn`. Формально вне скоупа, но при
унификации всплывёт.
База CSS — `jellybit.css:153-171`.
## Развилки
- **(а)** дать `.btn-ghost` видимый бордер/фон — одна строка, чинит все 3 места.
- **(б)** выкинуть `.btn-ghost` и назначить семантику явно: Откатить = `btn-danger`
везде, Отменить = `btn-danger` везде, Обновить имя = нейтральный `.btn`.
- **(в)** решить судьбу `` — оставляем или убираем.
Рекомендация — б+в: (а) чинит видимость, но оставляет пункты 2-4 (одно действие
имеет два разных визуальных веса на разных экранах).
**Подводный камень:** `.btn-ghost` портирован из макета (`tmp/design/index.html:109`
— тоже `btn btn-sm btn-ghost` для «Откатить», а `tmp/design/download.html:43` —
`btn btn-danger`). Макет сам непоследователен → либо чинить и `tmp/design/*`, либо
явно зафиксировать, что макет больше не источник истины (см. `tmp/design/handoff.md:96-97`).
## Спеки
`openspec/specs/web-ui/spec.md:249-264` («Действия соответствуют состоянию»)
описывает, какие действия показывать и имена полей форм; требований к визуальной
стилизации нет. «Откатить» упоминается только в htmx-сценариях (`:435`, `:444`).
→ чистый nit-фикс либо новая дельта, если хотим зафиксировать семантику весов.