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

88 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 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/схемы не предполагается;
существующие действия ревью и их семантика сохраняются.