Andrey Epifancev 47a156733f Спека и план: лента изменений в веб-приложении (#77)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 11:17:08 +04:00

2.9 KiB
Raw Blame History

Context

main 78a0d78. Веб-приложение — React 19 + TanStack Query, страницы рисует shell/Layout.tsx по shell/pages.tsx, разделы — shell/Sidebar.tsx (SECTIONS), проект — ProjectGate, карточка — окно IssueModal поверх страницы (IssueLink/useOpenIssue с openCardState). Запросы — api/queries.ts (qk), перечитывание после «Обновить из Jira» — shell/RefreshProvider.tsx. Хаб: GET /changes (since/until — ISO со смещением, иначе 422; kinds, project, limit ≤ 2000, ответ {since, until, truncated, changes}), GET /issues/{key}.changes.

Decisions

  1. Модуль web/src/feed/: events.ts — чистые функции (границы периода, разбор kinds из адреса, текст события, группировка по задаче), EventList.tsx — список событий (лента и карточка), FeedPage.tsx — страница, feed.css.
  2. Период — переключатель из четырёх, а не календарь: покрывает «за пару часов» и «за сегодня» владельца; «Вчера» и «7 дней» — утренний разбор и неделя. Границы считаются по местному времени браузера, в запрос уходят toISOString() (UTC с Z) — хаб принимает Z, пояс не теряется.
  3. limit = 2000 (максимум хаба) — неделя активного проекта помещается; иначе truncated с подсказкой.
  4. Подписи прочих полей — словарь в events.ts; незнакомые — имя поля Jira.
  5. Комментарий в ленте — простой текст (300 символов одной строкой), без вики-разметки: лента — обзор, полный текст — в карточке.
  6. История в карточке — 10 последних с «Показать все»; блок в основной колонке после комментариев.
  7. Перечитывание: ключ запроса ["changes", …]; RefreshProvider после пакета инвалидирует ["changes"]; TanStack Query перечитывает при возврате на вкладку (refetchOnWindowFocus по умолчанию).

Decisions made without discussion

  1. 2026-10-22 — все решения выше (1–7) — мои: владелец сказал «начинай» без обсуждения интерфейса. Цена ошибки: переделка вёрстки страницы; бэкенд не затронут.