Переработка экрана ревью: единый список источников (нейронка наравне с кандидатами баз), выбор/переключение/снятие в пользу нейронки, ручное добавление по id/URL, предпросмотр полей и целевых путей до применения. Дизайн отревьюен: единая деривация «источник → overrides» (preview==apply, чинит залипший override title/year). Ограничились существующими capabilities. Беклог: добавил две идеи — «Пересмотр набора capabilities и рефакторинг спек» и «Сила совпадения кандидата / пересмотр распознавания и матчинга». Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
7.2 KiB
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/схемы не предполагается; существующие действия ревью и их семантика сохраняются.