Подготовка к реализации: каталог, «Неизвестные» и Timeline
Цель — до начала правок UI/API снизить риск регрессий и согласовать модель данных. Относится к issues #131 (Migration как вход к видам, убрать «Каталог» из меню) и #139 (режим проверки на странице записей вместо отдельного пункта «Неизвестные»).
1. Продукт и API (согласование до кода экрана)
- Модель «режим проверки»: зафиксировать, что показываем — детекции из
GET /api/ui/unknownsи/или визиты изGET /api/ui/timeline(это разные сущности). Кратко описать в issue #139 или отдельной заметке ADR, чтобы середине работы не менять подход. - Стратегия API: решить, расширяется ли
GET /api/ui/timelinequery-параметрами (например, только низкая 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:
unknownsHelpConfigvs справка Timeline — один сценарий или два в одном компоненте.
5. Доступность и постоянные URL
- Зафиксировать семантику query (например
?review=1),aria-pressedдля переключателя режима, live region при смене фильтра — в одном месте (issue #139 или короткий ADR), чтобы реализация не расходилась с планом.
Рекомендуемый порядок работ
- Согласование данных и API в #139 (+ при необходимости ADR).
- Дополнение OpenAPI и при необходимости — тестов API.
- Расширение e2e/smoke baseline.
- Обновление документации и ссылок в том же релизе, что редирект и новый UX (или отдельным docs-PR сразу после мержа фичи).
После выполнения этого чеклиста можно приступать к реализации в коде по #131 и #139.