Веб-приложение хаба на React: доска связей и задачи (#21) #27
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/21-web-app"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Закрывает #21, закрывает #20.
Веб-приложение хаба на React + TypeScript + Vite (
web/), сборка — вsrc/jira_hub/web/app/(не в git). Хаб отдаёт его под/app/, а/и/linksперенаправляет на/app/board. Файлlinks.htmlудалён.Что внутри
jira-hub-tokenвlocalStorage, как у старой доски), разделы «Доска» и «Задачи», «Сменить токен», страница «не найдено», сообщение об ошибке отрисовки./app/board) перенесена сlinks.html@3931a88один в один. Логика (модель, видимая выборка, критический путь, проблемы, раскладка) — чистые TS-модули, их сверяют golden-тесты с эталонами, снятыми со старой страницы. Отрисовка — React + SVG. Раскладки и фильтры читаются из прежних ключейlocalStorage. Добавлен значок «ⓘ»: он открывает карточку задачи в приложении.mirror.board(own=False)./app/issues,/app/issues/{key}): список с фильтрами в адресе, порции по 50. Карточка: поля, описание, связи, последние команды. Правка служебных заметок:PUTуходит только с изменёнными полями, при уходе с несохранённой правкой — подтверждение.Makefile:make webсобирает приложение,make checkзапускает pytest, tsc, eslint и vitest. Есть тестовый хабweb/scripts/test-hub.sh(:8791) и e2e на Playwright.web-app; вhub-api— MODIFIED «Процесс и доступ», ADDED «Раздача веб-приложения», REMOVED «Страница доски связей».main(agent-self-update #22), конфликты вCLAUDE.md,ARCHITECTURE.md,api.pyиtest_api.pyразрешены с сохранением обеих сторон.Проверки
make check: pytest 249 passed, tsc и eslint чисто, vitest 18 файлов / 129 тестов.cd web && npm run e2eна тестовом хабе :8791: 12 passed (вход, доска, геометрия, задачи)./links→/app/board;{rest_text, updated_by: "web"}), подтверждение ухода;Rulings I made
Номер решения в
openspec/changes/web-app/design.mdуказан рядом. R-1…R-11 — с этапа спеки и плана (в design.md).fromJsonнормализует копию фильтров (mode=linked→neighbors=true), как старая страница;mode="all"обрабатывается в хранилище. Цена: две строки вfromJsonи перегенерация эталона.dateLabelsсравниваются только приbyDate: в генераторе это артефакт заглушки DOM. Цена: лишние подписи приbyDate=false; проверено, чтоDatesBarрисуется только приbyDate.BoardCanvasвыправлены по golden-эталону, а не по цифрам плана. Цена: если эталон не отражает желаемого, менять фикстуры, а не тест..measure .card { position: static; height: auto }вопреки CSS плана. Цена: неверная раскладка высот; e2e geometry это ловит.emptyModelчерезuseMemoи значение темы по умолчанию. Цена: бесконечный рендер или «Тема: undefined»; финальное ревью подтвердило корректность.setPointerCaptureставится на нажатом элементе, поэтому двойной щелчок по уголку снова возвращает размер (дефект унаследован изlinks.html). Отклонение от старой страницы внесено в спеку. Цена: откат — revertd6fe046.CLAUDE.mdв Task 16 (строка о текущем change, пункт «Веб-приложение — web/»).Deferred (уйдут в follow-up issue при закрытии)
/app/assets/%00→ 500 вместо 404canon.ts:localeCompareзависит от локалиqueryClient/queriesбез тестовtoken.testне проверяетremoveItemпри закрытом хранилищеApp.Layoutнужен только тесту@testing-library/reacttheme.testбез очистки атрибутовlayout.clamp: 87 из 88 значений «unset»util.tsбез прямых тестовinitialWhoсчитаетwhoItemsдваждыcolWidths()не проверяет, что значения — числаtoggleLane/moveLane/resetLayout/exportFileName/mode=allfromJson.tsGET /batchesпосле завершения пакетаhasData:trueдля JSONmemo(Card)неэффективенrequestAnimationFrameвDatesBarне отменяетсяonOpen()вызывается внутри updatersetOpenwriteFlag/writeHiddenвызываются внутри updateruseLayoutEffectбез deps,--head-hне сбрасываетсяrole=listboxбезoptionв MultiSelectdatalistexpect.poll, литерал 240import urllib.*вtest_api.pynpm audit: 1 high вsource-map-js, только dev-зависимость (--omit=dev— 0)Исправлены: I1 (Task 3) c124e08; I-1…I-3 (Task 11) 089c4fb; T8.1 5f012db; T15.F1 d6fe046; T10.2, T13.2, T14.1, T15.5, M-1, M-2, M-4 d608a16; F-1
60c30a9. Финальное ревью (opus) не нашло ни Critical, ни Important.Выкатка после merge
git pull→make web→launchctl kickstart -k gui/$(id -u)/ru.aepif.jira-hub→ открытьhttp://127.0.0.1:8790/app/board.🤖 Generated with Claude Code