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

2.5 KiB
Raw Blame History

1. Экспортируемое слоистое разрешение (naming)

  • 1.1 internal/naming: тип LabelFields (Title/Director/Year/Season string) с методом Label(), зовущим существующий Label(...)
  • 1.2 internal/naming: функция EffectiveFields(parsedContext string, plan recognize.Plan) LabelFields — перенести логику слоёв из worker.effectiveDisplayName (план → контекст; сводка сезонов плана → контекстный SeasonLabel); выбор слоя по сырым значениям, выбранные скаляры на возврате прогнать через sanitize (идемпотентно — Label() даёт прежний результат); битый parsed_context → пустой слой
  • 1.3 Юнит-тесты naming.EffectiveFields: режиссёр/год/сезон из плана; фолбэк на контекст; матч бьёт контекст; битый parsed_context; пустые значения; режиссёр из управляющих символов/лишних пробелов → .Director очищен и .Label() совпадает с прежним display_name

2. Переиспользование (worker)

  • 2.1 worker.effectiveDisplayName → тонкая обёртка naming.EffectiveFields(d.ParsedContext, plan).Label(); поведение и тесты displayname_test.go не меняются

3. Вывод режиссёра в вью (httpapi)

  • 3.1 download.go: поле downloadDetailView.Director; в buildDownloadView заполнить из naming.EffectiveFields(d.ParsedContext, rd.Plan).Director
  • 3.2 review.go: view.Director из naming.EffectiveFields(rd.Download. ParsedContext, rd.Plan).Director вместо rd.Plan.Director
  • 3.3 web/templates/partials/download_main.html: поле «Режиссёр» — {{if .Director}}…{{else}}<span class="faint">—</span>{{end}} вместо прочерка

4. Проверки и закрытие

  • 4.1 (опц.) httpapi-тест: режиссёр присутствует во вью страницы загрузки, если инфраструктура тестов позволяет
  • 4.2 task test и task lint зелёные; openspec validate --strict
  • 4.3 Удалить docs/backlog/rezhisser-v-kartochke-zagruzki.md и строку в индексе беклога docs/backlog/README.md