Веб: лента изменений и история в карточке задачи (#77) #78

Merged
aep merged 6 commits from feat/77-feed into main 2026-10-22 11:35:04 +03:00
Owner

Closes #77. Closes #76. Продолжение #70 (журнал изменений в хабе), бэкенд не меняется.

Что сделано

  • Раздел «Лента» в боковой панели, страница /app/feed: период «2 часа / Сегодня / Вчера / 7 дней» и флажки видов событий (в адресе), события GET /changes сгруппированы по задаче, ключ открывает карточку окном поверх ленты; перечитывание после «Обновить из Jira» и при возврате на вкладку, окно всегда «до сейчас».
  • Блок «История (N)» в карточке задачи: 10 последних изменений, «Показать все (N)»; старый хаб без changes — блока нет.
  • web/src/feed/ (events.ts — период, виды, тексты событий, группировка; EventList.tsx — общий для ленты и карточки).
  • Спека: openspec/changes/web-feed/; план: docs/superpowers/plans/2026-10-22-web-feed.md.

Проверка

  • make check — pytest 661, vitest 425; npm run e2e — 37 passed (новые: лента + карточка + история, 390 px без горизонтальной прокрутки).
  • Скриншоты 1920/390 в обеих темах просмотрены (AURA).
  • Финальное ревью (opus): C-1, C-2, I-1 исправлены (тест RED→GREEN).

Follow-up до merge

  • M-1…M-7 закрыты в e0d8eee с тестами (vitest 427, e2e 37); README хаба дополнен по журналу изменений и ленте (hub#76).

Выкатка

git pull в основном checkout, make web, перезапуск хаба владельцем.

Rulings I made

  • R-1 (design #2) — смена проекта на ленте сохраняет period и kinds. Цена ошибки: нет.
  • R-2 (design #3) — снятые все флажки → kinds=none в адресе. Цена: «none» виден в адресе.
  • R-3 (design #4) — e2e: щелчок по флажку + toBeChecked (флажок управляемый из адреса). Цена: нет.
  • R-4 (design #5, по C-1/C-2) — границы периода считаются в момент запроса, refetchOnWindowFocus: true у ленты. Цена: лишний запрос при возврате на вкладку (не чаще раза в 30 с).
  • R-5 (design #6, по M-5) — адрес без известных видов — набор по умолчанию; пустой набор — только kinds=none. Цена: нет.
  • Все решения по интерфейсу (design #1–#7) — мои: владелец сказал «начинай».

Findings

Маркер Суть Статус
C-1 граница until заморожена при открытии fixed 820adbe
C-2 нет перечитывания при возврате на вкладку fixed 820adbe
I-1 рулинги не в design.md fixed 820adbe
M-1 /app/feed без project не дописывает проект в адрес fixed e0d8eee
M-2 «не найдено» без ссылки «Лента» fixed e0d8eee
M-3 подсказка truncated внизу страницы fixed e0d8eee
M-4 299 символов комментария вместо 300 fixed e0d8eee
M-5 kinds=foo → «выберите хотя бы один вид» fixed e0d8eee
M-6 нет теста author=null; комментарий без текста fixed e0d8eee
M-7 группа ленты — section с aria-label fixed e0d8eee
M-8 ledger без числа тестов в task-done fixed (ledger)

🤖 Generated with Claude Code

Closes #77. Closes #76. Продолжение #70 (журнал изменений в хабе), бэкенд не меняется. ## Что сделано - Раздел «Лента» в боковой панели, страница `/app/feed`: период «2 часа / Сегодня / Вчера / 7 дней» и флажки видов событий (в адресе), события `GET /changes` сгруппированы по задаче, ключ открывает карточку окном поверх ленты; перечитывание после «Обновить из Jira» и при возврате на вкладку, окно всегда «до сейчас». - Блок «История (N)» в карточке задачи: 10 последних изменений, «Показать все (N)»; старый хаб без `changes` — блока нет. - `web/src/feed/` (`events.ts` — период, виды, тексты событий, группировка; `EventList.tsx` — общий для ленты и карточки). - Спека: `openspec/changes/web-feed/`; план: `docs/superpowers/plans/2026-10-22-web-feed.md`. ## Проверка - `make check` — pytest 661, vitest 425; `npm run e2e` — 37 passed (новые: лента + карточка + история, 390 px без горизонтальной прокрутки). - Скриншоты 1920/390 в обеих темах просмотрены (AURA). - Финальное ревью (opus): C-1, C-2, I-1 исправлены (тест RED→GREEN). ## Follow-up до merge - M-1…M-7 закрыты в e0d8eee с тестами (vitest 427, e2e 37); README хаба дополнен по журналу изменений и ленте (hub#76). ## Выкатка `git pull` в основном checkout, `make web`, перезапуск хаба владельцем. ## Rulings I made - R-1 (design #2) — смена проекта на ленте сохраняет `period` и `kinds`. Цена ошибки: нет. - R-2 (design #3) — снятые все флажки → `kinds=none` в адресе. Цена: «none» виден в адресе. - R-3 (design #4) — e2e: щелчок по флажку + `toBeChecked` (флажок управляемый из адреса). Цена: нет. - R-4 (design #5, по C-1/C-2) — границы периода считаются в момент запроса, `refetchOnWindowFocus: true` у ленты. Цена: лишний запрос при возврате на вкладку (не чаще раза в 30 с). - R-5 (design #6, по M-5) — адрес без известных видов — набор по умолчанию; пустой набор — только `kinds=none`. Цена: нет. - Все решения по интерфейсу (design #1–#7) — мои: владелец сказал «начинай». ## Findings | Маркер | Суть | Статус | |---|---|---| | C-1 | граница until заморожена при открытии | fixed 820adbe | | C-2 | нет перечитывания при возврате на вкладку | fixed 820adbe | | I-1 | рулинги не в design.md | fixed 820adbe | | M-1 | `/app/feed` без project не дописывает проект в адрес | fixed e0d8eee | | M-2 | «не найдено» без ссылки «Лента» | fixed e0d8eee | | M-3 | подсказка truncated внизу страницы | fixed e0d8eee | | M-4 | 299 символов комментария вместо 300 | fixed e0d8eee | | M-5 | `kinds=foo` → «выберите хотя бы один вид» | fixed e0d8eee | | M-6 | нет теста author=null; комментарий без текста | fixed e0d8eee | | M-7 | группа ленты — section с aria-label | fixed e0d8eee | | M-8 | ledger без числа тестов в task-done | fixed (ledger) | 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 5 commits 2026-10-22 10:42:09 +03:00
aep added 1 commit 2026-10-22 11:09:57 +03:00
aep merged commit f63512772f into main 2026-10-22 11:35:04 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: aep/sdlc-hub#78
No description provided.