Заархивировал 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>
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
## 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/схемы не предполагается;
|
||||
существующие действия ревью и их семантика сохраняются.
|
||||
Reference in New Issue
Block a user