@bonesofspring/ai-rules 0.1.31 → 0.1.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bonesofspring/ai-rules",
3
- "version": "0.1.31",
3
+ "version": "0.1.32",
4
4
  "description": "Presets of Cursor and Claude rules/commands for Revy Ross personal use",
5
5
  "license": "MIT",
6
6
  "author": "Revy Ross",
@@ -10,7 +10,7 @@ You are a Playwright Test Generator, an expert in browser automation and end-to-
10
10
  Your specialty is creating robust, reliable Playwright tests that accurately simulate user interactions and validate
11
11
  application behavior.
12
12
 
13
- ## Project-specific test structure (emedcard-web)
13
+ ## Project-specific test structure (Next.js preset)
14
14
 
15
15
  In this project you MUST respect the existing e2e layout:
16
16
 
@@ -22,9 +22,9 @@ In this project you MUST respect the existing e2e layout:
22
22
  When you generate tests:
23
23
 
24
24
  - Use the corresponding `*.cases.md` file under `app/__tests__/e2e/**` as the source plan (for example,
25
- `app/__tests__/e2e/MedcardRecords/medcard-records.cases.md`).
25
+ `app/__tests__/e2e/OrderHistory/order-history.cases.md`).
26
26
  - Write or update Playwright test files only under `app/__tests__/e2e/**` (for example,
27
- `app/__tests__/e2e/MedcardRecords/medcard-records.spec.ts`) instead of creating files in a separate `tests/` folder.
27
+ `app/__tests__/e2e/OrderHistory/order-history.spec.ts`) instead of creating files in a separate `tests/` folder.
28
28
 
29
29
  # For each test you generate
30
30
  - Obtain the test plan with all the steps and verification specification
@@ -10,7 +10,7 @@ You are the Playwright Test Healer, an expert test automation engineer specializ
10
10
  resolving Playwright test failures. Your mission is to systematically identify, diagnose, and fix
11
11
  broken Playwright tests using a methodical approach.
12
12
 
13
- ## Project-specific test structure (emedcard-web)
13
+ ## Project-specific test structure (Next.js preset)
14
14
 
15
15
  In this project you MUST respect the existing e2e layout:
16
16
 
@@ -23,8 +23,8 @@ When healing tests:
23
23
 
24
24
  - Only read and modify `*.spec.ts` files under `app/__tests__/e2e/**`.
25
25
  - Use the `*.cases.md` file in the same folder as the failing test as the source of truth for intended behavior
26
- (for example, `app/__tests__/e2e/MedcardRecords/medcard-records.cases.md` for
27
- `app/__tests__/e2e/MedcardRecords/medcard-records.spec.ts`).
26
+ (for example, `app/__tests__/e2e/OrderHistory/order-history.cases.md` for
27
+ `app/__tests__/e2e/OrderHistory/order-history.spec.ts`).
28
28
 
29
29
  Your workflow:
30
30
  1. **Initial Execution**: Run all tests using `test_run` tool to identify failing tests
@@ -10,7 +10,7 @@ You are an expert web test planner with extensive experience in quality assuranc
10
10
  scenario design. Your expertise includes functional testing, edge case identification, and comprehensive test coverage
11
11
  planning.
12
12
 
13
- ## Project-specific test structure (emedcard-web)
13
+ ## Project-specific test structure (Next.js preset)
14
14
 
15
15
  In this project you MUST respect the existing e2e layout:
16
16
 
@@ -22,7 +22,7 @@ In this project you MUST respect the existing e2e layout:
22
22
  When you create or update a test plan:
23
23
 
24
24
  - Use the appropriate `*.cases.md` file under `app/__tests__/e2e/**` (for example,
25
- `app/__tests__/e2e/MedcardRecords/medcard-records.cases.md`) instead of creating files in a separate `specs/` folder.
25
+ `app/__tests__/e2e/OrderHistory/order-history.cases.md`) instead of creating files in a separate `specs/` folder.
26
26
  - Treat these `*.cases.md` files as the canonical, human-readable test plans for the Generator and Healer agents.
27
27
 
28
28
  You will:
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Конвенции API сервисов и мапперов Medcard
2
+ description: Конвенции API сервисов и мапперов
3
3
  globs: src/api/services/**/*.ts
4
4
  alwaysApply: false
5
5
  ---
@@ -7,7 +7,7 @@ alwaysApply: false
7
7
  # Роль API слоя
8
8
 
9
9
  - Инкапсулировать всё, что связано с:
10
- - HTTP/axios запросами,
10
+ - HTTP‑запросами (через принятый в проекте клиент),
11
11
  - URL/путями,
12
12
  - заголовками и кодами ответов,
13
13
  - DTO backend.
@@ -17,8 +17,8 @@ alwaysApply: false
17
17
 
18
18
  # Структура модулей
19
19
 
20
- - Для каждой доменной области (Medcard, OfflineConsultation, RequestForAnalysis и т.п.):
21
- - отдельный каталог в `src/api/services/MedcardApiService/**`.
20
+ - Для каждой доменной области (например, заказы, биллинг, настройки аккаунта):
21
+ - отдельный каталог в `src/api/services/<ИмяСервиса или фичи>/**` по конвенции репозитория.
22
22
  - Внутри модуля:
23
23
  - файлы с вызовами API (`index.ts` или `*.service.ts`);
24
24
  - файлы мапперов (`*responseMappers.ts`);
@@ -42,8 +42,8 @@ alwaysApply: false
42
42
  - не должен "глотать" ошибки без следа;
43
43
  - либо бросает доменные/унифицированные ошибки;
44
44
  - либо возвращает результат в `Result<T, E>`‑подобной форме (если такой паттерн принят в проекте).
45
- - Интеграция с Sentry / OpenTelemetry:
46
- - если используется — делать её централизованно (например, в HTTP‑клиенте или обёртках), а не в каждом методе.
45
+ - Интеграция с APM/трассировкой (если есть в проекте):
46
+ - централизованно (HTTP‑клиент, обёртки), а не в каждом методе сервиса.
47
47
 
48
48
  # Требование к агенту
49
49
 
@@ -52,5 +52,5 @@ alwaysApply: false
52
52
  - Не смешивать слой API и UI/store:
53
53
  - компоненты не должны зависеть от DTO;
54
54
  - store не должен знать о HTTP‑деталях (URL, коды).
55
- - При использовании API‑сервисов в UI, store и утилитах импортировать только из public API файлов модуля (например, `@/api/services/MedcardApiService/.../index`), а не из внутренних файлов‑реализаций.
55
+ - При использовании API‑сервисов в UI, store и утилитах импортировать только из public API файлов модуля (например, `@/api/services/OrdersApi/.../index`), а не из внутренних файлов‑реализаций.
56
56
 
@@ -8,7 +8,7 @@ alwaysApply: true
8
8
  - **UI (src/ui/**)**:
9
9
  - Может импортировать: `@/ui/**`, `@/store/**`, `@/types/**`, `@/api/services/**` (через публичные интерфейсы).
10
10
  - Не должен:
11
- - обращаться к HTTP/axios напрямую;
11
+ - обращаться к HTTP‑клиенту напрямую;
12
12
  - знать детали DTO backend — только доменные типы.
13
13
  - **Store (src/store/**)**:
14
14
  - Может импортировать: `@/store/**`, `@/api/services/**`, `@/types/**`.
@@ -31,12 +31,12 @@ alwaysApply: true
31
31
 
32
32
  # Организация фич
33
33
 
34
- - Для сложных фич (например, OfflineConsultation):
35
- - Страница: `src/ui/pages/OfflineConsultationPage/**`.
34
+ - Для сложных фич (например, `OrderCheckout`):
35
+ - Страница: `src/ui/pages/OrderCheckoutPage/**`.
36
36
  - Локальные компоненты: поддиректории `components/**` внутри страницы.
37
- - Связанный store: `src/store/slices/OfflineConsultation/**`.
38
- - API: `src/api/services/MedcardApiService/OfflineConsultation/**`.
39
- - Типы: `src/types/OfflineConsultation.types.ts` или аналогичный файл.
37
+ - Связанный store: `src/store/slices/OrderCheckout/**`.
38
+ - API: `src/api/services/OrdersApi/OrderCheckout/**` (имя корневого сервиса взять из принятой в проекте схемы).
39
+ - Типы: `src/types/OrderCheckout.types.ts` или аналогичный файл.
40
40
 
41
41
  # Требование к агенту
42
42
 
@@ -10,7 +10,7 @@ alwaysApply: true
10
10
  - минимизировать "стилистический шум" (лишние правки форматирования, rename без нужды).
11
11
  - Перед добавлением нового решения:
12
12
  - искать аналогичное в коде и **повторять подход**, а не изобретать новый.
13
- - проверять, нет ли уже подходящего компонента или паттерна в `@sds/*` или существующем UI‑коде, прежде чем добавлять новый кастомный контрол.
13
+ - проверять, нет ли уже подходящего компонента или паттерна в существующем UI‑коде и пакетах проекта, прежде чем добавлять новый кастомный контрол.
14
14
  - использовать при обращении к чужим модулям только их **public API** (index/barrel‑файлы и явно экспортируемые сущности), а deep‑импорты внутренних файлов рассматривать как повод для рефакторинга.
15
15
 
16
16
  # Рефакторинг при изменениях
@@ -23,7 +23,7 @@ alwaysApply: true
23
23
  - вынести дублирующуюся логику в общий хук/утилиту;
24
24
  - типизировать `any` и `unknown`, если это безболезненно;
25
25
  - разделить слишком крупный компонент на несколько более простых;
26
- - заменить локальные «магические» CSS‑значения (цвета, отступы, размеры) на токены из `@sds/tokens-*`, `@sds/brand-colors`, `@sds/tokens-typography` или централизованные UI‑примитивы;
26
+ - заменить локальные «магические» CSS‑значения (цвета, отступы, размеры) на токены/примитивы дизайна проекта;
27
27
  - заменить deep‑импорты внутренних файлов других модулей на обращения к их public API.
28
28
 
29
29
  # Ограничения
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Требования к code review агентами Cursor для GitLab merge requests в emedcard-web
2
+ description: Требования к code review агентами Cursor для merge requests
3
3
  alwaysApply: true
4
4
  ---
5
5
 
@@ -7,12 +7,12 @@ alwaysApply: true
7
7
 
8
8
  - **Когда применять**
9
9
  - Если пользователь просит: "проведи ревью", "оценить MR/ветку/дифф", "посмотри изменения".
10
- - Опираться на локальный репозиторий: текущую ветку, `git diff` и открытые файлы, а не на данные GitLab API.
10
+ - Опираться на локальный репозиторий: текущую ветку, `git diff` и открытые файлы, а не на данные внешнего API хостинга.
11
11
 
12
12
  - **Что обязан проверить агент**
13
13
  - **Архитектура и слои**:
14
- - Соблюдение правил из `architecture-boundaries.mdc` и `emedcard-core.mdc`:
15
- - UI (`src/ui/**`) не ходит напрямую в HTTP/axios и не знает DTO.
14
+ - Соблюдение правил из `architecture-boundaries.mdc` и `next-app-core.mdc`:
15
+ - UI (`src/ui/**`) не ходит напрямую в HTTP‑клиент и не знает DTO.
16
16
  - Store (`src/store/**`) не зависит от UI и не работает с "сырыми" HTTP.
17
17
  - API (`src/api/services/**`) не тянет UI/store, использует мапперы.
18
18
  - **Импорты и организация кода**:
@@ -22,9 +22,9 @@ alwaysApply: true
22
22
  - **Типы и TS‑строгость**:
23
23
  - Не допускать новых `any`; предпочитать доменные типы из `src/types/**`.
24
24
  - Проверять корректность пропсов/возвращаемых типов, особенно в UI и API‑слое.
25
- - **UI, стили и SDS**:
26
- - Для компонентов и стилей сверяться с `react-ui.mdc` и `emedcard-core.mdc`:
27
- - Использовать Linaria и компоненты/токены `@sds/*`, а не "магические" значения.
25
+ - **UI и стили**:
26
+ - Для компонентов и стилей сверяться с `react-ui.mdc` и `next-app-core.mdc`:
27
+ - Соблюдать принятый в проекте способ стилей и общие UI‑примитивы/токены, а не "магические" значения.
28
28
  - Сохранять консистентность с существующими компонентами и паттернами.
29
29
  - **Тесты**:
30
30
  - Проверять, что для нетривиальных изменений:
@@ -41,7 +41,7 @@ alwaysApply: true
41
41
  - без "больших рефакторингов" в духе `code-quality-and-refactoring.mdc`, если задача локальная.
42
42
 
43
43
  - **Ограничения для агента**
44
- - Не придумывать несуществующие GitLab сущности (лейблы, авторов, статусы пайплайнов).
44
+ - Не придумывать несуществующие метаданные из хостинга (лейблы MR, авторов, статусы CI), если их нет в локальных данных.
45
45
  - Не менять общую архитектуру фичи без прямого запроса пользователя.
46
46
  - Следовать принципу "boy scout rule": предлагать улучшения, которые реально можно внести в рамках MR.
47
47
 
@@ -1,18 +1,18 @@
1
1
  ---
2
- description: Базовые принципы, стек и архитектура emedcard-web
2
+ description: Базовые принципы, стек и архитектура Next.js приложения (preset)
3
3
  alwaysApply: true
4
4
  ---
5
5
 
6
6
  # Стек и окружение
7
7
 
8
- - Проект: **Next.js 16**, **React 19**, **TypeScript 5 (strict)**.
9
- - Сборка: Webpack/Rspack, Node >= 24.
10
- - Тесты: Jest + Testing Library, e2e Playwright.
11
- - Моки: **MSW** (`msw`, `public/mockServiceWorker.js`).
12
- - Стили и UI:
13
- - CSS-in-JS: **Linaria** (`@linaria/core`, `@linaria/react`).
14
- - Дизайн‑система: **SDS** (`@sds/*`) и набор дизайн‑токенов (`@sds/tokens-*`, `@sds/brand-colors`, `@sds/tokens-typography`).
15
- - Трассировка и мониторинг: Sentry, OpenTelemetry.
8
+ Конкретные версии пакетов и инструментов — **из `package.json` и конфигов целевого репозитория**. Ниже — рамка preset (Next.js + React + TypeScript), без привязки к конкретному вендору UI, моков или APM:
9
+
10
+ - **Фреймворк:** Next.js, React, TypeScript (strictесли включён в проекте).
11
+ - **Сборка и Node:** как задано в репозитории.
12
+ - **Тесты:** unit/integration — runner и библиотеки проекта; e2e — инструмент проекта (правила для агентов Playwright — в отдельных файлах preset).
13
+ - **Моки HTTP/API:** если приняты в репо — повторять существующую схему (каталоги, регистрация, точка входа).
14
+ - **Стили и UI:** способ стилизации и **дизайн‑система / токены** — как уже заведено в коде; приоритет общим примитивам и токенам вместо разрозненных «магических» значений.
15
+ - **Наблюдаемость:** только если уже подключена в проекте — централизованно (клиент, обёртки), без дублирования в каждом методе.
16
16
 
17
17
  # Структура проекта (верхний уровень)
18
18
 
@@ -31,21 +31,21 @@ alwaysApply: true
31
31
  - `src/ui/pages/**` — страницы и контейнеры.
32
32
  - `src/ui/components/**` — переиспользуемые компоненты.
33
33
  - **Store слой** (`src/store/**`):
34
- - `src/store/slices/**` — Redux Toolkit слайсы.
34
+ - `src/store/slices/**` — модули состояния (в этом preset — Redux Toolkit; подробности в `store-rtk.mdc`).
35
35
  - `src/store/middleware/**` — middleware для сайд‑эффектов (например, файлы, аналитика).
36
36
  - **API слой** (`src/api/services/**`):
37
37
  - Сервисы и мапперы, инкапсулирующие HTTP‑логику.
38
38
  - **Типы** (`src/types/**`):
39
- - Общие доменные типы (OfflineConsultation, Medcard, Conclusion и т.д.).
39
+ - Общие доменные типы продукта (сущности предметной области, агрегаты и т.д.).
40
40
  - **Моки и тестовые данные** (`src/mocks/**`):
41
- - Моковые данные и обработчики для MSW.
41
+ - По структуре и назначению как принято в репозитории.
42
42
 
43
43
  # Общие архитектурные принципы
44
44
 
45
45
  - **Чёткое разделение слоёв**:
46
46
  - UI знает только о доменных типах и публичных интерфейсах store/API.
47
47
  - Store знает о доменных типах и API‑сервисах.
48
- - API знает о транспортном слое (HTTP, axios и пр.) и DTO.
48
+ - API знает о транспортном слое (HTTP, выбранный клиент) и DTO.
49
49
  - **Никаких "проникновений" слоёв**:
50
50
  - UI не обращается к API напрямую — только через store или абстракции сервисов.
51
51
  - Store не работает напрямую с "сырыми" HTTP‑ответами — только через мапперы.
@@ -55,11 +55,11 @@ alwaysApply: true
55
55
 
56
56
  # Кодстайл и качества кода
57
57
 
58
- - Следовать конфигам `eslint.config.mjs`, `.prettierrc`, `.stylelintrc`.
58
+ - Следовать конфигам линтеров и форматтера **проекта** (`eslint`, `prettier`, `stylelint` — какие есть в репо).
59
59
  - Поддерживать:
60
60
  - KISS, DRY, SOLID (в разумных пределах для фронта).
61
61
  - Модульность и переиспользование через компоненты, хуки, слайсы, сервисы.
62
- - Консистентный визуальный стиль за счёт использования готовых компонентов `@sds/*` и дизайн‑токенов @sds вместо локальных "магических" значений.
62
+ - Визуальную консистентность за счёт принятых в проекте UI‑примитивов и токенов, а не разовых литералов в стилях.
63
63
  - При добавлении нового кода **искать и копировать существующие паттерны**:
64
64
  - Для страниц — аналогичные файлы в `src/ui/pages/**`.
65
65
  - Для блоков — компоненты в `src/ui/components/**`.
@@ -73,5 +73,5 @@ alwaysApply: true
73
73
  - Найти в соответствующей директории похожие примеры и **копировать архитектурный паттерн** (структура файлов, типы, именование).
74
74
  - Не упрощать архитектуру в ущерб существующим слоям (не тянуть API в UI, не описывать "DTO" прямо в компонентах).
75
75
  - Избегать использования `any` при типизации кода; при необходимости использовать `unknown` с последующим безопасным сужением типов.
76
- - После создания или редактирования любых файлов **обязательно проверять проект на ошибки TypeScript и ESLint** (либо точечно по изменённым файлам, либо по всему проекту) и устранять найденные проблемы, если это возможно без изменения бизнес‑логики.
76
+ - После создания или редактирования любых файлов **обязательно проверять проект на ошибки TypeScript и ESLint** (либо точечно по изменённым файлам, либо по всему проекту) и устранять найденные проблемы, если это возможно без изменения бизнес‑логики).
77
77
 
@@ -21,8 +21,8 @@ When acting as a **Planner** (or working with the Playwright planner agent):
21
21
  - **Treat `*.cases.md` as the canonical test plan files**, equivalent to Playwright's `specs/*.md`.
22
22
  - **Location**:
23
23
  - For a feature/domain, use the corresponding `*.cases.md` file under `app/__tests__/e2e`, e.g.:
24
- - `app/__tests__/e2e/MedcardRecords/medcard-records.cases.md`
25
- - `app/__tests__/e2e/RequestForAnalysis/schedule-display.cases.md`
24
+ - `app/__tests__/e2e/OrderHistory/order-history.cases.md`
25
+ - `app/__tests__/e2e/BillingReport/invoice-list.cases.md`
26
26
  - **Content requirements**:
27
27
  - Group scenarios by feature and subfeature using headings.
28
28
  - For each scenario include:
@@ -44,13 +44,13 @@ When acting as a **Generator** (or working with the Playwright generator agent):
44
44
  - Use the relevant `*.cases.md` file under `app/__tests__/e2e/**` as the test plan.
45
45
  - **Target for tests**:
46
46
  - Generate or update `*.spec.ts` files under the same folder, e.g.:
47
- - plan: `app/__tests__/e2e/MedcardRecords/medcard-records.cases.md`
48
- - tests: `app/__tests__/e2e/MedcardRecords/medcard-records.spec.ts` (or additional `*.spec.ts` in that folder if needed).
47
+ - plan: `app/__tests__/e2e/OrderHistory/order-history.cases.md`
48
+ - tests: `app/__tests__/e2e/OrderHistory/order-history.spec.ts` (or additional `*.spec.ts` in that folder if needed).
49
49
  - **Structure**:
50
50
  - Use `test.describe` to group by top-level plan sections (feature / user flow).
51
51
  - Use `test(...)` titles that match scenario names from the plan.
52
52
  - Prefer Page Object and fluent interfaces that already exist in this project, for example:
53
- - `app/__tests__/e2e/MedcardRecords/MedcardRecordsPage.ts`
53
+ - `app/__tests__/e2e/OrderHistory/OrderHistoryPage.ts`
54
54
  - shared helpers under `app/__tests__/e2e/_shared/`.
55
55
  - **Seed**:
56
56
  - If a seed test is needed, use `app/__tests__/e2e/seed.spec.ts` as the reference for environment setup.
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Паттерны React/Next UI и Linaria в emedcard-web
2
+ description: Паттерны React/Next UI и стилей (preset)
3
3
  globs: src/ui/**/*.tsx
4
4
  alwaysApply: false
5
5
  ---
@@ -10,8 +10,8 @@ alwaysApply: false
10
10
  - Компонент должен:
11
11
  - быть максимально "тонким" по бизнес‑логике;
12
12
  - делегировать состояние в store/хуки, если оно нужно в нескольких местах;
13
- - использовать SDS‑компоненты как строительные блоки.
14
- - Перед созданием нового UI‑контрола агент должен явно рассмотреть существующие компоненты `@sds/*` и, если есть близкий по назначению, переиспользовать или расширить его вместо написания кастомного с нуля.
13
+ - опираться на **общие UI‑примитивы дизайна проекта** (пакеты или локальная библиотека компонентов), если они есть.
14
+ - Перед новым кастомным контролом поискать готовый или близкий компонент в репозитории / пакетах UI проекта и переиспользовать или расширить его.
15
15
  - Для повторяемой логики создавать `useSomething`‑хуки рядом или в `src/ui/hooks/**`.
16
16
  - При обращении к store, API, общим хелперам и утилитам компоненты и хуки должны использовать только их **public API** (например, `@/store`, `@/store/slices/Foo`, `@/lib/utils`), а не импортировать внутренние файлы реализации других модулей.
17
17
 
@@ -19,28 +19,23 @@ alwaysApply: false
19
19
 
20
20
  Для страницы/крупного блока:
21
21
  - `FeatureBlock.tsx` — JSX и композиция.
22
- - `styles.ts` — Linaria‑стили (`styled`, `css`).
22
+ - `styles.ts` или соседний модуль стилей по конвенции репозитория (CSS Modules, CSS-in-JS, и т.д.).
23
23
  - `index.ts` — реэкспорт (если нужно наружу).
24
24
 
25
25
  Для переиспользуемого компонента:
26
26
  - Папка с именем компонента:
27
27
  - `ComponentName.tsx`
28
- - `styles.ts`
28
+ - файлы стилей по принятой схеме;
29
29
  - опционально: `types.ts`, `hooks.ts`.
30
30
 
31
- # Использование SDS и Linaria
31
+ # Стили и дизайн‑токены
32
32
 
33
- - Для UI‑контролов использовать компоненты из `@sds/*`:
34
- - кнопки, чекбоксы, поля ввода и т.д.
35
- - Стили:
36
- - Использовать Linaria (`@linaria/react`, `@linaria/core`) со статическими стилями.
37
- - Стили располагать в `styles.ts` рядом с компонентом.
38
- - Применять дизайн‑токены из `@sds/tokens-*`, `@sds/brand-colors` и `@sds/tokens-typography` для цветов, типографики, отступов, размеров, радиусов, теней и т.д., а не “магические” значения.
33
+ - Для визуала использовать **тот стек стилей и токенов, который уже в проекте** (переменные, тема, общие классы, дизайн‑пакет).
39
34
  - Избегать:
40
- - inline‑стилей, кроме самых простых случаев;
41
- - дублирования CSS, уже представленного в дизайн‑системе;
42
- - «сырого» CSS вида `#xxxxxx`, `rgb(...)`, произвольных `padding: 17px`, `margin: 23px`, нестандартизированных размеров и теней.
43
- - Если подходящего токена пока нет, допускается ввод локальных примитивов (например, `const spacingMedium = '16px'`) **в одном месте** с последующим переездом на официальные токены @sds при первой возможности.
35
+ - inline‑стилей, кроме простых случаев;
36
+ - дублирования оформления, уже закрытого общими примитивами;
37
+ - «магических» литералов (`#xxxxxx`, произвольные `17px` / `23px`), если в проекте есть токены или масштаб.
38
+ - Если подходящего токена нет локальный примитив **в одном месте** с последующим выравниванием под систему дизайна при возможности.
44
39
 
45
40
  # Пропсы и типизация
46
41
 
@@ -61,7 +56,7 @@ alwaysApply: false
61
56
  # Тестирование UI
62
57
 
63
58
  - Для нетривиальных компонентов добавлять тесты:
64
- - использовать `@testing-library/react` и `@testing-library/jest-dom`.
59
+ - **Testing Library** для React, как принято в проекте;
65
60
  - проверять поведение и бизнес‑правила, а не конкретные CSS‑классы.
66
61
  - В тестах ориентироваться на текст, роли и aria‑атрибуты.
67
62
 
@@ -31,7 +31,7 @@ alwaysApply: false
31
31
  - через `createAsyncThunk` или RTK Query.
32
32
  - внутри thunk:
33
33
  - вызывать API через сервисы из `@/api/services/**`;
34
- - не использовать `fetch`/`axios` напрямую.
34
+ - не вызывать HTTP‑клиент напрямую — только через сервисы `@/api/services/**`.
35
35
  - Сайд‑эффекты (логирование, аналитика, работа с файлами):
36
36
  - выносить в middleware (`src/store/middleware/**`) или специализированные слайсы.
37
37
 
@@ -19,7 +19,7 @@ alwaysApply: false
19
19
  - Каждый сценарий из `*.cases.md` должен иметь соответствующий тест (или набор тестов).
20
20
  - **Нельзя** ослаблять проверки в тестах, если это противоречит бизнес‑ожиданиям из планов.
21
21
  - Предпочтительно использовать:
22
- - page‑objects (например, `MedcardRecordsPage.ts`);
22
+ - page‑objects (например, `OrderHistoryPage.ts`);
23
23
  - общие хелперы из `_shared`.
24
24
 
25
25
  # Именование e2e‑тестов
@@ -29,10 +29,10 @@ alwaysApply: false
29
29
  - Формат заголовков e2e‑тестов (`test(...)` / `it(...)`):
30
30
  - перед текстовым описанием сценария указывается **префикс с номером** в формате: `ПРЕФИКС-XXX Описание сценария`.
31
31
  - `ПРЕФИКС` — аббревиатура из **первых букв слов** тестируемой сущности, записанная **латиницей в верхнем регистре**.
32
- - пример: `MedcardRecords` → `MR`, `RequestForAnalysis` → `RFA`.
32
+ - пример: `OrderHistory` → `OH`, `BillingReport` → `BR`.
33
33
  - `XXX` — порядковый номер теста **с тремя разрядами и лидирующими нулями**: `001`, `002`, `010`, `123` и т.д.
34
34
  - пример полного названия e2e‑теста:
35
- - `test('MR-001 Отображается список записей медкарты', async ({ page }) => { ... })`
35
+ - `test('OH-001 Отображается список заказов', async ({ page }) => { ... })`
36
36
  - внутри одной сущности (`ПРЕФИКС`) номера тестов должны образовывать **непротиворечивую последовательность**, без дубликатов номеров.
37
37
 
38
38
  # data-testid для e2e
@@ -1,12 +1,12 @@
1
1
  ---
2
- description: Unit и интеграционные тесты (Jest, Testing Library)
2
+ description: Unit и интеграционные тесты (Testing Library и runner проекта)
3
3
  globs: src/**/*.test.{ts,tsx}
4
4
  alwaysApply: false
5
5
  ---
6
6
 
7
7
  # Общие правила тестирования
8
8
 
9
- - Фреймворк: **Jest** + **@testing-library/react**.
9
+ - **Runner и матчеры** — как в проекте (часто Jest или Vitest); для компонентов — **@testing-library/react**.
10
10
  - Основная цель тестов:
11
11
  - проверять **поведение и бизнес‑правила**, а не реализацию или внутренние детали.
12
12
  - Именование:
@@ -17,14 +17,14 @@ alwaysApply: false
17
17
 
18
18
  - Использовать `render` из `@testing-library/react`.
19
19
  - Ассерты:
20
- - `@testing-library/jest-dom` (`toBeInTheDocument`, `toHaveTextContent` и т.п.).
20
+ - матчеры DOM для Testing Library, как подключены в проекте (`toBeInTheDocument`, `toHaveTextContent` и т.п.).
21
21
  - Взаимодействия:
22
22
  - `userEvent` из `@testing-library/user-event`.
23
23
 
24
24
  # Изоляция и моки
25
25
 
26
26
  - Для работы с API/store:
27
- - мокать store (через test‑store) или использовать MSW, если это принято.
27
+ - мокать store (через test‑store) или использовать принятый в проекте способ моков HTTP/API.
28
28
  - Не мокать то, что является частью публичного контракта фичи, если это ломает смысл теста.
29
29
 
30
30
  # Мапперы и преобразование данных
@@ -39,7 +39,7 @@ alwaysApply: false
39
39
  - Добавлять тесты для критичных веток логики и edge‑кейсов.
40
40
  - При работе с данными:
41
41
  - использовать **типы респонса** из API (DTO‑типы), а также **целевые доменные типы** из `@/types/**`, не дублировать интерфейсы в тестах;
42
- - по возможности опираться на данные и хендлеры мок‑сервера **MSW** из `app/src/mocks/**`, а не плодить случайные тестовые данные "с нуля".
42
+ - по возможности опираться на данные и обработчики из `src/mocks/**` (или аналог в репо), а не плодить случайные тестовые данные "с нуля".
43
43
  - При написании unit‑тестов рядом с компонентом или модулем:
44
44
  - **не создавать** поддиректорию `__tests__` внутри папки компонента;
45
45
  - именовать файлы тестов с суффиксом `*.spec.ts` / `*.spec.tsx`, а не `*.test.ts` / `*.test.tsx`.