@bonesofspring/ai-rules 0.2.1 → 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 (214) hide show
  1. package/README.md +10 -20
  2. package/bin/cli.js +73 -260
  3. package/package.json +4 -13
  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 -33
  27. package/presets/claude/next/README.md +0 -10
  28. package/presets/claude/next/agents/README.md +0 -126
  29. package/presets/claude/next/agents/playwright-test-generator.md +65 -16
  30. package/presets/claude/next/agents/playwright-test-healer.md +51 -16
  31. package/presets/claude/next/agents/playwright-test-planner.md +55 -15
  32. package/presets/claude/next/commands/README.md +2 -10
  33. package/presets/claude/next/hooks/README.md +2 -5
  34. package/presets/claude/next/rules/README.md +11 -29
  35. package/presets/claude/next/rules/api-and-data/README.md +1 -7
  36. package/presets/claude/next/rules/architecture/README.md +2 -10
  37. package/presets/claude/next/rules/stack/README.md +1 -10
  38. package/presets/claude/next/rules/testing/README.md +1 -9
  39. package/presets/claude/next/rules/tooling-and-review/README.md +1 -14
  40. package/presets/claude/next/rules/ui-and-accessibility/README.md +1 -7
  41. package/presets/claude/next/skills/README.md +1 -11
  42. package/presets/cursor/ios-swift/README.md +17 -0
  43. package/presets/cursor/ios-swift/commands/README.md +3 -0
  44. package/presets/cursor/ios-swift/rules/README.md +33 -0
  45. package/presets/cursor/ios-swift/rules/architecture-boundaries.mdc +34 -0
  46. package/presets/cursor/ios-swift/rules/code-quality-and-refactoring.mdc +39 -0
  47. package/presets/cursor/ios-swift/rules/code-review-mr.mdc +42 -0
  48. package/presets/cursor/ios-swift/rules/feature-delivery-workflow.mdc +61 -0
  49. package/presets/cursor/ios-swift/rules/ios-app-core.mdc +43 -0
  50. package/presets/cursor/ios-swift/rules/networking-services.mdc +49 -0
  51. package/presets/cursor/ios-swift/rules/post-change-build.mdc +32 -0
  52. package/presets/cursor/ios-swift/rules/state-and-viewmodels.mdc +43 -0
  53. package/presets/cursor/ios-swift/rules/swift-conventions.mdc +51 -0
  54. package/presets/cursor/ios-swift/rules/swiftui-ui.mdc +61 -0
  55. package/presets/cursor/ios-swift/rules/tests-ui.mdc +41 -0
  56. package/presets/cursor/ios-swift/rules/tests-unit.mdc +41 -0
  57. package/presets/cursor/next/commands/README.md +1 -49
  58. package/presets/cursor/next/rules/README.md +0 -67
  59. package/presets/cursor/next/rules/api-services.mdc +10 -12
  60. package/presets/cursor/next/rules/architecture-boundaries.mdc +12 -31
  61. package/presets/cursor/next/rules/code-quality-and-refactoring.mdc +4 -5
  62. package/presets/cursor/next/rules/code-review-mr.mdc +40 -21
  63. package/presets/cursor/next/rules/next-app-core.mdc +61 -18
  64. package/presets/cursor/next/rules/no-props-spread.mdc +4 -27
  65. package/presets/cursor/next/rules/playwright-agents.mdc +1 -2
  66. package/presets/cursor/next/rules/react-ui.mdc +3 -33
  67. package/presets/cursor/next/rules/store-rtk.mdc +6 -13
  68. package/presets/cursor/next/rules/tests-unit.mdc +10 -30
  69. package/CHANGELOG.md +0 -22
  70. package/CONTRIBUTING.md +0 -102
  71. package/fragments/BUGBOT.md +0 -23
  72. package/presets/claude/next/BUGBOT.md +0 -16
  73. package/presets/claude/next/agents/accessibility-reviewer.md +0 -65
  74. package/presets/claude/next/agents/api-contract-reviewer.md +0 -69
  75. package/presets/claude/next/agents/build-verifier.md +0 -64
  76. package/presets/claude/next/agents/ci-investigator.md +0 -62
  77. package/presets/claude/next/agents/code-reviewer.md +0 -62
  78. package/presets/claude/next/agents/debugger.md +0 -63
  79. package/presets/claude/next/agents/feature-developer.md +0 -27
  80. package/presets/claude/next/agents/migration-specialist.md +0 -69
  81. package/presets/claude/next/agents/performance-auditor.md +0 -68
  82. package/presets/claude/next/agents/qa-tester.md +0 -56
  83. package/presets/claude/next/agents/security-reviewer.md +0 -64
  84. package/presets/claude/next/agents/solution-architect.md +0 -70
  85. package/presets/claude/next/agents/task-analyst.md +0 -109
  86. package/presets/claude/next/agents/task-router.md +0 -94
  87. package/presets/claude/next/agents/tech-writer.md +0 -60
  88. package/presets/claude/next/agents/unit-test-generator.md +0 -37
  89. package/presets/claude/next/agents/unit-test-healer.md +0 -38
  90. package/presets/claude/next/agents/unit-test-planner.md +0 -62
  91. package/presets/claude/next/commands/feature-continue.md +0 -51
  92. package/presets/claude/next/commands/feature-start.md +0 -30
  93. package/presets/claude/next/commands/task-continue.md +0 -49
  94. package/presets/claude/next/commands/task.md +0 -50
  95. package/presets/claude/next/commands/technical-retro.md +0 -58
  96. package/presets/claude/next/hooks/chain-team-phases.sh +0 -342
  97. package/presets/claude/next/hooks/guard-shell-command.sh +0 -77
  98. package/presets/claude/next/hooks.json +0 -17
  99. package/presets/claude/next/rules/api-and-data/api-services.md +0 -57
  100. package/presets/claude/next/rules/api-and-data/http-client.md +0 -40
  101. package/presets/claude/next/rules/api-and-data/store-rtk.md +0 -65
  102. package/presets/claude/next/rules/architecture/api-public-imports.md +0 -8
  103. package/presets/claude/next/rules/architecture/architecture-boundaries-ui.md +0 -15
  104. package/presets/claude/next/rules/architecture/architecture-boundaries.md +0 -75
  105. package/presets/claude/next/rules/architecture/feature-delivery-workflow.md +0 -79
  106. package/presets/claude/next/rules/architecture/layer-barrel-exports.md +0 -58
  107. package/presets/claude/next/rules/architecture/public-imports.md +0 -46
  108. package/presets/claude/next/rules/architecture/reference-features.md +0 -37
  109. package/presets/claude/next/rules/architecture/types-public-imports.md +0 -8
  110. package/presets/claude/next/rules/stack/arrow-functions.md +0 -45
  111. package/presets/claude/next/rules/stack/navigation-router-ui.md +0 -15
  112. package/presets/claude/next/rules/stack/navigation-router.md +0 -62
  113. package/presets/claude/next/rules/stack/next-app-core.md +0 -33
  114. package/presets/claude/next/rules/stack/next-app-router.md +0 -36
  115. package/presets/claude/next/rules/stack/no-type-assertion.md +0 -59
  116. package/presets/claude/next/rules/stack/types-jsdoc.md +0 -37
  117. package/presets/claude/next/rules/testing/playwright-agents.md +0 -74
  118. package/presets/claude/next/rules/testing/tests-e2e-structure.md +0 -52
  119. package/presets/claude/next/rules/testing/tests-unit.md +0 -66
  120. package/presets/claude/next/rules/tooling-and-review/agent-team-intake.md +0 -15
  121. package/presets/claude/next/rules/tooling-and-review/agent-team-orchestrator.md +0 -140
  122. package/presets/claude/next/rules/tooling-and-review/code-quality.md +0 -42
  123. package/presets/claude/next/rules/tooling-and-review/code-review-mr.md +0 -30
  124. package/presets/claude/next/rules/tooling-and-review/package-manager.md +0 -11
  125. package/presets/claude/next/rules/tooling-and-review/post-change-lint.md +0 -33
  126. package/presets/claude/next/rules/ui-and-accessibility/css-property-order.md +0 -14
  127. package/presets/claude/next/rules/ui-and-accessibility/no-props-spread.md +0 -57
  128. package/presets/claude/next/rules/ui-and-accessibility/react-a11y-coding.md +0 -37
  129. package/presets/claude/next/rules/ui-and-accessibility/react-ui.md +0 -91
  130. package/presets/claude/next/skills/ci-investigation/SKILL.md +0 -36
  131. package/presets/claude/next/skills/code-review/SKILL.md +0 -26
  132. package/presets/claude/next/skills/debug-investigation/SKILL.md +0 -28
  133. package/presets/claude/next/skills/feature-delivery/SKILL.md +0 -15
  134. package/presets/claude/next/skills/playwright-e2e/SKILL.md +0 -31
  135. package/presets/claude/next/skills/technical-retro/SKILL.md +0 -40
  136. package/presets/claude/next/skills/unit-testing/SKILL.md +0 -32
  137. package/presets/claude/next/team/README.md +0 -47
  138. package/presets/claude/next/team/fixtures/bugfix-standard.json +0 -15
  139. package/presets/claude/next/team/fixtures/feature-full.json +0 -16
  140. package/presets/claude/next/team/fixtures/feature-light.json +0 -17
  141. package/presets/claude/next/team/tasks/.gitkeep +0 -1
  142. package/presets/cursor/next/AGENTS.md +0 -36
  143. package/presets/cursor/next/BUGBOT.md +0 -16
  144. package/presets/cursor/next/agents/README.md +0 -159
  145. package/presets/cursor/next/agents/accessibility-reviewer.md +0 -67
  146. package/presets/cursor/next/agents/api-contract-reviewer.md +0 -71
  147. package/presets/cursor/next/agents/build-verifier.md +0 -66
  148. package/presets/cursor/next/agents/ci-investigator.md +0 -64
  149. package/presets/cursor/next/agents/code-reviewer.md +0 -64
  150. package/presets/cursor/next/agents/debugger.md +0 -64
  151. package/presets/cursor/next/agents/feature-developer.md +0 -27
  152. package/presets/cursor/next/agents/migration-specialist.md +0 -71
  153. package/presets/cursor/next/agents/performance-auditor.md +0 -70
  154. package/presets/cursor/next/agents/playwright-test-generator.md +0 -26
  155. package/presets/cursor/next/agents/playwright-test-healer.md +0 -26
  156. package/presets/cursor/next/agents/playwright-test-planner.md +0 -28
  157. package/presets/cursor/next/agents/qa-tester.md +0 -57
  158. package/presets/cursor/next/agents/security-reviewer.md +0 -66
  159. package/presets/cursor/next/agents/solution-architect.md +0 -71
  160. package/presets/cursor/next/agents/task-analyst.md +0 -112
  161. package/presets/cursor/next/agents/task-router.md +0 -95
  162. package/presets/cursor/next/agents/tech-writer.md +0 -62
  163. package/presets/cursor/next/agents/unit-test-generator.md +0 -39
  164. package/presets/cursor/next/agents/unit-test-healer.md +0 -40
  165. package/presets/cursor/next/agents/unit-test-planner.md +0 -64
  166. package/presets/cursor/next/commands/feature-continue.md +0 -19
  167. package/presets/cursor/next/commands/feature-start.md +0 -33
  168. package/presets/cursor/next/commands/task-continue.md +0 -49
  169. package/presets/cursor/next/commands/task.md +0 -50
  170. package/presets/cursor/next/commands/technical-retro.md +0 -81
  171. package/presets/cursor/next/hooks/README.md +0 -8
  172. package/presets/cursor/next/hooks/chain-team-phases.sh +0 -380
  173. package/presets/cursor/next/hooks/guard-shell-command.sh +0 -77
  174. package/presets/cursor/next/hooks.json +0 -17
  175. package/presets/cursor/next/rules/agent-team-intake.mdc +0 -14
  176. package/presets/cursor/next/rules/agent-team-orchestrator.mdc +0 -139
  177. package/presets/cursor/next/rules/api-public-imports.mdc +0 -8
  178. package/presets/cursor/next/rules/architecture-boundaries-ui.mdc +0 -15
  179. package/presets/cursor/next/rules/arrow-functions.mdc +0 -46
  180. package/presets/cursor/next/rules/css-property-order-stylelint.mdc +0 -16
  181. package/presets/cursor/next/rules/feature-delivery-workflow.mdc +0 -76
  182. package/presets/cursor/next/rules/http-client.mdc +0 -42
  183. package/presets/cursor/next/rules/layer-barrel-exports.mdc +0 -59
  184. package/presets/cursor/next/rules/navigation-router-stack.mdc +0 -62
  185. package/presets/cursor/next/rules/navigation-router-ui.mdc +0 -16
  186. package/presets/cursor/next/rules/next-app-router.mdc +0 -36
  187. package/presets/cursor/next/rules/no-cross-component-styles-import.mdc +0 -8
  188. package/presets/cursor/next/rules/no-type-assertion-as-import-export.mdc +0 -60
  189. package/presets/cursor/next/rules/package-manager.mdc +0 -16
  190. package/presets/cursor/next/rules/post-change-lint.mdc +0 -38
  191. package/presets/cursor/next/rules/public-imports.mdc +0 -48
  192. package/presets/cursor/next/rules/react-a11y-coding.mdc +0 -37
  193. package/presets/cursor/next/rules/reference-features.mdc +0 -39
  194. package/presets/cursor/next/rules/technical-retro.mdc +0 -12
  195. package/presets/cursor/next/rules/types-jsdoc.mdc +0 -42
  196. package/presets/cursor/next/rules/types-public-imports.mdc +0 -8
  197. package/presets/cursor/next/skills/README.md +0 -15
  198. package/presets/cursor/next/skills/ci-investigation/SKILL.md +0 -36
  199. package/presets/cursor/next/skills/code-review/SKILL.md +0 -26
  200. package/presets/cursor/next/skills/debug-investigation/SKILL.md +0 -28
  201. package/presets/cursor/next/skills/feature-delivery/SKILL.md +0 -15
  202. package/presets/cursor/next/skills/playwright-e2e/SKILL.md +0 -31
  203. package/presets/cursor/next/skills/technical-retro/SKILL.md +0 -40
  204. package/presets/cursor/next/skills/unit-testing/SKILL.md +0 -32
  205. package/presets/cursor/next/team/README.md +0 -105
  206. package/presets/cursor/next/team/fixtures/bugfix-standard.json +0 -15
  207. package/presets/cursor/next/team/fixtures/feature-full.json +0 -16
  208. package/presets/cursor/next/team/fixtures/feature-light.json +0 -17
  209. package/presets/cursor/next/team/tasks/.gitkeep +0 -0
  210. package/scripts/README.md +0 -84
  211. package/scripts/golden-prompts.json +0 -276
  212. package/scripts/preset-manifest.json +0 -72
  213. package/scripts/regression-results/.gitkeep +0 -0
  214. package/scripts/validate-preset.sh +0 -484
@@ -1,74 +0,0 @@
1
- ---
2
- paths:
3
- - app/__tests__/e2e/**
4
- ---
5
-
6
- # Playwright Agents in this project
7
-
8
- Playwright Agents (planner, generator, healer) **must follow the existing e2e structure**:
9
-
10
- - **Test directory**: `app/__tests__/e2e`
11
- - **Test plans (specs)**: `*.cases.md` files under `app/__tests__/e2e/**`
12
- - **Executable tests**: `*.spec.ts` files under `app/__tests__/e2e/**`
13
- - **Seed test**: `app/__tests__/e2e/seed.spec.ts`
14
-
15
- Do **not** introduce separate top-level `specs/` and `tests/` folders for real test coverage. Those may be used only as temporary sandboxes if explicitly requested.
16
-
17
- ## Planner (test plans)
18
-
19
- When acting as a **Planner** (or working with the Playwright planner agent):
20
-
21
- - **Treat `*.cases.md` as the canonical test plan files**, equivalent to Playwright's `specs/*.md`.
22
- - **Location**:
23
- - For a feature/domain, use the corresponding `*.cases.md` file under `app/__tests__/e2e`, e.g.:
24
- - `app/__tests__/e2e/OrderHistory/order-history.cases.md`
25
- - `app/__tests__/e2e/BillingReport/invoice-list.cases.md`
26
- - **Content requirements**:
27
- - Group scenarios by feature and subfeature using headings.
28
- - For each scenario include:
29
- - clear title,
30
- - preconditions,
31
- - ordered steps,
32
- - expected results.
33
- - Write in concise business language, but precise enough for automatic test generation.
34
- - **Seed**:
35
- - Assume environment is prepared by `app/__tests__/e2e/seed.spec.ts` (login, baseURL, mocks, etc.).
36
-
37
- When asked to "generate a test plan" for a feature, **create or update the appropriate `*.cases.md` file in `app/__tests__/e2e/**`**, not in a separate `specs/` folder.
38
-
39
- ## Generator (tests from plans)
40
-
41
- When acting as a **Generator** (or working with the Playwright generator agent):
42
-
43
- - **Source of truth for scenarios**:
44
- - Use the relevant `*.cases.md` file under `app/__tests__/e2e/**` as the test plan.
45
- - **Target for tests**:
46
- - Generate or update `*.spec.ts` files under the same folder, e.g.:
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
- - **Structure**:
50
- - Use `test.describe` to group by top-level plan sections (feature / user flow).
51
- - Use `test(...)` titles that match scenario names from the plan.
52
- - Prefer Page Object and fluent interfaces that already exist in this project, for example:
53
- - `app/__tests__/e2e/OrderHistory/OrderHistoryPage.ts`
54
- - shared helpers under `app/__tests__/e2e/_shared/`.
55
- - **Seed**:
56
- - If a seed test is needed, use `app/__tests__/e2e/seed.spec.ts` as the reference for environment setup.
57
-
58
- Do **not** generate Playwright tests into a separate `tests/` folder by default. Keep all e2e tests under `app/__tests__/e2e/**` to respect project conventions.
59
-
60
- ## Healer (fixing tests)
61
-
62
- When acting as a **Healer** (or working with the Playwright healer agent):
63
-
64
- - Operate only on `*.spec.ts` files under `app/__tests__/e2e/**`.
65
- - Use `*.cases.md` in the same folder as **documentation of the intended behavior**:
66
- - Do not weaken or change business assertions in tests in a way that conflicts with the corresponding `*.cases.md`.
67
- - Prefer updating locators, waits, and flow details to match the UI while keeping the scenario semantics intact.
68
- - When multiple specs are involved, prioritize:
69
- - the spec file in the same folder as the failing test,
70
- - then shared utilities in `app/__tests__/e2e/_shared/`.
71
-
72
- Healer should keep tests aligned with the existing test plans (`*.cases.md`) and with the page objects and helpers already used in the project.
73
-
74
- См. также агенты в `.claude/agents/` пресета и **`testing/tests-e2e-structure.md`**.
@@ -1,52 +0,0 @@
1
- ---
2
- paths:
3
- - app/__tests__/e2e/**
4
- ---
5
-
6
- # Структура e2e в проекте
7
-
8
- - Папка e2e: `app/__tests__/e2e/**`.
9
- - Планы сценариев:
10
- - `*.cases.md` файлы — **канонический источник сценариев**.
11
- - Тесты:
12
- - `*.spec.ts` файлы — реализация сценариев на Playwright.
13
- - Общие утилиты и абстракции:
14
- - `app/__tests__/e2e/_shared/**` — константы, fluent‑интерфейсы, хелперы.
15
-
16
- # Принципы
17
-
18
- - Каждый сценарий из `*.cases.md` должен иметь соответствующий тест (или набор тестов).
19
- - **Нельзя** ослаблять проверки в тестах, если это противоречит бизнес‑ожиданиям из планов.
20
- - Предпочтительно использовать:
21
- - page‑objects (например, `OrderHistoryPage.ts`);
22
- - общие хелперы из `_shared`.
23
-
24
- # Именование e2e‑тестов
25
-
26
- - Язык:
27
- - все названия `test` / `it`, `describe`‑блоков и шагов в `*.cases.md` должны быть сформулированы **на русском языке**, описывая поведение и ожидаемый результат.
28
- - Формат заголовков e2e‑тестов (`test(...)` / `it(...)`):
29
- - перед текстовым описанием сценария указывается **префикс с номером** в формате: `ПРЕФИКС-XXX Описание сценария`.
30
- - `ПРЕФИКС` — аббревиатура из **первых букв слов** тестируемой сущности, записанная **латиницей в верхнем регистре**.
31
- - пример: `OrderHistory` → `OH`, `BillingReport` → `BR`.
32
- - `XXX` — порядковый номер теста **с тремя разрядами и лидирующими нулями**: `001`, `002`, `010`, `123` и т.д.
33
- - пример полного названия e2e‑теста:
34
- - `test('OH-001 Отображается список заказов', async ({ page }) => { ... })`
35
- - внутри одной сущности (`ПРЕФИКС`) номера тестов должны образовывать **непротиворечивую последовательность**, без дубликатов номеров.
36
-
37
- # data-testid для e2e
38
-
39
- - **Приоритет селекторов:** `data-testid` для стабильных элементов; `getByRole` и `getByLabel` для форм и доступных элементов.
40
- - **Именование:** схема `{parent}__{element}` (например, `history-page__title`, `history-page__recognition-banner__attach-files-button`).
41
- - **Где добавлять:** на корневые контейнеры страниц и ключевые интерактивные элементы (кнопки, ссылки, поля), к которым обращаются page objects.
42
- - **При изменении UI:** обновлять data-testid в компонентах и соответствующие селекторы в page objects; сверять с `*.cases.md`.
43
-
44
- # Требование к агенту
45
-
46
- При добавлении/изменении e2e‑тестов:
47
-
48
- - Сначала смотреть соответствующий `*.cases.md` и синхронизировать названия сценариев.
49
- - Размещать спеки рядом с планами в той же директории.
50
- - Переиспользовать общие page‑objects и хелперы, а не копировать селекторы напрямую в каждый тест.
51
-
52
- См. также **`testing/playwright-agents.md`** для planner/generator/healer.
@@ -1,66 +0,0 @@
1
- ---
2
- paths:
3
- - app/src/**/*.spec.ts
4
- - app/src/**/*.spec.tsx
5
- - app/src/**/*.test.ts
6
- - app/src/**/*.test.tsx
7
- ---
8
-
9
- # Общие правила тестирования
10
-
11
- - **Имена файлов:** для **новых** тестов использовать суффикс **`*.spec.ts` / `*.spec.tsx`**. Существующие **`*.test.ts` / `*.test.tsx`** не переименовывать без отдельной задачи (легаси).
12
- - **Runner и матчеры** — как в проекте (часто Jest или Vitest); для компонентов — **@testing-library/react**.
13
- - Основная цель тестов:
14
- - проверять **поведение и бизнес‑правила**, а не реализацию или внутренние детали.
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
- ```
29
-
30
- # Тесты компонентов
31
-
32
- - Использовать `render` из `@testing-library/react`.
33
- - Ассерты:
34
- - матчеры DOM для Testing Library, как подключены в проекте (`toBeInTheDocument`, `toHaveTextContent` и т.п.).
35
- - Взаимодействия:
36
- - `userEvent` из `@testing-library/user-event`.
37
-
38
- # Изоляция и моки
39
-
40
- - Для работы с API/store:
41
- - мокать store (через test‑store) или использовать принятый в проекте способ моков HTTP/API.
42
- - Не мокать то, что является частью публичного контракта фичи, если это ломает смысл теста.
43
-
44
- # HTTP‑клиент
45
-
46
- - При изменении **реализации общего HTTP‑клиента** (разбор тел, заголовки, ветки ошибок, 401/refresh, `FormData`, `blob` и т.п.) — **обновить или добавить behavior‑тесты** рядом с модулем клиента в `app/src/lib/clients/**` (предпочтительно `*.spec.ts`; легаси `*.test.ts` — не трогать без задачи).
47
- - Проверять смысловые ветки: успешный JSON, HTTP‑ошибка, сеть, релевантные для проекта сценарии авторизации.
48
-
49
- # Мапперы и преобразование данных
50
-
51
- - Функции маппинга данных (DTO → доменная модель и обратно), особенно содержащие вычисляемые поля и ветвления, должны быть покрыты unit‑тестами.
52
- - В тестах мапперов особое внимание уделять edge‑кейсам и регрессии бизнес‑правил (например, граничные значения, отсутствие полей, неожиданные комбинации значений).
53
-
54
- # Требование к агенту
55
-
56
- При добавлении тестов:
57
-
58
- - Следовать существующей структуре и паттернам тестов в репозитории: файл `*.spec.ts(x)` рядом с модулем или в общем каталоге тестов — как в соседних фичах.
59
- - Добавлять тесты для критичных веток логики и edge‑кейсов.
60
- - При работе с данными:
61
- - использовать **типы респонса** из API (DTO‑типы), а также **целевые доменные типы** из `@/types`, не дублировать интерфейсы в тестах;
62
- - по возможности опираться на данные и обработчики из `app/src/mocks/**` (или аналог в репо), а не плодить случайные тестовые данные «с нуля».
63
- - Размещение:
64
- - для **компонентов UI** — **не создавать** поддиректорию `__tests__` внутри папки компонента; тест — соседний `*.spec.tsx`.
65
- - в **других модулях** (например `api/services`) допустима уже существующая схема с `__tests__` — не ломать ради единообразия с UI.
66
- - **новые** файлы — `*.spec.ts` / `*.spec.tsx` (см. блок «Имена файлов» выше).
@@ -1,15 +0,0 @@
1
- ---
2
- paths:
3
- - .claude/commands/**/*
4
- - .claude/team/**/*
5
- ---
6
-
7
- # Agent team intake
8
-
9
- When the user message looks like a **work request** (implement, add, fix, refactor, review MR, write tests, spike) — not a question about how code works:
10
-
11
- 1. Prefer **`/task <their request>`** or invoke **task-router** first.
12
- 2. Do not jump straight to coding without router + pipeline when scope is non-trivial.
13
- 3. Pure questions («как работает X», «объясни») — answer normally, no `/task`.
14
-
15
- Exceptions: user explicitly says «без pipeline», «просто сделай», or continues an active slug.
@@ -1,140 +0,0 @@
1
- ---
2
- paths:
3
- - .claude/commands/**/*
4
- - .claude/team/**/*
5
- ---
6
-
7
- # Agent team orchestrator
8
-
9
- Parent agent = **manager**. Router plans; specialists execute. Artifacts: `.claude/team/tasks/<slug>/`.
10
-
11
- Work request без `/task` — см. **`tooling-and-review/agent-team-intake.md`**.
12
-
13
- ## Entry points
14
-
15
- | Command | When |
16
- |---------|------|
17
- | **`/task <desc>`** | **Preferred** — router → dynamic pipeline → first agent |
18
- | `/task-continue <slug>` | After human gate or pause |
19
- | `/feature-start <desc>` | Legacy: analyst-only start (no router) |
20
- | `/feature-continue <slug>` | Alias of task-continue |
21
- | `/technical-retro [slug]` | Retro with agent team block |
22
-
23
- ## Roles
24
-
25
- | Agent | May edit production code | Typical intent |
26
- |-------|--------------------------|----------------|
27
- | `task-router` | no | Every `/task` — writes `pipeline.json` |
28
- | `task-analyst` | no | feature, refactor, test-only, a11y, docs-only, migration |
29
- | `solution-architect` | no | spike, complex cross-layer feature |
30
- | `migration-specialist` | no | migration — phased upgrade plan |
31
- | `api-contract-reviewer` | no | new/changed backend API contracts |
32
- | `debugger` | yes, minimal fixes only | bugfix |
33
- | `ci-investigator` | yes, minimal CI fixes | ci-fix |
34
- | `feature-developer` | yes | feature, bugfix, refactor, migration, a11y |
35
- | `build-verifier` | no | lint/type-check/unit gate after developer |
36
- | `accessibility-reviewer` | no | a11y, UI-heavy feature |
37
- | `performance-auditor` | no | perf-audit, perf-sensitive feature |
38
- | `code-reviewer` | no | most pipelines, review-only |
39
- | `security-reviewer` | no | auth, forms, sensitive data |
40
- | `qa-tester` | tests only | feature, bugfix, test-only |
41
- | `unit-test-planner` | no | unit-only — coverage plan |
42
- | `unit-test-generator` | tests only | unit-only — spec generation |
43
- | `unit-test-healer` | tests only | failing/flaky unit tests |
44
- | `playwright-test-planner` | no | e2e scenario planning |
45
- | `playwright-test-generator` | tests only | e2e spec generation |
46
- | `playwright-test-healer` | tests only | failing/flaky e2e fixes |
47
- | `tech-writer` | docs only | docs-only, feature/migration docs |
48
-
49
- Full prompts: `.claude/agents/*.md`. Artifact conventions: `.claude/team/README.md`.
50
-
51
- ## Dynamic pipeline
52
-
53
- ```mermaid
54
- flowchart TD
55
- task["/task prompt"]
56
- router["task-router"]
57
- pipeline["pipeline.json"]
58
- step0["steps 0..N"]
59
- gate{"humanGates?"}
60
- hook["subagentStop hook"]
61
- retro["/technical-retro"]
62
-
63
- task --> router
64
- router --> pipeline
65
- pipeline --> step0
66
- step0 --> gate
67
- gate -->|"/task-continue"| step0
68
- step0 --> hook
69
- hook --> step0
70
- step0 --> retro
71
- ```
72
-
73
- **Source of truth for order:** `pipeline.json` → `steps[]`. Never hardcode analyst → dev → review → QA when `pipeline.json` exists.
74
-
75
- ## status.json (pipeline mode)
76
-
77
- ```json
78
- {
79
- "slug": "...",
80
- "intent": "feature",
81
- "pipelineIndex": 0,
82
- "currentAgent": "task-analyst",
83
- "phase": "executing",
84
- "state": "in_progress",
85
- "awaitingHumanGate": false
86
- }
87
- ```
88
-
89
- | state | Meaning |
90
- |-------|---------|
91
- | `in_progress` | Current step running |
92
- | `completed` | Current step done; hook or orchestrator advances |
93
- | `awaiting_approval` | Human gate; wait for `/task-continue` |
94
- | `changes_requested` | Reviewer blocked; re-run developer (`retryAfterFix`) |
95
- | `validation_failed` | build-verifier failed; re-run developer then build-verifier |
96
-
97
- ## Pipeline step options
98
-
99
- | Field | Use |
100
- |-------|-----|
101
- | `skipIf` | `debugger.fixed` / `ci-investigator.resolved` |
102
- | `parallel: true` | `agent` array — invoke all in one parent turn |
103
- | `scope` | e.g. `unit-in-dev`, `e2e-only` |
104
-
105
- ## Rules (strict)
106
-
107
- 1. **`/task` always starts with task-router** (except user says "skip router" with documented pipeline).
108
- 2. Read `pipeline.json` before every subagent invocation.
109
- 3. One role per subagent call — **except** parallel steps.
110
- 4. **Never** skip `humanGates` without `/task-continue` or explicit user approval.
111
- 5. Persist handoffs including `validation-report.md`.
112
- 6. On `changes_requested`: hook sets `retryAfterFix` → developer → same reviewer.
113
- 7. On `validation_failed`: hook sets `retryAfterFix: build-verifier` → developer → build-verifier.
114
- 8. When all steps complete, suggest `/technical-retro <slug>`.
115
- 9. If `autoChain: false`, manual step only.
116
-
117
- ## Invoking agents
118
-
119
- Use the available Claude Code subagent mechanism. Pass: slug, artifact paths, step `scope` if set.
120
-
121
- After each agent completes, ensure `status.json` has `state: completed` (or `awaiting_approval` if gate applies).
122
-
123
- ## Legacy mode
124
-
125
- If `pipeline.json` is missing (old `/feature-start` tasks), fall back to fixed phases: analysis → development → review → testing.
126
-
127
- ## Skip pipeline when
128
-
129
- Do **not** run `/task` + router for:
130
-
131
- - Pure questions («как работает X», «объясни»).
132
- - Typo / one-file fix / trivial config with no architecture risk.
133
- - User explicitly says «без pipeline», «просто сделай», or continues an active slug.
134
- - Single-line `docs-only` with no code impact.
135
-
136
- Borderline work requests — см. **`tooling-and-review/agent-team-intake.md`**.
137
-
138
- ## Auto-detection (optional)
139
-
140
- When user describes a **non-trivial task** (not a question), suggest `/task <message>` or run router if they agree.
@@ -1,42 +0,0 @@
1
- # Поддержка и улучшение качества кода
2
-
3
- ## Поддержка существующего стиля
4
-
5
- - Новые изменения должны:
6
- - следовать существующим паттернам (имена, структура, типизация);
7
- - минимизировать «стилистический шум» (лишние правки форматирования, rename без нужды).
8
- - Перед добавлением нового решения:
9
- - искать аналогичное в коде и **повторять подход**, а не изобретать новый;
10
- - проверять, нет ли уже подходящего компонента или паттерна в существующем UI‑коде и пакетах проекта, прежде чем добавлять новый кастомный контрол;
11
- - использовать при обращении к чужим модулям только их **public API** (index/barrel‑файлы и явно экспортируемые сущности), а deep‑импорты внутренних файлов рассматривать как повод для рефакторинга.
12
-
13
- ## Рефакторинг при изменениях
14
-
15
- - Разрешён лёгкий refactor, если он:
16
- - уменьшает дублирование;
17
- - повышает читаемость;
18
- - не ломает публичные контракты модулей.
19
- - Примеры допустимых улучшений:
20
- - вынести дублирующуюся логику в общий хук/утилиту;
21
- - типизировать `any` и `unknown`, если это безболезненно;
22
- - разделить слишком крупный компонент на несколько более простых;
23
- - заменить локальные «магические» CSS‑значения (цвета, отступы, размеры) на токены/примитивы дизайна проекта;
24
- - заменить deep‑импорты внутренних файлов других модулей на обращения к их public API.
25
-
26
- ## Ограничения
27
-
28
- - Не выполнять «большой» рефакторинг, если задача точечная и не про архитектуру:
29
- - не менять структуру директорий;
30
- - не менять названия публичных типов/функций без явного запроса.
31
- - При необходимости крупного изменения:
32
- - сначала локально улучшить архитектуру минимальными шагами;
33
- - оставить код в консистентном состоянии.
34
-
35
- ## Линтеры
36
-
37
- Lint/stylelint — только **`tooling-and-review/post-change-lint.md`**; ESLint config: `app/eslint.config.mjs`. Отключение правила (`eslint-disable`) — только **точечно** с кратким комментарием «зачем».
38
-
39
- ## Требование к агенту
40
-
41
- - **Boy scout rule:** оставлять модуль немного лучше, чем до изменения (простые, безопасные улучшения).
42
- - Не жертвовать архитектурой и слоями ради краткости реализации.
@@ -1,30 +0,0 @@
1
- ---
2
- paths:
3
- - .claude/agents/code-reviewer.md
4
- - .claude/commands/**/*
5
- - .claude/team/**/*
6
- ---
7
-
8
- # Code review merge requests
9
-
10
- On-demand rule for review flows. **Procedure and output format:** skill `code-review`.
11
-
12
- ## Checklist references
13
-
14
- - Architecture layers: `architecture/architecture-boundaries.md`, `stack/next-app-core.md`; network: `api-and-data/http-client.md`
15
- - Imports: `architecture/public-imports.md`, `architecture/layer-barrel-exports.md`
16
- - UI: `ui-and-accessibility/react-ui.md`
17
- - Tests: `testing/tests-unit.md`, `testing/playwright-agents.md`, `testing/tests-e2e-structure.md`
18
- - Lint gate before final report: `tooling-and-review/post-change-lint.md`
19
-
20
- ## When to load
21
-
22
- - User asks for review/MR/diff
23
- - Pipeline step `code-reviewer`
24
- - BUGBOT automated review
25
-
26
- ## Constraints
27
-
28
- - Focus on MR diff, not the whole repo.
29
- - Use local `git diff` — do not invent hosting metadata.
30
- - Boy scout rule: suggest fixes feasible within the MR scope.
@@ -1,11 +0,0 @@
1
- # Менеджер пакетов (терминал)
2
-
3
- Перед **`npm install` / `yarn` / `pnpm` / `bun`** и **`… run …`** определи менеджер репозитория и **используй только его**.
4
-
5
- ## Как определить
6
-
7
- 1. **`packageManager`** в `package.json` (корень или `app/package.json`).
8
- 2. **Lockfile** рядом: `yarn.lock` → yarn; `pnpm-lock.yaml` → pnpm; `package-lock.json` → npm; `bun.lock(b)` → bun.
9
- 3. Если неоднозначно — где `node_modules` и какой lockfile в CI.
10
-
11
- Рабочий каталог для scripts — **`app/`**. Примеры: `yarn lint`, `pnpm run test`. Не угадывай — проверь файлы.
@@ -1,33 +0,0 @@
1
- # Линтеры после изменений кода
2
-
3
- ## Когда применять
4
-
5
- После **любого** изменения исходников в `app/**` (TS/TSX/JS/MJS, CSS, styled/Linaria в `.ts`/`.tsx`).
6
-
7
- Исключения: правки документации вне `app/`, конфигов CI, `.claude/rules/**`, если исполняемый код приложения не менялся.
8
-
9
- **Pipeline exception:** если задача идёт через agent team и следующий шаг — `build-verifier`, developer может ограничиться lint/type-check **изменённых файлов**; полный прогон — обязанность `build-verifier`. В single-agent режиме (без pipeline) — всегда полный прогон.
10
-
11
- ## Обязательные команды
12
-
13
- Рабочий каталог — **`app/`**. Менеджер пакетов — **`tooling-and-review/package-manager.md`**.
14
-
15
- 1. **`lint:js`** — полный ESLint по проекту.
16
- 2. **`lint:css`** — полный Stylelint (`**/*.{css,ts}`).
17
-
18
- Точечный lint на один файл **не заменяет** полный прогон перед завершением задачи (кроме pipeline exception выше).
19
-
20
- ## Алгоритм
21
-
22
- 1. Завершить правки кода.
23
- 2. Запустить **`lint:js`** и **`lint:css`** из `app/`.
24
- 3. Проанализировать весь вывод; исправить errors/warnings в изменённых файлах; для Stylelint — **`lint:css --fix`** если автоисправимо.
25
- 4. Повторить до exit code 0 или зафиксировать блокер в ответе пользователю.
26
- 5. **`type-check`** при изменениях TypeScript. CI-уровень: **`lint`** (= `lint:js` + `lint:css` + `type-check`).
27
-
28
- ## Что исправлять
29
-
30
- - **Errors** — обязательно.
31
- - **Warnings** — обязательно в файлах задачи; вне скоупа — упомянуть, если мешают нулевому exit code.
32
-
33
- Конфиги: `app/eslint.config.mjs`, `app/.stylelintrc` (порядок CSS — `ui-and-accessibility/css-property-order.md`).
@@ -1,14 +0,0 @@
1
- ---
2
- paths:
3
- - app/src/ui/**/*.styles.ts
4
- - app/src/ui/**/*.styles.tsx
5
- - app/src/ui/**/styles.ts
6
- - app/src/ui/**/styles.tsx
7
- - app/**/*.css
8
- ---
9
-
10
- # Порядок CSS-свойств (как в Stylelint)
11
-
12
- Порядок свойств — как в **`app/.stylelintrc`** (`stylelint-config-idiomatic-order`). Не дублировать список вручную.
13
-
14
- Автоисправление из `app/`: **`lint:css --fix`**. Полный прогон — **`tooling-and-review/post-change-lint.md`**.
@@ -1,57 +0,0 @@
1
- ---
2
- paths:
3
- - app/src/**/*.tsx
4
- ---
5
-
6
- # Не использовать спред пропов при передаче в компоненты
7
-
8
- При вызове **пользовательских** React-компонентов (имя с заглавной буквы) **передавать пропы явно**, а не через spread (`{...props}`, `{...obj}`).
9
-
10
- **Агентам и при ревью:** не «упрощать» JSX через объект с spread. Длинное ветвление — два явных JSX-блока или отдельные компоненты.
11
-
12
- ## Почему
13
-
14
- - Явная передача делает зависимости очевидными.
15
- - Упрощает рефакторинг и поиск использований.
16
- - Снижает риск лишних пропов.
17
-
18
- ## Проверка в репозитории
19
-
20
- - Для `app/src/ui/**/*.tsx` — ESLint `react/jsx-props-no-spreading` (`app/eslint.config.mjs`).
21
- - Исключение — `eslint-disable-next-line` с комментарием «почему».
22
-
23
- ## Примеры
24
-
25
- ```tsx
26
- // ❌ Плохо
27
- const commonProps = { a, b, c }
28
- return <Child {...commonProps} />
29
-
30
- // ❌ Плохо
31
- return <Child {...props} />
32
-
33
- // ✅ Хорошо
34
- return (
35
- <Child
36
- a={a}
37
- b={b}
38
- c={c}
39
- />
40
- )
41
-
42
- // ✅ Хорошо — явные пропсы по веткам
43
- return cond ? (
44
- <IconBox name={name} size="m" variant="warning" />
45
- ) : (
46
- <IconBox
47
- customColors={styles.IconBoxAccent.customColors}
48
- name={name}
49
- size="m"
50
- />
51
- )
52
- ```
53
-
54
- ## Исключения
55
-
56
- - **Нативный** DOM (`<div {...rest} />`) — если `rest` только HTML-атрибуты.
57
- - Обёртки — если явно документировано; при необходимости ESLint-disable.
@@ -1,37 +0,0 @@
1
- ---
2
- paths:
3
- - app/src/ui/**/*.tsx
4
- - app/src/ui/**/*.ts
5
- ---
6
-
7
- # A11y при разработке UI
8
-
9
- Reviewer (`accessibility-reviewer`) проверяет diff; эти правила — **при написании** кода.
10
-
11
- ## Семантика и ARIA
12
-
13
- - Предпочитать **нативные элементы** (`button`, `a`, `label`, `input`) вместо `div` с `onClick`.
14
- - **`role` / `aria-*`** — только когда нативного аналога нет; не дублировать то, что даёт семантика.
15
- - Заголовки — иераархия `h1`–`h6` без пропусков уровней ради стилей.
16
-
17
- ## Формы
18
-
19
- - Каждый input связан с **`label`** (`htmlFor` / `id` или обёртка).
20
- - Сообщения об ошибках — **`aria-describedby`**, `aria-invalid` при validation errors.
21
- - Кнопки submit vs button — явный `type`.
22
-
23
- ## Клавиатура и focus
24
-
25
- - Все интерактивные элементы **достижимы с Tab** и активируются Enter/Space где ожидается.
26
- - **Modals/drawers** — focus trap, возврат focus на trigger при закрытии, Esc закрывает (если по UX).
27
- - Не удалять видимый **focus outline** без замены на доступный custom focus style.
28
-
29
- ## Контент
30
-
31
- - Изображения — **`alt`** (пустой `alt` только для декора).
32
- - Иконки-кнопки — **`aria-label`** или visually hidden text.
33
- - Динамические обновления — `aria-live` для критичных status/error (умеренно).
34
-
35
- ## Проверка
36
-
37
- - При сомнении — devtools a11y tree или `accessibility-reviewer` в pipeline для UI-heavy фич.