Skip to content

TRI-19 CardStatic: AI-Ready — forwardRef, тесты, stories, AI.md - #614

Merged
kvther1ne merged 6 commits into
mainfrom
TRI-19-cardstatic-ai-ready
Sep 11, 2026
Merged

TRI-19 CardStatic: AI-Ready — forwardRef, тесты, stories, AI.md#614
kvther1ne merged 6 commits into
mainfrom
TRI-19-cardstatic-ai-ready

Conversation

@dudim-ai

@dudim-ai dudim-ai commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Что сделано

  • CardStatic переведён с React.FC на forwardRef: ref ведёт на корневой
    <div> — тот же элемент, который получает className, ...rest и data-tx.
    Статики Content / Media сохранены через Object.assign, displayName
    прежний. Изменение аддитивное: раньше переданный компоненту ref терялся.
  • Публичный API не менялся: имена и типы props, значения ECardTheme /
    ECardRoundingSize / ECardContentPaddingSize и barrel-экспорты
    src/components/Card/index.ts прежние. Общий с CardAction код
    (types.ts, enums.ts, utils.ts, styles/, части CardContent /
    CardMedia) не затронут.
  • Unit-тесты CardStatic: 8 → 12 — тема по умолчанию, проброс ref на
    реальный DOM-узел, рендер Media, displayName и композиция частей.
  • Stories: починены три pre-existing ошибки типов в Playground
    paddingSize является prop'ом CardStatic.Content, а не ICardProps,
    поэтому введён тип PlaygroundArgs (как в CardAction); контролы разнесены
    по категориям Props / Settings, исправлена опечатка desciption,
    добавлена story VisualTests. Story ids не переименованы.
  • Добавлен src/components/Card/CardStatic-ai.md; в docs/ai/ROADMAP.md
    у CardStatic закрыты все три колонки Фазы 1.
  • Release notes stories/release-notes/v1/1.46.0.mdx: секция CardStatic.

Как проверить

  • npx eslint src/components/Card stories/Cards — 0 ошибок, 0 warnings.
  • npx tsc --noEmit — относительно main 44 → 41 ошибки: ушли ровно три
    ошибки stories/Cards/CardStatic.stories.tsx, новых не добавилось.
  • npx vitest run src/components/Card — 36 тестов зелёные (CardStatic 12,
    CardAction 24).
  • npm run syncAiMdTokens -- --check src/components/Card/CardStatic-ai.md
    блок tokens: в актуальном формате.
  • Baseline-скриншоты новой story VisualTests генерирует workflow
    «Update Visual Snapshots»; существующие четыре story не менялись,
    orphan-скриншотов не возникает.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_013a4FBVbFTzwjn1KYP9GHs6

Summary by CodeRabbit

  • Новые возможности

    • Компонент CardStatic теперь поддерживает передачу ref на корневой элемент карточки.
    • Добавлены визуальные тесты и новые варианты отображения карточки в Storybook.
  • Документация

    • Обновлена документация по возможностям, свойствам, доступности и использованию CardStatic.
    • Добавлены сведения об изменении поддержки ref в release notes версии 1.47.0.

## Что сделано

- `CardStatic` переведён с `React.FC` на `forwardRef`: `ref` ведёт на корневой
  `<div>` — тот же элемент, который получает `className`, `...rest` и `data-tx`.
  Статики `Content` / `Media` сохранены через `Object.assign`, `displayName`
  прежний. Изменение аддитивное: раньше переданный компоненту `ref` терялся.
- Публичный API не менялся: имена и типы props, значения `ECardTheme` /
  `ECardRoundingSize` / `ECardContentPaddingSize` и barrel-экспорты
  `src/components/Card/index.ts` прежние. Общий с `CardAction` код
  (`types.ts`, `enums.ts`, `utils.ts`, `styles/`, части `CardContent` /
  `CardMedia`) не затронут.
- Unit-тесты `CardStatic`: 8 → 12 — тема по умолчанию, проброс `ref` на
  реальный DOM-узел, рендер `Media`, `displayName` и композиция частей.
- Stories: починены три pre-existing ошибки типов в `Playground` —
  `paddingSize` является prop'ом `CardStatic.Content`, а не `ICardProps`,
  поэтому введён тип `PlaygroundArgs` (как в `CardAction`); контролы разнесены
  по категориям `Props` / `Settings`, исправлена опечатка `desciption`,
  добавлена story `VisualTests`. Story ids не переименованы.
- Добавлен `src/components/Card/CardStatic-ai.md`; в `docs/ai/ROADMAP.md`
  у CardStatic закрыты все три колонки Фазы 1.
- Release notes `stories/release-notes/v1/1.46.0.mdx`: секция **CardStatic**.

## Как проверить

- `npx eslint src/components/Card stories/Cards` — 0 ошибок, 0 warnings.
- `npx tsc --noEmit` — относительно `main` 44 → 41 ошибки: ушли ровно три
  ошибки `stories/Cards/CardStatic.stories.tsx`, новых не добавилось.
- `npx vitest run src/components/Card` — 36 тестов зелёные (CardStatic 12,
  CardAction 24).
- `npm run syncAiMdTokens -- --check src/components/Card/CardStatic-ai.md` —
  блок `tokens:` в актуальном формате.
- Baseline-скриншоты новой story `VisualTests` генерирует workflow
  «Update Visual Snapshots»; существующие четыре story не менялись,
  orphan-скриншотов не возникает.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013a4FBVbFTzwjn1KYP9GHs6
@coderabbitai

coderabbitai Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Essentials

Run ID: 1458a24f-cc85-45d3-815f-b78e0a49d2dc

📥 Commits

Reviewing files that changed from the base of the PR and between 1194a43 and 23cf9ed.

📒 Files selected for processing (2)
  • docs/ai/ROADMAP.md
  • stories/release-notes/v1/1.47.0.mdx
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/ai/ROADMAP.md

Included review availability: 4 reviews are currently available. Your included PR review attempts over the past 7 days set your current allowance at 5 reviews per hour.


Walkthrough

CardStatic переведён на forwardRef с передачей ref корневому <div>. Обновлены тесты, Storybook-истории, визуальные примеры, документация, roadmap и release notes.

Changes

CardStatic API и проверки

Layer / File(s) Summary
Поддержка forwardRef и проверка API
src/components/Card/CardStatic.tsx, src/components/Card/__tests__/CardStatic.test.tsx
CardStatic передаёт ref на корневой <div>. Тесты проверяют вложенность Media и значения displayName составных компонентов.

Storybook-примеры

Layer / File(s) Summary
Типизация и визуальные примеры Storybook
stories/Cards/CardStatic.stories.tsx, stories/Cards/examples/CardStatic/*
Истории используют общий тип Story, типизированные аргументы и расширенные ArgTypes. Добавлена история VisualTests с четырьмя вариантами карточки.

Документация и публикационные материалы

Layer / File(s) Summary
Документация CardStatic
src/components/Card/CardStatic-ai.md, docs/ai/ROADMAP.md, stories/release-notes/v1/1.47.0.mdx
Описаны API, поведение forwardRef, accessibility, токены и примеры. В roadmap обновлены статусы покрытия. В release notes добавлена информация об изменении типа компонента.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~15 minutes

Change: Bug fix

Merge Risk: ⚪ Minimal · up to 23cf9

The documented ref behavior matches the implementation and tests, with no unresolved merge-blocking concerns.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Заголовок точно описывает изменения в PR: переход CardStatic на forwardRef, обновление тестов и stories, а также добавление AI.md. Формулировка конкретная и соответствует основной цели PR.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 6…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch TRI-19-cardstatic-ai-ready

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

🚀 Storybook Preview:

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ревью «с чистого листа» по гайдам репозитория. Основное — чисто: перевод на forwardRef сделан аддитивно, ref ведёт на тот же корневой <div>, который получает className, ...rest и data-tx, порядок {...rest} → ref → data-tx совпадает с CardAction; паттерн Object.assign(..., {...} satisfies IComposition) уже есть в репозитории (TabsExtendedContent), displayName сохранён, barrel src/components/Card/index.ts, имена props и значения ECardTheme / ECardRoundingSize / ECardContentPaddingSize не тронуты — breaking changes не вижу. React 18-only API не используется, hardcoded-цветов и конкатенации className нет. Проверил локально: npx vitest run src/components/Card — 36 зелёных (CardStatic 12), npx eslint src/components/Card stories/Cards — чисто, npx tsc --noEmit — 41 ошибка и ни одной в src/components/Card или stories/Cards/CardStatic.stories.tsx (на main было 44, три ушедшие — как раз починенные paddingSize), npm run syncAiMdTokens -- --check — формат в порядке. CardStatic-ai.md сверил с кодом и LESS: радиусы 8/16/24, padding 16/24, overflow: hidden на корне, отступы Header/Footer 16px, утверждение про React.FC без forwardRef у CardMedia / CardContent и про перекрытие фона токенами Card.Action_* — всё соответствует исходникам. Story ids не переименованы, orphan-скриншотов не возникает, related с CardAction двусторонний.

Счёт: 0 blocker'ов в коде, 0 warning, 4 nit. Единственное, что реально блокирует мерж, — не сгенерированные baseline'ы cards-cardstatic--visual-tests--{xs,xl}.png (docs/ai/stories-guide.md, чек-лист скриншот-тестов); проблема инфраструктурная (диспатч workflow из облачной сессии отдаёт 403), нужен ручной прогон «Update Visual Snapshots» на ветке до мержа. Отдельно отмечу для протокола, а не как замечание к этому PR: CardStatic.Content / CardStatic.Media остаются React.FC без forwardRef — это осознанно задокументировано в «Инвариантах» AI.md и совпадает с состоянием CardAction, но общесемейная задача на Card-части, похоже, нигде не заведена; стоит её создать, чтобы ✅ в ROADMAP не выглядели закрывающими этот пробел.


Generated by Claude Code

Comment thread stories/release-notes/v1/1.46.0.mdx Outdated
Comment thread src/components/Card/__tests__/CardStatic.test.tsx Outdated
Comment thread src/components/Card/__tests__/CardStatic.test.tsx Outdated
Comment thread stories/Cards/CardStatic.stories.tsx
Правки по замечаниям ревью PR #614 (nit, без изменений публичного API
и поведения компонента):

- "renders Media inside the card" проверяет вложенность Media в карточку
  через toContainElement, а не только присутствие в документе.
- "exposes displayName and compound components" сравнивает displayName
  каждой составной части вместо toBeDefined() — теперь тест поймает
  перепутанные местами Content и Media.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013a4FBVbFTzwjn1KYP9GHs6
@claude

claude Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Статус проверок и что осталось человеку

Visual regression tests — красный, и это не регрессия. В прогоне на 17713ec: Tests: 1 failed, 735 passed, Snapshots: 912 passed, 912 total, артефакт __screenshots__/__diff__ пустой. Упала ровно новая story VisualTests — для неё нет сохранённого baseline, а jest-image-snapshot в CI не дописывает недостающие снапшоты. Все 912 существующих снапшотов, включая четыре прежние story CardStatic, прошли — то есть перевод на forwardRef разметку и визуал не изменил.

Починить это из облачной сессии не получилось. Диспатч workflow «Update Visual Snapshots» отдаёт HTTP 403: Resource not accessible by integration — и через gh workflow run visual-update.yml, и через POST /actions/workflows/visual-update.yml/dispatches. При этом docs/ai/commits.md § «Облачные сессии: подмена токена прокси» описывает диспатч нерелизных workflow (visual-update.yml) как доступный по зондам TRI-117/TRI-119 — похоже, политика прокси с тех пор изменилась и таблицу стоит обновить отдельной задачей.

Локально baseline не генерировал сознательно: skill update-visual-baselines разрешает только CI-прогон, и снапшоты из этого контейнера не гарантированно совпадают с рендерингом раннера ubuntu-24.04.

Что нужно от человека: запустить «Update Visual Snapshots» на ветке TRI-19-cardstatic-ai-ready. Workflow добавит cards-cardstatic--visual-tests--xs.png и --xl.png, после чего Visual Tests станут зелёными. Orphan-скриншотов не будет: четыре существующих story id (default, themes, padding-sizes, rounding-sizes) сохранены, ничего не переименовывалось.

Остальные проверки на 17713ec зелёные: Unit tests, Build library, E2E tests, AI.md tokens, preview.

По замечаниям ревью

Поправлено в 109fe2c (обе правки — только тесты, публичный API и поведение не затронуты):

  • renders Media inside the card теперь проверяет вложенность через toContainElement, а не только присутствие в документе;
  • exposes displayName and compound components сравнивает displayName каждой части вместо toBeDefined() — тест поймает перепутанные местами Content и Media.

Замечание по формулировке записи в 1.46.0.mdx учтено ещё до коммита: запись сокращена до формы прецедентов 1.45.0 (Marker, ButtonDropdownExtended).

Замечание про CardStatic.Content / CardStatic.Media, которые остаются React.FC без forwardRef, — за рамками этой задачи: файлы частей общие с CardAction, это задача на семейство Card целиком. Решение о её заведении за владельцем; в CardStatic-ai.md и CardAction-ai.md ограничение зафиксировано явно.


Generated by Claude Code

@github-actions

Copy link
Copy Markdown
Contributor

🚀 Storybook Preview:

По замечанию ревьюера: из записи убрано перечисление неизменившегося
(«набор props, статики и разметка прежние») — docs/ai/commits.md
§ «Главное правило» просит этого не делать, а следующий буллет уже
говорит то же одной фразой. Изменение только в тексте release notes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013a4FBVbFTzwjn1KYP9GHs6
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Storybook Preview:

Comment thread stories/release-notes/v1/1.46.0.mdx
claude and others added 2 commits September 11, 2026 15:46
По замечанию ревьюера. В main вышел релиз 1.46.0 (коммит 01bbc95),
поэтому запись про CardStatic перенесена из stories/release-notes/v1/1.46.0.mdx
в заготовку следующей версии stories/release-notes/v1/1.47.0.mdx.
Файл 1.46.0.mdx приведён обратно в состояние main — этот PR его больше
не трогает. Текст записи не менялся.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013a4FBVbFTzwjn1KYP9GHs6
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Storybook Preview:

@kvther1ne
kvther1ne merged commit 315ba53 into main Sep 11, 2026
9 checks passed
@kvther1ne
kvther1ne deleted the TRI-19-cardstatic-ai-ready branch September 11, 2026 16:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants