Files
jellybit/openspec/changes/archive/2026-07-17-download-card-director/tasks.md
T
avandClaude Opus 4.8 5948f4d219 Веб-UI: режиссёр в блоке «Распознано как» на странице загрузки
На /download/{id} поле «Режиссёр» было захардкожено прочерком, хотя экран
ревью режиссёра уже выводит: слоистое разрешение полей ярлыка было заперто в
неэкспортируемом worker.effectiveDisplayName. Из-за этого билдеры вью видели
только слой распознавания+матч (rd.Plan.Director) без слоя контекста — то же
на экране ревью.

Вынес разрешение в экспортируемую naming.EffectiveFields(parsedContext, plan)
LabelFields с методом Label(): выбор слоя по сырым значениям (как прежде),
выбранные скаляры возвращаются очищенными (sanitize идемпотентен, display_name
побайтно тот же). effectiveDisplayName стал тонкой обёрткой; страница загрузки
и экран ревью берут режиссёра из той же функции — согласованно с заголовком.

OpenSpec: web-ui (ADDED «Режиссёр в блоке распознавания страницы загрузки»),
review (MODIFIED «Инфо и предпросмотр выбранного источника» — слоистое
разрешение с фолбэком на контекст). Change заархивирован. Беклог: закрыта
rezhisser-v-kartochke-zagruzki.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 21:21:27 +03:00

38 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 1. Экспортируемое слоистое разрешение (naming)
- [x] 1.1 `internal/naming`: тип `LabelFields` (Title/Director/Year/Season string)
с методом `Label()`, зовущим существующий `Label(...)`
- [x] 1.2 `internal/naming`: функция `EffectiveFields(parsedContext string, plan
recognize.Plan) LabelFields` — перенести логику слоёв из
`worker.effectiveDisplayName` (план → контекст; сводка сезонов плана →
контекстный `SeasonLabel`); выбор слоя по сырым значениям, выбранные скаляры
на возврате прогнать через `sanitize` (идемпотентно — `Label()` даёт прежний
результат); битый `parsed_context` → пустой слой
- [x] 1.3 Юнит-тесты `naming.EffectiveFields`: режиссёр/год/сезон из плана;
фолбэк на контекст; матч бьёт контекст; битый `parsed_context`; пустые
значения; режиссёр из управляющих символов/лишних пробелов → `.Director`
очищен и `.Label()` совпадает с прежним `display_name`
## 2. Переиспользование (worker)
- [x] 2.1 `worker.effectiveDisplayName` → тонкая обёртка
`naming.EffectiveFields(d.ParsedContext, plan).Label()`; поведение и тесты
`displayname_test.go` не меняются
## 3. Вывод режиссёра в вью (httpapi)
- [x] 3.1 `download.go`: поле `downloadDetailView.Director`; в `buildDownloadView`
заполнить из `naming.EffectiveFields(d.ParsedContext, rd.Plan).Director`
- [x] 3.2 `review.go`: `view.Director` из `naming.EffectiveFields(rd.Download.
ParsedContext, rd.Plan).Director` вместо `rd.Plan.Director`
- [x] 3.3 `web/templates/partials/download_main.html`: поле «Режиссёр» —
`{{if .Director}}…{{else}}<span class="faint">—</span>{{end}}` вместо прочерка
## 4. Проверки и закрытие
- [x] 4.1 (опц.) httpapi-тест: режиссёр присутствует во вью страницы загрузки,
если инфраструктура тестов позволяет
- [x] 4.2 `task test` и `task lint` зелёные; `openspec validate --strict`
- [x] 4.3 Удалить `docs/backlog/rezhisser-v-kartochke-zagruzki.md` и строку в
индексе беклога `docs/backlog/README.md`