## Why

Экран ревью сегодня трактует распознавание нейронкой и совпадения из
метабаз как **разные режимы**: догадка LLM показана сверху как «текущий
план», а кандидаты TMDB/TVDB — отдельным списком ниже; «без базы» —
особое состояние. Из-за этого выбор источника непрозрачен: чтобы понять,
куда лягут файлы при другом кандидате, приходится сначала его выбрать
(запись пиннится в overrides) и только потом увидеть результат. Отменить и
попробовать другой — снова вслепую.

Принцип должен быть иным: **совпадение есть всегда — мы лишь выбираем
источник**. Матч нейронки — такая же строка списка, как кандидаты баз.
Выбор любого источника должен показывать, что получится (поля и целевые
пути), **до применения**.

## What Changes

- **Единый список источников совпадения** на странице ревью: строка
  «распознано нейронкой» (без базы) наравне с кандидатами метабаз
  (TMDB/TVDB/TVMaze) — один список с выбором одного активного источника,
  а не «план сверху + кандидаты снизу».
- **Выбор / переключение / отмена в пользу нейронки** как операции над
  этим списком: выбрать кандидата базы, переключиться на другого, снять
  матч с базой обратно на нейронку — единообразно.
- **Ручное добавление кандидата** по id или URL записи базы, когда
  автопоиск промахнулся: добавляется в тот же список как выбираемая строка.
- **Предпросмотр до применения**: при наведении/выборе источника показываем
  **поля** (тип, название, год) и **предпросмотр целевых путей раскладки**,
  которые получатся при этом источнике, **не пиннит** выбор до явного
  подтверждения. Место под «режиссёр» в предпросмотре резервируем (источник
  подключим позже — часто есть в контексте загрузки).
- Существующие действия ревью (Применить/Отклонить/Позже/Уточнить/тип/
  игнор/Undo) сохраняются; переработка касается только блока выбора
  источника и предпросмотра.

Вне объёма (осознанно, чтобы не раздувать change):

- **Детали записи из метабазы** (режиссёр и пр.) через новый вызов
  «детали по id» — только резервируем место в UI, сам fetch не делаем.
- **Полноценный редактор маппинга «файл → серия»** — остаётся Ф5.
- Изменения в Telegram — не трогаем (веб = точные правки).

## Capabilities

### New Capabilities

Новых capability не вводим. Отдельный capability `review` (весь процесс
ревью) и перекройка домена метабаз — предмет отдельной задачи беклога
«Пересмотр набора capabilities и рефакторинг спек»; здесь ограничиваемся
существующими capability.

### Modified Capabilities

- `web-ui`: рендеринг страницы ревью получает **единый список выбора
  источника** (нейронка + кандидаты баз + ручной ввод) и **предпросмотр
  полей и целевых путей выбранного источника до применения**. Предпросмотр
  берётся из единой логики `internal/layout`, как и текущее превью
  раскладки.

Сбор кандидатов при сверке с базами (`recognition`) переиспользуется как
есть — его поведение не меняется.

Часть логики этого change доменная (ручное добавление источника,
самосогласованный набор overrides при выборе — см. design.md 1a), а не чисто
презентационная. До выделения отдельного capability `review` (отложено в
беклог) она осознанно живёт под `web-ui`; наблюдаемое поведение выражено
требованиями `web-ui`, а `docs/specs/review-ux.md` остаётся источником истины
по review-домену и обновляется в этом change.

## Impact

- **Код:** `internal/httpapi` (обработчик и шаблон страницы ревью,
  парсер ручного ввода id/URL, клиентский JS переключения предпросмотра без
  пиннинга), `internal/worker` (метод расчёта эфемерного плана + предпросмотра
  путей для источника без записи overrides — переиспользует `applyOverrides` +
  `layout.BuildLinks`; единая деривация «источник → overrides» с очисткой
  title/year в `ChooseCandidate`/`ClearProvider` — заодно чинит залипший
  override). Возможна небольшая правка `internal/store` при персистентности
  вручную добавленного кандидата.
- **Данные:** новый пользовательский путь добавления кандидата вручную
  (provider+id, опц. url); поля title/year у него могут быть пустыми
  (деталей из базы пока не тянем).
- **Инварианты:** предпросмотр только строит пути через `layout` (та же
  санитизация и проверка границ библиотеки); выбор источника ничего не
  раскладывает — хардлинки по-прежнему только по «Применить».
- **Совместимость:** ломающих изменений API/схемы не предполагается;
  существующие действия ревью и их семантика сохраняются.
