Инбокс Tududi разгружен: четыре открытые задачи проекта оформлены файлами в docs/backlog и помечены выполненными в Tududi. - режиссёр в блоке «Распознано как» на странице загрузки (средний); - карточка информации о торренте вылезает за экран на мобильном (средний); - сигнал Jellyfin после отката и удаления файлов (средний); - кнопки выглядят как кнопки: btn-ghost и рассогласование весов (низкий). Каждая задача проверена по коду: все четыре актуальны, ни одну не закрыли прошлые коммиты. В телах — точки правки, развилки и нужные дельты спек. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.3 KiB
Режиссёр в блоке «Распознано как» на странице загрузки
Приоритет: средний
На странице /download/{id} в блоке «Распознано как» режиссёр всегда показан
прочерком — поля просто нет:
web/templates/partials/download_main.html:40 содержит захардкоженное
<dt>Режиссёр</dt><dd><span class="faint">—</span></dd>.
Экран ревью режиссёра уже выводит (internal/httpapi/review.go:49/122,
review_source_block.html:59) — это сделано в change про слоистое разрешение
полей display_name; страницу загрузки он не тронул.
Данные для вывода есть: Plan.Director (internal/recognize/recognize.go:91)
персистится в JSON-колонке recognition.plan, а страница загрузки уже получает
эффективный план через Reviewer.ReviewData(...)
(internal/httpapi/download.go:89) — rd.Plan уже с наложенными override
(internal/worker/review.go:987, :1271).
Развилка (решить до кода)
rd.Plan.Director — это слой «override → распознавание+матч», без слоя
контекста. Полное слоистое разрешение живёт в неэкспортируемом
effectiveDisplayName(d, plan) (internal/worker/review.go:1118, fallback
plan.Director → ctxf.Director на :1127-1130) и отдаёт готовую строку, а не
поля.
- A (минимум, ~3 строки): поле
DirectorвdownloadDetailView(internal/httpapi/download.go:37) + присвоениеview.Director = rd.Plan.Directorрядом с:143. Но при распознавании без матча режиссёр из контекста не покажется, хотя в заголовке страницы (display name) он уже есть → видимая нестыковка «в заголовке есть, в поле прочерк». - B (правильный): вынести слоистое разрешение в экспортируемое
naming.Fields/EffectiveFields(d, plan), переиспользовать вeffectiveDisplayNameи в обоих билдерах вью. Чинит заодно ту же дыру вinternal/httpapi/review.go:122.
Рекомендация — B: A оставляет ровно тот баг, который заводили.
Спеки
openspec/specs/web-ui/spec.md— про блок «Распознано как» на/download/{id}режиссёра нет вообще → нужна дельта.openspec/specs/review/spec.md:255-289— сценарий «Режиссёр показан, когда доступен» ограничен экраном ревью и формулировкой «из подтверждённого матча/кандидата»; вариант B потребует правки формулировки.openspec/specs/recognition/spec.md:62-69— режиссёр опционален и best-effort, пустое значение штатно.
Связано: ubiquitous-language-slovar.