60 lines
7.4 KiB
Markdown
60 lines
7.4 KiB
Markdown
## 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), #90 (T7.5, T7.6), #73 (M-1…M-7),
|
||
#68 (N-1, N-2, M-2, M-12, M-14, M-17, T5.3), #35 (M-9, O-16; T3.1/M-10 — отметить сделанным). Остаются открытыми: #68 M-18 (заголовки разделов 16 против 24 px) и #94 T9.1 (лишний `GET /projects`) —
|
||
в коде не закрыты.
|
||
|
||
## 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) кнопки на одном экране.
|