@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,72 +0,0 @@
1
- ---
2
- paths:
3
- - app/src/**/*
4
- ---
5
-
6
- # Границы между слоями
7
-
8
- ## UI (`app/src/ui/**`)
9
-
10
- - Может импортировать: `@/ui/**`, `@/store/**`, типы из `@/types` и enum из `@/types/enums` (**только как в `architecture/public-imports.md`**), контракт к API — **только** `import … from '@/api'` (**`architecture/public-imports.md`**).
11
- - Не должен:
12
- - обращаться к HTTP‑клиенту напрямую;
13
- - знать детали DTO backend — только доменные типы.
14
-
15
- ## Store (`app/src/store/**`)
16
-
17
- - Может импортировать: `@/store/**`, сервисы и публичные сущности API — **только** из `@/api` (**`architecture/public-imports.md`**), типы из `@/types` и enum из `@/types/enums` (**`architecture/public-imports.md`**).
18
- - Не должен:
19
- - зависеть от конкретных UI‑компонентов;
20
- - напрямую работать с global/window API.
21
- - Вызовы к backend — только через сервисы, импортируемые из `@/api`; **транспортные** типы ответа и ошибки (из `@/types`, в том же виде, что у прикладного HTTP‑клиента) во thunk допустимы, если так выстроен API‑слой (`api-and-data/http-client.md`, `api-and-data/store-rtk.md`).
22
-
23
- ## API (`app/src/api/**`)
24
-
25
- Реализация в `services/**`, `clients/**`, реэкспорт в `app/src/api/index.ts`:
26
-
27
- - Внутри слоя: типы из `@/types` и enum из `@/types/enums` (**`architecture/public-imports.md`**); импорты `@/api/services/**`, `@/api/clients/**`, относительные пути между файлами слоя (`api-and-data/http-client.md`, `api-and-data/api-services.md`).
28
- - Не должен:
29
- - тянуть в себя UI или store;
30
- - смешивать HTTP‑слой и доменный слой — использовать мапперы.
31
-
32
- ## UI и обращение к API (`@/api`)
33
-
34
- - По умолчанию сценарии с **изменением серверного состояния** и координация нескольких шагов — через **store** (`createAsyncThunk`, dispatch, паттерн фичи в репозитории).
35
- - Прямой вызов методов сервисов, импортированных из **`@/api`**, из UI допустим только в **узких случаях**: преимущественно **чтение** или действие **без необходимости держать результат в Redux**; те же **доменные типы**, что использовал бы thunk; **не** дублировать уже существующий сценарий из store и **не** протаскивать DTO в компоненты.
36
- - Предпочтительно оформлять такие вызовы так же, как в **соседних фичах** репозитория (хук‑фасад, отдельный хук и т.д.).
37
-
38
- ## Порты и адаптеры (краткая карта)
39
-
40
- - **Входящий адаптер**: UI — ввод пользователя, отображение; зависит от store и доменных типов, не от транспорта.
41
- - **Оркестрация сценариев**: store (slices, thunk) — вызывает сервисы, кладёт в state **доменные** модели после маппинга.
42
- - **Исходящий порт (контракт к backend)**: публичный API **`@/api`** (barrel `app/src/api/index.ts`; реализация — в `app/src/api/services/**` и т.д., см. `architecture/public-imports.md`).
43
- - **Исходящий адаптер**: общая реализация HTTP в **`app/src/lib/clients/**`** и экземпляры в **`app/src/api/clients/**`**.
44
-
45
- ## Фича как срез
46
-
47
- - Для сложной фичи выравниваются имена и термины (**единый язык** предметной области) в типах, селекторах, сервисах и UI; структура папок — как в соседних фичах репозитория.
48
-
49
- # Правила импортов
50
-
51
- - Всегда использовать алиас `@/...` для импортов между слоями.
52
- - Внутри одного модуля/фичи можно использовать относительные импорты, но **без подъёма выше корня фичи** (избегать `../../../`).
53
- - При обращении из компонентов, хуков, утилит и других модулей к чужому слою или фиче использовать только **public API** (barrel/index‑файлы и явно экспортируемые сущности), не делать deep‑импорты внутренних файлов других фич; для регламентированных слоёв — **`architecture/layer-barrel-exports.md`** и `architecture/public-imports.md`; для API‑слоя снаружи `app/src/api/**` — **`architecture/public-imports.md`** (только `@/api`).
54
- - При добавлении нового кода проверять:
55
- - если модуль переиспользуемый — он должен зависеть только от более "низких" слоёв (types, utils, api), но не от страниц.
56
-
57
- # Организация фич
58
-
59
- - Для сложных фич (например, `OrderCheckout`):
60
- - Страница: `app/src/ui/pages/OrderCheckoutPage/**`.
61
- - Локальные компоненты: поддиректории `components/**` внутри страницы.
62
- - Связанный store: `app/src/store/slices/OrderCheckout/**`.
63
- - API: `app/src/api/services/OrdersApi/OrderCheckout/**` (имя корневого сервиса взять из принятой в проекте схемы).
64
- - Типы: `app/src/types/**` с экспортом через barrel **`app/src/types/index.ts`** (`architecture/public-imports.md`).
65
-
66
- # Требование к агенту
67
-
68
- При добавлении новой функциональности:
69
-
70
- - Разместить файлы в **соответствующих слоях**.
71
- - Проверить существующие фичи с аналогичной структурой и **повторить их организацию**.
72
- - Не "коротить" слои (например, не вызывать API прямо из компонента только ради упрощения).
@@ -1,79 +0,0 @@
1
- ---
2
- paths:
3
- - app/src/ui/**/*
4
- - app/src/store/**/*
5
- - app/src/api/**/*
6
- - app/src/types/**/*
7
- ---
8
-
9
- # Доставка фичи (сквозной порядок)
10
-
11
- Типичная фича с данными с backend и общим состоянием. Детали слоёв — `architecture/architecture-boundaries.md`, `stack/next-app-core.md`.
12
-
13
- ## Чеклист (порядок работ)
14
-
15
- 1. **Доменные типы** — `app/src/types/**`, barrel (`architecture/public-imports.md`, **`architecture/layer-barrel-exports.md`**); JSDoc — `stack/types-jsdoc.md`.
16
- 2. **Контракт API** — DTO там, где принято; доменные типы в `@/types`.
17
- 3. **Мапперы** — DTO → домен (`api-and-data/api-services.md`).
18
- 4. **Сервисы** — клиенты `app/src/api/clients/**`, barrel `@/api` (`api-and-data/api-services.md`, `api-and-data/http-client.md`, **`architecture/layer-barrel-exports.md`**).
19
- 5. **Состояние** — slice/thunk (`api-and-data/store-rtk.md`); thunk → `@/api`.
20
- 6. **UI** — `@/types`, без DTO (`ui-and-accessibility/react-ui.md`, `architecture/architecture-boundaries.md`, `ui-and-accessibility/no-props-spread.md`).
21
- 7. **Моки** — `app/src/mocks/**`; регистрация в `handlers.ts` (см. ниже).
22
- 8. **Тесты** — unit (`testing/tests-unit.md`); e2e (`testing/tests-e2e-structure.md`, `testing/playwright-agents.md`).
23
- 9. **Завершение** — **`tooling-and-review/post-change-lint.md`**.
24
-
25
- ## Поток данных
26
-
27
- ```mermaid
28
- flowchart LR
29
- subgraph transport [Транспорт]
30
- HttpClient[HttpClient]
31
- end
32
- DTO[DTO] --> Mappers[Мапперы]
33
- Mappers --> Domain[Доменные типы]
34
- Domain --> Service[API сервис]
35
- Service --> HttpClient
36
- Service --> Thunk[Thunk]
37
- Thunk --> Store[Store]
38
- Store --> UI[UI]
39
- ```
40
-
41
- ## Регистрация по слоям
42
-
43
- 1. **Типы** — `app/src/types/**`.
44
- 2. **API** — `app/src/api/services/<ServiceRoot>/<Segment>/`; публичные экспорты → **`app/src/api/index.ts`**.
45
- 3. **Моки** — `app/src/mocks/data/<feature>/`; **`app/src/mocks/handlers.ts`**; пути из `@/api`.
46
- 4. **Store** — `app/src/store/slices/<FeatureName>/`; **`app/src/store/reducers.ts`**; middleware → **`app/src/store/index.ts`**.
47
- 5. **UI** — pages/components; store/hooks.
48
- 6. **Unit** — `*.spec.ts(x)`; мапперы обязательно.
49
- 7. **E2E** — `app/__tests__/e2e/<Area>/<plan>.cases.md` + spec.
50
-
51
- ## Частичные сценарии
52
-
53
- | Задача | Минимум действий |
54
- |--------|------------------|
55
- | Только API + типы | Типы, сервис, мапперы, `@/api` barrel; unit на маппер. |
56
- | Только моки | Путь в `@/api`; handlers + `mocks/handlers.ts`. |
57
- | Только store | Thunk на `@/api`; slice + `reducers.ts`. |
58
- | Только UI | Store state; без HTTP/DTO. |
59
- | Только e2e | `*.cases.md` + spec. |
60
-
61
- ## Антипаттерны
62
-
63
- - DTO в UI или нетипизированном store.
64
- - HTTP-клиент из компонента/thunk в обход сервиса.
65
- - Deep-import `@/api/services/**` из UI/store.
66
- - `{...props}` — `ui-and-accessibility/no-props-spread.md`.
67
-
68
- ## Матрица: зона → правила
69
-
70
- | Зона | Правила |
71
- |------|---------|
72
- | `app/src/api/clients/**`, `app/src/lib/clients/**` | `api-and-data/http-client.md`, `testing/tests-unit.md` |
73
- | `app/src/api/services/**` | `api-and-data/api-services.md`, `architecture/layer-barrel-exports.md` |
74
- | `app/src/store/**` | `api-and-data/store-rtk.md`, `architecture/architecture-boundaries.md`, `architecture/public-imports.md` |
75
- | `app/src/ui/**` | `ui-and-accessibility/react-ui.md`, `ui-and-accessibility/no-props-spread.md`, `architecture/public-imports.md` |
76
- | `app/src/types/**` | `architecture/public-imports.md`, `stack/types-jsdoc.md`, `architecture/layer-barrel-exports.md` |
77
- | `app/__tests__/e2e/**` | `testing/tests-e2e-structure.md`, `testing/playwright-agents.md` |
78
-
79
- При добавлении или расширении фичи **пройти чеклист** и правила из таблицы для затронутых зон.
@@ -1,58 +0,0 @@
1
- ---
2
- paths:
3
- - app/src/**/*
4
- ---
5
-
6
- # Barrel-экспорты слоёв с public API
7
-
8
- ## Когда применять
9
-
10
- Для **любого слоя** (каталога, пакета, bounded context), у которого:
11
-
12
- - есть **корневой barrel** — единая точка импорта для внешних потребителей;
13
- - deep-импорты внутрь слоя **запрещены** снаружи (ESLint `no-restricted-imports`, правила `architecture/public-imports.md`).
14
-
15
- Примеры alias/entry point в разных проектах: `@/api`, `@/types`, `@/core`, `@/store`, `packages/foo`.
16
-
17
- ## Два уровня barrel
18
-
19
- 1. **Локальный** — `index.ts` модуля/фичи внутри слоя.
20
- 2. **Корневой public API** — barrel слоя (например `src/<layer>/index.ts`).
21
-
22
- **Внутри** слоя — относительные импорты и пути между подмодулями. **Снаружи** — только корневой barrel и **явно разрешённые** вторичные entry points (если зафиксированы в правилах проекта, напр. `@/types/enums`).
23
-
24
- ## Что реэкспортировать наружу
25
-
26
- Только символы, которые **должны быть доступны** потребителям слоя: публичные функции/сервисы/фасады, типы контракта, константы и helpers, нужные другим слоям или тестам.
27
-
28
- **Не реэкспортировать:** внутренние адаптеры, мапперы, детали транспорта, промежуточные объекты для сборки фасада внутри слоя.
29
-
30
- Группировка в корневом barrel — **по конвенции репозитория** (ориентир — соседние модули того же слоя).
31
-
32
- ## Чеклист агента (обязателен)
33
-
34
- При добавлении или существенном расширении **модуля внутри регламентированного слоя**:
35
-
36
- 1. Определить слой, его **корневой barrel** и доп. entry points (`architecture/public-imports.md`).
37
- 2. Создать/обновить **локальный** `index.ts` — только публичные символы.
38
- 3. Если в слое есть **фасад/агрегатор** (`*ApiService.ts`, `rootReducer`, …) — подключить модуль там.
39
- 4. Добавить **реэкспорт** новых публичных символов в **корневой barrel** слоя.
40
- 5. **Проверка:** grep по имени символа или пути `./<Module>` в корневом barrel; снаружи слоя нет deep-импортов.
41
-
42
- Модуль **не готов**, пока чеклист не пройден.
43
-
44
- ## Как найти регламентированные слои в репозитории
45
-
46
- 1. Правила `architecture/public-imports.md` в `.claude/rules/architecture/`.
47
- 2. ESLint `no-restricted-imports` — паттерны `@/<layer>/*` с исключением barrel.
48
- 3. `architecture/architecture-boundaries.md`, README проекта.
49
-
50
- ## В этом репозитории
51
-
52
- | Слой | Корневой barrel | Правило импортов |
53
- |------|-----------------|------------------|
54
- | API | `app/src/api/index.ts` | `architecture/public-imports.md` |
55
- | Types | `app/src/types/index.ts` | `architecture/public-imports.md` (+ `@/types/enums`) |
56
- | Core | `app/src/core/index.ts` | ESLint: `@/core/index` |
57
-
58
- Иллюстрация двух уровней (API): локальный `services/.../<Feature>/index.ts` → фасад `*ApiService.ts` → `app/src/api/index.ts`.
@@ -1,46 +0,0 @@
1
- ---
2
- paths:
3
- - app/src/ui/**/*
4
- - app/src/store/**/*
5
- - app/src/lib/**/*
6
- - app/src/types/**/*
7
- - app/src/api/**/*
8
- ---
9
-
10
- # Публичные импорты (`@/types`, `@/api`)
11
-
12
- **Коллизии:** импорт типов — раздел `@/types`; API вне `app/src/api/**` — раздел `@/api` (дублирует ESLint `no-restricted-imports`).
13
-
14
- ## `@/types`
15
-
16
- - **Публичный API типов** — barrel `app/src/types/index.ts`; импортировать типы только как `@/types` (или `@/types/index`).
17
- - **Запрещено** обходить barrel: `@/types/<что‑угодно>`, кроме enum.
18
- - **Enum** — только `@/types/enums` / `@/types/enums.ts`.
19
- - Внутри `app/src/types/**` — относительные импорты между файлами слоя.
20
-
21
- ```typescript
22
- // ✅
23
- import type { TUserProfile } from '@/types'
24
- import { SomeEnum } from '@/types/enums'
25
-
26
- // ❌
27
- import type { TUserProfile } from '@/types/User.types'
28
- ```
29
-
30
- Новые публичные типы — реэкспорт в `app/src/types/index.ts` по **`architecture/layer-barrel-exports.md`**.
31
-
32
- ## `@/api`
33
-
34
- - **Публичный API** — barrel `app/src/api/index.ts`. Вне `app/src/api/**` — только `import … from '@/api'` (или `@/api/index`).
35
- - **Запрещено** снаружи слоя: `@/api/<что‑угодно>`, кроме `@/api/index`.
36
- - Внутри `app/src/api/**` — относительные импорты и `@/api/services/**`, `@/api/clients/**`.
37
-
38
- ```typescript
39
- // ✅ в store, UI, lib вне app/src/api
40
- import { MedcardApiService } from '@/api'
41
-
42
- // ❌ снаружи app/src/api
43
- import { MedcardApiService } from '@/api/services/MedcardApiService/MedcardApiService'
44
- ```
45
-
46
- Новые публичные символы API — реэкспорт в `app/src/api/index.ts` по **`architecture/layer-barrel-exports.md`**.
@@ -1,37 +0,0 @@
1
- ---
2
- paths:
3
- - app/src/ui/**/*
4
- - app/src/store/**/*
5
- - app/src/api/**/*
6
- - app/src/types/**/*
7
- ---
8
-
9
- # Эталонные фичи (reference features)
10
-
11
- Перед реализацией найди фичу того же типа и **повтори её структуру**, не изобретая новую организацию файлов.
12
-
13
- ## Таблица эталонов
14
-
15
- Замени **TBD** на реальные пути после договорённости в команде (или при `ai-rules init` в целевом репо):
16
-
17
- | Слой | Эталон | Что копировать |
18
- |------|--------|----------------|
19
- | UI page | **TBD** `app/src/ui/pages/<Example>/` | `components/`, `*.data.ts`, `styles.ts`, barrel |
20
- | Store slice | **TBD** `app/src/store/slices/<example>/` | slice, thunks, selectors, types |
21
- | API service | **TBD** `app/src/api/services/<example>/` | service, mappers, barrel |
22
- | Types module | **TBD** `app/src/types/<example>/` | domain types, JSDoc, barrel export |
23
- | Unit tests | **TBD** рядом с эталонным mapper/service | `*.spec.ts`, describe/it naming |
24
- | E2E area | **TBD** `app/__tests__/e2e/<Area>/` | `*.cases.md`, page objects, `_shared/` |
25
-
26
- ## Как использовать
27
-
28
- 1. Определи затронутые слои из `decomposition.md` или задачи.
29
- 2. Открой эталон из таблицы (после заполнения путей).
30
- 3. Зеркаль именование, порядок файлов, паттерны импортов и тестов.
31
- 4. Если эталона нет — выбери **самую близкую** существующую фичу того же слоя и зафиксируй выбор в handoff.
32
-
33
- ## Связанные правила
34
-
35
- - `tooling-and-review/code-quality.md` — повторять паттерны, не deep-import.
36
- - `architecture/feature-delivery-workflow.md` — порядок слоёв.
37
- - skill `feature-delivery` — end-to-end сценарий.
@@ -1,8 +0,0 @@
1
- ---
2
- paths:
3
- - app/src/types/**/*
4
- ---
5
-
6
- # Deprecated
7
-
8
- Содержимое перенесено в **`architecture/public-imports.md`** (раздел `@/types`).
@@ -1,45 +0,0 @@
1
- ---
2
- paths:
3
- - app/src/**/*.{ts,tsx,js,jsx}
4
- ---
5
-
6
- # Стрелочные функции
7
-
8
- При разработке **использовать стрелочный синтаксис** для функций, где это допустимо в TypeScript/JavaScript.
9
-
10
- ## Что делать
11
-
12
- - Объявлять функции как **`const имя = (...) => { ... }`** вместо **`function имя(...) { ... }`**, если не нужны особенности объявления `function`.
13
- - Колбэки и обработчики — стрелочные функции: `.map((x) => ...)`, `onClick={() => ...}`.
14
- - React-компоненты и хуки — как стрелочные функции с явной типизацией пропсов/возврата по принятому в проекте стилю.
15
-
16
- ## Исключения (допустимо не стрелка)
17
-
18
- - **Генераторы** (`function*`) — стрелкой не выразить.
19
- - **Методы класса** — если в коде используются классы, допустимы обычные методы (`method() {}`).
20
- - Когда осознанно нужны **подъём (hoisting)** или **имя функции в стеке** только у `function` — редкие случаи.
21
-
22
- ## Примеры
23
-
24
- ```typescript
25
- // ❌ Избегать для нового кода
26
- function formatLabel(id: string): string {
27
- return id.toUpperCase()
28
- }
29
-
30
- // ✅ Предпочтительно
31
- const formatLabel = (id: string): string => {
32
- return id.toUpperCase()
33
- }
34
- ```
35
-
36
- ```tsx
37
- // ✅ Предпочтительно
38
- const UserCard = ({ name }: { name: string }) => {
39
- return <span>{name}</span>
40
- }
41
- ```
42
-
43
- ## Требование к агенту
44
-
45
- При генерации и правке кода **по умолчанию выбирать стрелочные функции**; отступать к `function` только в случаях из раздела исключений.
@@ -1,61 +0,0 @@
1
- ---
2
- paths:
3
- - app/src/ui/**/*
4
- ---
5
-
6
- # Навигация и роутинг: сначала стек проекта
7
-
8
- **При любой задаче, связанной с навигацией, переходами между страницами, URL, редиректами, хлебными крошками, защищёнными маршрутами или программной сменой маршрута** — перед предложением кода или импортов **нельзя** опираться на «типичный React» по умолчанию. Нужно **явно свериться со стеком целевого репозитория** и использовать **один** согласованный с проектом механизм.
9
-
10
- ## Зависимости: что проверить в первую очередь
11
-
12
- 1. **`package.json`** в корне приложения (например `app/package.json` в монорепо — тот пакет, который реально собирается и деплоится). Смотреть **`dependencies`** и при необходимости **`peerDependencies`**:
13
- - **`next`** — Next.js; версия важна для нюансов API (сверяться с документацией под эту major).
14
- - **`react-router-dom`**, **`@remix-run/*`**, **`@tanstack/react-router`** и т.д. — отдельный роутинг; не подменять их API вызовами Next без проверки, что в проекте действительно используется этот стек.
15
- - **`next`** и **`react-router-dom`** одновременно — возможно легаси или гибрид; **не** выбирать API по умолчанию — смотреть раздел «Реализация в коде» ниже.
16
-
17
- 2. **Монорепо / workspaces** — роутинг может жить не в корневом `package.json`. Открыть **`package.json` того workspace**, где лежат страницы и `next.config.*` / точка входа SPA.
18
-
19
- 3. **Факт установки** — при сомнениях смотреть lockfile (`bun.lock`, `package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`) или каталог `node_modules` у соответствующего пакета: убедиться, что заявленный пакет реально установлен, а не только прописан в документации.
20
-
21
- ## Реализация роутинга в проекте (код и структура)
22
-
23
- Перед предложением паттерна навигации **свериться с тем, как уже сделано в репозитории**:
24
-
25
- 1. **Дерево маршрутов**
26
- - Next **App Router**: каталог **`app/`** (или `src/app/`) с `layout.tsx`, `page.tsx`, сегменты `[id]` и т.п.
27
- - Next **Pages Router**: каталог **`pages/`** с `_app`, динамические `[slug].tsx`.
28
- - Наличие **обоих** `app/` и `pages/` — уточнить по `next.config` и документации проекта, какой слой основной.
29
-
30
- 2. **Точки входа и обёртки**
31
- - Поиск по коду импортов: **`from 'next/navigation'`**, **`from 'next/router'`**, **`from 'next/link'`**, **`from 'react-router-dom'`**, **`createBrowserRouter`**, **`RouterProvider`**, **`BrowserRouter`**.
32
- - Где объявлены маршруты (файловая структура Next vs конфиг маршрутов / `routes.tsx` в SPA).
33
-
34
- 3. **Общие абстракции проекта**
35
- - Обертки над ссылками (`@/ui/...`, `Link` из дизайн-системы), хелперы путей, константы роутов — **использовать их**, а не дублировать сырой роутер.
36
-
37
- 4. **Соседние файлы фичи**
38
- - Новый код навигации — в том же стиле, что страницы/хуки той же области (`next/navigation` vs `react-router-dom` как в соседних импортах).
39
-
40
- ## Как определить, что использовать (сводка)
41
-
42
- 1. **Зависимости** — см. раздел выше; по ним задаётся допустимый набор пакетов.
43
- 2. **Структура** — App Router vs Pages vs SPA по каталогам и конфигу.
44
- 3. **Фактический код** — какие импорты и обёртки уже доминируют в приложении.
45
-
46
- ## Что использовать (краткая матрица)
47
-
48
- | Стек | Программная навигация / чтение пути | Ссылки |
49
- |------|-------------------------------------|--------|
50
- | **Next.js App Router** | `next/navigation` (`useRouter`, `usePathname`, `useSearchParams`, `redirect` и т.д. по документации Next для вашей версии) | `next/link` |
51
- | **Next.js Pages Router** | `next/router` | `next/link` |
52
- | **SPA + React Router** | `react-router-dom` (`useNavigate`, `useParams`, `useLocation`, …) | `<Link>` из `react-router-dom` |
53
-
54
- **Не делать:** подключать `react-router-dom` в проект на Next.js «по привычке»; импортировать хуки из `next/router` в компонентах App Router без проверки; смешивать два роутера в одном приложении без явной архитектурной причины в кодовой базе.
55
-
56
- ## Требование к агенту
57
-
58
- - Перед генерацией или ревью кода навигации **коротко зафиксировать вывод** (например: «зависимости: `next` без `react-router-dom`; в коде везде `next/navigation` → используем то же») и следовать ему.
59
- - **Обязательная проверка:** актуальные **`dependencies`** в `package.json` нужного workspace + **как в проекте уже реализованы** маршруты и импорты (поиск по репозиторию, соседние файлы). Не полагаться только на предположение по одному признаку (например, только на наличие папки `app/`).
60
- - Если стек неочевиден (два роутера в зависимостях, гибрид) — **сверить lockfile / установленные пакеты** и **доминирующие импорты** в `src`/`app`, затем выбрать API.
61
- - Для **этого** пресета базовый ориентир — **`stack/next-app-core.md`**: Next.js; предпочитать **`next/navigation`** и **`next/link`** там, где используется App Router.
@@ -1,33 +0,0 @@
1
- # Стек и окружение
2
-
3
- Конкретные версии — **из `package.json` и конфигов целевого репозитория**. Рамка preset: Next.js, React, TypeScript; runner/e2e/mocks/UI/APM — как заведено в репо.
4
-
5
- # Структура проекта
6
-
7
- - `app/` — корень Next.js; `app/src/**` — код; `app/__tests__/e2e/**` — e2e.
8
- - `app/tsconfig.json`: `baseUrl: "."`, `paths: { "@/*": ["./src/*"] }`.
9
- - **Требование:** `@/*` вместо относительных импортов выше по дереву.
10
-
11
- # Архитектурные слои
12
-
13
- | Слой | Каталог | Детали |
14
- |------|---------|--------|
15
- | UI | `app/src/ui/**` (pages, components) | `ui-and-accessibility/react-ui.md`, `architecture/architecture-boundaries.md` |
16
- | Store | `app/src/store/**` (slices, middleware) | `api-and-data/store-rtk.md` |
17
- | API | `app/src/api/**` (services, clients, barrel) | `api-and-data/api-services.md`, `api-and-data/http-client.md` |
18
- | HTTP | `app/src/lib/clients/**`, `app/src/api/clients/**` | `api-and-data/http-client.md` |
19
- | Types | `app/src/types/**` | `architecture/public-imports.md`, `stack/types-jsdoc.md` |
20
- | Mocks | `app/src/mocks/**` | по схеме репозитория |
21
-
22
- Границы слоёв, порты/адаптеры, UI→API — **`architecture/architecture-boundaries.md`**. Импорты `@/types`, `@/api` — **`architecture/public-imports.md`**.
23
-
24
- # Работа агента
25
-
26
- - Архитектура и импорты: `architecture/architecture-boundaries.md`, `architecture/public-imports.md`
27
- - Фичи: `architecture/feature-delivery-workflow.md` + skill `feature-delivery`
28
- - После правок: `tooling-and-review/post-change-lint.md`; менеджер пакетов: `tooling-and-review/package-manager.md`
29
- - Копировать паттерны соседних файлов в целевом слое; не использовать `any` (предпочитать `unknown` + сужение)
30
-
31
- Задачи на **сеть, HTTP, новые эндпоинты**: `api-and-data/http-client.md` + `api-and-data/api-services.md` + `api-and-data/store-rtk.md`.
32
-
33
- См. **`rules/README.md`** — полный каталог.
@@ -1,36 +0,0 @@
1
- ---
2
- paths:
3
- - app/src/app/**/*
4
- - app/**/app/**/*
5
- ---
6
-
7
- # Next.js App Router
8
-
9
- Применять при работе с `app/src/app/**` или маршрутами App Router в целевом репо.
10
-
11
- ## Server vs Client
12
-
13
- - **Server Components по умолчанию** — без `'use client'`, если не нужны hooks, browser API, event handlers.
14
- - **`'use client'`** — только для интерактива, `useState`/`useEffect`, browser-only API.
15
- - Не тянуть store/RTK и тяжёлый client-state в Server Components без необходимости.
16
-
17
- ## Data fetching
18
-
19
- - Предпочитать fetch/data-loader на **server** (RSC, route handlers, server actions — по принятому в репо паттерну).
20
- - **Не дублировать** один запрос в RSC и client без причины.
21
- - Кеш и revalidate — как в существующих страницах репо (`fetch` options, `revalidate`, tags).
22
-
23
- ## Маршруты и UX
24
-
25
- - Для async routes использовать **`loading.tsx`**, **`error.tsx`**, **`not-found.tsx`** по образцу соседних routes.
26
- - **Suspense** — для медленных client/server секций; fallback согласован с дизайн-системой.
27
- - Навигация — `stack/navigation-router.md` + router/link паттерны проекта.
28
-
29
- ## Границы слоёв
30
-
31
- - RSC/route handlers **не импортируют UI-компоненты с client-only зависимостями** напрямую в server tree без `'use client'` границы.
32
- - Доменные типы — `@/types`; вызовы backend — через `@/api` / services, не raw `fetch` из page.tsx без слоя API.
33
-
34
- ## Эталон
35
-
36
- Смотри существующий route той же сложности в `app/src/app/**` и повтори структуру (`architecture/reference-features.md`).
@@ -1,59 +0,0 @@
1
- ---
2
- paths:
3
- - app/src/api/**/*
4
- - app/src/store/**/*
5
- - app/src/types/**/*
6
- ---
7
-
8
- # Не использовать `as` для приведения типов при экспорте и импорте
9
-
10
- ## О чём речь
11
-
12
- Речь о **type assertion** в TypeScript: выражение вида `значение as Тип`.
13
-
14
- **Не относится к правилу** (это не assertion, а синтаксис модулей):
15
-
16
- - переименование при экспорте: `export { foo as bar }`, `export { default as Baz } from '...'`;
17
- - переименование при импорте: `import { foo as bar } from '...'`;
18
- - `import type { Foo as Bar }` — алиас типа в импорте типов.
19
-
20
- ## Требование
21
-
22
- - На **публичной границе модуля** (экспорт, присваивание импортированным символам с принудительным приведением) **не использовать** `as Тип` для «подгонки» типов, если можно обойтись нормальной типизацией.
23
-
24
- ## Предпочитать вместо `as`
25
-
26
- - явную аннотацию: `const x: T = ...` / `function f(): T`;
27
- - **дженерики** у функций и классов;
28
- - **`satisfies`** (когда нужно проверить совместимость без сужения до `any`);
29
- - сужение **`unknown`** после проверки (type guards, `zod` и т.п.);
30
- - правку **исходных типов/DTO/мапперов**, а не assertion на выходе.
31
-
32
- ## Когда `as` допустим
33
-
34
- - взаимодействие с **не типизированными** или некорректно типизированными внешними модулями;
35
- - узкие места после **валидации** данных;
36
- - **`as const`** — литеральные типы;
37
- - блок **`catch (error)`** после HTTP: по возможности **`instanceof`** на **класс ошибки транспорта** из `@/types`; голый **`as`** — только если `instanceof` недоступен.
38
-
39
- ## Примеры
40
-
41
- ```typescript
42
- // ❌ Плохо: assertion на экспортируемом API
43
- export const config = loadRaw() as AppConfig
44
-
45
- // ✅ Лучше: аннотация + проверка или маппер
46
- export const config: AppConfig = mapToAppConfig(loadRaw())
47
-
48
- // ❌ Плохо: сразу после импорта «ломаем» тип
49
- import { getData } from './api'
50
- export const data = getData() as MyDto[]
51
-
52
- // ✅ Лучше: типизировать getData / обернуть типобезопасной функцией
53
- ```
54
-
55
- ## Требование к агенту
56
-
57
- При ревью и генерации кода **не добавлять** новые `as Тип` на экспортируемые сущности без явной необходимости.
58
-
59
- В слайсах и сервисах при обработке ошибок API сначала рассматривать **`instanceof`** на класс ошибки транспорта из `@/types` (`api-and-data/http-client.md`, `api-and-data/store-rtk.md`).
@@ -1,37 +0,0 @@
1
- ---
2
- paths:
3
- - app/src/types/**/*.ts
4
- ---
5
-
6
- # Документация типов в `app/src/types`
7
-
8
- При добавлении или существенном изменении типов в этом слое **следовать уже принятому в репозитории стилю JSDoc** (см. примеры: `User.types.ts`, `Common.types.ts`, `ServerValidation.types.ts`, `TreatmentPlan/*.types.ts`).
9
-
10
- ## Язык и форма
11
-
12
- - Текст комментариев — **на русском**, кратко и по делу.
13
- - **Не использовать** `@param`, `@returns`, `@see`, `@deprecated` для описания типов — достаточно обычного текста в `/** … */`.
14
-
15
- ## Экспортируемый `type` / `interface`
16
-
17
- - Сразу **перед объявлением** — блок `/** … */`.
18
- - Для вложенных объектов — отдельный блок над каждым объявлением.
19
-
20
- ## Поля
21
-
22
- - У **каждого** публичного свойства — **однострочный** `/** … */` над полем.
23
- - Если поле **вычисляется на фронте** — префикс **`[computed]`**.
24
- - Форматы данных указывать **в тексте** (например дата `YYYY-MM-DD`).
25
-
26
- ## Классы и enum
27
-
28
- - Для **классов** — блок над классом и комментарии к публичным полям.
29
- - В `enums.ts` исторически часто **без JSDoc** на каждом члене; для новых enum допустимо описание **над enum**.
30
-
31
- ## Практика для агента
32
-
33
- - Не оставлять новые публичные поля без пояснения, если смысл не равен имени на 100%.
34
- - Поддерживать **тот же стиль**, что в файле.
35
- - Одна-две фразы на тип, одна строка на поле — норма.
36
-
37
- См. также импорты и barrel: `architecture/public-imports.md`.