@bonesofspring/ai-rules 0.1.42 → 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.
- package/CHANGELOG.md +22 -0
- package/CONTRIBUTING.md +102 -0
- package/README.md +2 -0
- package/bin/cli.js +4 -2
- package/fragments/BUGBOT.md +23 -0
- package/package.json +10 -2
- package/presets/claude/next/BUGBOT.md +16 -0
- package/presets/claude/next/CLAUDE.md +6 -2
- package/presets/claude/next/agents/README.md +77 -15
- package/presets/claude/next/agents/api-contract-reviewer.md +1 -1
- package/presets/claude/next/agents/build-verifier.md +2 -0
- package/presets/claude/next/agents/code-reviewer.md +1 -1
- package/presets/claude/next/agents/feature-developer.md +8 -21
- package/presets/claude/next/agents/playwright-test-generator.md +16 -65
- package/presets/claude/next/agents/playwright-test-healer.md +16 -51
- package/presets/claude/next/agents/playwright-test-planner.md +15 -55
- package/presets/claude/next/agents/task-analyst.md +1 -1
- package/presets/claude/next/agents/task-router.md +50 -128
- package/presets/claude/next/agents/tech-writer.md +1 -1
- package/presets/claude/next/commands/task.md +1 -1
- package/presets/claude/next/hooks.json +17 -0
- package/presets/claude/next/rules/README.md +7 -3
- package/presets/claude/next/rules/api-and-data/api-services.md +3 -3
- package/presets/claude/next/rules/api-and-data/http-client.md +2 -2
- package/presets/claude/next/rules/api-and-data/store-rtk.md +2 -2
- package/presets/claude/next/rules/architecture/README.md +9 -11
- package/presets/claude/next/rules/architecture/api-public-imports.md +3 -26
- package/presets/claude/next/rules/architecture/architecture-boundaries-ui.md +15 -0
- package/presets/claude/next/rules/architecture/architecture-boundaries.md +10 -7
- package/presets/claude/next/rules/architecture/feature-delivery-workflow.md +44 -69
- package/presets/claude/next/rules/architecture/layer-barrel-exports.md +6 -6
- package/presets/claude/next/rules/architecture/public-imports.md +46 -0
- package/presets/claude/next/rules/architecture/reference-features.md +4 -1
- package/presets/claude/next/rules/architecture/types-public-imports.md +3 -29
- package/presets/claude/next/rules/stack/README.md +2 -1
- package/presets/claude/next/rules/stack/navigation-router-ui.md +15 -0
- package/presets/claude/next/rules/stack/navigation-router.md +2 -1
- package/presets/claude/next/rules/stack/next-app-core.md +20 -70
- package/presets/claude/next/rules/stack/no-type-assertion.md +3 -2
- package/presets/claude/next/rules/stack/types-jsdoc.md +1 -1
- package/presets/claude/next/rules/tooling-and-review/agent-team-intake.md +6 -0
- package/presets/claude/next/rules/tooling-and-review/agent-team-orchestrator.md +20 -1
- package/presets/claude/next/rules/tooling-and-review/code-quality.md +3 -11
- package/presets/claude/next/rules/tooling-and-review/code-review-mr.md +22 -59
- package/presets/claude/next/rules/tooling-and-review/package-manager.md +6 -15
- package/presets/claude/next/rules/tooling-and-review/post-change-lint.md +14 -24
- package/presets/claude/next/rules/ui-and-accessibility/README.md +1 -2
- package/presets/claude/next/rules/ui-and-accessibility/css-property-order.md +6 -18
- package/presets/claude/next/rules/ui-and-accessibility/react-ui.md +5 -4
- package/presets/claude/next/skills/feature-delivery/SKILL.md +5 -20
- package/presets/claude/next/team/README.md +1 -0
- package/presets/claude/next/team/fixtures/bugfix-standard.json +15 -0
- package/presets/claude/next/team/fixtures/feature-full.json +16 -0
- package/presets/claude/next/team/fixtures/feature-light.json +17 -0
- package/presets/cursor/next/AGENTS.md +3 -10
- package/presets/cursor/next/BUGBOT.md +2 -0
- package/presets/cursor/next/agents/README.md +97 -15
- package/presets/cursor/next/agents/api-contract-reviewer.md +1 -1
- package/presets/cursor/next/agents/build-verifier.md +2 -0
- package/presets/cursor/next/agents/code-reviewer.md +2 -2
- package/presets/cursor/next/agents/feature-developer.md +9 -30
- package/presets/cursor/next/agents/task-analyst.md +1 -1
- package/presets/cursor/next/agents/task-router.md +49 -127
- package/presets/cursor/next/agents/tech-writer.md +1 -1
- package/presets/cursor/next/commands/task.md +1 -1
- package/presets/cursor/next/rules/README.md +27 -8
- package/presets/cursor/next/rules/agent-team-intake.mdc +2 -2
- package/presets/cursor/next/rules/agent-team-orchestrator.mdc +14 -1
- package/presets/cursor/next/rules/api-public-imports.mdc +3 -24
- package/presets/cursor/next/rules/api-services.mdc +3 -3
- package/presets/cursor/next/rules/architecture-boundaries-ui.mdc +15 -0
- package/presets/cursor/next/rules/architecture-boundaries.mdc +7 -7
- package/presets/cursor/next/rules/code-quality-and-refactoring.mdc +3 -11
- package/presets/cursor/next/rules/code-review-mr.mdc +20 -46
- package/presets/cursor/next/rules/css-property-order-stylelint.mdc +6 -18
- package/presets/cursor/next/rules/feature-delivery-workflow.mdc +45 -22
- package/presets/cursor/next/rules/http-client.mdc +2 -2
- package/presets/cursor/next/rules/layer-barrel-exports.mdc +6 -6
- package/presets/cursor/next/rules/navigation-router-stack.mdc +1 -1
- package/presets/cursor/next/rules/navigation-router-ui.mdc +16 -0
- package/presets/cursor/next/rules/next-app-core.mdc +18 -71
- package/presets/cursor/next/rules/no-cross-component-styles-import.mdc +3 -53
- package/presets/cursor/next/rules/no-type-assertion-as-import-export.mdc +4 -1
- package/presets/cursor/next/rules/package-manager.mdc +6 -15
- package/presets/cursor/next/rules/post-change-lint.mdc +14 -24
- package/presets/cursor/next/rules/public-imports.mdc +48 -0
- package/presets/cursor/next/rules/react-ui.mdc +5 -4
- package/presets/cursor/next/rules/reference-features.mdc +5 -1
- package/presets/cursor/next/rules/store-rtk.mdc +2 -2
- package/presets/cursor/next/rules/types-jsdoc.mdc +1 -1
- package/presets/cursor/next/rules/types-public-imports.mdc +3 -26
- package/presets/cursor/next/skills/feature-delivery/SKILL.md +5 -20
- package/presets/cursor/next/team/README.md +1 -0
- package/presets/cursor/next/team/fixtures/bugfix-standard.json +15 -0
- package/presets/cursor/next/team/fixtures/feature-full.json +16 -0
- package/presets/cursor/next/team/fixtures/feature-light.json +17 -0
- package/scripts/README.md +84 -0
- package/scripts/golden-prompts.json +276 -0
- package/scripts/preset-manifest.json +72 -0
- package/scripts/regression-results/.gitkeep +0 -0
- package/scripts/validate-preset.sh +484 -0
- package/presets/claude/next/rules/ui-and-accessibility/component-styles.md +0 -56
- package/presets/cursor/next/rules/feature-delivery-flow.mdc +0 -74
|
@@ -11,6 +11,7 @@ You are a task router for a Next.js frontend agent team. You **do not** implemen
|
|
|
11
11
|
|
|
12
12
|
- User task description (from `/task` or orchestrator).
|
|
13
13
|
- Optional: existing files under `.cursor/team/tasks/<slug>/`.
|
|
14
|
+
- Pipeline JSON schema, examples, step fields — **`agents/README.md`**.
|
|
14
15
|
|
|
15
16
|
## Intent detection
|
|
16
17
|
|
|
@@ -24,150 +25,71 @@ You are a task router for a Next.js frontend agent team. You **do not** implemen
|
|
|
24
25
|
| `a11y` | «a11y», «доступность», «accessibility», «WCAG», «screen reader», «клавиатура» | task-analyst → feature-developer → build-verifier → accessibility-reviewer → code-reviewer |
|
|
25
26
|
| `review-only` | «ревью», «review MR», «проверь diff», «code review» | code-reviewer |
|
|
26
27
|
| `test-only` | «покрой тестами», «напиши тесты» (mixed unit+e2e, no impl) | task-analyst → qa-tester |
|
|
27
|
-
| `unit-only` | «unit», «юнит», «mapper tests», «покрой маппер», «почини unit» | unit-test-planner → unit-test-generator, or unit-test-healer
|
|
28
|
-
| `e2e-only` | «e2e», «playwright», «browser test», «сценарии e2e», «почини e2e» | playwright-test-planner → playwright-test-generator, or playwright-test-healer
|
|
28
|
+
| `unit-only` | «unit», «юнит», «mapper tests», «покрой маппер», «почини unit» | unit-test-planner → unit-test-generator, or unit-test-healer |
|
|
29
|
+
| `e2e-only` | «e2e», «playwright», «browser test», «сценарии e2e», «почини e2e» | playwright-test-planner → playwright-test-generator, or playwright-test-healer |
|
|
29
30
|
| `docs-only` | «документация», «README», «changelog», «ADR», «migration guide» | task-analyst → tech-writer |
|
|
30
31
|
| `refactor` | «рефакторинг», «без изменения поведения», «почисти» | task-analyst → feature-developer → build-verifier → code-reviewer |
|
|
31
32
|
| `spike` | «исследуй», «оцени», «можно ли», «spike», proof of concept | task-analyst → solution-architect |
|
|
32
33
|
| `retro` | «ретро», «разбор», «postmortem» | (no pipeline — orchestrator runs `/technical-retro`) |
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
"skipped": []
|
|
71
|
-
}
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
### Example: feature with optional reviewers
|
|
75
|
-
|
|
76
|
-
```json
|
|
77
|
-
{
|
|
78
|
-
"intent": "feature",
|
|
79
|
-
"steps": [
|
|
80
|
-
{ "agent": "task-analyst", "label": "Clarify and decompose" },
|
|
81
|
-
{ "agent": "api-contract-reviewer", "label": "Validate API contract" },
|
|
82
|
-
{ "agent": "feature-developer", "label": "Implement + unit tests", "scope": "unit-in-dev" },
|
|
83
|
-
{ "agent": "build-verifier", "label": "Validation gate" },
|
|
84
|
-
{
|
|
85
|
-
"agent": ["accessibility-reviewer", "security-reviewer"],
|
|
86
|
-
"parallel": true,
|
|
87
|
-
"label": "A11y and security review"
|
|
88
|
-
},
|
|
89
|
-
{ "agent": "code-reviewer", "label": "Code review" },
|
|
90
|
-
{ "agent": "playwright-test-planner", "label": "E2E plan", "scope": "changed-flows-only" },
|
|
91
|
-
{ "agent": "playwright-test-generator", "label": "E2E specs" },
|
|
92
|
-
{ "agent": "tech-writer", "label": "Documentation" }
|
|
93
|
-
],
|
|
94
|
-
"humanGates": ["after:task-analyst"]
|
|
95
|
-
}
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### Example: bugfix with skip
|
|
99
|
-
|
|
100
|
-
```json
|
|
101
|
-
{
|
|
102
|
-
"intent": "bugfix",
|
|
103
|
-
"steps": [
|
|
104
|
-
{ "agent": "debugger", "label": "Root cause" },
|
|
105
|
-
{ "agent": "feature-developer", "label": "Fix if needed", "skipIf": "debugger.fixed" },
|
|
106
|
-
{ "agent": "build-verifier", "label": "Validation" },
|
|
107
|
-
{ "agent": "code-reviewer", "label": "Review" }
|
|
108
|
-
],
|
|
109
|
-
"humanGates": []
|
|
110
|
-
}
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### Step fields
|
|
114
|
-
|
|
115
|
-
| Field | Required | Description |
|
|
116
|
-
|-------|----------|-------------|
|
|
117
|
-
| `agent` | yes | Subagent name (kebab-case) or array for `parallel: true` |
|
|
118
|
-
| `label` | yes | Short human-readable step name |
|
|
119
|
-
| `scope` | no | e.g. `unit-in-dev`, `e2e-only`, `regression`, `full` — passed to agents |
|
|
120
|
-
| `skipIf` | no | `debugger.fixed` \| `ci-investigator.resolved` — skip step when artifact says fix already applied |
|
|
121
|
-
| `parallel` | no | When `true` and `agent` is array — orchestrator invokes all agents in one turn |
|
|
122
|
-
|
|
123
|
-
### humanGates
|
|
124
|
-
|
|
125
|
-
Values: `after:<agent-name>` — orchestrator stops after that agent; user runs `/task-continue <slug>` or `/feature-continue <slug>`.
|
|
35
|
+
## Pipeline profiles
|
|
36
|
+
|
|
37
|
+
Set optional top-level `"profile": "full" | "standard" | "light"` in `pipeline.json`. Default when omitted: **`standard`** for `feature`/`refactor`/`bugfix`; **`light`** for `review-only`, `perf-audit`; **`full`** when cross-layer or e2e AC required.
|
|
38
|
+
|
|
39
|
+
| Profile | When | Typical `feature` steps |
|
|
40
|
+
|---------|------|------------------------|
|
|
41
|
+
| `full` | Multi-layer, new public API, e2e coverage needed, incomplete AC | analyst → [architect] → developer → build-verifier → reviewer → qa-tester |
|
|
42
|
+
| `standard` | Single layer, default work | analyst → developer → build-verifier → reviewer |
|
|
43
|
+
| `light` | Trivial: one file/layer, explicit AC, «просто поправь», «typo», user «без pipeline» | developer → build-verifier |
|
|
44
|
+
|
|
45
|
+
**Light signals:** один файл, один слой, явный AC в промпте, нет архитектурного риска. **Never skip `build-verifier`** after developer when `app/**` changed. **Skip `code-reviewer`** in light only for non-prod preset/docs tasks — for `app/src` changes prefer standard.
|
|
46
|
+
|
|
47
|
+
**Light by intent:**
|
|
48
|
+
|
|
49
|
+
| intent | light steps |
|
|
50
|
+
|--------|-------------|
|
|
51
|
+
| `feature` | developer → build-verifier |
|
|
52
|
+
| `bugfix` | debugger → build-verifier (`skipIf: debugger.fixed` on developer) |
|
|
53
|
+
| `review-only` | code-reviewer |
|
|
54
|
+
| `docs-only` | tech-writer (skip analyst if brief exists) |
|
|
55
|
+
| `ci-fix` | ci-investigator → build-verifier (`skipIf: ci-investigator.resolved`) |
|
|
56
|
+
|
|
57
|
+
Fixtures: `.cursor/team/fixtures/` (feature-full, feature-light, bugfix-standard).
|
|
58
|
+
|
|
59
|
+
## Adjust steps (when context is clear)
|
|
60
|
+
|
|
61
|
+
- Skip **task-analyst** if AC/scope fully specified → document in `skipped`.
|
|
62
|
+
- Add **solution-architect** for cross-layer / new public APIs — after analyst, before developer.
|
|
63
|
+
- Add **api-contract-reviewer** for new/changed backend contracts — before developer.
|
|
64
|
+
- Add **accessibility-reviewer** / **security-reviewer** after build-verifier (parallel when both apply).
|
|
65
|
+
- Add **tech-writer** when docs/changelog requested.
|
|
66
|
+
- **Always build-verifier** after developer (or after ci-investigator/debugger if they changed code) for `feature`, `bugfix`, `refactor`, `migration`, `a11y`.
|
|
67
|
+
- **skipIf:** `debugger.fixed` on developer (bugfix); `ci-investigator.resolved` (ci-fix).
|
|
68
|
+
- **Model:** `inherit` when 4+ steps or cross-layer uncertainty.
|
|
69
|
+
|
|
70
|
+
## humanGates (defaults)
|
|
126
71
|
|
|
127
72
|
| Intent | Default humanGates |
|
|
128
73
|
|--------|-------------------|
|
|
129
74
|
| `feature`, `refactor`, `test-only`, `a11y` | `["after:task-analyst"]` |
|
|
130
75
|
| `migration` | `["after:migration-specialist"]` |
|
|
131
76
|
| `docs-only` | `["after:task-analyst"]` |
|
|
132
|
-
| `unit-only` | `["after:unit-test-planner"]` when new plan
|
|
133
|
-
| `e2e-only` | `["after:playwright-test-planner"]` when new plan; `[]` for
|
|
134
|
-
| `bugfix`, `review-only`, `ci-fix` | `[]`
|
|
77
|
+
| `unit-only` | `["after:unit-test-planner"]` when new plan; `[]` for healer |
|
|
78
|
+
| `e2e-only` | `["after:playwright-test-planner"]` when new plan; `[]` for healer |
|
|
79
|
+
| `bugfix`, `review-only`, `ci-fix` | `[]` |
|
|
135
80
|
| `spike` | `["after:solution-architect"]` |
|
|
136
81
|
| `perf-audit` | `[]` |
|
|
137
82
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
```json
|
|
141
|
-
"skipped": [{ "agent": "task-analyst", "reason": "AC provided in ticket" }]
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
## Initial status.json
|
|
83
|
+
## Output
|
|
145
84
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
```json
|
|
149
|
-
{
|
|
150
|
-
"slug": "<slug>",
|
|
151
|
-
"intent": "<intent>",
|
|
152
|
-
"pipelineIndex": 0,
|
|
153
|
-
"currentAgent": "<steps[0].agent>",
|
|
154
|
-
"phase": "executing",
|
|
155
|
-
"state": "in_progress",
|
|
156
|
-
"awaitingHumanGate": false,
|
|
157
|
-
"updatedAt": "<ISO8601>"
|
|
158
|
-
}
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
Also write `.cursor/team/active-task.json` → `{ "slug": "<slug>" }`.
|
|
85
|
+
Write `.cursor/team/tasks/<slug>/pipeline.json` and initial `status.json`; set `.cursor/team/active-task.json` → `{ "slug": "<slug>" }`. Minimal template — см. **`agents/README.md`**.
|
|
162
86
|
|
|
163
87
|
## Handoff to orchestrator
|
|
164
88
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
4. **Human gates** (if any).
|
|
171
|
-
5. Tell orchestrator to invoke `steps[0].agent` now (unless intent is `retro` — then run `/technical-retro`).
|
|
89
|
+
1. Intent + one-line summary.
|
|
90
|
+
2. Planned steps (table: #, agent, label).
|
|
91
|
+
3. Skipped roles and why.
|
|
92
|
+
4. Human gates (if any).
|
|
93
|
+
5. Invoke `steps[0].agent` now (unless `retro` → `/technical-retro`).
|
|
172
94
|
|
|
173
95
|
Do not invoke implementation agents yourself.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: tech-writer
|
|
3
3
|
description: Technical documentation specialist. Writes feature READMEs, migration guides, ADR summaries, and changelog entries from completed task artifacts. Docs-only — never edits production application code.
|
|
4
4
|
readonly: true
|
|
5
|
-
model:
|
|
5
|
+
model: fast
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
You are a technical writer for a Next.js frontend team.
|
|
@@ -5,7 +5,7 @@ description: Route a natural-language task through the agent-team pipeline: task
|
|
|
5
5
|
|
|
6
6
|
# Task — единая точка входа (router + pipeline)
|
|
7
7
|
|
|
8
|
-
Главная команда для постановки задачи. Родительский агент = оркестратор (`agent-team-orchestrator.mdc`).
|
|
8
|
+
Главная команда для постановки задачи. Родительский агент = оркестратор (`agent-team-orchestrator.mdc`). Intake для work-запросов без `/task` — `agent-team-intake.mdc`.
|
|
9
9
|
|
|
10
10
|
## Аргументы
|
|
11
11
|
|
|
@@ -20,10 +20,27 @@
|
|
|
20
20
|
### Loading strategy
|
|
21
21
|
|
|
22
22
|
- **`alwaysApply: true`** (Cursor) / **без `paths:`** (Claude) — только базовые инварианты:
|
|
23
|
-
- `next-app-core`, `post-change-lint`, `package-manager`, `
|
|
24
|
-
- **
|
|
23
|
+
- `next-app-core`, `post-change-lint`, `package-manager`, `code-quality-and-refactoring`
|
|
24
|
+
- **On-demand** — `agent-team-intake` (через orchestrator/commands), `agent-team-orchestrator`, architecture, imports, UI, tests, feature-delivery-workflow, reference-features, next-app-router, react-a11y-coding
|
|
25
25
|
- **Skills** — длинные процедуры (`feature-delivery`, `code-review`, …)
|
|
26
26
|
|
|
27
|
+
### UI edit bundle (consolidated globs)
|
|
28
|
+
|
|
29
|
+
При правке `app/src/ui/**/*.tsx` подгружается **уменьшенный** набор (не весь `app/src/**`):
|
|
30
|
+
|
|
31
|
+
| Rule | Globs | Назначение |
|
|
32
|
+
|------|-------|------------|
|
|
33
|
+
| `react-ui.mdc` | `app/src/ui/**` | Структура, стили, пропсы |
|
|
34
|
+
| `architecture-boundaries-ui.mdc` | `app/src/ui/**` | Slim границы UI-слоя |
|
|
35
|
+
| `react-a11y-coding.mdc` | `app/src/ui/**` | A11y |
|
|
36
|
+
| `navigation-router-ui.mdc` | `app/src/ui/**/*.tsx` | Краткий ориентир навигации |
|
|
37
|
+
| `no-props-spread.mdc` | `app/src/**/*.tsx` | Явные пропсы |
|
|
38
|
+
| `arrow-functions.mdc` | `app/src/**` | Синтаксис |
|
|
39
|
+
|
|
40
|
+
**Не грузятся на типичный UI edit:** `architecture-boundaries` (api/store/types/lib), `layer-barrel-exports` (только `index.ts`), `navigation-router-stack` (только `app/src/app/**`), `no-cross-component-styles-import` (consolidated в `react-ui`).
|
|
41
|
+
|
|
42
|
+
`css-property-order-stylelint.mdc` — только на `styles.ts` / `.css`.
|
|
43
|
+
|
|
27
44
|
### Эталонные фичи
|
|
28
45
|
|
|
29
46
|
Заполните **`reference-features.mdc`** (TBD → реальные пути) после `init` в целевом репо.
|
|
@@ -36,17 +53,19 @@
|
|
|
36
53
|
| `next-app-router.mdc` | App Router, RSC, loading/error |
|
|
37
54
|
| `react-a11y-coding.mdc` | A11y при написании UI |
|
|
38
55
|
| `feature-delivery-workflow.mdc` | Сквозной чеклист (on-demand, не always-on) |
|
|
39
|
-
| `agent-team-intake.mdc` |
|
|
56
|
+
| `agent-team-intake.mdc` | Подсказка `/task` при work-запросе (on-demand, через orchestrator) |
|
|
40
57
|
| `package-manager.mdc` | Перед `install` / `run` в терминале определить менеджер пакетов репо (lockfile, `packageManager`) и использовать только его |
|
|
41
58
|
| `agent-team-orchestrator.mdc` | `/task`, router, `pipeline.json`, build-verifier, parallel steps |
|
|
42
|
-
| `next-app-core.mdc` | Стек, слои,
|
|
59
|
+
| `next-app-core.mdc` | Стек, слои, карта каталогов (alwaysApply) |
|
|
43
60
|
| `post-change-lint.mdc` | **Обязательный** прогон ESLint + Stylelint после любых изменений кода |
|
|
44
|
-
| `architecture-boundaries.mdc` |
|
|
61
|
+
| `architecture-boundaries-ui.mdc` | Slim границы UI при правках компонентов |
|
|
62
|
+
| `architecture-boundaries.mdc` | Полная карта UI / store / API (api, store, types, lib) |
|
|
63
|
+
| `navigation-router-ui.mdc` | Навигация в UI-компонентах (slim) |
|
|
64
|
+
| `navigation-router-stack.mdc` | Полный аудит стека навигации (App Router / SPA) |
|
|
45
65
|
| `http-client.mdc` | Один HTTP‑стек, контракты из `@/types`, без разбросанного низкоуровневого API |
|
|
46
66
|
| `api-services.mdc` | Сервисы, мапперы, вызовы через прикладные API‑клиенты |
|
|
47
67
|
| `store-rtk.mdc` | Redux Toolkit, thunk’и, типизация ошибок/ответов как в коде репо |
|
|
48
|
-
| `
|
|
49
|
-
| `api-public-imports.mdc` | Импорты только через barrel `@/api` (вне `app/src/api/**`) |
|
|
68
|
+
| `public-imports.mdc` | Импорты `@/types`, `@/types/enums`, `@/api` (вне `app/src/api/**`); stubs: `types-public-imports.mdc`, `api-public-imports.mdc` |
|
|
50
69
|
| `layer-barrel-exports.mdc` | Двухуровневые barrel для слоёв с public API (`@/api`, `@/types`, `@/core`, …) |
|
|
51
70
|
| `types-jsdoc.mdc` | JSDoc для типов в `app/src/types` (русский текст, `[computed]`, без `@param`/`@returns`) |
|
|
52
71
|
| `no-type-assertion-as-import-export.mdc` | Ограничение `as`, в т.ч. `instanceof` для ошибок транспорта в `catch` |
|
|
@@ -55,6 +74,6 @@
|
|
|
55
74
|
| `playwright-agents.mdc`, `tests-e2e-structure.mdc` | E2E |
|
|
56
75
|
| `react-ui.mdc` | React/Next UI: структура компонентов, соседние `ComponentName.data.ts` / `.utils.ts`, стили, пропсы |
|
|
57
76
|
|
|
58
|
-
**Коллизии формулировок:**
|
|
77
|
+
**Коллизии формулировок:** импорт типов и API — источник правды **`public-imports.mdc`**; дублирует ESLint `no-restricted-imports` в `app/eslint.config.mjs`.
|
|
59
78
|
|
|
60
79
|
Задачи на **сеть, замену HTTP‑библиотеки, новые эндпоинты**: опираться на **`http-client.mdc`** + **`api-services.mdc`** + **`store-rtk.mdc`**.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
3
|
-
alwaysApply:
|
|
2
|
+
description: Use when user posts a work request without /task — suggest or use /task to run the agent team router. Lightweight intake hint only.
|
|
3
|
+
alwaysApply: false
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Agent team intake
|
|
@@ -7,6 +7,8 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
Parent agent = **manager**. Router plans; specialists execute. Artifacts: `.cursor/team/tasks/<slug>/`.
|
|
9
9
|
|
|
10
|
+
Work request без `/task` — см. **`agent-team-intake.mdc`** (когда предлагать router вместо прямого кодинга).
|
|
11
|
+
|
|
10
12
|
## Entry points
|
|
11
13
|
|
|
12
14
|
| Command | When |
|
|
@@ -121,6 +123,17 @@ After each agent completes, ensure `status.json` has `state: completed` (or `awa
|
|
|
121
123
|
|
|
122
124
|
If `pipeline.json` is missing (old `/feature-start` tasks), fall back to fixed phases: analysis → development → review → testing. Hook supports both.
|
|
123
125
|
|
|
126
|
+
## Skip pipeline when
|
|
127
|
+
|
|
128
|
+
Do **not** run `/task` + router for:
|
|
129
|
+
|
|
130
|
+
- Pure questions («как работает X», «объясни»).
|
|
131
|
+
- Typo / one-file fix / trivial config with no architecture risk.
|
|
132
|
+
- User explicitly says «без pipeline», «просто сделай», or continues an active slug.
|
|
133
|
+
- Single-line `docs-only` with no code impact.
|
|
134
|
+
|
|
135
|
+
Borderline work requests — см. **`agent-team-intake.mdc`**.
|
|
136
|
+
|
|
124
137
|
## Auto-detection (optional)
|
|
125
138
|
|
|
126
|
-
When user describes a **task** (not a question
|
|
139
|
+
When user describes a **non-trivial task** (not a question), suggest `/task <message>` or run router if they agree.
|
|
@@ -1,29 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
3
|
-
globs: app/src/**/*.ts,app/src/**/*.tsx
|
|
2
|
+
description: Moved to public-imports.mdc — read that file instead
|
|
4
3
|
alwaysApply: false
|
|
5
4
|
---
|
|
6
5
|
|
|
7
|
-
#
|
|
6
|
+
# Deprecated
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
- **Запрещено** для таких потребителей обходить barrel: любой импорт вида `@/api/<что‑угодно>`, кроме `@/api/index`. Это дублирует правило ESLint `no-restricted-imports` в `app/eslint.config.mjs` (паттерн `@/api/*` с исключением `@/api/index`).
|
|
11
|
-
- При **добавлении** публичного символа в регламентированный слой — реэкспорт в корневой barrel по **`layer-barrel-exports.mdc`**.
|
|
12
|
-
|
|
13
|
-
## Внутри слоя `app/src/api/**`
|
|
14
|
-
|
|
15
|
-
- При реализации сервисов, клиентов и barrel допустимы **относительные** импорты и пути вида `@/api/services/**`, `@/api/clients/**` между файлами этого слоя. Это не относится к потребителям снаружи `app/src/api/**`.
|
|
16
|
-
|
|
17
|
-
## Примеры
|
|
18
|
-
|
|
19
|
-
```typescript
|
|
20
|
-
// ✅ Допустимо в store, UI, lib вне app/src/api — только barrel
|
|
21
|
-
import { MedcardApiService, MarketplaceApiService } from '@/api'
|
|
22
|
-
import type { TReferenceRequest } from '@/api'
|
|
23
|
-
|
|
24
|
-
// ❌ Запрещено снаружи app/src/api (сработает ESLint)
|
|
25
|
-
import { MedcardApiService } from '@/api/services/MedcardApiService/MedcardApiService'
|
|
26
|
-
import { MedcardApiClient } from '@/api/clients/MedcardApiClient'
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
При ревью и правках кода **не добавлять** новые импорты из `@/api/...` кроме `@/api` / `@/api/index` в файлах вне `app/src/api/**`.
|
|
8
|
+
Содержимое перенесено в **`public-imports.mdc`** (раздел `@/api`).
|
|
@@ -12,7 +12,7 @@ alwaysApply: false
|
|
|
12
12
|
- заголовками и кодами ответов,
|
|
13
13
|
- DTO backend.
|
|
14
14
|
- Предоставлять UI и store **стабильный доменный интерфейс**:
|
|
15
|
-
- функции, работающие с доменными типами из `@/types` (`
|
|
15
|
+
- функции, работающие с доменными типами из `@/types` (`public-imports.mdc`).
|
|
16
16
|
- мапперы между DTO и доменными типами.
|
|
17
17
|
|
|
18
18
|
# Структура модулей
|
|
@@ -23,7 +23,7 @@ alwaysApply: false
|
|
|
23
23
|
- файлы с вызовами API (`index.ts` или `*.service.ts`);
|
|
24
24
|
- файлы мапперов (`*responseMappers.ts`);
|
|
25
25
|
- специфичные типы запросов/ответов (если не вынесены в `app/src/types/**` с экспортом через barrel `@/types`).
|
|
26
|
-
- при необходимости — локальные `index.ts` / barrel внутри модуля для структуры **внутри** `app/src/api/**`; **снаружи** этого слоя UI, store и остальной код импортируют только из корневого barrel `app/src/api/index.ts` (`import … from '@/api'`, **`
|
|
26
|
+
- при необходимости — локальные `index.ts` / barrel внутри модуля для структуры **внутри** `app/src/api/**`; **снаружи** этого слоя UI, store и остальной код импортируют только из корневого barrel `app/src/api/index.ts` (`import … from '@/api'`, **`public-imports.mdc`**).
|
|
27
27
|
|
|
28
28
|
# Мапперы и типы
|
|
29
29
|
|
|
@@ -54,5 +54,5 @@ alwaysApply: false
|
|
|
54
54
|
- Не смешивать слой API и UI/store:
|
|
55
55
|
- компоненты не должны зависеть от DTO;
|
|
56
56
|
- store не должен сам собирать URL/коды эндпоинтов и не обходить сервисы; **транспортный тип ответа** и **контракт ошибки** из `@/types` (как у прикладного клиента) допустимы во thunk при разборе `catch`/payload, если так выстроен сервис (см. `store-rtk.mdc`, `http-client.mdc`).
|
|
57
|
-
- При использовании API‑сервисов в UI, store и утилитах **вне** `app/src/api/**` импортировать **только** из `@/api` (корневой barrel), см. **`
|
|
57
|
+
- При использовании API‑сервисов в UI, store и утилитах **вне** `app/src/api/**` импортировать **только** из `@/api` (корневой barrel), см. **`public-imports.mdc`**; внутри слоя API — по относительным путям или `@/api/services/**` / `@/api/clients/**`, не дублируя публичный контракт мимо корневого barrel для внешних потребителей.
|
|
58
58
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Границы слоя UI — slim rule для правок компонентов (без полной карты store/API)
|
|
3
|
+
globs: app/src/ui/**/*.tsx,app/src/ui/**/*.ts
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# UI layer boundaries (slim)
|
|
8
|
+
|
|
9
|
+
- **Импорты:** `@/ui/**`, `@/store/**`, типы из `@/types` и enum из `@/types/enums`, API — только `from '@/api'` (`public-imports.mdc`).
|
|
10
|
+
- **Запрещено:** прямой HTTP‑клиент; знание DTO — только доменные типы.
|
|
11
|
+
- **Состояние:** сценарии с записью и координация шагов — через store/thunk; узкие прямые вызовы `@/api` для чтения — только как в соседних фичах.
|
|
12
|
+
- **Организация:** алиас `@/`; без deep‑импортов в чужие фичи; только public API.
|
|
13
|
+
- **Barrel:** при новых публичных символах — реэкспорт по `layer-barrel-exports.mdc` (правило грузится на `index.ts`).
|
|
14
|
+
|
|
15
|
+
Полная карта слоёв (store, API, порты‑адаптеры): **`architecture-boundaries.mdc`** — при правках `app/src/api`, `store`, `types`, `lib`.
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Архитектурные границы и правила импортов
|
|
3
|
-
globs: app/src/**/*
|
|
3
|
+
globs: app/src/api/**/*,app/src/store/**/*,app/src/types/**/*,app/src/lib/**/*
|
|
4
4
|
alwaysApply: false
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Границы между слоями
|
|
8
8
|
|
|
9
9
|
- **UI (app/src/ui/**)**:
|
|
10
|
-
- Может импортировать: `@/ui/**`, `@/store/**`, типы из `@/types` и enum из `@/types/enums` (**только как в `
|
|
10
|
+
- Может импортировать: `@/ui/**`, `@/store/**`, типы из `@/types` и enum из `@/types/enums` (**только как в `public-imports.mdc`**), контракт к API — **только** `import … from '@/api'` (**`public-imports.mdc`**).
|
|
11
11
|
- Не должен:
|
|
12
12
|
- обращаться к HTTP‑клиенту напрямую;
|
|
13
13
|
- знать детали DTO backend — только доменные типы.
|
|
14
14
|
- **Store (app/src/store/**)**:
|
|
15
|
-
- Может импортировать: `@/store/**`, сервисы и публичные сущности API — **только** из `@/api` (**`
|
|
15
|
+
- Может импортировать: `@/store/**`, сервисы и публичные сущности API — **только** из `@/api` (**`public-imports.mdc`**), типы из `@/types` и enum из `@/types/enums` (**`public-imports.mdc`**).
|
|
16
16
|
- Не должен:
|
|
17
17
|
- зависеть от конкретных UI‑компонентов;
|
|
18
18
|
- напрямую работать с global/window API.
|
|
19
19
|
- Вызовы к backend — только через сервисы, импортируемые из `@/api`; **транспортные** типы ответа и ошибки (из `@/types`, в том же виде, что у прикладного HTTP‑клиента) во thunk допустимы, если так выстроен API‑слой (`http-client.mdc`, `store-rtk.mdc`).
|
|
20
20
|
- **API (`app/src/api/**`)** — реализация в `services/**`, `clients/**`, реэкспорт в `app/src/api/index.ts`:
|
|
21
|
-
- Внутри слоя: типы из `@/types` и enum из `@/types/enums` (**`
|
|
21
|
+
- Внутри слоя: типы из `@/types` и enum из `@/types/enums` (**`public-imports.mdc`**); импорты `@/api/services/**`, `@/api/clients/**`, относительные пути между файлами слоя (`http-client.mdc`, `api-services.mdc`).
|
|
22
22
|
- Не должен:
|
|
23
23
|
- тянуть в себя UI или store;
|
|
24
24
|
- смешивать HTTP‑слой и доменный слой — использовать мапперы.
|
|
@@ -33,7 +33,7 @@ alwaysApply: false
|
|
|
33
33
|
|
|
34
34
|
- **Входящий адаптер**: UI — ввод пользователя, отображение; зависит от store и доменных типов, не от транспорта.
|
|
35
35
|
- **Оркестрация сценариев**: store (slices, thunk) — вызывает сервисы, кладёт в state **доменные** модели после маппинга.
|
|
36
|
-
- **Исходящий порт (контракт к backend)**: публичный API **`@/api`** (barrel `app/src/api/index.ts`; реализация — в `app/src/api/services/**` и т.д., см. `
|
|
36
|
+
- **Исходящий порт (контракт к backend)**: публичный API **`@/api`** (barrel `app/src/api/index.ts`; реализация — в `app/src/api/services/**` и т.д., см. `public-imports.mdc`).
|
|
37
37
|
- **Исходящий адаптер**: общая реализация HTTP в **`app/src/lib/clients/**`** и экземпляры в **`app/src/api/clients/**`**.
|
|
38
38
|
|
|
39
39
|
## Фича как срез
|
|
@@ -44,7 +44,7 @@ alwaysApply: false
|
|
|
44
44
|
|
|
45
45
|
- Всегда использовать алиас `@/...` для импортов между слоями.
|
|
46
46
|
- Внутри одного модуля/фичи можно использовать относительные импорты, но **без подъёма выше корня фичи** (избегать `../../../`).
|
|
47
|
-
- При обращении из компонентов, хуков, утилит и других модулей к чужому слою или фиче использовать только **public API** (barrel/index‑файлы и явно экспортируемые сущности), не делать deep‑импорты внутренних файлов других фич; для регламентированных слоёв — **`layer-barrel-exports.mdc`** и
|
|
47
|
+
- При обращении из компонентов, хуков, утилит и других модулей к чужому слою или фиче использовать только **public API** (barrel/index‑файлы и явно экспортируемые сущности), не делать deep‑импорты внутренних файлов других фич; для регламентированных слоёв — **`layer-barrel-exports.mdc`** и `public-imports.mdc`; для API‑слоя снаружи `app/src/api/**` — **`public-imports.mdc`** (только `@/api`).
|
|
48
48
|
- При добавлении нового кода проверять:
|
|
49
49
|
- если модуль переиспользуемый — он должен зависеть только от более "низких" слоёв (types, utils, api), но не от страниц.
|
|
50
50
|
|
|
@@ -55,7 +55,7 @@ alwaysApply: false
|
|
|
55
55
|
- Локальные компоненты: поддиректории `components/**` внутри страницы.
|
|
56
56
|
- Связанный store: `app/src/store/slices/OrderCheckout/**`.
|
|
57
57
|
- API: `app/src/api/services/OrdersApi/OrderCheckout/**` (имя корневого сервиса взять из принятой в проекте схемы).
|
|
58
|
-
- Типы: `app/src/types/**` с экспортом через barrel **`app/src/types/index.ts`** (`
|
|
58
|
+
- Типы: `app/src/types/**` с экспортом через barrel **`app/src/types/index.ts`** (`public-imports.mdc`).
|
|
59
59
|
|
|
60
60
|
# Требование к агенту
|
|
61
61
|
|
|
@@ -35,19 +35,11 @@ alwaysApply: true
|
|
|
35
35
|
- сначала локально улучшить архитектуру минимальными шагами;
|
|
36
36
|
- оставить код в консистентном состоянии.
|
|
37
37
|
|
|
38
|
-
#
|
|
38
|
+
# Линтеры
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
- Учитывать **Stylelint** для CSS и CSS-in-JS (конфиг: `app/.stylelintrc`; порядок свойств — `css-property-order-stylelint.mdc`).
|
|
42
|
-
- Новый или изменённый код не должен нарушать эти правила.
|
|
43
|
-
- После **каждого** изменения кода агент **обязан** выполнить **`post-change-lint.mdc`**: полный прогон **`lint:js`** и **`lint:css`**, анализ вывода, исправление срабатываний в зоне задачи.
|
|
44
|
-
- Отключение правила (`eslint-disable`) — только **точечно** (строка/небольшой блок) и с **кратким комментарием**, зачем это нужно; отключать «на весь файл» без веской причины не следует.
|
|
40
|
+
Lint/stylelint — только **`post-change-lint.mdc`**; ESLint config: `app/eslint.config.mjs`. Отключение правила (`eslint-disable`) — только **точечно** (строка/небольшой блок) с кратким комментарием «зачем».
|
|
45
41
|
|
|
46
42
|
# Требование к агенту
|
|
47
43
|
|
|
48
|
-
|
|
49
|
-
- Поддерживать принцип **“boy scout rule”**:
|
|
50
|
-
- оставлять модуль в немного лучшем состоянии, чем до изменения (простые, безопасные улучшения).
|
|
44
|
+
- **Boy scout rule:** оставлять модуль немного лучше, чем до изменения (простые, безопасные улучшения).
|
|
51
45
|
- Не жертвовать архитектурой и слоями ради краткости реализации.
|
|
52
|
-
- **Не завершать задачу**, пока не пройдены обязательные линтеры (`post-change-lint.mdc`).
|
|
53
|
-
|
|
@@ -5,50 +5,24 @@ alwaysApply: false
|
|
|
5
5
|
|
|
6
6
|
# Code review merge requests
|
|
7
7
|
|
|
8
|
-
-
|
|
9
|
-
- Если пользователь просит: "проведи ревью", "оценить MR/ветку/дифф", "посмотри изменения".
|
|
10
|
-
- Опираться на локальный репозиторий: текущую ветку, `git diff` и открытые файлы, а не на данные внешнего API хостинга.
|
|
11
|
-
|
|
12
|
-
- **Что обязан проверить агент**
|
|
13
|
-
- **Архитектура и слои**:
|
|
14
|
-
- Соблюдение правил из `architecture-boundaries.mdc`, `next-app-core.mdc` и при сетевых изменениях — `http-client.mdc`:
|
|
15
|
-
- UI (`app/src/ui/**`) не ходит напрямую в HTTP‑клиент и не знает DTO.
|
|
16
|
-
- Store (`app/src/store/**`) не зависит от UI; границы транспортных типов и ошибок — `store-rtk.mdc` / `http-client.mdc`.
|
|
17
|
-
- API (`app/src/api/**`) не тянет UI/store, использует мапперы; без прямого `fetch` в сервисах (кроме оговорённых исключений).
|
|
18
|
-
- **Импорты и организация кода**:
|
|
19
|
-
- Использование алиаса `@/...` вместо относительных импортов выше по дереву.
|
|
20
|
-
- Отсутствие deep‑импортов во внешние фичи; использование только public API; в файлах вне `app/src/api/**` импорты из API — только `from '@/api'` (`api-public-imports.mdc`, дублирует ESLint).
|
|
21
|
-
- При новых/изменённых модулях в регламентированных слоях — реэкспорт публичных символов в корневой barrel по **`layer-barrel-exports.mdc`**.
|
|
22
|
-
- Размещение новых файлов в корректных слоях и директориях фич.
|
|
23
|
-
- **Типы и TS‑строгость**:
|
|
24
|
-
- Не допускать новых `any`; предпочитать доменные типы из `@/types` (barrel, см. `types-public-imports.mdc`).
|
|
25
|
-
- Проверять корректность пропсов/возвращаемых типов, особенно в UI и API‑слое.
|
|
26
|
-
- **UI и стили**:
|
|
27
|
-
- Для компонентов и стилей сверяться с `react-ui.mdc` и `next-app-core.mdc`:
|
|
28
|
-
- Соблюдать принятый в проекте способ стилей и общие UI‑примитивы/токены, а не "магические" значения.
|
|
29
|
-
- Сохранять консистентность с существующими компонентами и паттернами.
|
|
30
|
-
- **Тесты**:
|
|
31
|
-
- Проверять, что для нетривиальных изменений:
|
|
32
|
-
- либо обновлены/добавлены unit‑тесты (`tests-unit.mdc`),
|
|
33
|
-
- либо e2e‑сценарии/спеки отражают новую логику (`playwright-agents.mdc`, `tests-e2e-structure.mdc`).
|
|
34
|
-
- При правках **общего HTTP‑клиента** — наличие/актуальность **behavior‑тестов клиента** (`http-client.mdc`, `tests-unit.mdc`).
|
|
35
|
-
- Указывать, какие именно тесты стоит добавить или поправить.
|
|
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.
|
|
41
|
-
|
|
42
|
-
- **Глубина и формат ревью**
|
|
43
|
-
- Фокус на **изменениях MR** (дифф относительно целевой ветки), а не на всём проекте.
|
|
44
|
-
- Сначала дать **высокоуровневый обзор** (что делает MR, риски, архитектурные замечания), затем список конкретных комментариев.
|
|
45
|
-
- Каждый комментарий делать:
|
|
46
|
-
- **конкретным** (указать файл/участок и проблему),
|
|
47
|
-
- **практичным** (предложить вариант исправления, опираясь на существующие паттерны),
|
|
48
|
-
- без "больших рефакторингов" в духе `code-quality-and-refactoring.mdc`, если задача локальная.
|
|
49
|
-
|
|
50
|
-
- **Ограничения для агента**
|
|
51
|
-
- Не придумывать несуществующие метаданные из хостинга (лейблы MR, авторов, статусы CI), если их нет в локальных данных.
|
|
52
|
-
- Не менять общую архитектуру фичи без прямого запроса пользователя.
|
|
53
|
-
- Следовать принципу "boy scout rule": предлагать улучшения, которые реально можно внести в рамках MR.
|
|
8
|
+
On-demand rule for review flows. **Procedure and output format:** skill `code-review`.
|
|
54
9
|
|
|
10
|
+
## Checklist references
|
|
11
|
+
|
|
12
|
+
- Architecture layers: `architecture-boundaries.mdc`, `next-app-core.mdc`; network: `http-client.mdc`
|
|
13
|
+
- Imports: `public-imports.mdc`, `layer-barrel-exports.mdc`
|
|
14
|
+
- UI: `react-ui.mdc`
|
|
15
|
+
- Tests: `tests-unit.mdc`, `playwright-agents.mdc`, `tests-e2e-structure.mdc`
|
|
16
|
+
- Lint gate before final report: `post-change-lint.mdc`
|
|
17
|
+
|
|
18
|
+
## When to load
|
|
19
|
+
|
|
20
|
+
- User asks for review/MR/diff
|
|
21
|
+
- Pipeline step `code-reviewer`
|
|
22
|
+
- BUGBOT automated review
|
|
23
|
+
|
|
24
|
+
## Constraints
|
|
25
|
+
|
|
26
|
+
- Focus on MR diff, not the whole repo.
|
|
27
|
+
- Use local `git diff` — do not invent hosting metadata.
|
|
28
|
+
- Boy scout rule: suggest fixes feasible within the MR scope.
|