Andrey Epifancev 6a2d8b7f5e spec(web-modules): веб под модули — состояние модулей, «Обзор», адреса модулей
Change web-modules по аудиту веба 24.10.2026 (#98).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 15:38:46 +04:00

7.2 KiB
Raw Blame History

Why

Веб хаба собирался, когда модуль был один. После hub-modules (#87) и wiki-module (#91) у хаба два модуля со своими агентами, а оболочка по-прежнему говорит на языке Jira. Владелец 24.10.2026 заметил, что блок в боковой панели вводит в заблуждение: «агент на связи» — это только агент jira, у вики нет ни агента, ни кнопки, неясно, к чему относится «данные на …». Владелец попросил пересмотреть весь веб и организовать его под модули в новом имени sdlc-hub (#97).

Аудит 24.10.2026 (код, спеки, живой хаб в двух темах и на 390 px) показал, что это не одна подпись:

  • в контракте веб-модуля нет понятия «состояние модуля» (агент, свежесть данных и её охват, обновление, пакет в работе): каждый модуль рисует свой блок по-своему, оболочка не может ни свести их, ни показать сводку;
  • блок jira грузит полный снимок доски на каждой странице ради одного времени last_sync;
  • ход пакетов отслеживает только jira; автообновления хаба и пакеты из MCP не видны, время данных отстаёт;
  • оболочка привязана к jira: / ведёт на доску, типы jira и closed.ts лежат в ядре, модуль wiki импортирует форматтер из модуля jira;
  • CSS модулей не разделён: правило разметки Jira в карточке (div.wiki h1) ломает заголовки страницы «Вики»;
  • пакет синхронизации вики нового проекта теряется: POST /projects отдаёт один batch_id;
  • страница «Задачи» прокручивается по горизонтали на 1440 px, просрочка в таблице показана только цветом.

What Changes

  • Состояние модуля — данные, а не компонент. Модуль описывает: название для показа, агента, свежесть (время, охват «все проекты» / «проект», ошибка), действие обновления и правило «чей пакет». Ядро рисует блок одинаково в боковой панели, свёрнутой панели, на узком экране и на «Обзоре».
  • Ядро отслеживает пакеты и агентов. Один опрос GET /agents для всех модулей; один трекер пакетов (вынос RefreshProvider из модуля jira) — подхват незавершённого пакета модуля любого автора, тексты событий, 409, остановка опроса, перечитывание данных модуля по завершении.
  • Навигация по модулям и «Обзор». Боковая панель группирует разделы под заголовками модулей; новая страница ядра «Обзор» (/app/?project=) — главная: карточка каждого модуля (состояние + сводка от модуля) и последние пакеты проекта.
  • Адреса модулей с префиксом модуля: /app/jira/board, /app/jira/issues, /app/jira/issues/{key}, /app/jira/feed, /app/wiki; прежние адреса перенаправляют с сохранением параметров; / и /links хаба — на /app/.
  • API для блока состояния: GET /projects — время последнего полного обновления Jira; GET /batches — модуль пакета; POST/PATCH /projects — пакеты по модулям.
  • Граница ядра и модулей в вебе: типы jira, closed.ts и словари jira уходят в модуль jira; форматтеры дат — в ядро; классы CSS модуля не совпадают с классами другого модуля и ядра (тест-страж); fact_status удаляется из веба.
  • Доработки по аудиту: заголовок вкладки «<страница> · <проект> · SDLC Hub»; окно «Новый проект» с группами полей по модулям и подсказками под полем; узкий экран с меткой проекта и сводной точкой состояния, модальная выезжающая панель; «Задачи» без горизонтальной прокрутки страницы, просрочка текстом; «Вики» открывает корень и показывает понятную шапку; мелкие тексты («Команды хаба», подсказка выбора проекта).
  • Закрываемые follow-ups: #94 (веб: T4.1, T4.2, T4.4, T4.5, T10.1–T10.7, T9.1), #90 (T7.5, T7.6), #73 (M-1…M-7), #68 (N-1, N-2, M-2, M-12, M-14, M-17, M-18, T5.3), #35 (M-9, O-16; T3.1/M-10 — отметить сделанным).

Non-Goals

  • Переименование (#97) — делается раньше; этот change строится на sdlc_hub, «SDLC Hub», ключах sdlc-hub-*.
  • Страница «Агенты и очередь», настройки хаба в вебе.
  • Полное удаление «статуса по факту» из базы, API, MCP и агента (#60); здесь — только из типов веба.
  • Разметка Jira в ленте (С6 аудита), сворачивание фильтров доски на телефоне (С12), 409 no_root у /wiki/status (С10), доступность компонентов ui/ (Menu, Segmented, ThemeSwitch), доработки окна карточки из #42, служебные метки fact-*/kind-* в карточке — в follow-up.
  • Изменения логики доски, списка задач, ленты и вики сверх перечисленного.

Anti-Goals

  • Блок состояния, который снова надо читать как загадку: у каждой строки должно быть видно, к какому модулю она относится и что именно обновит кнопка (все проекты или текущий).
  • Ядро веба, знающее про jira или wiki по имени: всё, что оболочка показывает о модуле, приходит из описания модуля.
  • Две основные (primary) кнопки на одном экране.