Веб-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>
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
## 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`
|
||||
Reference in New Issue
Block a user