## Why Change `web-app` (jira-hub#21, PR #27) слит, финальное ревью не нашло Critical и Important. 46 мелких находок отложены в jira-hub#29: недочёты видимого поведения доски, входа и страниц задач, внешние шрифты, уязвимость в dev-зависимости, неаккуратный React-код, слабые и недостающие тесты. Решение владельца 15.10.2026 — закрыть #29 целиком одним change. Решения владельца (brainstorming 15.10.2026): - берутся все 46 пунктов (группы A — поведение, B — окружение, C — качество кода, D — тесты); - M-3: при возврате с карточки задачи на доску восстанавливается прокрутка; держать в памяти снимок из файла и строку состояния не нужно — данные идут из хаба, файл — запасной путь (эта часть M-3 — rejected); - шрифты — те же IBM Plex Sans и Mono, но из сборки, без обращения в интернет; - M-5 (сборка в wheel) — rejected: хаб запускается из checkout (`uv run --project`), wheel не используется (показано владельцу в сводке понимания до утверждения разделов, возражений не было). ## What Changes - **Доска**: восстановление прокрутки при возврате на `/app/board` (M-3); строка «пакет #N выполняется» не стирается «Перечитать» и загрузкой файла (T10.3); при показанном снимке из файла ошибка хаба — «хаб не отвечает — на доске снимок из файла» (T10.4); подхватывается только пакет обновления из Jira (T10.6); без лишнего `GET /batches` после завершения пакета (T10.1). - **Вход**: ответ 4xx при проверке токена — текст ошибки хаба, а не «хаб не отвечает» (T3.2); 401 на запрос со старым токеном после входа с новым не выбрасывает на экран входа (T3.5). - **Задачи**: значение фильтра из адреса, которого нет среди вариантов, показывается в списке (T13.1); ссылки карточки — цветом темы (O-10); пустой список команд — текстом (O-11). - **Хаб**: путь `/app/assets/…` с нулевым байтом — 404, а не 500 (T1.1). - **Сборка**: шрифты из npm-пакетов `@fontsource`, без Google Fonts (T2.2); `source-map-js` поднимается до исправленной версии через `overrides` (O-1). - **Код и тесты** без изменения поведения: группы C и D (см. design.md, таблица пунктов). - Спеки: `web-app` — MODIFIED «Вход по токену», «Доска связей», «Источник данных доски», «Список задач», «Карточка задачи», «Сборка и разработка»; `hub-api` — MODIFIED «Раздача веб-приложения». ## Non-Goals - Новые страницы, запись в Jira (`viewer-edit`), изменения API хаба. - Изменения логики доски (модель, выборка, критический путь, проблемы, раскладка): эталоны `links.html@3931a88` остаются мерилом; меняются только фикстуры эталонов (T5.1), не поведение. - Хранение состояния доски (снимок файла, событие, опрос) между страницами — rejected часть M-3. - Включение сборки приложения в wheel (M-5). ## Impact - `web/`: `src/auth`, `src/api`, `src/board` (useBoardSource, BoardPage, BoardCanvas, Card, DatesBar, Dropdown, MultiSelect, useBoardPrefs, storage, facets), `src/issues`, `src/test`, `e2e/`, `scripts/`, `index.html`, `package.json`/`package-lock.json` (+ `@fontsource/ibm-plex-sans`, `@fontsource/ibm-plex-mono`, `overrides`). - `src/jira_hub/api.py` (`h_app`), `tests/test_web_app.py`, `tests/test_api.py`. - Контракт с агентом, MCP, схема базы и API не меняются. Ключи `localStorage` не меняются. - Issue: aep/jira-hub#29.