@bonesofspring/ai-rules 0.1.37 → 0.1.40

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 (90) hide show
  1. package/README.md +7 -3
  2. package/bin/cli.js +56 -31
  3. package/package.json +3 -3
  4. package/presets/claude/next/CLAUDE.md +25 -5
  5. package/presets/claude/next/README.md +10 -0
  6. package/presets/claude/next/agents/README.md +15 -0
  7. package/presets/claude/next/agents/code-reviewer.md +56 -0
  8. package/presets/claude/next/agents/debugger.md +58 -0
  9. package/presets/claude/next/agents/feature-developer.md +45 -0
  10. package/presets/claude/next/agents/qa-tester.md +54 -0
  11. package/presets/claude/next/agents/solution-architect.md +70 -0
  12. package/presets/claude/next/agents/task-analyst.md +105 -0
  13. package/presets/claude/next/agents/task-router.md +105 -0
  14. package/presets/claude/next/commands/README.md +10 -2
  15. package/presets/claude/next/commands/feature-continue.md +46 -0
  16. package/presets/claude/next/commands/feature-start.md +25 -0
  17. package/presets/claude/next/commands/task-continue.md +43 -0
  18. package/presets/claude/next/commands/task.md +40 -0
  19. package/presets/claude/next/commands/technical-retro.md +53 -0
  20. package/presets/claude/next/hooks/README.md +6 -0
  21. package/presets/claude/next/hooks/chain-team-phases.sh +123 -0
  22. package/presets/claude/next/rules/README.md +49 -11
  23. package/presets/claude/next/rules/api-and-data/README.md +7 -1
  24. package/presets/claude/next/rules/api-and-data/api-services.md +57 -0
  25. package/presets/claude/next/rules/api-and-data/http-client.md +40 -0
  26. package/presets/claude/next/rules/api-and-data/store-rtk.md +65 -0
  27. package/presets/claude/next/rules/architecture/README.md +11 -1
  28. package/presets/claude/next/rules/architecture/api-public-imports.md +25 -0
  29. package/presets/claude/next/rules/architecture/architecture-boundaries.md +67 -0
  30. package/presets/claude/next/rules/architecture/feature-delivery-workflow.md +99 -0
  31. package/presets/claude/next/rules/architecture/layer-barrel-exports.md +53 -0
  32. package/presets/claude/next/rules/architecture/types-public-imports.md +28 -0
  33. package/presets/claude/next/rules/stack/README.md +9 -1
  34. package/presets/claude/next/rules/stack/arrow-functions.md +40 -0
  35. package/presets/claude/next/rules/stack/navigation-router.md +56 -0
  36. package/presets/claude/next/rules/stack/next-app-core.md +83 -0
  37. package/presets/claude/next/rules/stack/no-type-assertion.md +52 -0
  38. package/presets/claude/next/rules/stack/types-jsdoc.md +37 -0
  39. package/presets/claude/next/rules/testing/README.md +9 -1
  40. package/presets/claude/next/rules/testing/playwright-agents.md +69 -0
  41. package/presets/claude/next/rules/testing/tests-e2e-structure.md +52 -0
  42. package/presets/claude/next/rules/testing/tests-unit.md +66 -0
  43. package/presets/claude/next/rules/tooling-and-review/README.md +14 -1
  44. package/presets/claude/next/rules/tooling-and-review/agent-team-intake.md +9 -0
  45. package/presets/claude/next/rules/tooling-and-review/agent-team-orchestrator.md +97 -0
  46. package/presets/claude/next/rules/tooling-and-review/code-quality.md +50 -0
  47. package/presets/claude/next/rules/tooling-and-review/code-review-mr.md +67 -0
  48. package/presets/claude/next/rules/tooling-and-review/package-manager.md +20 -0
  49. package/presets/claude/next/rules/tooling-and-review/post-change-lint.md +43 -0
  50. package/presets/claude/next/rules/ui-and-accessibility/README.md +8 -1
  51. package/presets/claude/next/rules/ui-and-accessibility/component-styles.md +50 -0
  52. package/presets/claude/next/rules/ui-and-accessibility/css-property-order.md +20 -0
  53. package/presets/claude/next/rules/ui-and-accessibility/no-props-spread.md +52 -0
  54. package/presets/claude/next/rules/ui-and-accessibility/react-ui.md +90 -0
  55. package/presets/claude/next/team/README.md +64 -0
  56. package/presets/claude/next/team/tasks/.gitkeep +1 -0
  57. package/presets/cursor/next/agents/README.md +25 -0
  58. package/presets/cursor/next/agents/code-reviewer.md +57 -0
  59. package/presets/cursor/next/agents/debugger.md +59 -0
  60. package/presets/cursor/next/agents/feature-developer.md +46 -0
  61. package/presets/cursor/next/agents/qa-tester.md +55 -0
  62. package/presets/cursor/next/agents/solution-architect.md +71 -0
  63. package/presets/cursor/next/agents/task-analyst.md +111 -0
  64. package/presets/cursor/next/agents/task-router.md +106 -0
  65. package/presets/cursor/next/commands/README.md +33 -1
  66. package/presets/cursor/next/commands/feature-continue.md +14 -0
  67. package/presets/cursor/next/commands/feature-start.md +28 -0
  68. package/presets/cursor/next/commands/task-continue.md +43 -0
  69. package/presets/cursor/next/commands/task.md +40 -0
  70. package/presets/cursor/next/commands/technical-retro.md +76 -0
  71. package/presets/cursor/next/hooks/chain-team-phases.sh +216 -0
  72. package/presets/cursor/next/hooks.json +11 -0
  73. package/presets/cursor/next/rules/README.md +10 -3
  74. package/presets/cursor/next/rules/agent-team-intake.mdc +14 -0
  75. package/presets/cursor/next/rules/agent-team-orchestrator.mdc +102 -0
  76. package/presets/cursor/next/rules/api-public-imports.mdc +1 -0
  77. package/presets/cursor/next/rules/api-services.mdc +1 -0
  78. package/presets/cursor/next/rules/architecture-boundaries.mdc +1 -1
  79. package/presets/cursor/next/rules/code-quality-and-refactoring.mdc +5 -2
  80. package/presets/cursor/next/rules/code-review-mr.mdc +6 -7
  81. package/presets/cursor/next/rules/feature-delivery-workflow.mdc +5 -5
  82. package/presets/cursor/next/rules/layer-barrel-exports.mdc +58 -0
  83. package/presets/cursor/next/rules/next-app-core.mdc +1 -1
  84. package/presets/cursor/next/rules/package-manager.mdc +25 -0
  85. package/presets/cursor/next/rules/post-change-lint.mdc +48 -0
  86. package/presets/cursor/next/rules/react-ui.mdc +10 -0
  87. package/presets/cursor/next/rules/technical-retro.mdc +5 -51
  88. package/presets/cursor/next/rules/types-public-imports.mdc +1 -0
  89. package/presets/cursor/next/team/README.md +106 -0
  90. package/presets/cursor/next/team/tasks/.gitkeep +0 -0
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 1,
3
+ "hooks": {
4
+ "subagentStop": [
5
+ {
6
+ "command": ".cursor/hooks/chain-team-phases.sh",
7
+ "loop_limit": 5
8
+ }
9
+ ]
10
+ }
11
+ }
@@ -11,9 +11,11 @@
11
11
 
12
12
  - То есть .mdc = “markdown + config для Cursor”, .md = просто текст без управляющего смысла для ассистента.
13
13
 
14
- ### С чего начать новую фичу
14
+ ### С чего начать новую задачу
15
15
 
16
- См. **`feature-delivery-workflow.mdc`** (сквозной чеклист слоёв и матрица «зона репозитория какое правило перечитать»).
16
+ - **Команда агентов (рекомендуется):** `/task <описание>` — router выберет роли и порядок; при human gate `/task-continue <slug>`. См. **`agent-team-orchestrator.mdc`** и `.cursor/team/README.md`.
17
+ - **Legacy:** `/feature-start` → `/feature-continue`.
18
+ - **Сквозной чеклист слоёв (для developer):** **`feature-delivery-workflow.mdc`**.
17
19
 
18
20
  ### Эталонные фичи (заполняет команда)
19
21
 
@@ -23,14 +25,19 @@
23
25
 
24
26
  | Файл | Назначение |
25
27
  |------|------------|
28
+ | `agent-team-orchestrator.mdc` | `/task`, router, `pipeline.json`, динамический пайплайн subagents |
29
+ | `agent-team-intake.mdc` | Автоподсказка `/task` при постановке задачи (alwaysApply) |
30
+ | `package-manager.mdc` | Перед `install` / `run` в терминале определить менеджер пакетов репо (lockfile, `packageManager`) и использовать только его |
26
31
  | `feature-delivery-workflow.mdc` | Сквозной порядок работ по фиче, mermaid‑поток, матрица слой → правило `.mdc` |
27
- | `next-app-core.mdc` | Стек, слои, порты‑адаптеры (кратко), доменная логика vs state, общие требования к агенту и линтам |
32
+ | `next-app-core.mdc` | Стек, слои, порты‑адаптеры (кратко), доменная логика vs state, общие требования к агенту |
33
+ | `post-change-lint.mdc` | **Обязательный** прогон ESLint + Stylelint после любых изменений кода, исправление срабатываний |
28
34
  | `architecture-boundaries.mdc` | Границы UI / store / API, импорты (`@/types`, `@/api`), порты‑адаптеры, фича как срез |
29
35
  | `http-client.mdc` | Один HTTP‑стек, контракты из `@/types`, без разбросанного низкоуровневого API |
30
36
  | `api-services.mdc` | Сервисы, мапперы, вызовы через прикладные API‑клиенты |
31
37
  | `store-rtk.mdc` | Redux Toolkit, thunk’и, типизация ошибок/ответов как в коде репо |
32
38
  | `types-public-imports.mdc` | Импорты только через barrel `@/types` |
33
39
  | `api-public-imports.mdc` | Импорты только через barrel `@/api` (вне `app/src/api/**`) |
40
+ | `layer-barrel-exports.mdc` | Двухуровневые barrel для слоёв с public API (`@/api`, `@/types`, `@/core`, …) |
34
41
  | `types-jsdoc.mdc` | JSDoc для типов в `app/src/types` (русский текст, `[computed]`, без `@param`/`@returns`) |
35
42
  | `no-type-assertion-as-import-export.mdc` | Ограничение `as`, в т.ч. `instanceof` для ошибок транспорта в `catch` |
36
43
  | `code-review-mr.mdc` | Чеклист ревью MR, в т.ч. HTTP‑клиент и тесты |
@@ -0,0 +1,14 @@
1
+ ---
2
+ description: When the user describes a new task, feature, bug, or implementation request (not a pure question), suggest or use /task to run the agent team router. Lightweight intake hint only.
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Agent team intake
7
+
8
+ 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:
9
+
10
+ 1. Prefer **`/task <their request>`** or invoke **task-router** first.
11
+ 2. Do not jump straight to coding without router + pipeline when scope is non-trivial.
12
+ 3. Pure questions («как работает X», «объясни») — answer normally, no `/task`.
13
+
14
+ Exceptions: user explicitly says «без pipeline», «просто сделай», or continues an active slug.
@@ -0,0 +1,102 @@
1
+ ---
2
+ description: Orchestrates the agent team via task-router and pipeline.json. Use for /task, /task-continue, /feature-start, task decomposition, or when the user describes a feature, bug, or review request.
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Agent team orchestrator
7
+
8
+ Parent agent = **manager**. Router plans; specialists execute. Artifacts: `.cursor/team/tasks/<slug>/`.
9
+
10
+ ## Entry points
11
+
12
+ | Command | When |
13
+ |---------|------|
14
+ | **`/task <desc>`** | **Preferred** — router → dynamic pipeline → first agent |
15
+ | `/task-continue <slug>` | After human gate or pause |
16
+ | `/feature-start <desc>` | Legacy: analyst-only start (no router) |
17
+ | `/feature-continue <slug>` | Alias of task-continue |
18
+ | `/technical-retro [slug]` | Retro with agent team block |
19
+
20
+ ## Roles
21
+
22
+ | Agent | readonly | Typical intent |
23
+ |-------|----------|----------------|
24
+ | `task-router` | yes | Every `/task` — writes `pipeline.json` |
25
+ | `task-analyst` | yes | feature, refactor, test-only |
26
+ | `solution-architect` | yes | spike, complex cross-layer feature |
27
+ | `debugger` | no | bugfix |
28
+ | `feature-developer` | no | feature, bugfix, refactor |
29
+ | `code-reviewer` | yes | most pipelines, review-only |
30
+ | `qa-tester` | no | feature, bugfix, test-only |
31
+
32
+ Full prompts: `.cursor/agents/*.md`. Artifact conventions: `.cursor/team/README.md`.
33
+
34
+ ## Dynamic pipeline
35
+
36
+ ```mermaid
37
+ flowchart TD
38
+ task["/task prompt"]
39
+ router["task-router"]
40
+ pipeline["pipeline.json"]
41
+ step0["steps 0..N"]
42
+ gate{"humanGates?"}
43
+ hook["subagentStop hook"]
44
+ retro["/technical-retro"]
45
+
46
+ task --> router
47
+ router --> pipeline
48
+ pipeline --> step0
49
+ step0 --> gate
50
+ gate -->|"/task-continue"| step0
51
+ step0 --> hook
52
+ hook --> step0
53
+ step0 --> retro
54
+ ```
55
+
56
+ **Source of truth for order:** `pipeline.json` → `steps[]`. Never hardcode analyst → dev → review → QA when `pipeline.json` exists.
57
+
58
+ ## status.json (pipeline mode)
59
+
60
+ ```json
61
+ {
62
+ "slug": "...",
63
+ "intent": "feature",
64
+ "pipelineIndex": 0,
65
+ "currentAgent": "task-analyst",
66
+ "phase": "executing",
67
+ "state": "in_progress",
68
+ "awaitingHumanGate": false
69
+ }
70
+ ```
71
+
72
+ | state | Meaning |
73
+ |-------|---------|
74
+ | `in_progress` | Current step running |
75
+ | `completed` | Current step done; hook advances |
76
+ | `awaiting_approval` | Human gate; wait for `/task-continue` |
77
+ | `changes_requested` | Reviewer blocked; re-run developer |
78
+
79
+ ## Rules (strict)
80
+
81
+ 1. **`/task` always starts with task-router** (except user says "skip router" with documented pipeline).
82
+ 2. Read `pipeline.json` before every subagent invocation.
83
+ 3. One role per Task/subagent call.
84
+ 4. **Never** skip `humanGates` without `/task-continue` or explicit user approval.
85
+ 5. Persist handoffs to disk (`brief.md`, `decomposition.md`, `debug-report.md`, `architecture.md`).
86
+ 6. On `changes_requested`: re-invoke `feature-developer`, then `code-reviewer` — do not advance `pipelineIndex` until review passes.
87
+ 7. When all steps complete, suggest `/technical-retro <slug>`.
88
+ 8. If `autoChain: false` in pipeline, do not rely on hook — manual step only.
89
+
90
+ ## Invoking agents
91
+
92
+ Use Task tool or `/agent-name`. Pass: slug, artifact paths, step `scope` if set.
93
+
94
+ After each agent completes, ensure `status.json` has `state: completed` (or `awaiting_approval` if gate applies).
95
+
96
+ ## Legacy mode
97
+
98
+ If `pipeline.json` is missing (old `/feature-start` tasks), fall back to fixed phases: analysis → development → review → testing. Hook supports both.
99
+
100
+ ## Auto-detection (optional)
101
+
102
+ When user describes a **task** (not a question "how does X work"), suggest `/task <their message>` or run router proactively if they agree.
@@ -7,6 +7,7 @@ alwaysApply: true
7
7
 
8
8
  - **Публичный API слоя API** — barrel `app/src/api/index.ts`. Для файлов **вне** `app/src/api/**` импортировать сервисы, клиенты, эндпоинты и публичные типы API **только** как `import … from '@/api'` (или `from '@/api/index'` при необходимости явного пути).
9
9
  - **Запрещено** для таких потребителей обходить barrel: любой импорт вида `@/api/<что‑угодно>`, кроме `@/api/index`. Это дублирует правило ESLint `no-restricted-imports` в `app/eslint.config.mjs` (паттерн `@/api/*` с исключением `@/api/index`).
10
+ - При **добавлении** публичного символа в регламентированный слой — реэкспорт в корневой barrel по **`layer-barrel-exports.mdc`**.
10
11
 
11
12
  ## Внутри слоя `app/src/api/**`
12
13
 
@@ -50,6 +50,7 @@ alwaysApply: false
50
50
 
51
51
  При добавлении/изменении API‑метода:
52
52
  - Следовать существующим сервисам и мапперам как эталону.
53
+ - Пройти чеклист barrel-экспортов (**`layer-barrel-exports.mdc`**): локальный `index.ts` → фасад слоя → корневой barrel.
53
54
  - Не смешивать слой API и UI/store:
54
55
  - компоненты не должны зависеть от DTO;
55
56
  - store не должен сам собирать URL/коды эндпоинтов и не обходить сервисы; **транспортный тип ответа** и **контракт ошибки** из `@/types` (как у прикладного клиента) допустимы во thunk при разборе `catch`/payload, если так выстроен сервис (см. `store-rtk.mdc`, `http-client.mdc`).
@@ -43,7 +43,7 @@ alwaysApply: true
43
43
 
44
44
  - Всегда использовать алиас `@/...` для импортов между слоями.
45
45
  - Внутри одного модуля/фичи можно использовать относительные импорты, но **без подъёма выше корня фичи** (избегать `../../../`).
46
- - При обращении из компонентов, хуков, утилит и других модулей к чужому слою или фиче использовать только **public API** (barrel/index‑файлы и явно экспортируемые сущности), не делать deep‑импорты внутренних файлов других фич; для API‑слоя снаружи `app/src/api/**` — **`api-public-imports.mdc`** (только `@/api`).
46
+ - При обращении из компонентов, хуков, утилит и других модулей к чужому слою или фиче использовать только **public API** (barrel/index‑файлы и явно экспортируемые сущности), не делать deep‑импорты внутренних файлов других фич; для регламентированных слоёв — **`layer-barrel-exports.mdc`** и `*-public-imports.mdc`; для API‑слоя снаружи `app/src/api/**` — **`api-public-imports.mdc`** (только `@/api`).
47
47
  - При добавлении нового кода проверять:
48
48
  - если модуль переиспользуемый — он должен зависеть только от более "низких" слоёв (types, utils, api), но не от страниц.
49
49
 
@@ -35,10 +35,12 @@ alwaysApply: true
35
35
  - сначала локально улучшить архитектуру минимальными шагами;
36
36
  - оставить код в консистентном состоянии.
37
37
 
38
- # ESLint и плагины
38
+ # ESLint, Stylelint и плагины
39
39
 
40
40
  - Учитывать **все активные правила ESLint** и **подключённые плагины** проекта (конфиг: `app/eslint.config.mjs`, базовые пресеты в т.ч. `@sh/eslint-config-react`, `@sh/eslint-config-boundaries` и локальные overrides).
41
- - Новый или изменённый код не должен нарушать эти правила. Перед завершением правок по возможности прогонять ESLint на затронутых файлах.
41
+ - Учитывать **Stylelint** для CSS и CSS-in-JS (конфиг: `app/.stylelintrc`; порядок свойств `css-property-order-stylelint.mdc`).
42
+ - Новый или изменённый код не должен нарушать эти правила.
43
+ - После **каждого** изменения кода агент **обязан** выполнить **`post-change-lint.mdc`**: полный прогон **`lint:js`** и **`lint:css`**, анализ вывода, исправление срабатываний в зоне задачи.
42
44
  - Отключение правила (`eslint-disable`) — только **точечно** (строка/небольшой блок) и с **кратким комментарием**, зачем это нужно; отключать «на весь файл» без веской причины не следует.
43
45
 
44
46
  # Требование к агенту
@@ -47,4 +49,5 @@ alwaysApply: true
47
49
  - Поддерживать принцип **“boy scout rule”**:
48
50
  - оставлять модуль в немного лучшем состоянии, чем до изменения (простые, безопасные улучшения).
49
51
  - Не жертвовать архитектурой и слоями ради краткости реализации.
52
+ - **Не завершать задачу**, пока не пройдены обязательные линтеры (`post-change-lint.mdc`).
50
53
 
@@ -18,6 +18,7 @@ alwaysApply: true
18
18
  - **Импорты и организация кода**:
19
19
  - Использование алиаса `@/...` вместо относительных импортов выше по дереву.
20
20
  - Отсутствие deep‑импортов во внешние фичи; использование только public API; в файлах вне `app/src/api/**` импорты из API — только `from '@/api'` (`api-public-imports.mdc`, дублирует ESLint).
21
+ - При новых/изменённых модулях в регламентированных слоях — реэкспорт публичных символов в корневой barrel по **`layer-barrel-exports.mdc`**.
21
22
  - Размещение новых файлов в корректных слоях и директориях фич.
22
23
  - **Типы и TS‑строгость**:
23
24
  - Не допускать новых `any`; предпочитать доменные типы из `@/types` (barrel, см. `types-public-imports.mdc`).
@@ -32,13 +33,11 @@ alwaysApply: true
32
33
  - либо e2e‑сценарии/спеки отражают новую логику (`playwright-agents.mdc`, `tests-e2e-structure.mdc`).
33
34
  - При правках **общего HTTP‑клиента** — наличие/актуальность **behavior‑тестов клиента** (`http-client.mdc`, `tests-unit.mdc`).
34
35
  - Указывать, какие именно тесты стоит добавить или поправить.
35
- - **Линтеры (обязательно)**:
36
- - Рабочий каталог: `app/` (там `package.json` с скриптами линта).
37
- - Перед финализацией отчёта по ревью **запустить полный прогон** ESLint по проекту: `bun run lint:js` (эквивалент `eslint .` с расширениями из скрипта без точечного запуска только на один файл, чтобы не пропустить косвенные срабатывания).
38
- - Если в MR менялись стили (css/linaria и т.п.) дополнительно `bun run lint:css`.
39
- - В отчёт включить **все сообщения ESLint (errors и warnings)** по файлам, попадающим в дифф MR/ветки; если полный вывод огромный, сфокусироваться на диффе, но **не** пропускать проверку из‑за «только изменённые файлы» на этапе запуска — сначала полный `bun run lint:js`, затем фильтрация вывода к путям из `git diff`.
40
- - При **имплементации правок** по итогам ревью или любой работе «как к MR»: после изменений снова выполнить `bun run lint:js` (и при необходимости `bun run lint:css`); не считать задачу завершённой, пока в изменённых файлах остаются исправимые предупреждения ESLint, которые относятся к этой задаче (исключение — явно устаревший легаси вне скоупа, с пометкой в ответе).
41
- - При желании полной валидации, как в CI: `bun run lint` (ESLint + Stylelint + `type-check`) — уместно перед итогом крупного MR.
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.
42
41
 
43
42
  - **Глубина и формат ревью**
44
43
  - Фокус на **изменениях MR** (дифф относительно целевой ветки), а не на всём проекте.
@@ -9,15 +9,15 @@ alwaysApply: true
9
9
 
10
10
  ## Чеклист (порядок работ)
11
11
 
12
- 1. **Доменные типы** — `app/src/types/**`, экспорт через barrel `app/src/types/index.ts` (`types-public-imports.mdc`); JSDoc полей — `types-jsdoc.mdc`.
12
+ 1. **Доменные типы** — `app/src/types/**`, экспорт через barrel `app/src/types/index.ts` (`types-public-imports.mdc`, **`layer-barrel-exports.mdc`**); JSDoc полей — `types-jsdoc.mdc`.
13
13
  2. **Контракт API** — DTO ответов/запросов там, где принято в репо; целевые доменные типы в `@/types`.
14
14
  3. **Мапперы** — DTO → домен в `*responseMappers.ts` или аналоге; чистые функции (`api-services.mdc`).
15
- 4. **Сервисы** — вызовы только через прикладные клиенты `app/src/api/clients/**`, public API модуля (`api-services.mdc`, `http-client.mdc`). Без `fetch` из UI/store.
15
+ 4. **Сервисы** — вызовы только через прикладные клиенты `app/src/api/clients/**`, public API модуля (`api-services.mdc`, `http-client.mdc`, **`layer-barrel-exports.mdc`**). Без `fetch` из UI/store.
16
16
  5. **Состояние** — `createSlice` / `createAsyncThunk`, доменные модели в state (`store-rtk.mdc`); thunk вызывает сервисы, импортированные из `@/api` (`api-public-imports.mdc`).
17
17
  6. **UI** — тонкие компоненты, типы из `@/types`, без DTO (`react-ui.mdc`, `architecture-boundaries.mdc`, `no-props-spread.mdc`).
18
18
  7. **Моки** — по схеме репозитория, точка входа регистрации моков (например `app/src/mocks/index.js`).
19
19
  8. **Тесты** — unit для мапперов и критичной логики (`tests-unit.mdc`); при смене HTTP‑клиента — behavior‑тесты клиента (`http-client.mdc`); e2e по `*.cases.md` (`tests-e2e-structure.mdc`, `playwright-agents.mdc`).
20
- 9. **Завершение** — из каталога `app/`: `bun run lint:js`, при стилях `bun run lint:css`, `bun run type-check` (`next-app-core.mdc`).
20
+ 9. **Завершение** — **`post-change-lint.mdc`**: из каталога `app/` обязательно `lint:js` + `lint:css` (полный прогон, исправить срабатывания), затем `type-check`; менеджер пакетов — `package-manager.mdc`.
21
21
 
22
22
  ## Поток данных (ориентир)
23
23
 
@@ -40,10 +40,10 @@ flowchart LR
40
40
  | Зона в репозитории | Правила Cursor (`.cursor/rules/`) |
41
41
  |--------------------|-----------------------------------|
42
42
  | `app/src/api/clients/**`, `app/src/lib/clients/**` | `http-client.mdc`; при изменении клиента — `tests-unit.mdc` (behavior‑тесты) |
43
- | `app/src/api/services/**` | `api-services.mdc`; при необходимости `http-client.mdc` |
43
+ | `app/src/api/services/**` | `api-services.mdc`, `layer-barrel-exports.mdc`; при необходимости `http-client.mdc` |
44
44
  | `app/src/store/**` | `store-rtk.mdc`, `architecture-boundaries.mdc`, `api-public-imports.mdc` |
45
45
  | `app/src/ui/**` | `react-ui.mdc`, `no-props-spread.mdc`, `types-public-imports.mdc`, `api-public-imports.mdc` |
46
- | `app/src/types/**` | `types-public-imports.mdc`, `types-jsdoc.mdc` |
46
+ | `app/src/types/**` | `types-public-imports.mdc`, `types-jsdoc.mdc`, `layer-barrel-exports.mdc` |
47
47
  | `app/__tests__/e2e/**` | `tests-e2e-structure.mdc`, `playwright-agents.mdc` |
48
48
 
49
49
  Специализированные `.mdc` с `globs` подмешиваются при работе с соответствующими файлами; эта матрица нужна, когда открыт другой файл или идёт общий чат.
@@ -0,0 +1,58 @@
1
+ ---
2
+ description: Двухуровневые barrel-экспорты для слоёв с регламентированным public API
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Barrel-экспорты слоёв с public API
7
+
8
+ ## Когда применять
9
+
10
+ Для **любого слоя** (каталога, пакета, bounded context), у которого:
11
+
12
+ - есть **корневой barrel** — единая точка импорта для внешних потребителей;
13
+ - deep-импорты внутрь слоя **запрещены** снаружи (ESLint `no-restricted-imports`, правила `*-public-imports.mdc`).
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 (`*-public-imports.mdc`).
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. Правила `*-public-imports.mdc` в `.cursor/rules/`.
47
+ 2. ESLint `no-restricted-imports` — паттерны `@/<layer>/*` с исключением barrel.
48
+ 3. `architecture-boundaries.mdc`, README проекта.
49
+
50
+ ## В этом репозитории
51
+
52
+ | Слой | Корневой barrel | Правило импортов |
53
+ |------|-------------------|------------------|
54
+ | API | `app/src/api/index.ts` | `api-public-imports.mdc` |
55
+ | Types | `app/src/types/index.ts` | `types-public-imports.mdc` (+ `@/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`.
@@ -83,5 +83,5 @@ alwaysApply: true
83
83
  - Найти в соответствующей директории похожие примеры и **копировать архитектурный паттерн** (структура файлов, типы, именование).
84
84
  - Не упрощать архитектуру в ущерб существующим слоям (не тянуть DTO и HTTP в UI; вызовы сервисов из UI — только в рамках `architecture-boundaries.mdc`).
85
85
  - Избегать использования `any` при типизации кода; при необходимости использовать `unknown` с последующим безопасным сужением типов.
86
- - После создания или редактирования файлов **обязательно** устранять проблемы линтера и типов: из каталога `app/` минимум **`bun run lint:js`** (полный прогон ESLint по проекту, как в `package.json`), при правках стилей ещё **`bun run lint:css`**; для проверки типов — **`bun run type-check`**. Точечный ESLint только на один файл не заменяет полный прогон при завершении задачи/MR. Устранять найденное в зоне изменений, если это возможно без искажения бизнес‑логики.
86
+ - После **любых** изменений кода **`post-change-lint.mdc`**: из каталога `app/` обязательно запустить **`lint:js`** и **`lint:css`** (полный прогон), проанализировать вывод, исправить errors/warnings в зоне задачи; задача не завершена, пока оба линтера не проходят. Дополнительно — **`type-check`** при правках TypeScript. Менеджер пакетов **`package-manager.mdc`**.
87
87
 
@@ -0,0 +1,25 @@
1
+ ---
2
+ description: Перед командами в терминале определять менеджер пакетов репозитория и использовать только его
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Менеджер пакетов (терминал)
7
+
8
+ Перед **`npm install` / `yarn` / `pnpm` / `bun`** и любыми **`… run …`** (lint, test, dev, build) **сначала определи**, какой менеджер закреплён в этом репозитории, и **используй только его** — не подставляй npm или другой инструмент «по привычке».
9
+
10
+ ## Как определить (по убыванию надёжности)
11
+
12
+ 1. Поле **`packageManager`** в `package.json` у корня монорепо или в каталоге приложения (например `app/package.json`) — строка вида `yarn@…`, `pnpm@…`, `npm@…`, `bun@…` (Corepack).
13
+ 2. **Lockfile** рядом с тем `package.json`, откуда ставятся зависимости:
14
+ - `yarn.lock` → **yarn**
15
+ - `pnpm-lock.yaml` → **pnpm**
16
+ - `package-lock.json` → **npm**
17
+ - `bun.lock` / `bun.lockb` → **bun**
18
+ 3. Если структура неоднозначна — критерий: где лежат **`node_modules`** и какой lockfile обновляют в CI / документации репо.
19
+
20
+ ## Как запускать
21
+
22
+ - Рабочий каталог — тот, где **`package.json`** с нужными **scripts** (в этом репозитории зависимости и скрипты в **`app/`**).
23
+ - Примеры: `yarn lint`, `pnpm run test` — **в соответствии с обнаруженным менеджером**, без смешения разных CLI в одной задаче.
24
+
25
+ Если менеджер неочевиден — **посмотри файлы** (`package.json`, lockfile) инструментами чтения/списка каталога, **не угадывай**.
@@ -0,0 +1,48 @@
1
+ ---
2
+ description: Обязательный прогон ESLint и Stylelint после любых изменений кода
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Линтеры после изменений кода
7
+
8
+ ## Когда применять
9
+
10
+ После **любого** изменения исходников в репозитории: правка, создание или удаление файлов в `app/**` (TS/TSX/JS/MJS, CSS, styled/Linaria в `.ts`/`.tsx`, markdown с ESLint и т.д.).
11
+
12
+ Исключения без прогона линтеров: только правки **документации вне `app/`**, конфигов CI, `.cursor/rules/**`, если **не** менялся исполняемый код приложения.
13
+
14
+ ## Обязательные команды
15
+
16
+ Рабочий каталог — **`app/`** (там `package.json` со скриптами). Менеджер пакетов — **`package-manager.mdc`**.
17
+
18
+ 1. **`lint:js`** — полный ESLint по проекту (`eslint .` с расширениями из скрипта).
19
+ 2. **`lint:css`** — полный Stylelint (`**/*.{css,ts}`).
20
+
21
+ **Всегда запускать обе команды**, даже если задача не касалась стилей: Stylelint проверяет и CSS-in-JS в `.ts`.
22
+
23
+ Точечный ESLint/Stylelint только на один файл **не заменяет** полный прогон перед завершением задачи.
24
+
25
+ ## Алгоритм для агента
26
+
27
+ 1. Завершить правки кода.
28
+ 2. Запустить **`lint:js`** и **`lint:css`** из `app/` (через терминал, не «на глаз»).
29
+ 3. **Проанализировать весь вывод**: errors и warnings.
30
+ 4. **Исправить** все срабатывания в **изменённых файлах** и связанных с задачей; для Stylelint сначала пробовать **`lint:css --fix`**, если правило автоисправимо.
31
+ 5. При ненулевом exit code — повторить шаги 2–4 до успешного прогона или явного блокера.
32
+ 6. **Не считать задачу выполненной**, пока оба линтера не завершились с кодом 0 **или** в ответе пользователю не зафиксирован блокер (например, легаси вне скоупа) с перечислением оставшихся замечаний.
33
+
34
+ ## Что исправлять
35
+
36
+ - **Errors** — обязательно.
37
+ - **Warnings** — обязательно в файлах из текущей задачи; вне скоупа — не чинить «заодно», но **упомянуть** в ответе, если мешают нулевому exit code.
38
+ - **`eslint-disable`** — только точечно, с кратким комментарием «зачем» (`code-quality-and-refactoring.mdc`).
39
+
40
+ ## Связанные проверки
41
+
42
+ - **`type-check`** — обязателен при изменениях TypeScript (`next-app-core.mdc`); не подменяет ESLint/Stylelint.
43
+ - Полная валидация как в CI: **`lint`** (= `lint:js` + `lint:css` + `type-check`) — уместна перед крупным MR.
44
+
45
+ ## Конфиги
46
+
47
+ - ESLint: `app/eslint.config.mjs`
48
+ - Stylelint: `app/.stylelintrc` (порядок свойств — `css-property-order-stylelint.mdc`)
@@ -22,6 +22,16 @@ 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
+
25
35
  Для переиспользуемого компонента:
26
36
  - Папка с именем компонента:
27
37
  - `ComponentName.tsx`
@@ -1,58 +1,12 @@
1
1
  ---
2
- description: Роль агента для проведения технического ретроспективы (retro) команды / спринта
2
+ description: Роль агента для проведения технического ретроспективы (retro) команды / спринта. On-demand — предпочтительнее slash-команда /technical-retro.
3
3
  alwaysApply: false
4
4
  ---
5
5
 
6
- # Техническое ретро — роль агента
6
+ # Техническое ретро — rule alias
7
7
 
8
- Агент выступает как **нейтральный фасилитатор технической ретроспективы**, а не как ревьюер кода или оценщик людей. Цель вынести уроки, согласовать действия и улучшить процесс разработки.
8
+ Полный сценарий (включая блок **«Работа агентов»** для slug из `.cursor/team/tasks/`)в slash-комmand:
9
9
 
10
- ## Когда включать
10
+ **`.cursor/commands/technical-retro.md`** `/technical-retro`
11
11
 
12
- - Пользователь просит: «ретро», «техническое ретро», «разбор спринта/итерации», «что пошло хорошо / плохо», «action items после релиза».
13
- - Есть контекст: период (спринт, квартал), тема (релиз, инцидент, миграция), или приложены заметки/линки.
14
-
15
- ## Входные данные (запросить при нехватке)
16
-
17
- - **Период и фокус** (например: две недели, релиз X, постмортем).
18
- - **Участники/роли** (если важно для формулировок): только разработка или весь кросс‑функциональный поток.
19
- - **Ограничения**: время (15 / 30 / 60 мин), формат (async в чате vs синхронная повестка).
20
- - По желанию: список deliverables, метрики, ссылки на тикеты/MR — **без выдумывания** фактов, которых нет в сообщении или репозитории.
21
-
22
- Если контекста мало — задать **1–3 коротких уточняющих вопроса**, затем продолжить с явными допущениями в шапке вывода.
23
-
24
- ## Принципы фасилитации
25
-
26
- - **Безопасность и нейтральность**: формулировки про процесс и систему, не про «виноватых»; избегать ярлыков к людям.
27
- - **Конкретика**: от абстрактного «надо лучше общаться» — к наблюдаемым событиям и договорённостям.
28
- - **Баланс**: зафиксировать и позитив (что усилить), и зоны роста.
29
- - **Один владелец и срок** у каждого action item; избегать списка «сделает команда» без имени/роли.
30
- - **Не смешивать с code review**: ретро не заменяет построчный разбор диффа; при запросе «и ретро, и ревью» — развести два блока в ответе.
31
-
32
- ## Рекомендуемая структура сессии (по умолчанию)
33
-
34
- Подстроить под указанное время. Для короткого async‑формата — сжать до шагов 2–4.
35
-
36
- 1. **Цель и рамки** (1–2 предложения): зачем встреча, что в фокусе / что вне скоупа.
37
- 2. **Сбор фактов** (молча в чате — списком от пользователя; агент структурирует):
38
- - что шло хорошо,
39
- - что мешало / вызывало риски,
40
- - сюрпризы (технический долг, узкие места, зависимости).
41
- 3. **Группировка тем**: объединить дубли, выделить 3–7 тем для обсуждения (приоритет — влияние × изменяемость).
42
- 4. **Корневые причины (легко)**: для 1–2 самых болезненных тем — кратко «5 почему» или «что в процессе/артефактах позволило этому случиться», без морализаторства.
43
- 5. **Эксперименты на следующий цикл**: не больше 1–3 изменений процесса/инструментов; каждое — измеримое или с явным критерием «успех/не успех».
44
- 6. **Action items**: таблица или список с **что / владелец / до когда / как поймём, что сработало**.
45
-
46
- ## Формат ответа агента
47
-
48
- - Краткая **шапка**: период, фокус, допущения (если были).
49
- - **Повестка** или итог по этапам выше.
50
- - **Темы** — буллеты; по спорным местам — **вопросы команде**, а не окончательные выводы без данных.
51
- - **Решения и эксперименты** отдельным блоком.
52
- - **Action items** — в конце, каждый пункт с владельцем и дедлайном (или пометка «нужно назначить на встрече»).
53
-
54
- ## Ограничения
55
-
56
- - Не приписывать команде цитаты или факты, которых не было во входе.
57
- - Не выдавать юридические/HR‑рекомендации; при явных конфликтах или токсичности — мягко предложить эскалацию человеку, ответственному за команду, без детализации «наказаний».
58
- - Если пользователь просит только шаблон — выдать **шаблон повестки и доски** (колонки, таймбоксы) без выдуманного контента.
12
+ Используй rule только если command недоступен. Не дублируй содержимое command в ответе следуй command-файлу.
@@ -27,3 +27,4 @@ import { TransportError } from '@/types/TransportError'
27
27
  ```
28
28
 
29
29
  При ревью и правках кода **не добавлять** новые импорты типов из `@/types/...` кроме `@/types` и `@/types/enums`.
30
+ - Новые публичные типы — реэкспорт в `app/src/types/index.ts` по **`layer-barrel-exports.mdc`**.