Files
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

61 lines
4.3 KiB
Markdown

## 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`: первый непустой слой `override``recognition`(+матч),
уже свёрнутый в план, с фолбэком на извлечённый из контекста слой
(`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`.