@bonesofspring/ai-rules 0.2.0 → 0.2.1

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 (62) hide show
  1. package/CONTRIBUTING.md +102 -0
  2. package/README.md +2 -0
  3. package/bin/cli.js +4 -2
  4. package/fragments/BUGBOT.md +23 -0
  5. package/package.json +10 -2
  6. package/presets/claude/next/BUGBOT.md +16 -0
  7. package/presets/claude/next/CLAUDE.md +5 -1
  8. package/presets/claude/next/agents/README.md +16 -15
  9. package/presets/claude/next/agents/code-reviewer.md +1 -1
  10. package/presets/claude/next/agents/playwright-test-generator.md +16 -65
  11. package/presets/claude/next/agents/playwright-test-healer.md +16 -51
  12. package/presets/claude/next/agents/playwright-test-planner.md +15 -55
  13. package/presets/claude/next/agents/task-analyst.md +1 -1
  14. package/presets/claude/next/agents/task-router.md +24 -0
  15. package/presets/claude/next/agents/tech-writer.md +1 -1
  16. package/presets/claude/next/hooks.json +17 -0
  17. package/presets/claude/next/rules/README.md +6 -2
  18. package/presets/claude/next/rules/architecture/README.md +2 -1
  19. package/presets/claude/next/rules/architecture/architecture-boundaries-ui.md +15 -0
  20. package/presets/claude/next/rules/architecture/architecture-boundaries.md +4 -1
  21. package/presets/claude/next/rules/architecture/feature-delivery-workflow.md +1 -1
  22. package/presets/claude/next/rules/architecture/layer-barrel-exports.md +1 -1
  23. package/presets/claude/next/rules/stack/README.md +2 -1
  24. package/presets/claude/next/rules/stack/navigation-router-ui.md +15 -0
  25. package/presets/claude/next/rules/stack/navigation-router.md +2 -1
  26. package/presets/claude/next/rules/stack/next-app-core.md +1 -1
  27. package/presets/claude/next/rules/tooling-and-review/agent-team-orchestrator.md +6 -0
  28. package/presets/claude/next/rules/tooling-and-review/code-review-mr.md +22 -59
  29. package/presets/claude/next/rules/ui-and-accessibility/README.md +1 -2
  30. package/presets/claude/next/rules/ui-and-accessibility/react-ui.md +4 -3
  31. package/presets/claude/next/team/README.md +1 -0
  32. package/presets/claude/next/team/fixtures/bugfix-standard.json +15 -0
  33. package/presets/claude/next/team/fixtures/feature-full.json +16 -0
  34. package/presets/claude/next/team/fixtures/feature-light.json +17 -0
  35. package/presets/cursor/next/AGENTS.md +2 -9
  36. package/presets/cursor/next/BUGBOT.md +2 -0
  37. package/presets/cursor/next/agents/README.md +16 -15
  38. package/presets/cursor/next/agents/code-reviewer.md +1 -1
  39. package/presets/cursor/next/agents/task-analyst.md +1 -1
  40. package/presets/cursor/next/agents/task-router.md +24 -0
  41. package/presets/cursor/next/agents/tech-writer.md +1 -1
  42. package/presets/cursor/next/rules/README.md +21 -1
  43. package/presets/cursor/next/rules/architecture-boundaries-ui.mdc +15 -0
  44. package/presets/cursor/next/rules/architecture-boundaries.mdc +1 -1
  45. package/presets/cursor/next/rules/code-review-mr.mdc +20 -46
  46. package/presets/cursor/next/rules/feature-delivery-workflow.mdc +1 -1
  47. package/presets/cursor/next/rules/layer-barrel-exports.mdc +1 -1
  48. package/presets/cursor/next/rules/navigation-router-stack.mdc +1 -1
  49. package/presets/cursor/next/rules/navigation-router-ui.mdc +16 -0
  50. package/presets/cursor/next/rules/next-app-core.mdc +1 -1
  51. package/presets/cursor/next/rules/no-cross-component-styles-import.mdc +3 -53
  52. package/presets/cursor/next/rules/react-ui.mdc +4 -3
  53. package/presets/cursor/next/team/README.md +1 -0
  54. package/presets/cursor/next/team/fixtures/bugfix-standard.json +15 -0
  55. package/presets/cursor/next/team/fixtures/feature-full.json +16 -0
  56. package/presets/cursor/next/team/fixtures/feature-light.json +17 -0
  57. package/scripts/README.md +84 -0
  58. package/scripts/golden-prompts.json +276 -0
  59. package/scripts/preset-manifest.json +72 -0
  60. package/scripts/regression-results/.gitkeep +0 -0
  61. package/scripts/validate-preset.sh +484 -0
  62. package/presets/claude/next/rules/ui-and-accessibility/component-styles.md +0 -56
@@ -17,7 +17,7 @@ alwaysApply: true
17
17
 
18
18
  | Слой | Каталог | Детали |
19
19
  |------|---------|--------|
20
- | UI | `app/src/ui/**` (pages, components) | `react-ui.mdc`, `architecture-boundaries.mdc` |
20
+ | UI | `app/src/ui/**` (pages, components) | `react-ui.mdc`, `architecture-boundaries-ui.mdc` |
21
21
  | Store | `app/src/store/**` (slices, middleware) | `store-rtk.mdc` |
22
22
  | API | `app/src/api/**` (services, clients, barrel) | `api-services.mdc`, `http-client.mdc` |
23
23
  | HTTP | `app/src/lib/clients/**`, `app/src/api/clients/**` | `http-client.mdc` |
@@ -1,58 +1,8 @@
1
1
  ---
2
- description: Стили компонентов — колокация, импорты, корневой styled как Root
3
- globs:
4
- - app/src/ui/**/*.ts
5
- - app/src/ui/**/*.tsx
2
+ description: Стили компонентов — consolidated into react-ui.mdc
6
3
  alwaysApply: false
7
4
  ---
8
5
 
9
- # Стили только рядом с компонентом
6
+ # Moved to react-ui.mdc
10
7
 
11
- ## Имя корневого styled-элемента: `Root`
12
-
13
- - В `styles.ts` (или аналоге) **корневой** styled-элемент — тот, что оборачивает весь JSX компонента — экспортируется как **`Root`**.
14
- - В разметке: `<s.Root>...</s.Root>` при `import * as s from './styles'`.
15
- - Вложенные и соседние примитивы именуются по смыслу: `Title`, `List`, `Item`, `Header` и т.д.
16
- - Если нет одной styled-обёртки на весь компонент (только фрагмент или один нативный тег без своего styled), экспорта `Root` может не быть. Когда вводится **одна** внешняя styled-обёртка всего JSX — она называется **`Root`**, а не `Container`, `Wrapper`, `Block` и т.п.
17
-
18
- ```tsx
19
- // ✅ Хорошо
20
- export const Root = styled.div` ... `
21
- // в компоненте: <s.Root>...</s.Root>
22
-
23
- // ❌ Плохо для единственной обёртки всего компонента
24
- export const Service = styled.div` ... `
25
- ```
26
-
27
- ## Правило
28
-
29
- **Запрещено** импортировать модули стилей, которые лежат в каталоге **другого** UI-компонента или блока (не в том же каталоге, что и текущий файл).
30
-
31
- Под «модулями стилей» имеются в виду в первую очередь:
32
-
33
- - `styles.ts` / `styles.tsx` рядом с компонентом;
34
- - `*.module.css`, `*.module.scss` и аналоги, принадлежащие конкретному компоненту;
35
- - любые файлы, которые **экспортируют только styled-примитивы** для одного компонента.
36
-
37
- ## Разрешено
38
-
39
- - `import * as s from './styles'` — стили **в той же папке**, что и компонент.
40
- - Импорты **общих** примитивов дизайн-системы, токенов, общих UI из `@/ui/components/...` или пакетов, если это **не** приватный `styles` чужой фичи.
41
- - Повторное использование визуала через **сам компонент** (композиция), а не через его `styles`.
42
-
43
- ## Примеры
44
-
45
- ```tsx
46
- // ✅ Хорошо — локальный styles
47
- import * as s from './styles'
48
-
49
- // ❌ Плохо — стили родителя/соседа
50
- import * as s from '../../styles'
51
- import * as s from '../RequestForAnalysisServices/styles'
52
- ```
53
-
54
- ## Почему
55
-
56
- - Единое имя **`Root`** ускоряет чтение: сразу видно входную точку разметки компонента.
57
- - Стили и разметка компонента должны меняться вместе, без скрытой связи через чужие файлы.
58
- - Упрощается рефакторинг и поиск владельца стилей.
8
+ Правила колокации стилей, имени **`Root`** и запрета импорта чужих `styles` — в **`react-ui.mdc`** § «Стили и дизайн‑токены». Правило подгружается автоматически при правках `app/src/ui/**`.
@@ -27,7 +27,7 @@ alwaysApply: false
27
27
  - Локальные подкомпоненты, используемые только этим блоком, выносятся в **`./components/<ComponentName>/`** относительно папки родительского компонента (не оставлять крупные куски JSX и «внутренние» компоненты в том же файле, что и родитель).
28
28
  - У каждого такого подкомпонента — **своя** папка с тем же именем, что и публичное имя компонента:
29
29
  - `ComponentName.tsx` — разметка и композиция;
30
- - `styles.ts` — только стили этого подкомпонента (см. `no-cross-component-styles-import.mdc`: не тянуть `styles` соседних компонентов);
30
+ - `styles.ts` — только стили этого подкомпонента (не тянуть `styles` соседних компонентов — см. § Стили ниже);
31
31
  - при необходимости — `ComponentName.data.ts`, `ComponentName.utils.ts`, `ComponentName.hooks.ts` по тем же правилам префикса, что и у родителя;
32
32
  - опционально `index.ts` с реэкспортом.
33
33
  - Родитель импортирует подкомпонент из `./components/...`, а не держит его реализацию inline.
@@ -56,8 +56,9 @@ alwaysApply: false
56
56
 
57
57
  # Стили и дизайн‑токены
58
58
 
59
- - **Корневой** styled-элемент компонента в соседнем `styles` — **`Root`** (`<s.Root>`). Подробнее: `no-cross-component-styles-import.mdc`.
60
- - Порядок объявлений в CSS / `styled` как требует Stylelint: см. `css-property-order-stylelint.mdc`.
59
+ - **Корневой** styled в соседнем `styles` — экспорт **`Root`**; в JSX: `<s.Root>` при `import * as s from './styles'`. Вложенные — `Title`, `List` и т.д. Не `Container`/`Wrapper` для единственной обёртки.
60
+ - **Запрещено** импортировать `styles` другого компонента (`../Other/styles`, `../../styles`). Разрешено: `./styles`, общие примитивы из `@/ui/components/...` или пакетов дизайн-системы.
61
+ - Порядок CSS / `styled` — Stylelint idiomatic-order: `css-property-order-stylelint.mdc` (грузится на `styles.ts` / `.css`).
61
62
  - Для визуала использовать **тот стек стилей и токенов, который уже в проекте** (переменные, тема, общие классы, дизайн‑пакет).
62
63
  - Избегать:
63
64
  - inline‑стилей, кроме простых случаев;
@@ -7,6 +7,7 @@
7
7
  ```
8
8
  .cursor/team/
9
9
  active-task.json
10
+ fixtures/ # pipeline profile examples (feature-full, feature-light, bugfix-standard)
10
11
  tasks/
11
12
  <slug>/
12
13
  pipeline.json
@@ -0,0 +1,15 @@
1
+ {
2
+ "slug": "example-bugfix-standard",
3
+ "intent": "bugfix",
4
+ "profile": "standard",
5
+ "summary": "Regression fix with review",
6
+ "steps": [
7
+ { "agent": "debugger", "label": "Root cause" },
8
+ { "agent": "feature-developer", "label": "Fix if needed", "skipIf": "debugger.fixed" },
9
+ { "agent": "build-verifier", "label": "Validation gate" },
10
+ { "agent": "code-reviewer", "label": "Code review" }
11
+ ],
12
+ "humanGates": [],
13
+ "autoChain": true,
14
+ "skipped": []
15
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "slug": "example-feature-full",
3
+ "intent": "feature",
4
+ "profile": "full",
5
+ "summary": "Multi-layer feature with e2e coverage",
6
+ "steps": [
7
+ { "agent": "task-analyst", "label": "Clarify and decompose" },
8
+ { "agent": "feature-developer", "label": "Implement + unit tests", "scope": "unit-in-dev" },
9
+ { "agent": "build-verifier", "label": "Validation gate" },
10
+ { "agent": "code-reviewer", "label": "Code review" },
11
+ { "agent": "qa-tester", "label": "E2E", "scope": "e2e-only" }
12
+ ],
13
+ "humanGates": ["after:task-analyst"],
14
+ "autoChain": true,
15
+ "skipped": []
16
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "slug": "example-feature-light",
3
+ "intent": "feature",
4
+ "profile": "light",
5
+ "summary": "Trivial single-file change with explicit AC",
6
+ "steps": [
7
+ { "agent": "feature-developer", "label": "Implement" },
8
+ { "agent": "build-verifier", "label": "Validation gate" }
9
+ ],
10
+ "humanGates": [],
11
+ "autoChain": true,
12
+ "skipped": [
13
+ { "agent": "task-analyst", "reason": "Explicit AC and single-file scope" },
14
+ { "agent": "code-reviewer", "reason": "Light profile — non-trivial app changes should use standard" },
15
+ { "agent": "qa-tester", "reason": "No e2e AC" }
16
+ ]
17
+ }
@@ -0,0 +1,84 @@
1
+ # Preset validation scripts
2
+
3
+ Static regression checks for `presets/cursor/next` and `presets/claude/next`.
4
+
5
+ ## Quick start
6
+
7
+ ```bash
8
+ cd packages/ai-rules
9
+
10
+ # Full static validation (no LLM)
11
+ ./scripts/validate-preset.sh
12
+
13
+ # + init smoke into temp dirs
14
+ ./scripts/validate-preset.sh --init-smoke
15
+
16
+ # Validate golden-prompts.json (agent names, schema)
17
+ ./scripts/validate-preset.sh --check-golden
18
+ ```
19
+
20
+ Or via npm:
21
+
22
+ ```bash
23
+ yarn validate
24
+ yarn validate:init
25
+ yarn validate:golden
26
+ ```
27
+
28
+ ## Router regression (manual + semi-auto)
29
+
30
+ Golden prompts live in `golden-prompts.json` — one case per `task-router` intent (+ light/full variants).
31
+
32
+ ### 1. Print checklist
33
+
34
+ ```bash
35
+ ./scripts/validate-preset.sh --print-golden
36
+ ```
37
+
38
+ ### 2. Run in Cursor (fresh chat each)
39
+
40
+ For each row, run `/task <prompt>`. After **task-router** finishes, copy `pipeline.json` from `.cursor/team/tasks/<slug>/` to:
41
+
42
+ ```
43
+ scripts/regression-results/<id>.json
44
+ ```
45
+
46
+ Use the `id` from golden-prompts (e.g. `feature-standard.json`).
47
+
48
+ ### 3. Compare outputs
49
+
50
+ ```bash
51
+ mkdir -p scripts/regression-results
52
+ ./scripts/validate-preset.sh --check-golden --compare-pipeline scripts/regression-results/
53
+ ```
54
+
55
+ The compare step checks:
56
+
57
+ - `intent`, `firstAgent`
58
+ - `requiredSequence` (ordered subsequence — extra steps allowed)
59
+ - `mustNotInclude`
60
+ - `stepConstraints` (`skipIf`)
61
+ - `humanGates`
62
+
63
+ `profile` mismatches are warnings (router may omit explicit profile when default applies).
64
+
65
+ ### 4. Commit baseline (optional)
66
+
67
+ When router behavior intentionally changes, update `golden-prompts.json` and refresh committed `regression-results/` snapshots.
68
+
69
+ ## Files
70
+
71
+ | File | Purpose |
72
+ |------|---------|
73
+ | `validate-preset.sh` | Main validator |
74
+ | `preset-manifest.json` | Always-on lists, rule pairs, UI glob rules, BUGBOT sync |
75
+ | `golden-prompts.json` | Expected router outcomes per intent |
76
+ | `regression-results/.gitkeep` | Placeholder for manual run outputs |
77
+
78
+ ## What is NOT automated
79
+
80
+ - LLM routing quality (flaky by model/temperature)
81
+ - Behavioral golden tasks on a real Next.js repo
82
+ - Token cost of path-scoped rules on real file edits
83
+
84
+ Those stay manual / scheduled regression on a dogfood project.
@@ -0,0 +1,276 @@
1
+ {
2
+ "version": 1,
3
+ "description": "Golden prompts for task-router regression. Run manually via /task or semi-auto with validate-preset.sh --check-golden.",
4
+ "prompts": [
5
+ {
6
+ "id": "feature-standard",
7
+ "prompt": "Добавь фильтр по дате в Order History",
8
+ "intent": "feature",
9
+ "profile": "standard",
10
+ "firstAgent": "task-analyst",
11
+ "requiredSequence": [
12
+ "task-analyst",
13
+ "feature-developer",
14
+ "build-verifier",
15
+ "code-reviewer"
16
+ ],
17
+ "mustInclude": ["build-verifier"],
18
+ "mustNotInclude": [],
19
+ "humanGates": ["after:task-analyst"],
20
+ "notes": "Default feature path; qa-tester optional unless e2e AC explicit."
21
+ },
22
+ {
23
+ "id": "feature-full",
24
+ "prompt": "Реализуй оплату картой: UI, API сервис, store и e2e сценарии checkout",
25
+ "intent": "feature",
26
+ "profile": "full",
27
+ "firstAgent": "task-analyst",
28
+ "requiredSequence": [
29
+ "task-analyst",
30
+ "feature-developer",
31
+ "build-verifier",
32
+ "code-reviewer",
33
+ "qa-tester"
34
+ ],
35
+ "mustInclude": ["build-verifier", "qa-tester"],
36
+ "mustNotInclude": [],
37
+ "humanGates": ["after:task-analyst"],
38
+ "notes": "Cross-layer + e2e AC → full profile with qa-tester."
39
+ },
40
+ {
41
+ "id": "feature-light",
42
+ "prompt": "Исправь typo в тексте кнопки Submit в OrderHistoryButton — один файл app/src/ui/components/OrderHistoryButton/OrderHistoryButton.tsx, AC: label «Отправить»",
43
+ "intent": "feature",
44
+ "profile": "light",
45
+ "firstAgent": "feature-developer",
46
+ "requiredSequence": ["feature-developer", "build-verifier"],
47
+ "mustInclude": ["build-verifier"],
48
+ "mustNotInclude": ["task-analyst"],
49
+ "humanGates": [],
50
+ "notes": "Explicit single-file AC → light; skip analyst."
51
+ },
52
+ {
53
+ "id": "bugfix-standard",
54
+ "prompt": "Order History падает при пустом списке — пофикси regression",
55
+ "intent": "bugfix",
56
+ "profile": "standard",
57
+ "firstAgent": "debugger",
58
+ "requiredSequence": [
59
+ "debugger",
60
+ "feature-developer",
61
+ "build-verifier",
62
+ "code-reviewer"
63
+ ],
64
+ "mustInclude": ["debugger", "build-verifier"],
65
+ "mustNotInclude": [],
66
+ "humanGates": [],
67
+ "stepConstraints": [
68
+ {
69
+ "agent": "feature-developer",
70
+ "skipIf": "debugger.fixed"
71
+ }
72
+ ],
73
+ "notes": "Bugfix standard; qa-tester(regression) optional per router."
74
+ },
75
+ {
76
+ "id": "bugfix-light",
77
+ "prompt": "Просто поправь null-check в mapper — один файл, явный AC, без архитектурного риска",
78
+ "intent": "bugfix",
79
+ "profile": "light",
80
+ "firstAgent": "debugger",
81
+ "requiredSequence": ["debugger", "build-verifier"],
82
+ "mustInclude": ["build-verifier"],
83
+ "mustNotInclude": ["task-analyst", "code-reviewer"],
84
+ "humanGates": [],
85
+ "notes": "Light bugfix may skip developer when debugger.fixed."
86
+ },
87
+ {
88
+ "id": "ci-fix",
89
+ "prompt": "CI упал на type-check в PR — красный пайплайн",
90
+ "intent": "ci-fix",
91
+ "profile": "standard",
92
+ "firstAgent": "ci-investigator",
93
+ "requiredSequence": [
94
+ "ci-investigator",
95
+ "feature-developer",
96
+ "build-verifier",
97
+ "code-reviewer"
98
+ ],
99
+ "mustInclude": ["ci-investigator", "build-verifier"],
100
+ "mustNotInclude": ["task-analyst"],
101
+ "humanGates": [],
102
+ "stepConstraints": [
103
+ {
104
+ "agent": "feature-developer",
105
+ "skipIf": "ci-investigator.resolved"
106
+ }
107
+ ]
108
+ },
109
+ {
110
+ "id": "migration",
111
+ "prompt": "Миграция HTTP-клиента на fetch — upgrade major version",
112
+ "intent": "migration",
113
+ "profile": "standard",
114
+ "firstAgent": "task-analyst",
115
+ "requiredSequence": [
116
+ "task-analyst",
117
+ "migration-specialist",
118
+ "feature-developer",
119
+ "build-verifier",
120
+ "code-reviewer"
121
+ ],
122
+ "mustInclude": ["migration-specialist", "build-verifier"],
123
+ "mustNotInclude": [],
124
+ "humanGates": ["after:migration-specialist"]
125
+ },
126
+ {
127
+ "id": "perf-audit",
128
+ "prompt": "Страница Order History медленно грузится — perf audit bundle и LCP",
129
+ "intent": "perf-audit",
130
+ "profile": "light",
131
+ "firstAgent": "performance-auditor",
132
+ "requiredSequence": ["performance-auditor"],
133
+ "mustInclude": ["performance-auditor"],
134
+ "mustNotInclude": ["feature-developer", "build-verifier"],
135
+ "humanGates": []
136
+ },
137
+ {
138
+ "id": "a11y",
139
+ "prompt": "Проверь a11y формы логина — WCAG и keyboard navigation",
140
+ "intent": "a11y",
141
+ "profile": "standard",
142
+ "firstAgent": "task-analyst",
143
+ "requiredSequence": [
144
+ "task-analyst",
145
+ "feature-developer",
146
+ "build-verifier",
147
+ "accessibility-reviewer",
148
+ "code-reviewer"
149
+ ],
150
+ "mustInclude": ["accessibility-reviewer", "build-verifier"],
151
+ "mustNotInclude": [],
152
+ "humanGates": ["after:task-analyst"]
153
+ },
154
+ {
155
+ "id": "review-only",
156
+ "prompt": "Сделай ревью моих изменений в store/orders — review MR diff",
157
+ "intent": "review-only",
158
+ "profile": "light",
159
+ "firstAgent": "code-reviewer",
160
+ "requiredSequence": ["code-reviewer"],
161
+ "mustInclude": ["code-reviewer"],
162
+ "mustNotInclude": ["feature-developer", "build-verifier", "task-analyst"],
163
+ "humanGates": []
164
+ },
165
+ {
166
+ "id": "test-only",
167
+ "prompt": "Покрой тестами модуль payments — unit и e2e, без изменения прод-кода",
168
+ "intent": "test-only",
169
+ "profile": "standard",
170
+ "firstAgent": "task-analyst",
171
+ "requiredSequence": ["task-analyst", "qa-tester"],
172
+ "mustInclude": ["qa-tester"],
173
+ "mustNotInclude": ["feature-developer"],
174
+ "humanGates": ["after:task-analyst"]
175
+ },
176
+ {
177
+ "id": "unit-only-plan",
178
+ "prompt": "Покрой unit-тестами mapper payments в api/services",
179
+ "intent": "unit-only",
180
+ "profile": "standard",
181
+ "firstAgent": "unit-test-planner",
182
+ "requiredSequence": ["unit-test-planner", "unit-test-generator"],
183
+ "mustInclude": ["unit-test-planner"],
184
+ "mustNotInclude": ["feature-developer", "qa-tester"],
185
+ "humanGates": ["after:unit-test-planner"],
186
+ "notes": "New unit coverage → planner then generator."
187
+ },
188
+ {
189
+ "id": "unit-only-heal",
190
+ "prompt": "Почини unit тест OrderHistoryMapper.spec.ts — падает после рефактора",
191
+ "intent": "unit-only",
192
+ "profile": "standard",
193
+ "firstAgent": "unit-test-healer",
194
+ "requiredSequence": ["unit-test-healer"],
195
+ "mustInclude": ["unit-test-healer"],
196
+ "mustNotInclude": ["unit-test-planner", "feature-developer"],
197
+ "humanGates": [],
198
+ "notes": "Broken existing unit → healer path, no planner gate."
199
+ },
200
+ {
201
+ "id": "e2e-only-plan",
202
+ "prompt": "Напиши e2e для сценария оплаты — playwright browser test",
203
+ "intent": "e2e-only",
204
+ "profile": "standard",
205
+ "firstAgent": "playwright-test-planner",
206
+ "requiredSequence": [
207
+ "playwright-test-planner",
208
+ "playwright-test-generator"
209
+ ],
210
+ "mustInclude": ["playwright-test-planner"],
211
+ "mustNotInclude": ["feature-developer", "qa-tester"],
212
+ "humanGates": ["after:playwright-test-planner"]
213
+ },
214
+ {
215
+ "id": "e2e-only-heal",
216
+ "prompt": "Почини e2e checkout.spec.ts — flaky playwright test",
217
+ "intent": "e2e-only",
218
+ "profile": "standard",
219
+ "firstAgent": "playwright-test-healer",
220
+ "requiredSequence": ["playwright-test-healer"],
221
+ "mustInclude": ["playwright-test-healer"],
222
+ "mustNotInclude": ["playwright-test-planner", "feature-developer"],
223
+ "humanGates": []
224
+ },
225
+ {
226
+ "id": "docs-only",
227
+ "prompt": "Напиши changelog для релиза фильтров и migration guide",
228
+ "intent": "docs-only",
229
+ "profile": "standard",
230
+ "firstAgent": "task-analyst",
231
+ "requiredSequence": ["task-analyst", "tech-writer"],
232
+ "mustInclude": ["tech-writer"],
233
+ "mustNotInclude": ["feature-developer", "build-verifier"],
234
+ "humanGates": ["after:task-analyst"]
235
+ },
236
+ {
237
+ "id": "refactor",
238
+ "prompt": "Рефакторинг store/orders без изменения поведения — почисти дубли",
239
+ "intent": "refactor",
240
+ "profile": "standard",
241
+ "firstAgent": "task-analyst",
242
+ "requiredSequence": [
243
+ "task-analyst",
244
+ "feature-developer",
245
+ "build-verifier",
246
+ "code-reviewer"
247
+ ],
248
+ "mustInclude": ["build-verifier"],
249
+ "mustNotInclude": [],
250
+ "humanGates": ["after:task-analyst"]
251
+ },
252
+ {
253
+ "id": "spike",
254
+ "prompt": "Исследуй spike: можно ли перейти на React Server Components для Order History?",
255
+ "intent": "spike",
256
+ "profile": "standard",
257
+ "firstAgent": "task-analyst",
258
+ "requiredSequence": ["task-analyst", "solution-architect"],
259
+ "mustInclude": ["solution-architect"],
260
+ "mustNotInclude": ["feature-developer", "build-verifier"],
261
+ "humanGates": ["after:solution-architect"]
262
+ },
263
+ {
264
+ "id": "retro",
265
+ "prompt": "Сделай ретро по задаче order-history-date-filter — postmortem",
266
+ "intent": "retro",
267
+ "noPipeline": true,
268
+ "firstAgent": null,
269
+ "requiredSequence": [],
270
+ "mustInclude": [],
271
+ "mustNotInclude": ["feature-developer", "task-analyst"],
272
+ "humanGates": [],
273
+ "notes": "Orchestrator runs /technical-retro; no pipeline.json steps."
274
+ }
275
+ ]
276
+ }
@@ -0,0 +1,72 @@
1
+ {
2
+ "version": 1,
3
+ "alwaysOnCursor": [
4
+ "next-app-core.mdc",
5
+ "code-quality-and-refactoring.mdc",
6
+ "post-change-lint.mdc",
7
+ "package-manager.mdc"
8
+ ],
9
+ "alwaysOnClaude": [
10
+ "stack/next-app-core.md",
11
+ "tooling-and-review/code-quality.md",
12
+ "tooling-and-review/post-change-lint.md",
13
+ "tooling-and-review/package-manager.md"
14
+ ],
15
+ "alwaysOnMaxBytes": 12288,
16
+ "rulePairs": [
17
+ ["architecture-boundaries.mdc", "architecture/architecture-boundaries.md"],
18
+ ["architecture-boundaries-ui.mdc", "architecture/architecture-boundaries-ui.md"],
19
+ ["layer-barrel-exports.mdc", "architecture/layer-barrel-exports.md"],
20
+ ["navigation-router-stack.mdc", "stack/navigation-router.md"],
21
+ ["navigation-router-ui.mdc", "stack/navigation-router-ui.md"],
22
+ ["react-ui.mdc", "ui-and-accessibility/react-ui.md"],
23
+ ["code-review-mr.mdc", "tooling-and-review/code-review-mr.md"],
24
+ ["agent-team-orchestrator.mdc", "tooling-and-review/agent-team-orchestrator.md"],
25
+ ["public-imports.mdc", "architecture/public-imports.md"],
26
+ ["feature-delivery-workflow.mdc", "architecture/feature-delivery-workflow.md"],
27
+ ["next-app-core.mdc", "stack/next-app-core.md"],
28
+ ["post-change-lint.mdc", "tooling-and-review/post-change-lint.md"],
29
+ ["package-manager.mdc", "tooling-and-review/package-manager.md"],
30
+ ["code-quality-and-refactoring.mdc", "tooling-and-review/code-quality.md"]
31
+ ],
32
+ "syncedRootFiles": [
33
+ {
34
+ "source": "fragments/BUGBOT.md",
35
+ "targets": ["presets/cursor/next/BUGBOT.md", "presets/claude/next/BUGBOT.md"]
36
+ }
37
+ ],
38
+ "parityDirs": ["agents", "skills", "team/fixtures"],
39
+ "uiGlobChecks": [
40
+ {
41
+ "id": "architecture-boundaries-no-ui",
42
+ "file": "architecture-boundaries.mdc",
43
+ "mustNotMatch": "app/src/ui"
44
+ },
45
+ {
46
+ "id": "architecture-boundaries-ui-scoped",
47
+ "file": "architecture-boundaries-ui.mdc",
48
+ "mustMatch": "app/src/ui"
49
+ },
50
+ {
51
+ "id": "layer-barrel-index-only",
52
+ "file": "layer-barrel-exports.mdc",
53
+ "mustMatch": "index.ts",
54
+ "mustNotMatch": "app/src/ui/\\*\\*"
55
+ },
56
+ {
57
+ "id": "navigation-router-stack-app-only",
58
+ "file": "navigation-router-stack.mdc",
59
+ "mustMatch": "app/src/app",
60
+ "mustNotMatch": "app/src/ui"
61
+ },
62
+ {
63
+ "id": "navigation-router-ui-tsx",
64
+ "file": "navigation-router-ui.mdc",
65
+ "mustMatch": "app/src/ui/\\*\\*/\\*\\.tsx"
66
+ }
67
+ ],
68
+ "wideGlobDenylist": [
69
+ "architecture-boundaries.mdc",
70
+ "navigation-router-stack.mdc"
71
+ ]
72
+ }
File without changes