@bonesofspring/ai-rules 0.2.0 → 0.2.2

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.
Files changed (193) hide show
  1. package/README.md +10 -18
  2. package/bin/cli.js +73 -258
  3. package/package.json +3 -4
  4. package/presets/claude/ios-swift/CLAUDE.md +27 -0
  5. package/presets/claude/ios-swift/README.md +29 -0
  6. package/presets/claude/ios-swift/commands/README.md +3 -0
  7. package/presets/claude/ios-swift/rules/README.md +44 -0
  8. package/presets/claude/ios-swift/rules/api-and-data/README.md +9 -0
  9. package/presets/claude/ios-swift/rules/api-and-data/networking.md +49 -0
  10. package/presets/claude/ios-swift/rules/architecture/README.md +10 -0
  11. package/presets/claude/ios-swift/rules/architecture/boundaries.md +33 -0
  12. package/presets/claude/ios-swift/rules/architecture/feature-delivery.md +60 -0
  13. package/presets/claude/ios-swift/rules/stack/README.md +10 -0
  14. package/presets/claude/ios-swift/rules/stack/ios-app-core.md +42 -0
  15. package/presets/claude/ios-swift/rules/stack/swift-conventions.md +51 -0
  16. package/presets/claude/ios-swift/rules/testing/README.md +10 -0
  17. package/presets/claude/ios-swift/rules/testing/ui.md +41 -0
  18. package/presets/claude/ios-swift/rules/testing/unit.md +41 -0
  19. package/presets/claude/ios-swift/rules/tooling-and-review/README.md +11 -0
  20. package/presets/claude/ios-swift/rules/tooling-and-review/code-quality.md +38 -0
  21. package/presets/claude/ios-swift/rules/tooling-and-review/code-review.md +41 -0
  22. package/presets/claude/ios-swift/rules/tooling-and-review/post-change-build.md +31 -0
  23. package/presets/claude/ios-swift/rules/ui-and-accessibility/README.md +10 -0
  24. package/presets/claude/ios-swift/rules/ui-and-accessibility/swiftui.md +61 -0
  25. package/presets/claude/ios-swift/rules/ui-and-accessibility/viewmodels.md +43 -0
  26. package/presets/claude/next/CLAUDE.md +5 -29
  27. package/presets/claude/next/README.md +0 -10
  28. package/presets/claude/next/agents/README.md +0 -125
  29. package/presets/claude/next/commands/README.md +2 -10
  30. package/presets/claude/next/hooks/README.md +2 -5
  31. package/presets/claude/next/rules/README.md +11 -25
  32. package/presets/claude/next/rules/api-and-data/README.md +1 -7
  33. package/presets/claude/next/rules/architecture/README.md +2 -9
  34. package/presets/claude/next/rules/stack/README.md +1 -9
  35. package/presets/claude/next/rules/testing/README.md +1 -9
  36. package/presets/claude/next/rules/tooling-and-review/README.md +1 -14
  37. package/presets/claude/next/rules/ui-and-accessibility/README.md +1 -8
  38. package/presets/claude/next/skills/README.md +1 -11
  39. package/presets/cursor/ios-swift/README.md +17 -0
  40. package/presets/cursor/ios-swift/commands/README.md +3 -0
  41. package/presets/cursor/ios-swift/rules/README.md +33 -0
  42. package/presets/cursor/ios-swift/rules/architecture-boundaries.mdc +34 -0
  43. package/presets/cursor/ios-swift/rules/code-quality-and-refactoring.mdc +39 -0
  44. package/presets/cursor/ios-swift/rules/code-review-mr.mdc +42 -0
  45. package/presets/cursor/ios-swift/rules/feature-delivery-workflow.mdc +61 -0
  46. package/presets/cursor/ios-swift/rules/ios-app-core.mdc +43 -0
  47. package/presets/cursor/ios-swift/rules/networking-services.mdc +49 -0
  48. package/presets/cursor/ios-swift/rules/post-change-build.mdc +32 -0
  49. package/presets/cursor/ios-swift/rules/state-and-viewmodels.mdc +43 -0
  50. package/presets/cursor/ios-swift/rules/swift-conventions.mdc +51 -0
  51. package/presets/cursor/ios-swift/rules/swiftui-ui.mdc +61 -0
  52. package/presets/cursor/ios-swift/rules/tests-ui.mdc +41 -0
  53. package/presets/cursor/ios-swift/rules/tests-unit.mdc +41 -0
  54. package/presets/cursor/next/commands/README.md +1 -49
  55. package/presets/cursor/next/rules/README.md +0 -47
  56. package/presets/cursor/next/rules/api-services.mdc +10 -12
  57. package/presets/cursor/next/rules/architecture-boundaries.mdc +12 -31
  58. package/presets/cursor/next/rules/code-quality-and-refactoring.mdc +4 -5
  59. package/presets/cursor/next/rules/code-review-mr.mdc +7 -14
  60. package/presets/cursor/next/rules/next-app-core.mdc +61 -18
  61. package/presets/cursor/next/rules/no-props-spread.mdc +4 -27
  62. package/presets/cursor/next/rules/playwright-agents.mdc +1 -2
  63. package/presets/cursor/next/rules/react-ui.mdc +3 -32
  64. package/presets/cursor/next/rules/store-rtk.mdc +6 -13
  65. package/presets/cursor/next/rules/tests-unit.mdc +10 -30
  66. package/CHANGELOG.md +0 -22
  67. package/presets/claude/next/agents/accessibility-reviewer.md +0 -65
  68. package/presets/claude/next/agents/api-contract-reviewer.md +0 -69
  69. package/presets/claude/next/agents/build-verifier.md +0 -64
  70. package/presets/claude/next/agents/ci-investigator.md +0 -62
  71. package/presets/claude/next/agents/code-reviewer.md +0 -62
  72. package/presets/claude/next/agents/debugger.md +0 -63
  73. package/presets/claude/next/agents/feature-developer.md +0 -27
  74. package/presets/claude/next/agents/migration-specialist.md +0 -69
  75. package/presets/claude/next/agents/performance-auditor.md +0 -68
  76. package/presets/claude/next/agents/qa-tester.md +0 -56
  77. package/presets/claude/next/agents/security-reviewer.md +0 -64
  78. package/presets/claude/next/agents/solution-architect.md +0 -70
  79. package/presets/claude/next/agents/task-analyst.md +0 -109
  80. package/presets/claude/next/agents/task-router.md +0 -70
  81. package/presets/claude/next/agents/tech-writer.md +0 -60
  82. package/presets/claude/next/agents/unit-test-generator.md +0 -37
  83. package/presets/claude/next/agents/unit-test-healer.md +0 -38
  84. package/presets/claude/next/agents/unit-test-planner.md +0 -62
  85. package/presets/claude/next/commands/feature-continue.md +0 -51
  86. package/presets/claude/next/commands/feature-start.md +0 -30
  87. package/presets/claude/next/commands/task-continue.md +0 -49
  88. package/presets/claude/next/commands/task.md +0 -50
  89. package/presets/claude/next/commands/technical-retro.md +0 -58
  90. package/presets/claude/next/hooks/chain-team-phases.sh +0 -342
  91. package/presets/claude/next/hooks/guard-shell-command.sh +0 -77
  92. package/presets/claude/next/rules/api-and-data/api-services.md +0 -57
  93. package/presets/claude/next/rules/api-and-data/http-client.md +0 -40
  94. package/presets/claude/next/rules/api-and-data/store-rtk.md +0 -65
  95. package/presets/claude/next/rules/architecture/api-public-imports.md +0 -8
  96. package/presets/claude/next/rules/architecture/architecture-boundaries.md +0 -72
  97. package/presets/claude/next/rules/architecture/feature-delivery-workflow.md +0 -79
  98. package/presets/claude/next/rules/architecture/layer-barrel-exports.md +0 -58
  99. package/presets/claude/next/rules/architecture/public-imports.md +0 -46
  100. package/presets/claude/next/rules/architecture/reference-features.md +0 -37
  101. package/presets/claude/next/rules/architecture/types-public-imports.md +0 -8
  102. package/presets/claude/next/rules/stack/arrow-functions.md +0 -45
  103. package/presets/claude/next/rules/stack/navigation-router.md +0 -61
  104. package/presets/claude/next/rules/stack/next-app-core.md +0 -33
  105. package/presets/claude/next/rules/stack/next-app-router.md +0 -36
  106. package/presets/claude/next/rules/stack/no-type-assertion.md +0 -59
  107. package/presets/claude/next/rules/stack/types-jsdoc.md +0 -37
  108. package/presets/claude/next/rules/testing/playwright-agents.md +0 -74
  109. package/presets/claude/next/rules/testing/tests-e2e-structure.md +0 -52
  110. package/presets/claude/next/rules/testing/tests-unit.md +0 -66
  111. package/presets/claude/next/rules/tooling-and-review/agent-team-intake.md +0 -15
  112. package/presets/claude/next/rules/tooling-and-review/agent-team-orchestrator.md +0 -134
  113. package/presets/claude/next/rules/tooling-and-review/code-quality.md +0 -42
  114. package/presets/claude/next/rules/tooling-and-review/code-review-mr.md +0 -67
  115. package/presets/claude/next/rules/tooling-and-review/package-manager.md +0 -11
  116. package/presets/claude/next/rules/tooling-and-review/post-change-lint.md +0 -33
  117. package/presets/claude/next/rules/ui-and-accessibility/component-styles.md +0 -56
  118. package/presets/claude/next/rules/ui-and-accessibility/css-property-order.md +0 -14
  119. package/presets/claude/next/rules/ui-and-accessibility/no-props-spread.md +0 -57
  120. package/presets/claude/next/rules/ui-and-accessibility/react-a11y-coding.md +0 -37
  121. package/presets/claude/next/rules/ui-and-accessibility/react-ui.md +0 -90
  122. package/presets/claude/next/skills/ci-investigation/SKILL.md +0 -36
  123. package/presets/claude/next/skills/code-review/SKILL.md +0 -26
  124. package/presets/claude/next/skills/debug-investigation/SKILL.md +0 -28
  125. package/presets/claude/next/skills/feature-delivery/SKILL.md +0 -15
  126. package/presets/claude/next/skills/playwright-e2e/SKILL.md +0 -31
  127. package/presets/claude/next/skills/technical-retro/SKILL.md +0 -40
  128. package/presets/claude/next/skills/unit-testing/SKILL.md +0 -32
  129. package/presets/claude/next/team/README.md +0 -46
  130. package/presets/claude/next/team/tasks/.gitkeep +0 -1
  131. package/presets/cursor/next/AGENTS.md +0 -43
  132. package/presets/cursor/next/BUGBOT.md +0 -14
  133. package/presets/cursor/next/agents/README.md +0 -158
  134. package/presets/cursor/next/agents/accessibility-reviewer.md +0 -67
  135. package/presets/cursor/next/agents/api-contract-reviewer.md +0 -71
  136. package/presets/cursor/next/agents/build-verifier.md +0 -66
  137. package/presets/cursor/next/agents/ci-investigator.md +0 -64
  138. package/presets/cursor/next/agents/code-reviewer.md +0 -64
  139. package/presets/cursor/next/agents/debugger.md +0 -64
  140. package/presets/cursor/next/agents/feature-developer.md +0 -27
  141. package/presets/cursor/next/agents/migration-specialist.md +0 -71
  142. package/presets/cursor/next/agents/performance-auditor.md +0 -70
  143. package/presets/cursor/next/agents/playwright-test-generator.md +0 -26
  144. package/presets/cursor/next/agents/playwright-test-healer.md +0 -26
  145. package/presets/cursor/next/agents/playwright-test-planner.md +0 -28
  146. package/presets/cursor/next/agents/qa-tester.md +0 -57
  147. package/presets/cursor/next/agents/security-reviewer.md +0 -66
  148. package/presets/cursor/next/agents/solution-architect.md +0 -71
  149. package/presets/cursor/next/agents/task-analyst.md +0 -112
  150. package/presets/cursor/next/agents/task-router.md +0 -71
  151. package/presets/cursor/next/agents/tech-writer.md +0 -62
  152. package/presets/cursor/next/agents/unit-test-generator.md +0 -39
  153. package/presets/cursor/next/agents/unit-test-healer.md +0 -40
  154. package/presets/cursor/next/agents/unit-test-planner.md +0 -64
  155. package/presets/cursor/next/commands/feature-continue.md +0 -19
  156. package/presets/cursor/next/commands/feature-start.md +0 -33
  157. package/presets/cursor/next/commands/task-continue.md +0 -49
  158. package/presets/cursor/next/commands/task.md +0 -50
  159. package/presets/cursor/next/commands/technical-retro.md +0 -81
  160. package/presets/cursor/next/hooks/README.md +0 -8
  161. package/presets/cursor/next/hooks/chain-team-phases.sh +0 -380
  162. package/presets/cursor/next/hooks/guard-shell-command.sh +0 -77
  163. package/presets/cursor/next/hooks.json +0 -17
  164. package/presets/cursor/next/rules/agent-team-intake.mdc +0 -14
  165. package/presets/cursor/next/rules/agent-team-orchestrator.mdc +0 -139
  166. package/presets/cursor/next/rules/api-public-imports.mdc +0 -8
  167. package/presets/cursor/next/rules/arrow-functions.mdc +0 -46
  168. package/presets/cursor/next/rules/css-property-order-stylelint.mdc +0 -16
  169. package/presets/cursor/next/rules/feature-delivery-workflow.mdc +0 -76
  170. package/presets/cursor/next/rules/http-client.mdc +0 -42
  171. package/presets/cursor/next/rules/layer-barrel-exports.mdc +0 -59
  172. package/presets/cursor/next/rules/navigation-router-stack.mdc +0 -62
  173. package/presets/cursor/next/rules/next-app-router.mdc +0 -36
  174. package/presets/cursor/next/rules/no-cross-component-styles-import.mdc +0 -58
  175. package/presets/cursor/next/rules/no-type-assertion-as-import-export.mdc +0 -60
  176. package/presets/cursor/next/rules/package-manager.mdc +0 -16
  177. package/presets/cursor/next/rules/post-change-lint.mdc +0 -38
  178. package/presets/cursor/next/rules/public-imports.mdc +0 -48
  179. package/presets/cursor/next/rules/react-a11y-coding.mdc +0 -37
  180. package/presets/cursor/next/rules/reference-features.mdc +0 -39
  181. package/presets/cursor/next/rules/technical-retro.mdc +0 -12
  182. package/presets/cursor/next/rules/types-jsdoc.mdc +0 -42
  183. package/presets/cursor/next/rules/types-public-imports.mdc +0 -8
  184. package/presets/cursor/next/skills/README.md +0 -15
  185. package/presets/cursor/next/skills/ci-investigation/SKILL.md +0 -36
  186. package/presets/cursor/next/skills/code-review/SKILL.md +0 -26
  187. package/presets/cursor/next/skills/debug-investigation/SKILL.md +0 -28
  188. package/presets/cursor/next/skills/feature-delivery/SKILL.md +0 -15
  189. package/presets/cursor/next/skills/playwright-e2e/SKILL.md +0 -31
  190. package/presets/cursor/next/skills/technical-retro/SKILL.md +0 -40
  191. package/presets/cursor/next/skills/unit-testing/SKILL.md +0 -32
  192. package/presets/cursor/next/team/README.md +0 -104
  193. package/presets/cursor/next/team/tasks/.gitkeep +0 -0
@@ -1,61 +1,42 @@
1
1
  ---
2
2
  description: Архитектурные границы и правила импортов
3
- globs: app/src/**/*
4
- alwaysApply: false
3
+ alwaysApply: true
5
4
  ---
6
5
 
7
6
  # Границы между слоями
8
7
 
9
- - **UI (app/src/ui/**)**:
10
- - Может импортировать: `@/ui/**`, `@/store/**`, типы из `@/types` и enum из `@/types/enums` (**только как в `public-imports.mdc`**), контракт к API — **только** `import … from '@/api'` (**`public-imports.mdc`**).
8
+ - **UI (src/ui/**)**:
9
+ - Может импортировать: `@/ui/**`, `@/store/**`, `@/types/**`, `@/api/services/**` (через публичные интерфейсы).
11
10
  - Не должен:
12
11
  - обращаться к HTTP‑клиенту напрямую;
13
12
  - знать детали DTO backend — только доменные типы.
14
- - **Store (app/src/store/**)**:
15
- - Может импортировать: `@/store/**`, сервисы и публичные сущности API — **только** из `@/api` (**`public-imports.mdc`**), типы из `@/types` и enum из `@/types/enums` (**`public-imports.mdc`**).
13
+ - **Store (src/store/**)**:
14
+ - Может импортировать: `@/store/**`, `@/api/services/**`, `@/types/**`.
16
15
  - Не должен:
17
16
  - зависеть от конкретных UI‑компонентов;
18
17
  - напрямую работать с global/window API.
19
- - Вызовы к backend — только через сервисы, импортируемые из `@/api`; **транспортные** типы ответа и ошибки (из `@/types`, в том же виде, что у прикладного HTTP‑клиента) во thunk допустимы, если так выстроен API‑слой (`http-client.mdc`, `store-rtk.mdc`).
20
- - **API (`app/src/api/**`)** — реализация в `services/**`, `clients/**`, реэкспорт в `app/src/api/index.ts`:
21
- - Внутри слоя: типы из `@/types` и enum из `@/types/enums` (**`public-imports.mdc`**); импорты `@/api/services/**`, `@/api/clients/**`, относительные пути между файлами слоя (`http-client.mdc`, `api-services.mdc`).
18
+ - **API (src/api/services/**)**:
19
+ - Может импортировать: `@/types/**`, общие утилиты.
22
20
  - Не должен:
23
21
  - тянуть в себя UI или store;
24
22
  - смешивать HTTP‑слой и доменный слой — использовать мапперы.
25
23
 
26
- ## UI и обращение к API (`@/api`)
27
-
28
- - По умолчанию сценарии с **изменением серверного состояния** и координация нескольких шагов — через **store** (`createAsyncThunk`, dispatch, паттерн фичи в репозитории).
29
- - Прямой вызов методов сервисов, импортированных из **`@/api`**, из UI допустим только в **узких случаях**: преимущественно **чтение** или действие **без необходимости держать результат в Redux**; те же **доменные типы**, что использовал бы thunk; **не** дублировать уже существующий сценарий из store и **не** протаскивать DTO в компоненты.
30
- - Предпочтительно оформлять такие вызовы так же, как в **соседних фичах** репозитория (хук‑фасад, отдельный хук и т.д.).
31
-
32
- ## Порты и адаптеры (краткая карта)
33
-
34
- - **Входящий адаптер**: UI — ввод пользователя, отображение; зависит от store и доменных типов, не от транспорта.
35
- - **Оркестрация сценариев**: store (slices, thunk) — вызывает сервисы, кладёт в state **доменные** модели после маппинга.
36
- - **Исходящий порт (контракт к backend)**: публичный API **`@/api`** (barrel `app/src/api/index.ts`; реализация — в `app/src/api/services/**` и т.д., см. `public-imports.mdc`).
37
- - **Исходящий адаптер**: общая реализация HTTP в **`app/src/lib/clients/**`** и экземпляры в **`app/src/api/clients/**`**.
38
-
39
- ## Фича как срез
40
-
41
- - Для сложной фичи выравниваются имена и термины (**единый язык** предметной области) в типах, селекторах, сервисах и UI; структура папок — как в соседних фичах репозитория.
42
-
43
24
  # Правила импортов
44
25
 
45
26
  - Всегда использовать алиас `@/...` для импортов между слоями.
46
27
  - Внутри одного модуля/фичи можно использовать относительные импорты, но **без подъёма выше корня фичи** (избегать `../../../`).
47
- - При обращении из компонентов, хуков, утилит и других модулей к чужому слою или фиче использовать только **public API** (barrel/index‑файлы и явно экспортируемые сущности), не делать deep‑импорты внутренних файлов других фич; для регламентированных слоёв — **`layer-barrel-exports.mdc`** и `public-imports.mdc`; для API‑слоя снаружи `app/src/api/**` — **`public-imports.mdc`** (только `@/api`).
28
+ - При обращении из компонентов, хуков, утилит и других модулей к чужому слою или фиче использовать только **public API** (barrel/index‑файлы и явно экспортируемые сущности), не делать deep‑импорты внутренних файлов других фич.
48
29
  - При добавлении нового кода проверять:
49
30
  - если модуль переиспользуемый — он должен зависеть только от более "низких" слоёв (types, utils, api), но не от страниц.
50
31
 
51
32
  # Организация фич
52
33
 
53
34
  - Для сложных фич (например, `OrderCheckout`):
54
- - Страница: `app/src/ui/pages/OrderCheckoutPage/**`.
35
+ - Страница: `src/ui/pages/OrderCheckoutPage/**`.
55
36
  - Локальные компоненты: поддиректории `components/**` внутри страницы.
56
- - Связанный store: `app/src/store/slices/OrderCheckout/**`.
57
- - API: `app/src/api/services/OrdersApi/OrderCheckout/**` (имя корневого сервиса взять из принятой в проекте схемы).
58
- - Типы: `app/src/types/**` с экспортом через barrel **`app/src/types/index.ts`** (`public-imports.mdc`).
37
+ - Связанный store: `src/store/slices/OrderCheckout/**`.
38
+ - API: `src/api/services/OrdersApi/OrderCheckout/**` (имя корневого сервиса взять из принятой в проекте схемы).
39
+ - Типы: `src/types/OrderCheckout.types.ts` или аналогичный файл.
59
40
 
60
41
  # Требование к агенту
61
42
 
@@ -35,11 +35,10 @@ alwaysApply: true
35
35
  - сначала локально улучшить архитектуру минимальными шагами;
36
36
  - оставить код в консистентном состоянии.
37
37
 
38
- # Линтеры
39
-
40
- Lint/stylelint — только **`post-change-lint.mdc`**; ESLint config: `app/eslint.config.mjs`. Отключение правила (`eslint-disable`) — только **точечно** (строка/небольшой блок) с кратким комментарием «зачем».
41
-
42
38
  # Требование к агенту
43
39
 
44
- - **Boy scout rule:** оставлять модуль немного лучше, чем до изменения (простые, безопасные улучшения).
40
+ При каждом изменении:
41
+ - Поддерживать принцип **“boy scout rule”**:
42
+ - оставлять модуль в немного лучшем состоянии, чем до изменения (простые, безопасные улучшения).
45
43
  - Не жертвовать архитектурой и слоями ради краткости реализации.
44
+
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: Требования к code review агентами Cursor для merge requests
3
- alwaysApply: false
3
+ alwaysApply: true
4
4
  ---
5
5
 
6
6
  # Code review merge requests
@@ -11,17 +11,16 @@ alwaysApply: false
11
11
 
12
12
  - **Что обязан проверить агент**
13
13
  - **Архитектура и слои**:
14
- - Соблюдение правил из `architecture-boundaries.mdc`, `next-app-core.mdc` и при сетевых изменениях — `http-client.mdc`:
15
- - UI (`app/src/ui/**`) не ходит напрямую в HTTP‑клиент и не знает DTO.
16
- - Store (`app/src/store/**`) не зависит от UI; границы транспортных типов и ошибок `store-rtk.mdc` / `http-client.mdc`.
17
- - API (`app/src/api/**`) не тянет UI/store, использует мапперы; без прямого `fetch` в сервисах (кроме оговорённых исключений).
14
+ - Соблюдение правил из `architecture-boundaries.mdc` и `next-app-core.mdc`:
15
+ - UI (`src/ui/**`) не ходит напрямую в HTTP‑клиент и не знает DTO.
16
+ - Store (`src/store/**`) не зависит от UI и не работает с "сырыми" HTTP.
17
+ - API (`src/api/services/**`) не тянет UI/store, использует мапперы.
18
18
  - **Импорты и организация кода**:
19
19
  - Использование алиаса `@/...` вместо относительных импортов выше по дереву.
20
- - Отсутствие deep‑импортов во внешние фичи; использование только public API; в файлах вне `app/src/api/**` импорты из API — только `from '@/api'` (`public-imports.mdc`, дублирует ESLint).
21
- - При новых/изменённых модулях в регламентированных слоях — реэкспорт публичных символов в корневой barrel по **`layer-barrel-exports.mdc`**.
20
+ - Отсутствие deep‑импортов во внешние фичи; использование только public API.
22
21
  - Размещение новых файлов в корректных слоях и директориях фич.
23
22
  - **Типы и TS‑строгость**:
24
- - Не допускать новых `any`; предпочитать доменные типы из `@/types` (barrel, см. `public-imports.mdc`).
23
+ - Не допускать новых `any`; предпочитать доменные типы из `src/types/**`.
25
24
  - Проверять корректность пропсов/возвращаемых типов, особенно в UI и API‑слое.
26
25
  - **UI и стили**:
27
26
  - Для компонентов и стилей сверяться с `react-ui.mdc` и `next-app-core.mdc`:
@@ -31,13 +30,7 @@ alwaysApply: false
31
30
  - Проверять, что для нетривиальных изменений:
32
31
  - либо обновлены/добавлены unit‑тесты (`tests-unit.mdc`),
33
32
  - либо e2e‑сценарии/спеки отражают новую логику (`playwright-agents.mdc`, `tests-e2e-structure.mdc`).
34
- - При правках **общего HTTP‑клиента** — наличие/актуальность **behavior‑тестов клиента** (`http-client.mdc`, `tests-unit.mdc`).
35
33
  - Указывать, какие именно тесты стоит добавить или поправить.
36
- - **Линтеры (обязательно)** — **`post-change-lint.mdc`**:
37
- - Перед финализацией отчёта по ревью и после любых правок по итогам ревью: полный прогон **`lint:js`** и **`lint:css`** из `app/`.
38
- - В отчёт включить **все сообщения ESLint и Stylelint (errors и warnings)** по файлам из диффа MR/ветки; запуск — по всему проекту, фильтрация вывода — к путям из `git diff`.
39
- - Не считать ревью/правки завершёнными, пока линтеры не проходят или не зафиксирован блокер в ответе.
40
- - Полная валидация как в CI: **`lint`** (= `lint:js` + `lint:css` + `type-check`) — уместна перед итогом крупного MR.
41
34
 
42
35
  - **Глубина и формат ревью**
43
36
  - Фокус на **изменениях MR** (дифф относительно целевой ветки), а не на всём проекте.
@@ -5,30 +5,73 @@ alwaysApply: true
5
5
 
6
6
  # Стек и окружение
7
7
 
8
- Конкретные версии — **из `package.json` и конфигов целевого репозитория**. Рамка preset: Next.js, React, TypeScript; runner/e2e/mocks/UI/APM как заведено в репо.
8
+ Конкретные версии пакетов и инструментов — **из `package.json` и конфигов целевого репозитория**. Ниже — рамка preset (Next.js + React + TypeScript), без привязки к конкретному вендору UI, моков или APM:
9
9
 
10
- # Структура проекта
10
+ - **Фреймворк:** Next.js, React, TypeScript (strict — если включён в проекте).
11
+ - **Сборка и Node:** как задано в репозитории.
12
+ - **Тесты:** unit/integration — runner и библиотеки проекта; e2e — инструмент проекта (правила для агентов Playwright — в отдельных файлах preset).
13
+ - **Моки HTTP/API:** если приняты в репо — повторять существующую схему (каталоги, регистрация, точка входа).
14
+ - **Стили и UI:** способ стилизации и **дизайн‑система / токены** — как уже заведено в коде; приоритет общим примитивам и токенам вместо разрозненных «магических» значений.
15
+ - **Наблюдаемость:** только если уже подключена в проекте — централизованно (клиент, обёртки), без дублирования в каждом методе.
11
16
 
12
- - `app/` корень Next.js; `app/src/**` — код; `app/__tests__/e2e/**` — e2e.
13
- - `app/tsconfig.json`: `baseUrl: "."`, `paths: { "@/*": ["./src/*"] }`.
14
- - **Требование:** `@/*` вместо относительных импортов выше по дереву.
17
+ # Структура проекта (верхний уровень)
18
+
19
+ - `app/` корень Next.js приложения.
20
+ - `app/src/**` — исходный код приложения.
21
+ - `app/__tests__/e2e/**` — e2e‑тесты и планы.
22
+ - `app/tsconfig.json`:
23
+ - `baseUrl: "."`
24
+ - `paths: { "@/*": ["./src/*"] }`
25
+
26
+ **Требование:** во всех новых изменениях использовать алиас `@/*` вместо относительных импортов выше по дереву.
15
27
 
16
28
  # Архитектурные слои
17
29
 
18
- | Слой | Каталог | Детали |
19
- |------|---------|--------|
20
- | UI | `app/src/ui/**` (pages, components) | `react-ui.mdc`, `architecture-boundaries.mdc` |
21
- | Store | `app/src/store/**` (slices, middleware) | `store-rtk.mdc` |
22
- | API | `app/src/api/**` (services, clients, barrel) | `api-services.mdc`, `http-client.mdc` |
23
- | HTTP | `app/src/lib/clients/**`, `app/src/api/clients/**` | `http-client.mdc` |
24
- | Types | `app/src/types/**` | `public-imports.mdc`, `types-jsdoc.mdc` |
25
- | Mocks | `app/src/mocks/**` | по схеме репозитория |
30
+ - **UI слой** (`src/ui/**`):
31
+ - `src/ui/pages/**` — страницы и контейнеры.
32
+ - `src/ui/components/**` переиспользуемые компоненты.
33
+ - **Store слой** (`src/store/**`):
34
+ - `src/store/slices/**` — модули состояния (в этом preset Redux Toolkit; подробности в `store-rtk.mdc`).
35
+ - `src/store/middleware/**` middleware для сайд‑эффектов (например, файлы, аналитика).
36
+ - **API слой** (`src/api/services/**`):
37
+ - Сервисы и мапперы, инкапсулирующие HTTP‑логику.
38
+ - **Типы** (`src/types/**`):
39
+ - Общие доменные типы продукта (сущности предметной области, агрегаты и т.д.).
40
+ - **Моки и тестовые данные** (`src/mocks/**`):
41
+ - По структуре и назначению — как принято в репозитории.
42
+
43
+ # Общие архитектурные принципы
26
44
 
27
- Границы слоёв, порты/адаптеры, UI→API — **`architecture-boundaries.mdc`**. Импорты `@/types`, `@/api` — **`public-imports.mdc`**.
45
+ - **Чёткое разделение слоёв**:
46
+ - UI знает только о доменных типах и публичных интерфейсах store/API.
47
+ - Store знает о доменных типах и API‑сервисах.
48
+ - API знает о транспортном слое (HTTP, выбранный клиент) и DTO.
49
+ - **Никаких "проникновений" слоёв**:
50
+ - UI не обращается к API напрямую — только через store или абстракции сервисов.
51
+ - Store не работает напрямую с "сырыми" HTTP‑ответами — только через мапперы.
52
+ - **Типы — источник правды**:
53
+ - Новые сущности описывать в `src/types/**`, переиспользовать, а не дублировать типы по слоям.
54
+ - Не использовать `any`; при необходимости — `unknown` + безопасное сужение типа.
55
+
56
+ # Кодстайл и качества кода
57
+
58
+ - Следовать конфигам линтеров и форматтера **проекта** (`eslint`, `prettier`, `stylelint` — какие есть в репо).
59
+ - Поддерживать:
60
+ - KISS, DRY, SOLID (в разумных пределах для фронта).
61
+ - Модульность и переиспользование через компоненты, хуки, слайсы, сервисы.
62
+ - Визуальную консистентность за счёт принятых в проекте UI‑примитивов и токенов, а не разовых литералов в стилях.
63
+ - При добавлении нового кода **искать и копировать существующие паттерны**:
64
+ - Для страниц — аналогичные файлы в `src/ui/pages/**`.
65
+ - Для блоков — компоненты в `src/ui/components/**`.
66
+ - Для API — сервисы в `src/api/services/**`.
67
+ - Для состояния — слайсы в `src/store/slices/**`.
28
68
 
29
69
  # Работа агента
30
70
 
31
- - Архитектура и импорты: `architecture-boundaries.mdc`, `public-imports.mdc`
32
- - Фичи: `feature-delivery-workflow.mdc` + skill `feature-delivery`
33
- - После правок: `post-change-lint.mdc`; менеджер пакетов: `package-manager.mdc`
34
- - Копировать паттерны соседних файлов в целевом слое; не использовать `any` (предпочитать `unknown` + сужение)
71
+ При генерации кода:
72
+ - Определить целевой слой (UI/store/API/типизация/тесты).
73
+ - Найти в соответствующей директории похожие примеры и **копировать архитектурный паттерн** (структура файлов, типы, именование).
74
+ - Не упрощать архитектуру в ущерб существующим слоям (не тянуть API в UI, не описывать "DTO" прямо в компонентах).
75
+ - Избегать использования `any` при типизации кода; при необходимости использовать `unknown` с последующим безопасным сужением типов.
76
+ - После создания или редактирования любых файлов **обязательно проверять проект на ошибки TypeScript и ESLint** (либо точечно по изменённым файлам, либо по всему проекту) и устранять найденные проблемы, если это возможно без изменения бизнес‑логики).
77
+
@@ -1,14 +1,11 @@
1
1
  ---
2
2
  description: Избегать спред-а пропов при передаче в компоненты
3
- globs: app/src/**/*.tsx
4
- alwaysApply: false
3
+ alwaysApply: true
5
4
  ---
6
5
 
7
6
  # Не использовать спред пропов при передаче в компоненты
8
7
 
9
- При вызове **пользовательских** React-компонентов (имя с заглавной буквы: `IconBox`, `TextField`, ваши `FooBar`) **передавать пропы явно**, а не через spread (`{...props}`, `{...obj}`).
10
-
11
- **Агентам и при ревью:** не «упрощать» JSX через объект с последующим spread — это нарушение. Если ветвление по пропам длинное, используйте два явных JSX-блока (`condition ? <A … /> : <B … />`) или отдельные маленькие компоненты, а не `{...mergedProps}`.
8
+ При вызове React-компонентов **передавать пропы явно**, а не через spread (`{...props}`).
12
9
 
13
10
  ## Почему
14
11
 
@@ -16,11 +13,6 @@ alwaysApply: false
16
13
  - Упрощает рефакторинг и поиск использований.
17
14
  - Снижает риск случайно пробросить лишние или устаревшие пропы.
18
15
 
19
- ## Проверка в репозитории
20
-
21
- - Для файлов `app/src/ui/**/*.tsx` включено ESLint-правило `react/jsx-props-no-spreading` (`app/eslint.config.mjs`): несоблюдение увидит линтер и CI.
22
- - Легитимное исключение в конкретном месте — **однострочный** `eslint-disable-next-line react/jsx-props-no-spreading` с кратким комментарием «почему»; для редких обёрток допустим disable на файл (как в `PromocodeInput`).
23
-
24
16
  ## Примеры
25
17
 
26
18
  ```tsx
@@ -31,10 +23,6 @@ return <Child {...commonProps} />
31
23
  // ❌ Плохо
32
24
  return <Child {...props} />
33
25
 
34
- // ❌ Плохо (spread из соседнего модуля стилей тоже не оправдание)
35
- const iconProps = cond ? { name, size: 'm' } : { name, size: 'm', ...styles.IconBoxAccent }
36
- return <IconBox {...iconProps} />
37
-
38
26
  // ✅ Хорошо
39
27
  return (
40
28
  <Child
@@ -43,20 +31,9 @@ return (
43
31
  c={c}
44
32
  />
45
33
  )
46
-
47
- // ✅ Хорошо — явные пропсы по веткам
48
- return cond ? (
49
- <IconBox name={name} size="m" variant="warning" />
50
- ) : (
51
- <IconBox
52
- customColors={styles.IconBoxAccent.customColors}
53
- name={name}
54
- size="m"
55
- />
56
- )
57
34
  ```
58
35
 
59
36
  ## Исключения
60
37
 
61
- - Передача пропов в **нативный** DOM-элемент (`<div {...rest} />`) допустима, если `rest` содержит только валидные HTML-атрибуты.
62
- - Делегирование пропов в обёртку (wrapper) допустимо, если это явно документировано и обосновано; при необходимости пометьте файл или строку через ESLint-disable, как выше.
38
+ - Передача всех пропов в нативный DOM-элемент (`<div {...rest} />`) допустима, если `rest` содержит только валидные HTML-атрибуты.
39
+ - Делегирование пропов в обёртку (wrapper) допустимо, если это явно документировано и обосновано.
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  description: Playwright Agents (planner/generator/healer) configuration for e2e structure in app/__tests__/e2e
3
- globs: app/__tests__/e2e/**/*
4
- alwaysApply: false
3
+ alwaysApply: true
5
4
  ---
6
5
 
7
6
  # Playwright Agents in this project
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: Паттерны React/Next UI и стилей (preset)
3
- globs: app/src/ui/**/*.tsx,app/src/ui/**/*.ts
3
+ globs: src/ui/**/*.tsx
4
4
  alwaysApply: false
5
5
  ---
6
6
 
@@ -22,42 +22,14 @@ alwaysApply: false
22
22
  - `styles.ts` или соседний модуль стилей — по конвенции репозитория (CSS Modules, CSS-in-JS, и т.д.).
23
23
  - `index.ts` — реэкспорт (если нужно наружу).
24
24
 
25
- ## Дочерние компоненты (`./components`)
26
-
27
- - Локальные подкомпоненты, используемые только этим блоком, выносятся в **`./components/<ComponentName>/`** относительно папки родительского компонента (не оставлять крупные куски JSX и «внутренние» компоненты в том же файле, что и родитель).
28
- - У каждого такого подкомпонента — **своя** папка с тем же именем, что и публичное имя компонента:
29
- - `ComponentName.tsx` — разметка и композиция;
30
- - `styles.ts` — только стили этого подкомпонента (см. `no-cross-component-styles-import.mdc`: не тянуть `styles` соседних компонентов);
31
- - при необходимости — `ComponentName.data.ts`, `ComponentName.utils.ts`, `ComponentName.hooks.ts` по тем же правилам префикса, что и у родителя;
32
- - опционально `index.ts` с реэкспортом.
33
- - Родитель импортирует подкомпонент из `./components/...`, а не держит его реализацию inline.
34
-
35
25
  Для переиспользуемого компонента:
36
26
  - Папка с именем компонента:
37
27
  - `ComponentName.tsx`
38
28
  - файлы стилей по принятой схеме;
39
- - опционально: `types.ts`, `ComponentName.hooks.ts` (см. ниже про префикс).
40
-
41
- ## Вспомогательные модули рядом с компонентом (именование)
42
-
43
- **Префикс имени файла = публичное имя компонента** (как у `ComponentName.tsx` в этой папке), в **PascalCase**. Не вводить отдельные «говорящие» имена файлов по смыслу содержимого (`analysisPreparationIconMap.ts`, `buildAnalysisIdToNameMap.ts` и т.п.) — так теряется связь с компонентом и плодятся одноразовые названия.
44
-
45
- **Суффикс по роли:**
46
-
47
- | Суффикс | Назначение | Примеры содержимого |
48
- |--------|------------|---------------------|
49
- | `ComponentName.data.ts` | Статические данные и конфигурация для UI | мапы `id → иконка/лейбл`, константы списков, таблицы соответствий для отображения |
50
- | `ComponentName.utils.ts` | Чистые функции без React | форматирование, предобработка пропсов/данных для рендера, `build…`/`map…`‑хелперы |
51
- | `ComponentName.hooks.ts` | Хуки, используемые только этим блоком | локальные `use…` (если не вынесены в `src/ui/hooks/**`) |
52
-
53
- - Несколько констант/мапов или несколько функций — **по-прежнему один** `.data.ts` и один `.utils.ts`, не дробить по «темам» отдельными файлами без веской причины (размер, разные зоны ответственности на уровне подкомпонентов).
54
- - Если логика принадлежит **подкомпоненту** в подпапке (`components/Child/Child.tsx`), те же правила применяются к **`Child.data.ts`**, **`Child.utils.ts`** относительно этого подкомпонента.
55
- - Тесты для утилит и данных — рядом в `__tests__/` или с суффиксом `.test.ts`, согласно `tests-unit.mdc`, с тем же префиксом (`RequestForAnalysisRecommendations.utils.test.ts` и т.д.).
29
+ - опционально: `types.ts`, `hooks.ts`.
56
30
 
57
31
  # Стили и дизайн‑токены
58
32
 
59
- - **Корневой** styled-элемент компонента в соседнем `styles` — **`Root`** (`<s.Root>`). Подробнее: `no-cross-component-styles-import.mdc`.
60
- - Порядок объявлений в CSS / `styled` — как требует Stylelint: см. `css-property-order-stylelint.mdc`.
61
33
  - Для визуала использовать **тот стек стилей и токенов, который уже в проекте** (переменные, тема, общие классы, дизайн‑пакет).
62
34
  - Избегать:
63
35
  - inline‑стилей, кроме простых случаев;
@@ -67,11 +39,10 @@ alwaysApply: false
67
39
 
68
40
  # Пропсы и типизация
69
41
 
70
- - **Не передавать пропы в компоненты через spread** (`<Foo {...x} />`). Только явные атрибуты; подробности и исключения — `no-props-spread.mdc` (в `app/src/ui` это дополнительно ловит ESLint).
71
42
  - Описывать пропсы через `type Props = { ... }` или `interface Props { ... }`.
72
43
  - Не использовать `any`; при необходимости:
73
44
  - обобщения (`<T>`), `unknown`, тип‑предикаты и user‑defined type guards.
74
- - Для доменных сущностей использовать типы из `@/types` (и enum из `@/types/enums`), а не описывать их заново (`public-imports.mdc`).
45
+ - Для доменных сущностей использовать типы из `@/types/**`, а не описывать их заново.
75
46
 
76
47
  # Логика и side effects
77
48
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: Redux Toolkit и состояние приложения
3
- globs: app/src/store/**/*.ts
3
+ globs: src/store/**/*.ts
4
4
  alwaysApply: false
5
5
  ---
6
6
 
@@ -16,7 +16,7 @@ alwaysApply: false
16
16
 
17
17
  # Структура слайсов
18
18
 
19
- - Каждый доменный модуль — свой слайс в `app/src/store/slices/**`.
19
+ - Каждый доменный модуль — свой слайс в `src/store/slices/**`.
20
20
  - Слайс экспортирует:
21
21
  - `reducer` по умолчанию;
22
22
  - `actions` именованным экспортом;
@@ -30,23 +30,17 @@ alwaysApply: false
30
30
  - Асинхронные запросы:
31
31
  - через `createAsyncThunk` или RTK Query.
32
32
  - внутри thunk:
33
- - вызывать API через сервисы, импортированные из `@/api` (**`public-imports.mdc`**);
34
- - не вызывать HTTP‑клиент напрямую — только через эти сервисы.
33
+ - вызывать API через сервисы из `@/api/services/**`;
34
+ - не вызывать HTTP‑клиент напрямую — только через сервисы `@/api/services/**`.
35
35
  - Сайд‑эффекты (логирование, аналитика, работа с файлами):
36
- - выносить в middleware (`app/src/store/middleware/**`) или специализированные слайсы.
36
+ - выносить в middleware (`src/store/middleware/**`) или специализированные слайсы.
37
37
 
38
38
  # Типизация
39
39
 
40
40
  - Использовать `RootState`, `AppDispatch` и типизированные хуки `useAppDispatch`, `useAppSelector` (если есть).
41
- - **HTTP и ошибки API**:
42
- - не импортировать типы **сторонних HTTP‑библиотек**, которых нет в актуальных зависимостях и существующих слайсах (ориентир — **`package.json`** и соседние файлы);
43
- - когда сервис возвращает **обёртку ответа** прикладного клиента — использовать **соответствующий тип из `@/types`** (как в barrel и в аналогичных thunk’ах);
44
- - при ошибках после вызова сервиса — опираться на **тот же класс/контракт ошибки транспорта**, что использует общий клиент (из `@/types`), и разбирать тело/статус **по полям текущей реализации**, а не по воображаемому API;
45
- - в **`catch`** предпочитать **`instanceof`** на класс ошибки транспорта из `@/types` (если он есть в коде) вместо голого `as`, когда это выразимо без шума (см. `no-type-assertion-as-import-export.mdc`).
46
41
  - Для сущностей:
47
- - доменные типы (включая вычисляемые поля) определять в `app/src/types/**`, экспортировать через barrel и импортировать в слайсы из `@/types` как **источник правды** для структуры данных (`public-imports.mdc`);
42
+ - доменные типы (включая вычисляемые поля) определять в `@/types/**` и импортировать в слайсы как **источник правды** для структуры данных;
48
43
  - избегать дублирования описаний сущностей в нескольких местах.
49
- - **Граница домена**: в **state** хранить доменные модели; тип **обёртки ответа клиента** допустим как тип **возвращаемого значения thunk** или промежуточно до маппинга — без дублирования DTO в полях state без нужды (согласовано с `api-services.mdc` и `http-client.mdc`).
50
44
 
51
45
  # Тестирование слайсов
52
46
 
@@ -62,5 +56,4 @@ alwaysApply: false
62
56
  - Не класть логику API внутрь редюсеров/компонентов.
63
57
  - Строго типизировать state и actions.
64
58
  - Использовать единый стиль именования actions и селекторов, как в существующих слайсах.
65
- - При работе с ошибками и ответами HTTP опираться на **`http-client.mdc`** и контракты из `@/types`, а не на типы внешних HTTP‑библиотек вне зависимостей проекта.
66
59
 
@@ -1,31 +1,17 @@
1
1
  ---
2
2
  description: Unit и интеграционные тесты (Testing Library и runner проекта)
3
- globs:
4
- - app/src/**/*.spec.{ts,tsx}
5
- - app/src/**/*.test.{ts,tsx}
3
+ globs: src/**/*.test.{ts,tsx}
6
4
  alwaysApply: false
7
5
  ---
8
6
 
9
7
  # Общие правила тестирования
10
8
 
11
- - **Имена файлов:** для **новых** тестов использовать суффикс **`*.spec.ts` / `*.spec.tsx`**. Существующие **`*.test.ts` / `*.test.tsx`** не переименовывать без отдельной задачи (легаси).
12
9
  - **Runner и матчеры** — как в проекте (часто Jest или Vitest); для компонентов — **@testing-library/react**.
13
10
  - Основная цель тестов:
14
11
  - проверять **поведение и бизнес‑правила**, а не реализацию или внутренние детали.
15
- - **Именование unit‑тестов** (строки в `describe` / `it` / `test`):
16
- - формулировки **только на русском языке** понятные бизнес‑фразы (что проверяется и какой ожидается результат);
17
- - **каждое предложение** в названии **начинается с заглавной буквы** том числе после `.`, `!`, `?` и при нескольких предложениях в одной строке); первая буква всей строки — тоже заглавная.
18
- - **Проверка в CI:** ESLint (`jest/valid-title` в `app/eslint.config.mjs`) требует, чтобы строка начиналась с русской заглавной (А–Я, Ё), и запрещает пробел после точки, за которым сразу идёт строчная буква (типичный случай нарушения «с заглавной после точки»).
19
-
20
- ```typescript
21
- // ✅ Хорошо
22
- it('Возвращает пустой список. Пользователь не авторизован', () => {})
23
- it('При ошибке сети показывается сообщение об ошибке', () => {})
24
-
25
- // ❌ Плохо (не с заглавной после точки; или не русский)
26
- it('Возвращает пустой список. пользователь не авторизован', () => {})
27
- it('Returns empty list when user is guest', () => {})
28
- ```
12
+ - Именование:
13
+ - названия `describe` / `it` / `test` и любые человекочитаемые описания в тестах **должны быть на русском языке**, формулироваться как понятные бизнес‑фразы (что именно ожидается от системы).
14
+ - строки в `describe` / `it` / `test` **должны начинаться с заглавной буквы**.
29
15
 
30
16
  # Тесты компонентов
31
17
 
@@ -41,11 +27,6 @@ it('Returns empty list when user is guest', () => {})
41
27
  - мокать store (через test‑store) или использовать принятый в проекте способ моков HTTP/API.
42
28
  - Не мокать то, что является частью публичного контракта фичи, если это ломает смысл теста.
43
29
 
44
- # HTTP‑клиент
45
-
46
- - При изменении **реализации общего HTTP‑клиента** (разбор тел, заголовки, ветки ошибок, 401/refresh, `FormData`, `blob` и т.п.) — **обновить или добавить behavior‑тесты** рядом с модулем клиента в `app/src/lib/clients/**` (предпочтительно `*.spec.ts`; легаси `*.test.ts` — не трогать без задачи).
47
- - Проверять смысловые ветки: успешный JSON, HTTP‑ошибка, сеть, релевантные для проекта сценарии авторизации.
48
-
49
30
  # Мапперы и преобразование данных
50
31
 
51
32
  - Функции маппинга данных (DTO -> доменная модель и обратно), особенно содержащие вычисляемые поля и ветвления, должны быть покрыты unit‑тестами.
@@ -54,13 +35,12 @@ it('Returns empty list when user is guest', () => {})
54
35
  # Требование к агенту
55
36
 
56
37
  При добавлении тестов:
57
- - Следовать существующей структуре и паттернам тестов в репозитории: файл `*.spec.ts(x)` рядом с модулем или в общем каталоге тестов — как в соседних фичах.
38
+ - Следовать существующей структуре и паттернам тестов в `src/**/__tests__/**` или рядом с компонентом.
58
39
  - Добавлять тесты для критичных веток логики и edge‑кейсов.
59
40
  - При работе с данными:
60
- - использовать **типы респонса** из API (DTO‑типы), а также **целевые доменные типы** из `@/types`, не дублировать интерфейсы в тестах;
61
- - по возможности опираться на данные и обработчики из `app/src/mocks/**` (или аналог в репо), а не плодить случайные тестовые данные "с нуля".
62
- - Размещение:
63
- - для **компонентов UI** — **не создавать** поддиректорию `__tests__` внутри папки компонента; тест — соседний `*.spec.tsx`.
64
- - в **других модулях** (например `api/services`) допустима уже существующая схема с `__tests__` не ломать ради единообразия с UI.
65
- - **новые** файлы — `*.spec.ts` / `*.spec.tsx` (см. блок «Имена файлов» выше).
41
+ - использовать **типы респонса** из API (DTO‑типы), а также **целевые доменные типы** из `@/types/**`, не дублировать интерфейсы в тестах;
42
+ - по возможности опираться на данные и обработчики из `src/mocks/**` (или аналог в репо), а не плодить случайные тестовые данные "с нуля".
43
+ - При написании unit‑тестов рядом с компонентом или модулем:
44
+ - **не создавать** поддиректорию `__tests__` внутри папки компонента;
45
+ - именовать файлы тестов с суффиксом `*.spec.ts` / `*.spec.tsx`, а не `*.test.ts` / `*.test.tsx`.
66
46
 
package/CHANGELOG.md DELETED
@@ -1,22 +0,0 @@
1
- # Changelog
2
-
3
- ## 0.2.0
4
-
5
- ### Breaking
6
-
7
- - **Import rules merged:** `types-public-imports.mdc` and `api-public-imports.mdc` → **`public-imports.mdc`** (Claude: `architecture/public-imports.md`). Old filenames remain as deprecated stubs for one release cycle.
8
- - **`feature-delivery-flow.mdc` removed** — content merged into `feature-delivery-workflow.mdc`.
9
- - **`agent-team-intake`** no longer always-on (Cursor: `alwaysApply: false`; Claude: `paths:` on commands/team). Use orchestrator or `/task`.
10
-
11
- ### Changed
12
-
13
- - Slimmed always-on rules: `next-app-core`, `code-quality-and-refactoring`, `post-change-lint`, `package-manager` (~9 KB baseline vs ~21 KB).
14
- - Narrowed globs: `css-property-order-stylelint`, `no-type-assertion-as-import-export`, `reference-features`, `public-imports`.
15
- - `css-property-order` stub — property list delegated to Stylelint `--fix`.
16
- - Slimmed `task-router` agent; pipeline JSON examples moved to `agents/README.md`.
17
- - Agents reference skills as SSOT; scoped lint for `feature-developer` when next step is `build-verifier`.
18
- - Orchestrator: explicit fast-path when to skip pipeline.
19
-
20
- ## 0.1.42
21
-
22
- Prior releases — see git history.
@@ -1,65 +0,0 @@
1
- ---
2
- name: accessibility-reviewer
3
- description: Accessibility review specialist. Audits UI changes for keyboard navigation, ARIA, focus management, contrast, and screen reader semantics. Writes a11y-review.md only; never edits production code.
4
- model: inherit
5
- ---
6
-
7
- You are an accessibility reviewer for a Next.js React frontend.
8
-
9
- ## Inputs
10
-
11
- 1. `.claude/team/tasks/<slug>/brief.md` — acceptance criteria and UI scope.
12
- 2. `.claude/team/tasks/<slug>/decomposition.md` — UI-related tasks.
13
- 3. Git diff for changed UI files under `app/src/ui/**`.
14
- 4. `rules/ui-and-accessibility/react-ui.md` and project a11y conventions.
15
-
16
- ## Review scope
17
-
18
- - Keyboard navigation and focus order (Tab, Shift+Tab, Escape, Enter).
19
- - Focus trap in modals/drawers; focus return on close.
20
- - ARIA roles, labels, `aria-*` attributes, live regions.
21
- - Semantic HTML vs div-only interactive elements.
22
- - Form labels, error announcements, required field indication.
23
- - Color contrast and non-color-only state indicators (where inferable from code/styles).
24
- - Skip links, heading hierarchy, landmark regions.
25
-
26
- ## Output
27
-
28
- Write `.claude/team/tasks/<slug>/a11y-review.md`:
29
-
30
- ```markdown
31
- # Accessibility review: <slug>
32
-
33
- ## Verdict
34
- PASS | PASS_WITH_NOTES | FAIL
35
-
36
- ## Critical (must fix)
37
- - [file:line] Issue — impact — fix direction
38
-
39
- ## Warnings (should fix)
40
- - ...
41
-
42
- ## Suggestions
43
- - ...
44
-
45
- ## AC coverage
46
- | Criterion | Status | Notes |
47
- |-----------|--------|-------|
48
- ```
49
-
50
- ## On completion
51
-
52
- Update `status.json`:
53
-
54
- ```json
55
- {
56
- "slug": "<slug>",
57
- "currentAgent": "accessibility-reviewer",
58
- "state": "completed",
59
- "updatedAt": "<ISO8601>"
60
- }
61
- ```
62
-
63
- If **FAIL**, set `"state": "changes_requested"` and list specific fixes for `feature-developer`.
64
-
65
- Do not modify production code or tests.