Files
avandClaude Opus 4.8 322bd8aa5b Заархивировал review-source-selection: дельта web-ui влита в спеки (openspec)
Влил 3 ADDED (единый список источников, ручное добавление по id/URL,
предпросмотр полей до фиксации) и 2 MODIFIED (превью для каждого источника;
матч ссылкой в списке источников) требования в openspec/specs/web-ui.
Change перенесён в changes/archive. Убрал реализованный пункт из беклога,
перецелил ссылки на review-ux.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-03 10:34:10 +03:00

7.2 KiB
Raw Permalink Blame History

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