Skip to content

Подготовка к реализации: каталог, «Неизвестные» и Timeline

English

Цель — до начала правок UI/API снизить риск регрессий и согласовать модель данных. Относится к issues #131 (Migration как вход к видам, убрать «Каталог» из меню) и #139 (режим проверки на странице записей вместо отдельного пункта «Неизвестные»).


1. Продукт и API (согласование до кода экрана)

  • Модель «режим проверки»: зафиксировать, что показываем — детекции из GET /api/ui/unknowns и/или визиты из GET /api/ui/timeline (это разные сущности). Кратко описать в issue #139 или отдельной заметке ADR, чтобы середине работы не менять подход.
  • Стратегия API: решить, расширяется ли GET /api/ui/timeline query-параметрами (например, только низкая confidence / «на проверке») или остаётся отдельный unknowns, а на Timeline только переключается источник/фильтр. От выбора зависят кэш, лимит (сейчас на unknowns есть limit, интервал не больше суток) и возможная пагинация.
  • OpenAPI: в app/web/openapi.yaml описан /timeline, а контракт /api/ui/unknowns в спецификации отсутствует — добавить описание до/вместе с изменениями фронта; CI (openapi-contract) использовать как эталон.

2. Инвентаризация ссылок и навигации

  • Меню и маршруты: app/ui/src/components/Navigation.tsx, app/ui/src/App.tsx — единый список точек входа в «Каталог» (/species) и «Неизвестные» (/unknowns).
  • Глубокие ссылки в коде: например Migration → /species/:id, каталог деревьев, кнопки «назад к видам».
  • Закладки и legacy URL: после релиза ожидается редирект /unknowns → Timeline с query (см. #139) — подготовить обновление пользовательской документации (docs/FEATURES*.md, docs/ARCHITECTURE*.md, docs/API*.md, при необходимости docs/UX_UNKNOWN_VIDEO_CORRECTION.md).
  • Тесты: app/e2e/tests/smoke.spec.ts обращается к /unknowns — зафиксировать ожидаемое поведение после редиректа.

3. Тестовый baseline (регрессия)

  • Backend: app/web/tests/test_api.py — при необходимости расширить покрытие границ unknowns (интервал, лимит); при появлении новых query у timeline — отдельные кейсы.
  • E2E: минимальный сценарий для /timeline (загрузка, выбор дня) и сценарий «переход/редирект с /unknowns открывает нужный режим» — чтобы дифф «до/после» не опирался только на ручную проверку.
  • React Query: составить таблицу ожидаемых invalidateQueries после объединения потоков (сейчас связаны unknowns, timeline, species — см. правки в DetectedSpecies и странице Unknowns), чтобы не воспроизвести «устаревший список».

4. i18n и справка

  • Аудит ключей nav.*, unknowns.*, timeline.*: что сливается, единая формулировка режима («на проверке» / низкая уверенность).
  • Page help: unknownsHelpConfig vs справка Timeline — один сценарий или два в одном компоненте.

5. Доступность и постоянные URL

  • Зафиксировать семантику query (например ?review=1), aria-pressed для переключателя режима, live region при смене фильтра — в одном месте (issue #139 или короткий ADR), чтобы реализация не расходилась с планом.

Рекомендуемый порядок работ

  1. Согласование данных и API в #139 (+ при необходимости ADR).
  2. Дополнение OpenAPI и при необходимости — тестов API.
  3. Расширение e2e/smoke baseline.
  4. Обновление документации и ссылок в том же релизе, что редирект и новый UX (или отдельным docs-PR сразу после мержа фичи).

После выполнения этого чеклиста можно приступать к реализации в коде по #131 и #139.