@bonesofspring/ai-rules 0.1.42 → 0.2.0

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 (65) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/package.json +1 -1
  3. package/presets/claude/next/CLAUDE.md +1 -1
  4. package/presets/claude/next/agents/README.md +61 -0
  5. package/presets/claude/next/agents/api-contract-reviewer.md +1 -1
  6. package/presets/claude/next/agents/build-verifier.md +2 -0
  7. package/presets/claude/next/agents/feature-developer.md +8 -21
  8. package/presets/claude/next/agents/task-router.md +24 -126
  9. package/presets/claude/next/commands/task.md +1 -1
  10. package/presets/claude/next/rules/README.md +3 -3
  11. package/presets/claude/next/rules/api-and-data/api-services.md +3 -3
  12. package/presets/claude/next/rules/api-and-data/http-client.md +2 -2
  13. package/presets/claude/next/rules/api-and-data/store-rtk.md +2 -2
  14. package/presets/claude/next/rules/architecture/README.md +8 -11
  15. package/presets/claude/next/rules/architecture/api-public-imports.md +3 -26
  16. package/presets/claude/next/rules/architecture/architecture-boundaries.md +6 -6
  17. package/presets/claude/next/rules/architecture/feature-delivery-workflow.md +44 -69
  18. package/presets/claude/next/rules/architecture/layer-barrel-exports.md +5 -5
  19. package/presets/claude/next/rules/architecture/public-imports.md +46 -0
  20. package/presets/claude/next/rules/architecture/reference-features.md +4 -1
  21. package/presets/claude/next/rules/architecture/types-public-imports.md +3 -29
  22. package/presets/claude/next/rules/stack/next-app-core.md +20 -70
  23. package/presets/claude/next/rules/stack/no-type-assertion.md +3 -2
  24. package/presets/claude/next/rules/stack/types-jsdoc.md +1 -1
  25. package/presets/claude/next/rules/tooling-and-review/agent-team-intake.md +6 -0
  26. package/presets/claude/next/rules/tooling-and-review/agent-team-orchestrator.md +14 -1
  27. package/presets/claude/next/rules/tooling-and-review/code-quality.md +3 -11
  28. package/presets/claude/next/rules/tooling-and-review/code-review-mr.md +2 -2
  29. package/presets/claude/next/rules/tooling-and-review/package-manager.md +6 -15
  30. package/presets/claude/next/rules/tooling-and-review/post-change-lint.md +14 -24
  31. package/presets/claude/next/rules/ui-and-accessibility/css-property-order.md +6 -18
  32. package/presets/claude/next/rules/ui-and-accessibility/react-ui.md +1 -1
  33. package/presets/claude/next/skills/feature-delivery/SKILL.md +5 -20
  34. package/presets/cursor/next/AGENTS.md +1 -1
  35. package/presets/cursor/next/agents/README.md +81 -0
  36. package/presets/cursor/next/agents/api-contract-reviewer.md +1 -1
  37. package/presets/cursor/next/agents/build-verifier.md +2 -0
  38. package/presets/cursor/next/agents/code-reviewer.md +1 -1
  39. package/presets/cursor/next/agents/feature-developer.md +9 -30
  40. package/presets/cursor/next/agents/task-router.md +23 -125
  41. package/presets/cursor/next/commands/task.md +1 -1
  42. package/presets/cursor/next/rules/README.md +6 -7
  43. package/presets/cursor/next/rules/agent-team-intake.mdc +2 -2
  44. package/presets/cursor/next/rules/agent-team-orchestrator.mdc +14 -1
  45. package/presets/cursor/next/rules/api-public-imports.mdc +3 -24
  46. package/presets/cursor/next/rules/api-services.mdc +3 -3
  47. package/presets/cursor/next/rules/architecture-boundaries.mdc +6 -6
  48. package/presets/cursor/next/rules/code-quality-and-refactoring.mdc +3 -11
  49. package/presets/cursor/next/rules/code-review-mr.mdc +2 -2
  50. package/presets/cursor/next/rules/css-property-order-stylelint.mdc +6 -18
  51. package/presets/cursor/next/rules/feature-delivery-workflow.mdc +45 -22
  52. package/presets/cursor/next/rules/http-client.mdc +2 -2
  53. package/presets/cursor/next/rules/layer-barrel-exports.mdc +5 -5
  54. package/presets/cursor/next/rules/next-app-core.mdc +18 -71
  55. package/presets/cursor/next/rules/no-type-assertion-as-import-export.mdc +4 -1
  56. package/presets/cursor/next/rules/package-manager.mdc +6 -15
  57. package/presets/cursor/next/rules/post-change-lint.mdc +14 -24
  58. package/presets/cursor/next/rules/public-imports.mdc +48 -0
  59. package/presets/cursor/next/rules/react-ui.mdc +1 -1
  60. package/presets/cursor/next/rules/reference-features.mdc +5 -1
  61. package/presets/cursor/next/rules/store-rtk.mdc +2 -2
  62. package/presets/cursor/next/rules/types-jsdoc.mdc +1 -1
  63. package/presets/cursor/next/rules/types-public-imports.mdc +3 -26
  64. package/presets/cursor/next/skills/feature-delivery/SKILL.md +5 -20
  65. package/presets/cursor/next/rules/feature-delivery-flow.mdc +0 -74
@@ -1,59 +1,28 @@
1
1
  ---
2
2
  paths:
3
- - app/src/**/*
3
+ - app/src/ui/**/*
4
+ - app/src/store/**/*
5
+ - app/src/api/**/*
6
+ - app/src/types/**/*
4
7
  ---
5
8
 
6
9
  # Доставка фичи (сквозной порядок)
7
10
 
8
- Типичная фича с данными с backend и общим состоянием. Детали слоёв — в `architecture/architecture-boundaries.md`, `stack/next-app-core.md`.
9
-
10
- Плейсхолдеры: `<FeatureName>`, `<ServiceRoot>`, `<Area>` — нейтральные имена; реальные имена брать из соседних фич того же типа.
11
-
12
- ## Инварианты перед кодом
13
-
14
- - Найти в том же слое фичу сопоставимой сложности и **повторить структуру каталогов и паттерн именования**.
15
- - Не добавлять `any`; при необходимости — `unknown` и сужение типа.
16
- - После правок — **`tooling-and-review/post-change-lint.md`**: `lint:js` + `lint:css` + `type-check`; менеджер пакетов — `tooling-and-review/package-manager.md`.
11
+ Типичная фича с данными с backend и общим состоянием. Детали слоёв — `architecture/architecture-boundaries.md`, `stack/next-app-core.md`.
17
12
 
18
13
  ## Чеклист (порядок работ)
19
14
 
20
- 1. **Доменные типы** — `app/src/types/**`, экспорт через barrel `app/src/types/index.ts` (`architecture/types-public-imports.md`, **`architecture/layer-barrel-exports.md`**); JSDoc полей — `stack/types-jsdoc.md`.
21
- 2. **Контракт API** — DTO ответов/запросов там, где принято в репо; целевые доменные типы в `@/types`.
22
- 3. **Мапперы** — DTO → домен в `*responseMappers.ts` или аналоге; чистые функции (`api-and-data/api-services.md`).
23
- 4. **Сервисы** — `app/src/api/services/<ServiceRoot>/<Segment>/`: вызовы только через прикладные клиенты `app/src/api/clients/**`, public API модуля (`api-and-data/api-services.md`, `api-and-data/http-client.md`, **`architecture/layer-barrel-exports.md`**). Без `fetch` из UI/store. Новые публичные экспорты (фасады, типы, **константы путей** для моков) — в **`app/src/api/index.ts`** (`@/api`).
24
- 5. **Моки (MSW)** `app/src/mocks/data/<feature>/`: `data.ts`, `handlers.ts`; собрать хендлеры в **`app/src/mocks/handlers.ts`**. В хендлерах — **те же константы путей**, что и в API (импорт из `@/api`), **не дублировать сырые строки URL**. В репозитории могут быть **два контура** (браузерный worker и Node `setupServer` для тестов): общий список хендлеров должен оставаться согласованным — при добавлении проверять входные точки в `app/src/mocks/**`. Точка входа регистрации (например `app/src/mocks/index.js`).
25
- 6. **Состояние**`app/src/store/slices/<FeatureName>/`: `createSlice` / `createAsyncThunk`, доменные модели в state (`api-and-data/store-rtk.md`); thunk вызывает сервисы из `@/api`. Подключить редюсер в **`app/src/store/reducers.ts`**. Новый **middleware**: `app/src/store/middleware/**`, регистрация в **`app/src/store/index.ts`** в цепочке `configureStore` (порядок `prepend`/`concat` — как у соседних middleware).
26
- 7. **UI** — `app/src/ui/pages/<FeatureName>Page/**` и/или `app/src/ui/components/**`; стили — как в проекте; тонкие компоненты, типы из `@/types`, без DTO (`ui-and-accessibility/react-ui.md`, `architecture/architecture-boundaries.md`, `ui-and-accessibility/no-props-spread.md`). Данные и загрузка — через store/hooks, без прямого HTTP.
27
- 8. **Unit‑тесты**`*.spec.ts` / `*.spec.tsx` (`testing/tests-unit.md`); мапперы и нетривиальная логика — обязательно; e2e Jest не запускает (см. `jest.config.js`). При смене HTTP‑клиента — behavior‑тесты (`api-and-data/http-client.md`).
28
- 9. **E2E**план: `app/__tests__/e2e/<Area>/<plan>.cases.md`; реализация: `*.spec.ts` рядом (`testing/tests-e2e-structure.md`, `testing/playwright-agents.md`).
29
- 10. **Завершение** — **`tooling-and-review/post-change-lint.md`**: из `app/` обязательно `lint:js` + `lint:css` (полный прогон), затем `type-check`.
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`**.
30
24
 
31
- ## Полный flow (слой за слоем)
32
-
33
- ```mermaid
34
- flowchart LR
35
- typesNode["types_domain"]
36
- apiNode["api_services_mappers"]
37
- mocksNode["mocks_msw"]
38
- storeNode["store_slice_thunks"]
39
- mwNode["middleware_optional"]
40
- uiNode["ui_pages_components"]
41
- unitNode["unit_tests"]
42
- e2eNode["e2e_plans_specs"]
43
-
44
- typesNode --> apiNode
45
- apiNode --> mocksNode
46
- apiNode --> storeNode
47
- storeNode --> mwNode
48
- storeNode --> uiNode
49
- apiNode --> unitNode
50
- storeNode --> unitNode
51
- uiNode --> unitNode
52
- uiNode --> e2eNode
53
- mocksNode --> e2eNode
54
- ```
55
-
56
- ## Поток данных (ориентир)
25
+ ## Поток данных
57
26
 
58
27
  ```mermaid
59
28
  flowchart LR
@@ -69,36 +38,42 @@ flowchart LR
69
38
  Store --> UI[UI]
70
39
  ```
71
40
 
72
- ## Частичные сценарии (вход с середины)
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
+ ## Частичные сценарии
73
52
 
74
53
  | Задача | Минимум действий |
75
54
  |--------|------------------|
76
- | Только API + типы | Типы в `app/src/types/**`, сервис и мапперы, реэкспорт в `app/src/api/index.ts`; unit на маппер. |
77
- | Только моки | Константа пути уже в `@/api`; `handlers.ts` + данные; регистрация в `app/src/mocks/handlers.ts`; при необходимости убедиться, что хендлеры подхватываются и в браузерном, и в Node‑контуре MSW. |
78
- | Только store | Thunk на существующий метод `@/api`; slice + `app/src/store/reducers.ts`. |
79
- | Только UI | Читать готовое состояние из store; не добавлять HTTP/DTO; `data-testid` при необходимости для e2e. |
80
- | Только e2e | Синхронизировать `*.cases.md` и спеки; page object и `_shared`. |
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. |
81
60
 
82
61
  ## Антипаттерны
83
62
 
84
- - DTO и структуры ответа бэкенда в UI или в нетипизированных кусках store.
85
- - Прямой вызов HTTP‑клиента из компонента или thunk’а в обход сервисного слоя.
86
- - Deep‑импорты в `app/src/api/services/**/…` из UI/store там, где принят импорт из `@/api`.
87
- - Проброс пропсов в компоненты через `{...props}` — см. `ui-and-accessibility/no-props-spread.md`.
63
+ - DTO в UI или нетипизированном store.
64
+ - HTTP-клиент из компонента/thunk в обход сервиса.
65
+ - Deep-import `@/api/services/**` из UI/store.
66
+ - `{...props}` — `ui-and-accessibility/no-props-spread.md`.
88
67
 
89
- ## Матрица: что меняю какие правила перечитать
68
+ ## Матрица: зона → правила
90
69
 
91
- | Зона в репозитории | Правила (`.claude/rules/`) |
92
- |--------------------|----------------------------|
93
- | `app/src/api/clients/**`, `app/src/lib/clients/**` | `api-and-data/http-client.md`; при изменении клиента — `testing/tests-unit.md` |
94
- | `app/src/api/services/**` | `api-and-data/api-services.md`, `architecture/layer-barrel-exports.md`; при необходимости `api-and-data/http-client.md` |
95
- | `app/src/store/**` | `api-and-data/store-rtk.md`, `architecture/architecture-boundaries.md`, `architecture/api-public-imports.md` |
96
- | `app/src/ui/**` | `ui-and-accessibility/react-ui.md`, `ui-and-accessibility/no-props-spread.md`, `architecture/types-public-imports.md`, `architecture/api-public-imports.md` |
97
- | `app/src/types/**` | `architecture/types-public-imports.md`, `stack/types-jsdoc.md`, `architecture/layer-barrel-exports.md` |
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` |
98
77
  | `app/__tests__/e2e/**` | `testing/tests-e2e-structure.md`, `testing/playwright-agents.md` |
99
78
 
100
- Path-scoped правила подгружаются при работе с соответствующими файлами; эта матрица нужна, когда открыт другой файл или идёт общий чат.
101
-
102
- ## Требование к агенту
103
-
104
- При добавлении или существенном расширении фичи **пройти чеклист сверху** и при правках в зоне из таблицы **ориентироваться на указанные правила**, не смешивать слои и не обходить public API модулей.
79
+ При добавлении или расширении фичи **пройти чеклист** и правила из таблицы для затронутых зон.
@@ -10,7 +10,7 @@ paths:
10
10
  Для **любого слоя** (каталога, пакета, bounded context), у которого:
11
11
 
12
12
  - есть **корневой barrel** — единая точка импорта для внешних потребителей;
13
- - deep-импорты внутрь слоя **запрещены** снаружи (ESLint `no-restricted-imports`, правила `architecture/*-public-imports.md`).
13
+ - deep-импорты внутрь слоя **запрещены** снаружи (ESLint `no-restricted-imports`, правила `architecture/public-imports.md`).
14
14
 
15
15
  Примеры alias/entry point в разных проектах: `@/api`, `@/types`, `@/core`, `@/store`, `packages/foo`.
16
16
 
@@ -33,7 +33,7 @@ paths:
33
33
 
34
34
  При добавлении или существенном расширении **модуля внутри регламентированного слоя**:
35
35
 
36
- 1. Определить слой, его **корневой barrel** и доп. entry points (`architecture/*-public-imports.md`).
36
+ 1. Определить слой, его **корневой barrel** и доп. entry points (`architecture/public-imports.md`).
37
37
  2. Создать/обновить **локальный** `index.ts` — только публичные символы.
38
38
  3. Если в слое есть **фасад/агрегатор** (`*ApiService.ts`, `rootReducer`, …) — подключить модуль там.
39
39
  4. Добавить **реэкспорт** новых публичных символов в **корневой barrel** слоя.
@@ -43,7 +43,7 @@ paths:
43
43
 
44
44
  ## Как найти регламентированные слои в репозитории
45
45
 
46
- 1. Правила `architecture/*-public-imports.md` в `.claude/rules/architecture/`.
46
+ 1. Правила `architecture/public-imports.md` в `.claude/rules/architecture/`.
47
47
  2. ESLint `no-restricted-imports` — паттерны `@/<layer>/*` с исключением barrel.
48
48
  3. `architecture/architecture-boundaries.md`, README проекта.
49
49
 
@@ -51,8 +51,8 @@ paths:
51
51
 
52
52
  | Слой | Корневой barrel | Правило импортов |
53
53
  |------|-----------------|------------------|
54
- | API | `app/src/api/index.ts` | `architecture/api-public-imports.md` |
55
- | Types | `app/src/types/index.ts` | `architecture/types-public-imports.md` (+ `@/types/enums`) |
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
56
  | Core | `app/src/core/index.ts` | ESLint: `@/core/index` |
57
57
 
58
58
  Иллюстрация двух уровней (API): локальный `services/.../<Feature>/index.ts` → фасад `*ApiService.ts` → `app/src/api/index.ts`.
@@ -0,0 +1,46 @@
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,6 +1,9 @@
1
1
  ---
2
2
  paths:
3
- - app/src/**/*
3
+ - app/src/ui/**/*
4
+ - app/src/store/**/*
5
+ - app/src/api/**/*
6
+ - app/src/types/**/*
4
7
  ---
5
8
 
6
9
  # Эталонные фичи (reference features)
@@ -1,34 +1,8 @@
1
1
  ---
2
2
  paths:
3
- - app/src/**/*.ts
4
- - app/src/**/*.tsx
3
+ - app/src/types/**/*
5
4
  ---
6
5
 
7
- # Импорты из `@/types`
6
+ # Deprecated
8
7
 
9
- - **Публичный API типов** — barrel `app/src/types/index.ts`, импортировать типы и интерфейсы только как `@/types` (или `@/types/index` при необходимости явного пути).
10
- - **Запрещено** для потребителей слоя обходить barrel: любой импорт вида `@/types/<что‑угодно>`, кроме перечисленного ниже исключения для enum.
11
- - Отдельно **нельзя** импортировать из вложенных файлов `*.types.ts` по путям `@/types/**/…*.types.ts` (типичный deep‑импорт).
12
- - **Исключение — enum**: перечисления можно импортировать только из `@/types/enums` / `@/types/enums.ts` (не из других файлов под `@/types`).
13
-
14
- ## Внутри слоя `app/src/types/**`
15
-
16
- - При реализации и поддержке barrel‑файла допустимы **относительные** импорты между файлами внутри `app/src/types` (например `from './User.types'`). Это не относится к потребителям слоя.
17
-
18
- ## Примеры
19
-
20
- ```typescript
21
- // ✅ Допустимо — доменные и транспортные сущности с теми именами, что экспортирует barrel
22
- import type { TUserProfile } from '@/types'
23
- import { SomeEnum } from '@/types/enums'
24
-
25
- // ❌ Запрещено (обход публичного API)
26
- import type { TUserProfile } from '@/types/User.types'
27
- import { TransportError } from '@/types/TransportError'
28
- ```
29
-
30
- При ревью и правках кода **не добавлять** новые импорты типов из `@/types/...` кроме `@/types` и `@/types/enums`.
31
-
32
- - Новые публичные типы — реэкспорт в `app/src/types/index.ts` по **`architecture/layer-barrel-exports.md`**.
33
-
34
- **Коллизии формулировок:** если в разных правилах расходятся детали **импорта типов**, источник правды — **этот файл** (`@/types`, `@/types/enums`).
8
+ Содержимое перенесено в **`architecture/public-imports.md`** (раздел `@/types`).
@@ -1,83 +1,33 @@
1
1
  # Стек и окружение
2
2
 
3
- Конкретные версии пакетов и инструментов — **из `package.json` и конфигов целевого репозитория**. Ниже — рамка preset (Next.js + React + TypeScript), без привязки к конкретному вендору UI, моков или APM:
3
+ Конкретные версии — **из `package.json` и конфигов целевого репозитория**. Рамка preset: Next.js, React, TypeScript; runner/e2e/mocks/UI/APM как заведено в репо.
4
4
 
5
- - **Фреймворк:** Next.js, React, TypeScript (strict — если включён в проекте).
6
- - **Сборка и Node:** как задано в репозитории.
7
- - **Тесты:** unit/integration — runner и библиотеки проекта; e2e — инструмент проекта (правила для агентов Playwright — в `testing/playwright-agents.md`).
8
- - **Моки HTTP/API:** если приняты в репо — повторять существующую схему (каталоги, регистрация, точка входа).
9
- - **Стили и UI:** способ стилизации и **дизайн‑система / токены** — как уже заведено в коде; приоритет общим примитивам и токенам вместо разрозненных «магических» значений.
10
- - **Наблюдаемость:** только если уже подключена в проекте — централизованно (клиент, обёртки), без дублирования в каждом методе.
5
+ # Структура проекта
11
6
 
12
- # Структура проекта (верхний уровень)
13
-
14
- - `app/` корень Next.js приложения.
15
- - `app/src/**` — исходный код приложения.
16
- - `app/__tests__/e2e/**` — e2e‑тесты и планы.
17
- - `app/tsconfig.json`:
18
- - `baseUrl: "."`
19
- - `paths: { "@/*": ["./src/*"] }`
20
-
21
- **Требование:** во всех новых изменениях использовать алиас `@/*` вместо относительных импортов выше по дереву.
7
+ - `app/` корень Next.js; `app/src/**` — код; `app/__tests__/e2e/**` — e2e.
8
+ - `app/tsconfig.json`: `baseUrl: "."`, `paths: { "@/*": ["./src/*"] }`.
9
+ - **Требование:** `@/*` вместо относительных импортов выше по дереву.
22
10
 
23
11
  # Архитектурные слои
24
12
 
25
- - **UI слой** (`app/src/ui/**`):
26
- - `app/src/ui/pages/**` — страницы и контейнеры.
27
- - `app/src/ui/components/**` переиспользуемые компоненты.
28
- - **Store слой** (`app/src/store/**`):
29
- - `app/src/store/slices/**` — модули состояния (Redux Toolkit; подробности в `api-and-data/store-rtk.md`).
30
- - `app/src/store/middleware/**` middleware для сайд‑эффектов (например, файлы, аналитика).
31
- - **API слой** (`app/src/api/**` прежде всего `services/**`, плюс `clients/**`, корневой barrel `index.ts`):
32
- - Сервисы и мапперы; **потребители вне каталога** импортируют только через `@/api` (`architecture/api-public-imports.md`).
33
- - **HTTP‑транспорт** (`app/src/lib/clients/**`, `app/src/api/clients/**`):
34
- - Один механизм запросов, без разбросанного «сырого» `fetch`/`XMLHttpRequest` по фичам. Детали — **`api-and-data/http-client.md`**.
35
- - **Типы** (`app/src/types/**`):
36
- - Доменные модели и транспортные контракты; **потребители** импортируют только через **`architecture/types-public-imports.md`** (`@/types`, `@/types/enums`).
37
- - **Моки и тестовые данные** (`app/src/mocks/**`):
38
- - По структуре и назначению — как принято в репозитории.
39
-
40
- ## Порты и адаптеры (сопоставление с каталогами)
41
-
42
- Та же идея, что в `architecture/architecture-boundaries.md` (раздел **«Порты и адаптеры»**): UI и store зависят от **контракта** к backend (`@/api` + доменные типы), реализация HTTP — в **`app/src/lib/clients/**`** и **`app/src/api/clients/**`**. Детали транспорта — `api-and-data/http-client.md`; импорты `@/api` — `architecture/api-public-imports.md`.
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/**` | по схеме репозитория |
43
21
 
44
- # Общие архитектурные принципы
45
-
46
- - **Чёткое разделение слоёв**:
47
- - UI знает о доменных типах (из `@/types` / `@/types/enums`) и публичных API store; при необходимости импортирует из **`@/api`** — см. `architecture/api-public-imports.md` и `architecture/architecture-boundaries.md` (**«UI и обращение к API»**).
48
- - Store знает о доменных типах и вызывает API‑сервисы через **`@/api`**.
49
- - API‑сервисы знают о DTO, мапперах и вызовах через клиенты из `app/src/api/clients/**` (`api-and-data/http-client.md`).
50
- - **Никаких «проникновений» слоёв**:
51
- - UI не вызывает HTTP‑клиент и не работает с DTO; сценарии с записью в общий state — через store; узкие исключения для сервисов из UI — только по `architecture/architecture-boundaries.md`.
52
- - Store не собирает запросы сам и не обходит API‑сервисы; данные для state — доменные модели после маппинга. Транспортные типы ответа/ошибки во thunk — как в `@/types`, согласованно с `api-and-data/http-client.md`, `api-and-data/store-rtk.md`.
53
- - **Доменная логика и state**:
54
- - DTO → домен — в **мапперах** и чистых функциях (`api-and-data/api-services.md`); **редюсеры и селекторы** — узкие. Подробности — `api-and-data/store-rtk.md`.
55
- - **Типы — источник правды**:
56
- - При коллизии по **импорту типов** — **`architecture/types-public-imports.md`**.
57
- - Новые сущности — в `app/src/types/**` с экспортом через barrel.
58
- - Не использовать `any`; при необходимости — `unknown` + безопасное сужение типа.
59
-
60
- # Кодстайл и качества кода
61
-
62
- - Следовать конфигам линтеров и форматтера **проекта** (`eslint`, `prettier`, `stylelint` — какие есть в репо).
63
- - KISS, DRY, SOLID; модульность; визуальная консистентность через UI‑примитивы и токены.
64
- - При добавлении нового кода **искать и копировать существующие паттерны**:
65
- - Для страниц — `app/src/ui/pages/**`.
66
- - Для блоков — `app/src/ui/components/**`.
67
- - Для API — `app/src/api/services/**`.
68
- - Для состояния — `app/src/store/slices/**`.
22
+ Границы слоёв, порты/адаптеры, UI→API — **`architecture/architecture-boundaries.md`**. Импорты `@/types`, `@/api` — **`architecture/public-imports.md`**.
69
23
 
70
24
  # Работа агента
71
25
 
72
- При генерации кода:
73
-
74
- - При добавлении или существенном расширении фичи — **`architecture/feature-delivery-workflow.md`**.
75
- - Определить целевой слой (UI/store/API/типизация/тесты).
76
- - Найти похожие примеры и **копировать архитектурный паттерн** (структура файлов, типы, именование).
77
- - Не упрощать архитектуру (не тянуть DTO и HTTP в UI; вызовы сервисов из UI — только в рамках `architecture/architecture-boundaries.md`).
78
- - Избегать `any`; при необходимости — `unknown` с безопасным сужением.
79
- - После **любых** изменений — **`tooling-and-review/post-change-lint.md`** и **`tooling-and-review/package-manager.md`**.
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` + сужение)
80
30
 
81
- Задачи на **сеть, замену HTTP‑библиотеки, новые эндпоинты**: **`api-and-data/http-client.md`** + **`api-and-data/api-services.md`** + **`api-and-data/store-rtk.md`**.
31
+ Задачи на **сеть, HTTP, новые эндпоинты**: `api-and-data/http-client.md` + `api-and-data/api-services.md` + `api-and-data/store-rtk.md`.
82
32
 
83
- См. также **`rules/README.md`** — полный каталог правил пресета.
33
+ См. **`rules/README.md`** — полный каталог.
@@ -1,7 +1,8 @@
1
1
  ---
2
2
  paths:
3
- - app/src/**/*.ts
4
- - app/src/**/*.tsx
3
+ - app/src/api/**/*
4
+ - app/src/store/**/*
5
+ - app/src/types/**/*
5
6
  ---
6
7
 
7
8
  # Не использовать `as` для приведения типов при экспорте и импорте
@@ -34,4 +34,4 @@ paths:
34
34
  - Поддерживать **тот же стиль**, что в файле.
35
35
  - Одна-две фразы на тип, одна строка на поле — норма.
36
36
 
37
- См. также импорты и barrel: `architecture/types-public-imports.md`.
37
+ См. также импорты и barrel: `architecture/public-imports.md`.
@@ -1,3 +1,9 @@
1
+ ---
2
+ paths:
3
+ - .claude/commands/**/*
4
+ - .claude/team/**/*
5
+ ---
6
+
1
7
  # Agent team intake
2
8
 
3
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:
@@ -2,6 +2,8 @@
2
2
 
3
3
  Parent agent = **manager**. Router plans; specialists execute. Artifacts: `.claude/team/tasks/<slug>/`.
4
4
 
5
+ Work request без `/task` — см. **`tooling-and-review/agent-team-intake.md`**.
6
+
5
7
  ## Entry points
6
8
 
7
9
  | Command | When |
@@ -116,6 +118,17 @@ After each agent completes, ensure `status.json` has `state: completed` (or `awa
116
118
 
117
119
  If `pipeline.json` is missing (old `/feature-start` tasks), fall back to fixed phases: analysis → development → review → testing.
118
120
 
121
+ ## Skip pipeline when
122
+
123
+ Do **not** run `/task` + router for:
124
+
125
+ - Pure questions («как работает X», «объясни»).
126
+ - Typo / one-file fix / trivial config with no architecture risk.
127
+ - User explicitly says «без pipeline», «просто сделай», or continues an active slug.
128
+ - Single-line `docs-only` with no code impact.
129
+
130
+ Borderline work requests — см. **`tooling-and-review/agent-team-intake.md`**.
131
+
119
132
  ## Auto-detection (optional)
120
133
 
121
- When user describes a **task** (not a question "how does X work"), suggest `/task <their message>` or run router proactively if they agree.
134
+ When user describes a **non-trivial task** (not a question), suggest `/task <message>` or run router if they agree.
@@ -32,19 +32,11 @@
32
32
  - сначала локально улучшить архитектуру минимальными шагами;
33
33
  - оставить код в консистентном состоянии.
34
34
 
35
- ## ESLint, Stylelint и плагины
35
+ ## Линтеры
36
36
 
37
- - Учитывать **все активные правила ESLint** и **подключённые плагины** проекта (конфиг: `app/eslint.config.mjs`, базовые пресеты в т.ч. `@sh/eslint-config-react`, `@sh/eslint-config-boundaries` и локальные overrides).
38
- - Учитывать **Stylelint** для CSS и CSS-in-JS (конфиг: `app/.stylelintrc`; порядок свойств — `ui-and-accessibility/css-property-order.md`).
39
- - Новый или изменённый код не должен нарушать эти правила.
40
- - После **каждого** изменения кода агент **обязан** выполнить **`tooling-and-review/post-change-lint.md`**: полный прогон **`lint:js`** и **`lint:css`**, анализ вывода, исправление срабатываний в зоне задачи.
41
- - Отключение правила (`eslint-disable`) — только **точечно** (строка/небольшой блок) и с **кратким комментарием**, зачем это нужно; отключать «на весь файл» без веской причины не следует.
37
+ Lint/stylelint только **`tooling-and-review/post-change-lint.md`**; ESLint config: `app/eslint.config.mjs`. Отключение правила (`eslint-disable`) только **точечно** с кратким комментарием «зачем».
42
38
 
43
39
  ## Требование к агенту
44
40
 
45
- При каждом изменении:
46
-
47
- - Поддерживать принцип **«boy scout rule»**:
48
- - оставлять модуль в немного лучшем состоянии, чем до изменения (простые, безопасные улучшения).
41
+ - **Boy scout rule:** оставлять модуль немного лучше, чем до изменения (простые, безопасные улучшения).
49
42
  - Не жертвовать архитектурой и слоями ради краткости реализации.
50
- - **Не завершать задачу**, пока не пройдены обязательные линтеры (`tooling-and-review/post-change-lint.md`).
@@ -18,13 +18,13 @@
18
18
  ### Импорты и организация кода
19
19
 
20
20
  - Использование алиаса `@/...` вместо относительных импортов выше по дереву.
21
- - Отсутствие deep‑импортов во внешние фичи; только public API; в файлах вне `app/src/api/**` импорты из API — только `from '@/api'` (`architecture/api-public-imports.md`, дублирует ESLint).
21
+ - Отсутствие deep‑импортов во внешние фичи; только public API; в файлах вне `app/src/api/**` импорты из API — только `from '@/api'` (`architecture/public-imports.md`, дублирует ESLint).
22
22
  - При новых/изменённых модулях в регламентированных слоях — реэкспорт публичных символов в корневой barrel по **`architecture/layer-barrel-exports.md`**.
23
23
  - Размещение новых файлов в корректных слоях и директориях фич.
24
24
 
25
25
  ### Типы и TS‑строгость
26
26
 
27
- - Не допускать новых `any`; предпочитать доменные типы из `@/types` (barrel, см. `architecture/types-public-imports.md`).
27
+ - Не допускать новых `any`; предпочитать доменные типы из `@/types` (barrel, см. `architecture/public-imports.md`).
28
28
  - Проверять корректность пропсов/возвращаемых типов, особенно в UI и API‑слое.
29
29
 
30
30
  ### UI и стили
@@ -1,20 +1,11 @@
1
1
  # Менеджер пакетов (терминал)
2
2
 
3
- Перед **`npm install` / `yarn` / `pnpm` / `bun`** и любыми **`… run …`** (lint, test, dev, build) **сначала определи**, какой менеджер закреплён в этом репозитории, и **используй только его**.
3
+ Перед **`npm install` / `yarn` / `pnpm` / `bun`** и **`… run …`** определи менеджер репозитория и **используй только его**.
4
4
 
5
- ## Как определить (по убыванию надёжности)
5
+ ## Как определить
6
6
 
7
- 1. Поле **`packageManager`** в `package.json` (корень монорепо или `app/package.json`) — `yarn@…`, `pnpm@…`, `npm@…`, `bun@…`.
8
- 2. **Lockfile** рядом с тем `package.json`:
9
- - `yarn.lock` **yarn**
10
- - `pnpm-lock.yaml` → **pnpm**
11
- - `package-lock.json` → **npm**
12
- - `bun.lock` / `bun.lockb` → **bun**
13
- 3. Если неоднозначно — где лежат **`node_modules`** и какой lockfile обновляют в CI.
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.
14
10
 
15
- ## Как запускать
16
-
17
- - Рабочий каталог — там, где **`package.json`** с нужными **scripts** (в этом репозитории — **`app/`**).
18
- - Примеры: `yarn lint`, `pnpm run test` — **в соответствии с обнаруженным менеджером**.
19
-
20
- Если менеджер неочевиден — **посмотри файлы** инструментами чтения, **не угадывай**.
11
+ Рабочий каталог для scripts — **`app/`**. Примеры: `yarn lint`, `pnpm run test`. Не угадывай — проверь файлы.
@@ -2,42 +2,32 @@
2
2
 
3
3
  ## Когда применять
4
4
 
5
- После **любого** изменения исходников в репозитории: правка, создание или удаление файлов в `app/**` (TS/TSX/JS/MJS, CSS, styled/Linaria в `.ts`/`.tsx`, markdown с ESLint и т.д.).
5
+ После **любого** изменения исходников в `app/**` (TS/TSX/JS/MJS, CSS, styled/Linaria в `.ts`/`.tsx`).
6
6
 
7
- Исключения без прогона линтеров: только правки **документации вне `app/`**, конфигов CI, `.claude/rules/**`, если **не** менялся исполняемый код приложения.
7
+ Исключения: правки документации вне `app/`, конфигов CI, `.claude/rules/**`, если исполняемый код приложения не менялся.
8
+
9
+ **Pipeline exception:** если задача идёт через agent team и следующий шаг — `build-verifier`, developer может ограничиться lint/type-check **изменённых файлов**; полный прогон — обязанность `build-verifier`. В single-agent режиме (без pipeline) — всегда полный прогон.
8
10
 
9
11
  ## Обязательные команды
10
12
 
11
- Рабочий каталог — **`app/`** (там `package.json` со скриптами). Менеджер пакетов — **`tooling-and-review/package-manager.md`**.
13
+ Рабочий каталог — **`app/`**. Менеджер пакетов — **`tooling-and-review/package-manager.md`**.
12
14
 
13
- 1. **`lint:js`** — полный ESLint по проекту (`eslint .` с расширениями из скрипта).
15
+ 1. **`lint:js`** — полный ESLint по проекту.
14
16
  2. **`lint:css`** — полный Stylelint (`**/*.{css,ts}`).
15
17
 
16
- **Всегда запускать обе команды**, даже если задача не касалась стилей: Stylelint проверяет и CSS-in-JS в `.ts`.
17
-
18
- Точечный ESLint/Stylelint только на один файл **не заменяет** полный прогон перед завершением задачи.
18
+ Точечный lint на один файл **не заменяет** полный прогон перед завершением задачи (кроме pipeline exception выше).
19
19
 
20
- ## Алгоритм для агента
20
+ ## Алгоритм
21
21
 
22
22
  1. Завершить правки кода.
23
- 2. Запустить **`lint:js`** и **`lint:css`** из `app/` (через терминал, не «на глаз»).
24
- 3. **Проанализировать весь вывод**: errors и warnings.
25
- 4. **Исправить** все срабатывания в **изменённых файлах** и связанных с задачей; для Stylelint сначала пробовать **`lint:css --fix`**, если правило автоисправимо.
26
- 5. При ненулевом exit code повторить шаги 2–4 до успешного прогона или явного блокера.
27
- 6. **Не считать задачу выполненной**, пока оба линтера не завершились с кодом 0 **или** в ответе пользователю не зафиксирован блокер (например, легаси вне скоупа) с перечислением оставшихся замечаний.
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`).
28
27
 
29
28
  ## Что исправлять
30
29
 
31
30
  - **Errors** — обязательно.
32
- - **Warnings** — обязательно в файлах из текущей задачи; вне скоупа — не чинить «заодно», но **упомянуть** в ответе, если мешают нулевому exit code.
33
- - **`eslint-disable`** — только точечно, с кратким комментарием «зачем» (`tooling-and-review/code-quality.md`).
34
-
35
- ## Связанные проверки
36
-
37
- - **`type-check`** — обязателен при изменениях TypeScript (`stack/next-app-core.md`); не подменяет ESLint/Stylelint.
38
- - Полная валидация как в CI: **`lint`** (= `lint:js` + `lint:css` + `type-check`) — уместна перед крупным MR.
39
-
40
- ## Конфиги
31
+ - **Warnings** — обязательно в файлах задачи; вне скоупа — упомянуть, если мешают нулевому exit code.
41
32
 
42
- - ESLint: `app/eslint.config.mjs`
43
- - Stylelint: `app/.stylelintrc` (порядок свойств — `ui-and-accessibility/css-property-order.md`)
33
+ Конфиги: `app/eslint.config.mjs`, `app/.stylelintrc` (порядок CSS — `ui-and-accessibility/css-property-order.md`).