Карточка задачи: вики-разметка Jira в описании и комментариях, кнопка «исходник» (#53) #54

Merged
aep merged 10 commits from feat/53-wiki-render into main 2026-10-17 08:22:59 +03:00
Owner

Issue: #53

Что сделано

  • Описание и комментарии в карточке задачи показываются отрендеренной вики-разметкой Jira: заголовки h1.–h6., *жирный*, _курсив_, -зачёркнутый-, +подчёркнутый+, ^верхний^, ~нижний~, {{моно}}, списки */#/- с вложенностью, таблицы, {code}, {noformat}, {quote}, bq., ----, \\, ссылки (http/https/mailto), [~логин], ключи задач AURORA — ссылки на карточку в окне.
  • Нераспознанное ({panel}, {color}, !картинка!, опасные адреса) — текстом как есть. HTML строкой не вставляется; при ошибке рендера блок показывается исходником.
  • Кнопка «исходник» / «текст» у описания и у каждого комментария; при каждом открытии карточки всё отрендерено.
  • Свёртка длинного описания работает в обоих режимах; в режиме рендера — по высоте с перемером через ResizeObserver.
  • Разборщик — web/src/issues/wiki/ (без новых зависимостей). Хаб, MCP и агент не менялись.
  • OpenSpec: openspec/changes/wiki-render/ — изменено требование «Карточка задачи», добавлено «Разметка Jira в карточке».

Проверки

  • make check: pytest 419 passed, lint, vitest 303 passed.
  • npm run e2e: 23 passed (в том числе разметка и «исходник», повторное открытие из кэша, телефон 375 px).
  • Финальное ревью всей ветки (opus): C-1, I-1, I-2 (M-1), M-3, M-7 исправлены в 923c59b / 13c41a5.

Rulings I made

  • R-1 — тестовые тексты синтетические по образцу реальных AURORA. Цена: пропущенная редкая конструкция.
  • R-2 — ссылками становятся только ключи project_key из настроек (AURORA-123), открывают карточку в окне хаба. Цена: ключи других проектов — текстом.
  • R-3 — [~логин] показывается как «@логин» (имён пользователей в хабе нет). Цена: логин вместо ФИО.
  • R-4 — пустая строка между пунктами списка одного вида не рвёт список. Цена: два задуманных списка сливаются.
  • R-5 — свёрнутое описание в рендере ограничено высотой ≈ 8 строк. Цена: чуть выше или ниже 8 строк.
  • R-6 — подсветка {code}, {panel}, {color}, картинки, эмодзи, типографика — вне change. Цена: видны исходником.
  • R-7 — двойной маркер (**x**) не выделение. Цена: Markdown **x** виден со звёздочками.
  • R-8 — {code}/{noformat}/{quote} только с открывающим тегом в начале строки. Цена: такой {quote} посреди фразы — исходником.
  • R-9 — .issue .comments ul сужен до >ul, чтобы списки разметки в комментариях не теряли маркеры. Цена: нет.
  • R-10 — тесты свёртки подменяют высоты в jsdom. Цена: нет.
  • R-11 — e2e узкого экрана проверяет ширину окна карточки (страница под окном шире экрана и до change); телефон 375 px — отдельный тест. Цена: ширина страницы под окном не проверяется.
  • R-12 — перемер переполнения через ResizeObserver (C-1). Цена: без него — однократный замер.
  • R-13 — подпись [подпись|адрес] без вложенных ссылок и ключей (M-1 повышен до I-2). Цена: ключ в подписи не кликается отдельно.

Deferred

  • M-2 — квадратичный разбор патологических строк ~32K символов, parseWiki без useMemo.
  • M-4 — описание из одних пробелов даёт пустую рамку раздела «Описание».
  • M-5 — нет \# в экранировании; {noformat:…} / {quote:…} с параметрами не распознаются.
  • M-6 — [~login|x] → «@login|x»; хвостовые пробелы в {code} перед закрывающим тегом; непарная [ в ячейке склеивает остаток строки.

После merge: make web и перезапуск хаба (launchctl kickstart) — за владельцем.

🤖 Generated with Claude Code

Issue: #53 ## Что сделано - Описание и комментарии в карточке задачи показываются отрендеренной вики-разметкой Jira: заголовки `h1.`–`h6.`, `*жирный*`, `_курсив_`, `-зачёркнутый-`, `+подчёркнутый+`, `^верхний^`, `~нижний~`, `{{моно}}`, списки `*`/`#`/`-` с вложенностью, таблицы, `{code}`, `{noformat}`, `{quote}`, `bq.`, `----`, `\\`, ссылки (`http`/`https`/`mailto`), `[~логин]`, ключи задач AURORA — ссылки на карточку в окне. - Нераспознанное (`{panel}`, `{color}`, `!картинка!`, опасные адреса) — текстом как есть. HTML строкой не вставляется; при ошибке рендера блок показывается исходником. - Кнопка «исходник» / «текст» у описания и у каждого комментария; при каждом открытии карточки всё отрендерено. - Свёртка длинного описания работает в обоих режимах; в режиме рендера — по высоте с перемером через `ResizeObserver`. - Разборщик — `web/src/issues/wiki/` (без новых зависимостей). Хаб, MCP и агент не менялись. - OpenSpec: `openspec/changes/wiki-render/` — изменено требование «Карточка задачи», добавлено «Разметка Jira в карточке». ## Проверки - `make check`: pytest 419 passed, lint, vitest 303 passed. - `npm run e2e`: 23 passed (в том числе разметка и «исходник», повторное открытие из кэша, телефон 375 px). - Финальное ревью всей ветки (opus): C-1, I-1, I-2 (M-1), M-3, M-7 исправлены в 923c59b / 13c41a5. ## Rulings I made - R-1 — тестовые тексты синтетические по образцу реальных AURORA. Цена: пропущенная редкая конструкция. - R-2 — ссылками становятся только ключи `project_key` из настроек (AURORA-123), открывают карточку в окне хаба. Цена: ключи других проектов — текстом. - R-3 — `[~логин]` показывается как «@логин» (имён пользователей в хабе нет). Цена: логин вместо ФИО. - R-4 — пустая строка между пунктами списка одного вида не рвёт список. Цена: два задуманных списка сливаются. - R-5 — свёрнутое описание в рендере ограничено высотой ≈ 8 строк. Цена: чуть выше или ниже 8 строк. - R-6 — подсветка `{code}`, `{panel}`, `{color}`, картинки, эмодзи, типографика — вне change. Цена: видны исходником. - R-7 — двойной маркер (`**x**`) не выделение. Цена: Markdown `**x**` виден со звёздочками. - R-8 — `{code}`/`{noformat}`/`{quote}` только с открывающим тегом в начале строки. Цена: такой `{quote}` посреди фразы — исходником. - R-9 — `.issue .comments ul` сужен до `>ul`, чтобы списки разметки в комментариях не теряли маркеры. Цена: нет. - R-10 — тесты свёртки подменяют высоты в jsdom. Цена: нет. - R-11 — e2e узкого экрана проверяет ширину окна карточки (страница под окном шире экрана и до change); телефон 375 px — отдельный тест. Цена: ширина страницы под окном не проверяется. - R-12 — перемер переполнения через `ResizeObserver` (C-1). Цена: без него — однократный замер. - R-13 — подпись `[подпись|адрес]` без вложенных ссылок и ключей (M-1 повышен до I-2). Цена: ключ в подписи не кликается отдельно. ## Deferred - M-2 — квадратичный разбор патологических строк ~32K символов, `parseWiki` без `useMemo`. - M-4 — описание из одних пробелов даёт пустую рамку раздела «Описание». - M-5 — нет `\#` в экранировании; `{noformat:…}` / `{quote:…}` с параметрами не распознаются. - M-6 — `[~login|x]` → «@login|x»; хвостовые пробелы в `{code}` перед закрывающим тегом; непарная `[` в ячейке склеивает остаток строки. После merge: `make web` и перезапуск хаба (`launchctl kickstart`) — за владельцем. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 10 commits 2026-10-17 00:24:32 +03:00
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>
C-1: Description перемеряет переполнение через ResizeObserver: карточка из
кэша монтируется до showModal, и «развернуть» пропадала.
I-1: таблицы разметки не наследуют глобальные table/th из board.css
(min-width 520px, прописные заголовки); слова в ячейках не рвутся (M-3).
I-2 (M-1): в подписи [подпись|адрес] ключи, адреса и ссылки — текст.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep merged commit d3f6c704d7 into main 2026-10-17 08:22:59 +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#54
No description provided.