## 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/схемы не предполагается; существующие действия ревью и их семантика сохраняются.