Пакет веб-багов: карточка, лента, вики-разметка, состояние модулей (#124) #125

Merged
aep merged 17 commits from feat/124-web-bugs into main 2026-10-26 00:55:02 +03:00
Owner

Closes #124. Закрывает и флейк #116.

Пакет A из сверки follow-ups 25.10: ошибки веб-приложения хаба. Затронут только фронт web/src/, API хаба не меняется. Спека: openspec/changes/web-bugfixes/, план: docs/superpowers/plans/2026-10-25-web-bugfixes.md.

Что исправлено

  • Вики-разметка (#56 M-5, M-6): \#; макросы {code:java}, {quote:…}; [~логин|текст] показывается как «@логин»; пробелы после {code} не дают пустой строки; непарная [ в строке таблицы — обычный символ; {code} {code} в одной строке больше не даёт пустой блок.
  • Лента (#103 С6): комментарий показывается текстом без разметки Jira (wikiPlain). Вложения в ленте показываются по имени, «!» в обычном тексте остаются на месте.
  • Карточка (#42 M-5, #103, #56 M-4):
    • связь с задачей, которой нет в зеркале, открывает Jira в новой вкладке;
    • у окна 404 есть «Назад»;
    • метки видов работ вынесены в строку «Вид работы в Jira»;
    • пустое описание не показывается.
  • Окно карточки (#42 M-1, M-2, M-4):
    • ввод в поиске не закрывает окно;
    • повторное закрытие игнорируется;
    • после «Остаться» окно снова закрывается;
    • фокус в подтверждении ухода стоит на «Остаться»;
    • двойной «Назад» делает один шаг.
  • Состояние модулей (#116): ответ опроса прежнего проекта больше не возвращает его событие.
  • Список задач (#60 M-3): запрос уходит после загрузки настроек, «задач нет» больше не мелькает.
  • Вложения (#86 T6.2, T6.3, M-4):
    • прежняя ошибка после «Повторить» не показывается;
    • ответ 401 ведёт на экран входа, а недоступный хаб даёт текст «хаб не отвечает»;
    • вложения идут в порядке хаба.
  • Доска, проекты, поиск (#35 T4.1, #64 T9.1, M-6, #68 T3.3):
    • два быстрых переключения на доске не теряются;
    • эпик не считается задачей спринта;
    • на экране выбора проекта есть «Повторить»;
    • после «Очистить» фокус остаётся в поле поиска.

Проверки

  • make check: pytest, lint, tsc и vitest — pytest 1121 passed, vitest 73 файла и 759 тестов, lint и tsc без замечаний (после fa1ceb4).
  • npm run e2e: 59 passed, 52 skipped, 0 failed. 52 пропущенных теста — это screens.spec.ts, он включается только при SCREENS=1.
  • Тест #116 прогнан 20 раз подряд: 20/20. Без правки он красный 5/5.

Rulings I made

  • R-15 (design #2): closingKey в overlay.tsx сбрасывается и в abortClose («Остаться»). Иначе второй Esc/✕ после «Остаться» молча игнорировался бы. Это дефект плана, его поймал e2e Task 4. Цена ошибки: повторный ✕ при блокере повторно в��зовет navigate, это безвредно.
  • R-16 (design #6): в ленте вложение показывается по имени без списка вложений карточки. Это делает флаг WikiOptions.anyAttachment, его ставит только wikiPlain. Цена ошибки: правка в одном месте.
  • R-17: отложены M-2 и M-6. M-2: отметка «успех» вложения не снимается приходом данных, поэтому решение 18 выполнено частично. M-6: лента разбирает весь комментарий ради 300 символов. Цена ошибки: редкая невидимая ошибка вложения в открытой карточке; задержка ленты на очень длинных комментариях.
  • R-18 (design #2): исправлена ссылка R-15 (на решение 2, а не на несуществующее 22), к решению 2 дописан сброс в abortClose. Только документация.
  • R-19: N-1 сначала отложена в follow-up. Позже это решение заменено на R-20.
  • R-20 (design #6, решение владельца): N-1 исправлена до PR. Без списка вложений !имя! считается вложением, только если это имя файла с расширением без пробелов по краям. Цена ошибки: !слово.слово! в обычном тексте ленты прочитается как имя вложения.
  • R-1…R-14 — решения этапа спеки, они записаны в design.md в разделе «Decisions made without discussion».

Отложено (deferred)

Маркер Суть Откуда
T3.3 нет компонентного теста карточки при kind_labels undefined ревью Task 3
T6.2 момент между загрузкой настроек и появлением строк списка ревью Task 6
M-2 отметка «успех» вложения не снимается приходом данных финальное ревью
M-6 лента разбирает весь комментарий ради 300 символов финальное ревью
O-4 флейк e2e projects.spec.ts:23 в полном прогоне наблюдение контроллера

После merge: make web и kickstart хаба — за владельцем.

🤖 Generated with Claude Code

Closes #124. Закрывает и флейк #116. Пакет A из сверки follow-ups 25.10: ошибки веб-приложения хаба. Затронут только фронт `web/src/`, API хаба не меняется. Спека: `openspec/changes/web-bugfixes/`, план: `docs/superpowers/plans/2026-10-25-web-bugfixes.md`. ## Что исправлено - **Вики-разметка** (#56 M-5, M-6): `\#`; макросы `{code:java}`, `{quote:…}`; `[~логин|текст]` показывается как «@логин»; пробелы после `{code}` не дают пустой строки; непарная `[` в строке таблицы — обычный символ; `{code} {code}` в одной строке больше не даёт пустой блок. - **Лента** (#103 С6): комментарий показывается текстом без разметки Jira (`wikiPlain`). Вложения в ленте показываются по имени, «!» в обычном тексте остаются на месте. - **Карточка** (#42 M-5, #103, #56 M-4): - связь с задачей, которой нет в зеркале, открывает Jira в новой вкладке; - у окна 404 есть «Назад»; - метки видов работ вынесены в строку «Вид работы в Jira»; - пустое описание не показывается. - **Окно карточки** (#42 M-1, M-2, M-4): - ввод в поиске не закрывает окно; - повторное закрытие игнорируется; - после «Остаться» окно снова закрывается; - фокус в подтверждении ухода стоит на «Остаться»; - двойной «Назад» делает один шаг. - **Состояние модулей** (#116): ответ опроса прежнего проекта больше не возвращает его событие. - **Список задач** (#60 M-3): запрос уходит после загрузки настроек, «задач нет» больше не мелькает. - **Вложения** (#86 T6.2, T6.3, M-4): - прежняя ошибка после «Повторить» не показывается; - ответ 401 ведёт на экран входа, а недоступный хаб даёт текст «хаб не отвечает»; - вложения идут в порядке хаба. - **Доска, проекты, поиск** (#35 T4.1, #64 T9.1, M-6, #68 T3.3): - два быстрых переключения на доске не теряются; - эпик не считается задачей спринта; - на экране выбора проекта есть «Повторить»; - после «Очистить» фокус остаётся в поле поиска. ## Проверки - `make check`: pytest, lint, tsc и vitest — pytest 1121 passed, vitest 73 файла и 759 тестов, lint и tsc без замечаний (после fa1ceb4). - `npm run e2e`: 59 passed, 52 skipped, 0 failed. 52 пропущенных теста — это `screens.spec.ts`, он включается только при `SCREENS=1`. - Тест #116 прогнан 20 раз подряд: 20/20. Без правки он красный 5/5. ## Rulings I made - R-15 (design #2): `closingKey` в `overlay.tsx` сбрасывается и в `abortClose` («Остаться»). Иначе второй Esc/✕ после «Остаться» молча игнорировался бы. Это дефект плана, его поймал e2e Task 4. Цена ошибки: повторный ✕ при блокере повторно в��зовет navigate, это безвредно. - R-16 (design #6): в ленте вложение показывается по имени без списка вложений карточки. Это делает флаг `WikiOptions.anyAttachment`, его ставит только `wikiPlain`. Цена ошибки: правка в одном месте. - R-17: отложены M-2 и M-6. M-2: отметка «успех» вложения не снимается приходом данных, поэтому решение 18 выполнено частично. M-6: лента разбирает весь комментарий ради 300 символов. Цена ошибки: редкая невидимая ошибка вложения в открытой карточке; задержка ленты на очень длинных комментариях. - R-18 (design #2): исправлена ссылка R-15 (на решение 2, а не на несуществующее 22), к решению 2 дописан сброс в `abortClose`. Только документация. - R-19: N-1 сначала отложена в follow-up. Позже это решение заменено на R-20. - R-20 (design #6, решение владельца): N-1 исправлена до PR. Без списка вложений `!имя!` считается вложением, только если это имя файла с расширением без пробелов по краям. Цена ошибки: `!слово.слово!` в обычном тексте ленты прочитается как имя вложения. - R-1…R-14 — решения этапа спеки, они записаны в `design.md` в разделе «Decisions made without discussion». ## Отложено (deferred) | Маркер | Суть | Откуда | |---|---|---| | T3.3 | нет компонентного теста карточки при `kind_labels` undefined | ревью Task 3 | | T6.2 | момент между загрузкой настроек и появлением строк списка | ревью Task 6 | | M-2 | отметка «успех» вложения не снимается приходом данных | финальное ревью | | M-6 | лента разбирает весь комментарий ради 300 символов | финальное ревью | | O-4 | флейк e2e `projects.spec.ts:23` в полном прогоне | наблюдение контроллера | После merge: `make web` и kickstart хаба — за владельцем. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 17 commits 2026-10-26 00:53:40 +03:00
Окно карточки, строка состояния, лента без разметки, метки видов работ,
вики-разметка, список задач ждёт настройки, доска, проекты, вложения.
Решения агента R-1…R-14 — в design.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
wikiPlain включает WikiOptions.anyAttachment: !имя! и [^имя] дают вложение без списка; карточка флаг не передаёт.
onBack защищён closingKey; в таблице [ парна, только если ближайшая скобка — ]; {code} из пробелов в одной строке не даёт pre.
Тесты: events, plain, parse, IssueModal (двойной «Назад», «Назад» при ошибке загрузки — T3.2).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep merged commit 9b98420d76 into main 2026-10-26 00:55:02 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: aep/sdlc-hub#125
No description provided.