Веб-приложение хаба на React: доска связей и задачи (#21) #27

Merged
aep merged 31 commits from feat/21-web-app into main 2026-10-14 23:19:56 +03:00

31 Commits

Author SHA1 Message Date
Andrey Epifancev
34c57ceeab Merge remote-tracking branch 'origin/main' into feat/21-web-app
# Conflicts:
#	ARCHITECTURE.md
#	CLAUDE.md
#	src/jira_hub/api.py
#	tests/test_api.py
2026-10-15 00:07:48 +04:00
Andrey Epifancev
60c30a95f9 fix(web): test-hub.sh не чистит путь с «..» (F-1, #21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:06:07 +04:00
Andrey Epifancev
d608a16a30 Финальные фиксы ревью: поиск следует за адресом, остановка опроса на 4xx, блокировка заметки, защита очистки e2e-хаба, раскладка без w, ошибка карточки с данными, спека R-10/R-18 (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:00:33 +04:00
Andrey Epifancev
51564854d6 feat(api): / и /links ведут в веб-приложение, links.html удалена; документация (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:44:41 +04:00
Andrey Epifancev
423cf73d3f docs(openspec): web-app — рулинг R-18 (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:41:33 +04:00
Andrey Epifancev
28131a7d56 test(web): тестовый хаб и e2e — вход, доска, задачи, сверка со старой страницей (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:39:44 +04:00
Andrey Epifancev
d6fe046efa fix(web): захват указателя на нажатом элементе — двойной щелчок по уголку возвращает размер (#21)
В Chromium dblclick после setPointerCapture на карточке уходил на карточку, а не на .rsz;
то же поведение у links.html.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:39:44 +04:00
Andrey Epifancev
9fcc041d87 feat(web): карточка задачи — поля, связи, команды, правка служебных заметок (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:21:54 +04:00
Andrey Epifancev
d8e3e8656a feat(web): список задач зеркала — фильтры в адресе, порции по 50, поиск (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:18:02 +04:00
Andrey Epifancev
178606f221 docs(openspec): web-app — рулинг R-17 (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:15:43 +04:00
Andrey Epifancev
66bcb7e293 feat(web): страница доски — панель, фильтры, легенда, проблемы, таблица, экспорт (#21)
Заглушка модели в useBoardSource стабильна между рендерами, readTheme не возвращает null.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:14:13 +04:00
Andrey Epifancev
2227b8885a docs(openspec): web-app — рулинги R-15, R-16 (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:10:20 +04:00
Andrey Epifancev
089c4fb78d Холст доски: высота слоя измерения, сужение выборки, ширина полосы дат (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 23:09:47 +04:00
Andrey Epifancev
86f5ccc981 feat(web): холст доски — дорожки, карточки, стрелки, перетаскивание, колонки дат (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 22:55:12 +04:00
Andrey Epifancev
3c2c75e8fe feat(web): источник данных доски и «Обновить из Jira» — закрывает M-1…M-5 #20 (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 22:41:58 +04:00
Andrey Epifancev
5f012db829 feat(web): хранилище настроек доски с прежними ключами, импорт и экспорт JSON (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 22:28:20 +04:00
Andrey Epifancev
b421687188 docs(openspec): web-app — рулинг R-14 (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 22:24:42 +04:00
Andrey Epifancev
232c290f9b feat(web): раскладка доски, стрелки и примагничивание — без DOM (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 22:15:08 +04:00
Andrey Epifancev
7065cbeaef feat(web): выборка доски, критический путь, проблемы, счётчики фильтров (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 22:02:31 +04:00
Andrey Epifancev
251b950b57 docs(openspec): web-app — рулинг R-13 (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 22:00:09 +04:00
Andrey Epifancev
78bf2353d6 feat(web): модель доски — разбор снимка хаба, CSV и JSON, словари из настроек (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 21:49:17 +04:00
Andrey Epifancev
825361ef3e docs(openspec): web-app — R-12 пересмотрен основной сессией (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 21:37:25 +04:00
Andrey Epifancev
7eac72e86f test(web): golden-эталоны доски из links.html@3931a88 на синтетических фикстурах (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 21:33:12 +04:00
Andrey Epifancev
7c161a675e docs(openspec): web-app — рулинги исполнения (#21)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 20:15:39 +04:00
Andrey Epifancev
6dc0543a50 feat(web): оболочка приложения — маршруты /app, разделы, ошибки страниц, тема (#21)
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-14 20:14:27 +04:00
Andrey Epifancev
c124e082ae fix(web): токен с недопустимыми символами — экран входа, а не «хаб не отвечает» (#21)
Сохранённый в localStorage токен с кириллицей, пробелом или переводом строки
давал TypeError у fetch, который превращался в HubDownError. Теперь call()
проверяет TOKEN_RE до запроса и бросает AuthError.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-14 20:12:35 +04:00
Andrey Epifancev
51c2772dcc feat(web): клиент API, токен и экран входа, хуки запросов (#21)
Типы ответов хаба, клиент с разбором ошибок (AuthError, HubDownError,
ApiError), хранилище токена с подпиской, экран входа с проверкой токена
до сохранения, QueryClient с выходом на экран входа при 401, хуки запросов.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-14 20:10:42 +04:00
Andrey Epifancev
bad6c73371 chore(web): каркас веб-приложения — Vite, TypeScript, ESLint, Vitest, make web/check (#21)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-14 20:08:07 +04:00
Andrey Epifancev
bc610a7734 feat(api): раздача веб-приложения по /app… без токена, 503 без сборки; тест M-7 (#21)
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-14 20:03:28 +04:00
Andrey Epifancev
0f2df4c929 docs: план web-app и решения этапа плана R-10, R-11 (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 19:49:48 +04:00
Andrey Epifancev
69a21d63b6 docs(openspec): change web-app — веб-приложение хаба на React (#21)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 19:18:05 +04:00