Files
jellybit/openspec/changes/archive/2026-07-17-download-card-director/proposal.md
T
av 42d5b73a04 docs: перевод документации на канон av-dev
- Раскладка docs/ приведена к канону 2: заведены passport/architecture/
  database/security/review и research; docs/specs, drafts, backlog, review/
  и BRIEF.md разобраны и удалены, беклог переехал в docs/tasks (34 задачи,
  6 целей, слаги на английский).
- Нарративы specs удалены как дубли openspec-спек после поимённой сверки;
  остаток заведён задачами (редактор маппинга ревью, крайние случаи
  именования), отказ от сущности title промоутнут в ADR.
- Проектные копии агентов и скиллов ревью/пайплайна удалены в пользу
  плагинов av-dev-pm и av-dev-pipeline; в task gate добавлен шаг canon
  вместо er-schema.
2026-08-04 09:27:26 +03:00

4.3 KiB

Why

На странице просмотра загрузки /download/{id} в блоке «Распознано как» поле «Режиссёр» всегда показано прочерком — оно захардкожено (web/templates/partials/download_main.html:40), в отличие от экрана ревью, где режиссёр уже выводится. Данные есть: Plan.Director персистится в recognition.plan, а страница получает эффективный план через Reviewer.ReviewData. Возникает видимая нестыковка: в заголовке страницы (display_name) режиссёр из контекста уже присутствует, а в поле блока — прочерк.

Причина глубже одного шаблона: полное слоистое разрешение полей ярлыка (override → распознавание+матч → контекст) заперто в неэкспортируемом worker.effectiveDisplayName, который отдаёт готовую строку, а не поля. Поэтому билдеры вью на странице загрузки и на экране ревью видят только слой «распознавание+матч» (rd.Plan.Director) без нижнего слоя контекста — та же дыра в internal/httpapi/review.go.

What Changes

  • Слоистое разрешение полей ярлыка выносится в экспортируемую функцию naming.EffectiveFields(parsedContext, plan), возвращающую эффективные поля (в т.ч. Director), а не готовую строку. Логика — та же, что была в effectiveDisplayName: первый непустой слой overriderecognition(+матч), уже свёрнутый в план, с фолбэком на извлечённый из контекста слой (parsed_context).
  • worker.effectiveDisplayName переиспользует новую функцию (тонкая обёртка naming.EffectiveFields(...).Label()) — поведение display_name не меняется, существующие тесты остаются зелёными.
  • Страница загрузки выводит режиссёра из слоистого разрешения — согласованно с режиссёром в заголовке (display_name); при отсутствии во всех слоях — прочерк.
  • Экран ревью берёт режиссёра из той же функции — закрывается та же дыра (ранее только rd.Plan.Director, без слоя контекста).

Всё перечисленное — косметика отображения: не влияет на пути файлов, распознавание или раскладку.

Capabilities

New Capabilities

(нет — правка отображения в существующих capability)

Modified Capabilities

  • web-ui: блок «Распознано как» на /download/{id} показывает режиссёра эффективного источника (слоистое разрешение), согласованно с заголовком.
  • review: инфо-часть выбранного источника показывает режиссёра из слоистого разрешения (с фолбэком на сохранённый контекст), а не только из плана.

Impact

  • Код: internal/naming (экспорт EffectiveFields + тип полей с методом Label), internal/worker (effectiveDisplayName делегирует в naming), internal/httpapi (download.go, review.go — режиссёр из слоистого разрешения), web/templates/partials/download_main.html (поле «Режиссёр» вместо прочерка).
  • БД: изменений схемы нет.
  • Внешние вызовы: нет.
  • Беклог: закрывается docs/tasks/items/rezhisser-v-kartochke-zagruzki.md.