@bonesofspring/ai-rules 0.2.2 → 0.2.4
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 +65 -0
- package/README.md +27 -4
- package/bin/cli.js +285 -72
- package/package.json +3 -2
- package/presets/claude/ios-swift/CLAUDE.md +28 -20
- package/presets/claude/ios-swift/MCP.md +14 -0
- package/presets/claude/ios-swift/README.md +18 -15
- package/presets/claude/ios-swift/agents/README.md +55 -0
- package/presets/claude/ios-swift/agents/accessibility-reviewer.md +67 -0
- package/presets/claude/ios-swift/agents/api-contract-reviewer.md +72 -0
- package/presets/claude/ios-swift/agents/build-verifier.md +64 -0
- package/presets/claude/ios-swift/agents/ci-investigator.md +73 -0
- package/presets/claude/ios-swift/agents/code-reviewer.md +75 -0
- package/presets/claude/ios-swift/agents/debugger.md +72 -0
- package/presets/claude/ios-swift/agents/feature-developer.md +35 -0
- package/presets/claude/ios-swift/agents/migration-specialist.md +73 -0
- package/presets/claude/ios-swift/agents/performance-auditor.md +72 -0
- package/presets/claude/ios-swift/agents/qa-tester.md +65 -0
- package/presets/claude/ios-swift/agents/security-reviewer.md +69 -0
- package/presets/claude/ios-swift/agents/solution-architect.md +17 -0
- package/presets/claude/ios-swift/agents/task-analyst.md +25 -0
- package/presets/claude/ios-swift/agents/task-router.md +62 -0
- package/presets/claude/ios-swift/agents/tech-writer.md +63 -0
- package/presets/claude/ios-swift/agents/unit-test-generator.md +54 -0
- package/presets/claude/ios-swift/agents/unit-test-healer.md +53 -0
- package/presets/claude/ios-swift/agents/unit-test-planner.md +64 -0
- package/presets/claude/ios-swift/agents/xcuitest-test-generator.md +47 -0
- package/presets/claude/ios-swift/agents/xcuitest-test-healer.md +47 -0
- package/presets/claude/ios-swift/agents/xcuitest-test-planner.md +67 -0
- package/presets/claude/ios-swift/commands/README.md +12 -2
- package/presets/claude/ios-swift/commands/feature-continue.md +51 -0
- package/presets/claude/ios-swift/commands/feature-start.md +30 -0
- package/presets/claude/ios-swift/commands/task-continue.md +49 -0
- package/presets/claude/ios-swift/commands/task.md +50 -0
- package/presets/claude/ios-swift/commands/technical-retro.md +58 -0
- package/presets/claude/ios-swift/hooks/README.md +10 -0
- package/presets/claude/ios-swift/hooks/chain-team-phases.sh +382 -0
- package/presets/claude/ios-swift/hooks/guard-shell-command.sh +79 -0
- package/presets/claude/ios-swift/mcp.json +12 -0
- package/presets/claude/ios-swift/rules/README.md +25 -14
- package/presets/claude/ios-swift/rules/api-and-data/README.md +2 -1
- package/presets/claude/ios-swift/rules/api-and-data/networking.md +2 -2
- package/presets/claude/ios-swift/rules/api-and-data/persistence.md +30 -0
- package/presets/claude/ios-swift/rules/architecture/README.md +3 -1
- package/presets/claude/ios-swift/rules/architecture/feature-delivery.md +10 -2
- package/presets/claude/ios-swift/rules/architecture/module-public-api.md +25 -0
- package/presets/claude/ios-swift/rules/architecture/reference-features.md +50 -0
- package/presets/claude/ios-swift/rules/stack/ios-app-core.md +2 -1
- package/presets/claude/ios-swift/rules/testing/ui.md +2 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/README.md +6 -1
- package/presets/claude/ios-swift/rules/tooling-and-review/agent-team-intake.md +18 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/agent-team-orchestrator.md +47 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/code-review.md +5 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/post-change-build.md +5 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/security-ios.md +36 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/technical-retro.md +14 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/xcode-tooling.md +24 -0
- package/presets/claude/ios-swift/rules/ui-and-accessibility/README.md +2 -1
- package/presets/claude/ios-swift/rules/ui-and-accessibility/navigation.md +28 -0
- package/presets/claude/ios-swift/skills/README.md +13 -0
- package/presets/claude/ios-swift/skills/ci-investigation/SKILL.md +39 -0
- package/presets/claude/ios-swift/skills/code-review/SKILL.md +27 -0
- package/presets/claude/ios-swift/skills/debug-investigation/SKILL.md +30 -0
- package/presets/claude/ios-swift/skills/feature-delivery/SKILL.md +27 -0
- package/presets/claude/ios-swift/skills/technical-retro/SKILL.md +10 -0
- package/presets/claude/ios-swift/skills/unit-testing/SKILL.md +32 -0
- package/presets/claude/ios-swift/skills/xcuitest-e2e/SKILL.md +33 -0
- package/presets/claude/ios-swift/team/README.md +27 -0
- package/presets/claude/ios-swift/team/fixtures/bugfix-standard.json +33 -0
- package/presets/claude/ios-swift/team/fixtures/feature-full.json +48 -0
- package/presets/claude/ios-swift/team/fixtures/feature-light.json +36 -0
- package/presets/claude/next/CLAUDE.md +29 -5
- package/presets/claude/next/MCP.md +16 -0
- package/presets/claude/next/README.md +12 -0
- package/presets/claude/next/agents/README.md +155 -1
- package/presets/claude/next/agents/accessibility-reviewer.md +65 -0
- package/presets/claude/next/agents/api-contract-reviewer.md +69 -0
- package/presets/claude/next/agents/build-verifier.md +64 -0
- package/presets/claude/next/agents/ci-investigator.md +62 -0
- package/presets/claude/next/agents/code-reviewer.md +63 -0
- package/presets/claude/next/agents/debugger.md +63 -0
- package/presets/claude/next/agents/feature-developer.md +27 -0
- package/presets/claude/next/agents/migration-specialist.md +69 -0
- package/presets/claude/next/agents/performance-auditor.md +68 -0
- package/presets/claude/next/agents/qa-tester.md +56 -0
- package/presets/claude/next/agents/security-reviewer.md +64 -0
- package/presets/claude/next/agents/solution-architect.md +70 -0
- package/presets/claude/next/agents/task-analyst.md +111 -0
- package/presets/claude/next/agents/task-router.md +94 -0
- package/presets/claude/next/agents/tech-writer.md +61 -0
- package/presets/claude/next/agents/unit-test-generator.md +37 -0
- package/presets/claude/next/agents/unit-test-healer.md +38 -0
- package/presets/claude/next/agents/unit-test-planner.md +62 -0
- package/presets/claude/next/commands/README.md +10 -2
- package/presets/claude/next/commands/feature-continue.md +51 -0
- package/presets/claude/next/commands/feature-start.md +30 -0
- package/presets/claude/next/commands/task-continue.md +49 -0
- package/presets/claude/next/commands/task.md +50 -0
- package/presets/claude/next/commands/technical-retro.md +58 -0
- package/presets/claude/next/hooks/README.md +5 -2
- package/presets/claude/next/hooks/chain-team-phases.sh +380 -0
- package/presets/claude/next/hooks/guard-shell-command.sh +77 -0
- package/presets/claude/next/mcp.json +20 -0
- package/presets/claude/next/rules/README.md +42 -11
- package/presets/claude/next/rules/api-and-data/README.md +7 -1
- package/presets/claude/next/rules/api-and-data/api-services.md +57 -0
- package/presets/claude/next/rules/api-and-data/http-client.md +40 -0
- package/presets/claude/next/rules/api-and-data/store-rtk.md +65 -0
- package/presets/claude/next/rules/architecture/README.md +11 -2
- package/presets/claude/next/rules/architecture/architecture-boundaries-ui.md +15 -0
- package/presets/claude/next/rules/architecture/architecture-boundaries.md +75 -0
- package/presets/claude/next/rules/architecture/feature-delivery-workflow.md +79 -0
- package/presets/claude/next/rules/architecture/layer-barrel-exports.md +58 -0
- package/presets/claude/next/rules/architecture/public-imports.md +46 -0
- package/presets/claude/next/rules/architecture/reference-features.md +37 -0
- package/presets/claude/next/rules/stack/README.md +10 -1
- package/presets/claude/next/rules/stack/arrow-functions.md +45 -0
- package/presets/claude/next/rules/stack/navigation-router-ui.md +15 -0
- package/presets/claude/next/rules/stack/navigation-router.md +64 -0
- package/presets/claude/next/rules/stack/next-app-core.md +33 -0
- package/presets/claude/next/rules/stack/next-app-router.md +36 -0
- package/presets/claude/next/rules/stack/no-type-assertion.md +59 -0
- package/presets/claude/next/rules/stack/types-jsdoc.md +37 -0
- package/presets/claude/next/rules/testing/README.md +9 -1
- package/presets/claude/next/rules/testing/playwright-agents.md +74 -0
- package/presets/claude/next/rules/testing/tests-e2e-structure.md +52 -0
- package/presets/claude/next/rules/testing/tests-unit.md +66 -0
- package/presets/claude/next/rules/tooling-and-review/README.md +12 -1
- package/presets/claude/next/rules/tooling-and-review/agent-team-intake.md +15 -0
- package/presets/claude/next/rules/tooling-and-review/agent-team-orchestrator.md +145 -0
- package/presets/claude/next/rules/tooling-and-review/code-quality.md +42 -0
- package/presets/claude/next/rules/tooling-and-review/code-review-mr.md +30 -0
- package/presets/claude/next/rules/tooling-and-review/package-manager.md +11 -0
- package/presets/claude/next/rules/tooling-and-review/post-change-lint.md +44 -0
- package/presets/claude/next/rules/ui-and-accessibility/README.md +10 -1
- package/presets/claude/next/rules/ui-and-accessibility/css-property-order.md +14 -0
- package/presets/claude/next/rules/ui-and-accessibility/no-props-spread.md +57 -0
- package/presets/claude/next/rules/ui-and-accessibility/react-a11y-coding.md +37 -0
- package/presets/claude/next/rules/ui-and-accessibility/react-ui.md +91 -0
- package/presets/claude/next/skills/README.md +11 -1
- package/presets/claude/next/skills/ci-investigation/SKILL.md +36 -0
- package/presets/claude/next/skills/code-review/SKILL.md +26 -0
- package/presets/claude/next/skills/debug-investigation/SKILL.md +28 -0
- package/presets/claude/next/skills/feature-delivery/SKILL.md +15 -0
- package/presets/claude/next/skills/playwright-e2e/SKILL.md +31 -0
- package/presets/claude/next/skills/technical-retro/SKILL.md +40 -0
- package/presets/claude/next/skills/unit-testing/SKILL.md +32 -0
- package/presets/claude/next/team/README.md +105 -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/claude/next/team/tasks/.gitkeep +1 -0
- package/presets/cursor/ios-swift/AGENTS.md +47 -0
- package/presets/cursor/ios-swift/BUGBOT.md +15 -0
- package/presets/cursor/ios-swift/MCP.md +16 -0
- package/presets/cursor/ios-swift/README.md +27 -7
- package/presets/cursor/ios-swift/agents/README.md +55 -0
- package/presets/cursor/ios-swift/agents/accessibility-reviewer.md +67 -0
- package/presets/cursor/ios-swift/agents/api-contract-reviewer.md +72 -0
- package/presets/cursor/ios-swift/agents/build-verifier.md +64 -0
- package/presets/cursor/ios-swift/agents/ci-investigator.md +73 -0
- package/presets/cursor/ios-swift/agents/code-reviewer.md +75 -0
- package/presets/cursor/ios-swift/agents/debugger.md +72 -0
- package/presets/cursor/ios-swift/agents/feature-developer.md +35 -0
- package/presets/cursor/ios-swift/agents/migration-specialist.md +73 -0
- package/presets/cursor/ios-swift/agents/performance-auditor.md +72 -0
- package/presets/cursor/ios-swift/agents/qa-tester.md +65 -0
- package/presets/cursor/ios-swift/agents/security-reviewer.md +69 -0
- package/presets/cursor/ios-swift/agents/solution-architect.md +17 -0
- package/presets/cursor/ios-swift/agents/task-analyst.md +25 -0
- package/presets/cursor/ios-swift/agents/task-router.md +62 -0
- package/presets/cursor/ios-swift/agents/tech-writer.md +63 -0
- package/presets/cursor/ios-swift/agents/unit-test-generator.md +54 -0
- package/presets/cursor/ios-swift/agents/unit-test-healer.md +53 -0
- package/presets/cursor/ios-swift/agents/unit-test-planner.md +64 -0
- package/presets/cursor/ios-swift/agents/xcuitest-test-generator.md +47 -0
- package/presets/cursor/ios-swift/agents/xcuitest-test-healer.md +47 -0
- package/presets/cursor/ios-swift/agents/xcuitest-test-planner.md +67 -0
- package/presets/cursor/ios-swift/commands/README.md +49 -1
- package/presets/cursor/ios-swift/commands/feature-continue.md +19 -0
- package/presets/cursor/ios-swift/commands/feature-start.md +33 -0
- package/presets/cursor/ios-swift/commands/task-continue.md +49 -0
- package/presets/cursor/ios-swift/commands/task.md +50 -0
- package/presets/cursor/ios-swift/commands/technical-retro.md +81 -0
- package/presets/cursor/ios-swift/hooks/README.md +8 -0
- package/presets/cursor/ios-swift/hooks/chain-team-phases.sh +382 -0
- package/presets/cursor/ios-swift/hooks/guard-shell-command.sh +79 -0
- package/presets/cursor/ios-swift/hooks.json +17 -0
- package/presets/cursor/ios-swift/mcp.json +11 -0
- package/presets/cursor/ios-swift/rules/README.md +45 -13
- package/presets/cursor/ios-swift/rules/agent-team-intake.mdc +16 -0
- package/presets/cursor/ios-swift/rules/agent-team-orchestrator.mdc +85 -0
- package/presets/cursor/ios-swift/rules/code-review-mr.mdc +1 -0
- package/presets/cursor/ios-swift/rules/feature-delivery-workflow.mdc +1 -1
- package/presets/cursor/ios-swift/rules/ios-app-core.mdc +2 -1
- package/presets/cursor/ios-swift/rules/module-public-api.mdc +26 -0
- package/presets/cursor/ios-swift/rules/navigation-coordinators.mdc +29 -0
- package/presets/cursor/ios-swift/rules/networking-services.mdc +2 -2
- package/presets/cursor/ios-swift/rules/persistence-data.mdc +31 -0
- package/presets/cursor/ios-swift/rules/reference-features.mdc +53 -0
- package/presets/cursor/ios-swift/rules/security-ios.mdc +35 -0
- package/presets/cursor/ios-swift/rules/technical-retro.mdc +12 -0
- package/presets/cursor/ios-swift/rules/tests-ui.mdc +1 -0
- package/presets/cursor/ios-swift/rules/xcode-tooling.mdc +20 -0
- package/presets/cursor/ios-swift/skills/README.md +13 -0
- package/presets/cursor/ios-swift/skills/ci-investigation/SKILL.md +39 -0
- package/presets/cursor/ios-swift/skills/code-review/SKILL.md +27 -0
- package/presets/cursor/ios-swift/skills/debug-investigation/SKILL.md +30 -0
- package/presets/cursor/ios-swift/skills/feature-delivery/SKILL.md +27 -0
- package/presets/cursor/ios-swift/skills/technical-retro/SKILL.md +10 -0
- package/presets/cursor/ios-swift/skills/unit-testing/SKILL.md +32 -0
- package/presets/cursor/ios-swift/skills/xcuitest-e2e/SKILL.md +33 -0
- package/presets/cursor/ios-swift/team/README.md +31 -0
- package/presets/cursor/ios-swift/team/fixtures/bugfix-standard.json +33 -0
- package/presets/cursor/ios-swift/team/fixtures/feature-full.json +48 -0
- package/presets/cursor/ios-swift/team/fixtures/feature-light.json +36 -0
- package/presets/cursor/next/AGENTS.md +36 -0
- package/presets/cursor/next/BUGBOT.md +14 -0
- package/presets/cursor/next/MCP.md +16 -0
- package/presets/cursor/next/agents/README.md +165 -0
- package/presets/cursor/next/agents/accessibility-reviewer.md +67 -0
- package/presets/cursor/next/agents/api-contract-reviewer.md +71 -0
- package/presets/cursor/next/agents/build-verifier.md +66 -0
- package/presets/cursor/next/agents/ci-investigator.md +64 -0
- package/presets/cursor/next/agents/code-reviewer.md +64 -0
- package/presets/cursor/next/agents/debugger.md +64 -0
- package/presets/cursor/next/agents/feature-developer.md +28 -0
- package/presets/cursor/next/agents/migration-specialist.md +71 -0
- package/presets/cursor/next/agents/performance-auditor.md +70 -0
- package/presets/cursor/next/agents/playwright-test-generator.md +27 -0
- package/presets/cursor/next/agents/playwright-test-healer.md +27 -0
- package/presets/cursor/next/agents/playwright-test-planner.md +28 -0
- package/presets/cursor/next/agents/qa-tester.md +58 -0
- package/presets/cursor/next/agents/security-reviewer.md +66 -0
- package/presets/cursor/next/agents/solution-architect.md +71 -0
- package/presets/cursor/next/agents/task-analyst.md +112 -0
- package/presets/cursor/next/agents/task-router.md +95 -0
- package/presets/cursor/next/agents/tech-writer.md +62 -0
- package/presets/cursor/next/agents/unit-test-generator.md +39 -0
- package/presets/cursor/next/agents/unit-test-healer.md +40 -0
- package/presets/cursor/next/agents/unit-test-planner.md +64 -0
- package/presets/cursor/next/commands/README.md +49 -1
- package/presets/cursor/next/commands/feature-continue.md +19 -0
- package/presets/cursor/next/commands/feature-start.md +33 -0
- package/presets/cursor/next/commands/task-continue.md +49 -0
- package/presets/cursor/next/commands/task.md +50 -0
- package/presets/cursor/next/commands/technical-retro.md +81 -0
- package/presets/cursor/next/hooks/README.md +8 -0
- package/presets/cursor/next/hooks/chain-team-phases.sh +380 -0
- package/presets/cursor/next/hooks/guard-shell-command.sh +77 -0
- package/presets/cursor/next/hooks.json +17 -0
- package/presets/cursor/next/mcp.json +19 -0
- package/presets/cursor/next/rules/README.md +67 -0
- package/presets/cursor/next/rules/agent-team-intake.mdc +14 -0
- package/presets/cursor/next/rules/agent-team-orchestrator.mdc +147 -0
- package/presets/cursor/next/rules/api-services.mdc +12 -10
- package/presets/cursor/next/rules/architecture-boundaries-ui.mdc +15 -0
- package/presets/cursor/next/rules/architecture-boundaries.mdc +31 -12
- package/presets/cursor/next/rules/arrow-functions.mdc +46 -0
- package/presets/cursor/next/rules/code-quality-and-refactoring.mdc +5 -4
- package/presets/cursor/next/rules/code-review-mr.mdc +21 -40
- package/presets/cursor/next/rules/css-property-order-stylelint.mdc +16 -0
- package/presets/cursor/next/rules/feature-delivery-workflow.mdc +76 -0
- package/presets/cursor/next/rules/http-client.mdc +42 -0
- package/presets/cursor/next/rules/layer-barrel-exports.mdc +59 -0
- package/presets/cursor/next/rules/navigation-router-stack.mdc +62 -0
- package/presets/cursor/next/rules/navigation-router-ui.mdc +16 -0
- package/presets/cursor/next/rules/next-app-core.mdc +18 -61
- package/presets/cursor/next/rules/next-app-router.mdc +36 -0
- package/presets/cursor/next/rules/no-props-spread.mdc +27 -4
- package/presets/cursor/next/rules/no-type-assertion-as-import-export.mdc +60 -0
- package/presets/cursor/next/rules/package-manager.mdc +16 -0
- package/presets/cursor/next/rules/playwright-agents.mdc +2 -1
- package/presets/cursor/next/rules/post-change-lint.mdc +40 -0
- package/presets/cursor/next/rules/public-imports.mdc +48 -0
- package/presets/cursor/next/rules/react-a11y-coding.mdc +37 -0
- package/presets/cursor/next/rules/react-ui.mdc +33 -3
- package/presets/cursor/next/rules/reference-features.mdc +39 -0
- package/presets/cursor/next/rules/store-rtk.mdc +13 -6
- package/presets/cursor/next/rules/technical-retro.mdc +12 -0
- package/presets/cursor/next/rules/tests-unit.mdc +30 -10
- package/presets/cursor/next/rules/types-jsdoc.mdc +42 -0
- package/presets/cursor/next/skills/README.md +15 -0
- package/presets/cursor/next/skills/ci-investigation/SKILL.md +36 -0
- package/presets/cursor/next/skills/code-review/SKILL.md +26 -0
- package/presets/cursor/next/skills/debug-investigation/SKILL.md +28 -0
- package/presets/cursor/next/skills/feature-delivery/SKILL.md +15 -0
- package/presets/cursor/next/skills/playwright-e2e/SKILL.md +31 -0
- package/presets/cursor/next/skills/technical-retro/SKILL.md +40 -0
- package/presets/cursor/next/skills/unit-testing/SKILL.md +32 -0
- package/presets/cursor/next/team/README.md +109 -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/presets/cursor/next/team/tasks/.gitkeep +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Паттерны React/Next UI и стилей (preset)
|
|
3
|
-
globs: src/ui/**/*.tsx
|
|
3
|
+
globs: app/src/ui/**/*.tsx,app/src/ui/**/*.ts
|
|
4
4
|
alwaysApply: false
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -22,14 +22,43 @@ alwaysApply: false
|
|
|
22
22
|
- `styles.ts` или соседний модуль стилей — по конвенции репозитория (CSS Modules, CSS-in-JS, и т.д.).
|
|
23
23
|
- `index.ts` — реэкспорт (если нужно наружу).
|
|
24
24
|
|
|
25
|
+
## Дочерние компоненты (`./components`)
|
|
26
|
+
|
|
27
|
+
- Локальные подкомпоненты, используемые только этим блоком, выносятся в **`./components/<ComponentName>/`** относительно папки родительского компонента (не оставлять крупные куски JSX и «внутренние» компоненты в том же файле, что и родитель).
|
|
28
|
+
- У каждого такого подкомпонента — **своя** папка с тем же именем, что и публичное имя компонента:
|
|
29
|
+
- `ComponentName.tsx` — разметка и композиция;
|
|
30
|
+
- `styles.ts` — только стили этого подкомпонента (не тянуть `styles` соседних компонентов — см. § Стили ниже);
|
|
31
|
+
- при необходимости — `ComponentName.data.ts`, `ComponentName.utils.ts`, `ComponentName.hooks.ts` по тем же правилам префикса, что и у родителя;
|
|
32
|
+
- опционально `index.ts` с реэкспортом.
|
|
33
|
+
- Родитель импортирует подкомпонент из `./components/...`, а не держит его реализацию inline.
|
|
34
|
+
|
|
25
35
|
Для переиспользуемого компонента:
|
|
26
36
|
- Папка с именем компонента:
|
|
27
37
|
- `ComponentName.tsx`
|
|
28
38
|
- файлы стилей по принятой схеме;
|
|
29
|
-
- опционально: `types.ts`, `hooks.ts
|
|
39
|
+
- опционально: `types.ts`, `ComponentName.hooks.ts` (см. ниже про префикс).
|
|
40
|
+
|
|
41
|
+
## Вспомогательные модули рядом с компонентом (именование)
|
|
42
|
+
|
|
43
|
+
**Префикс имени файла = публичное имя компонента** (как у `ComponentName.tsx` в этой папке), в **PascalCase**. Не вводить отдельные «говорящие» имена файлов по смыслу содержимого (`analysisPreparationIconMap.ts`, `buildAnalysisIdToNameMap.ts` и т.п.) — так теряется связь с компонентом и плодятся одноразовые названия.
|
|
44
|
+
|
|
45
|
+
**Суффикс по роли:**
|
|
46
|
+
|
|
47
|
+
| Суффикс | Назначение | Примеры содержимого |
|
|
48
|
+
|--------|------------|---------------------|
|
|
49
|
+
| `ComponentName.data.ts` | Статические данные и конфигурация для UI | мапы `id → иконка/лейбл`, константы списков, таблицы соответствий для отображения |
|
|
50
|
+
| `ComponentName.utils.ts` | Чистые функции без React | форматирование, предобработка пропсов/данных для рендера, `build…`/`map…`‑хелперы |
|
|
51
|
+
| `ComponentName.hooks.ts` | Хуки, используемые только этим блоком | локальные `use…` (если не вынесены в `src/ui/hooks/**`) |
|
|
52
|
+
|
|
53
|
+
- Несколько констант/мапов или несколько функций — **по-прежнему один** `.data.ts` и один `.utils.ts`, не дробить по «темам» отдельными файлами без веской причины (размер, разные зоны ответственности на уровне подкомпонентов).
|
|
54
|
+
- Если логика принадлежит **подкомпоненту** в подпапке (`components/Child/Child.tsx`), те же правила применяются к **`Child.data.ts`**, **`Child.utils.ts`** относительно этого подкомпонента.
|
|
55
|
+
- Тесты для утилит и данных — рядом в `__tests__/` или с суффиксом `.test.ts`, согласно `tests-unit.mdc`, с тем же префиксом (`RequestForAnalysisRecommendations.utils.test.ts` и т.д.).
|
|
30
56
|
|
|
31
57
|
# Стили и дизайн‑токены
|
|
32
58
|
|
|
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`).
|
|
33
62
|
- Для визуала использовать **тот стек стилей и токенов, который уже в проекте** (переменные, тема, общие классы, дизайн‑пакет).
|
|
34
63
|
- Избегать:
|
|
35
64
|
- inline‑стилей, кроме простых случаев;
|
|
@@ -39,10 +68,11 @@ alwaysApply: false
|
|
|
39
68
|
|
|
40
69
|
# Пропсы и типизация
|
|
41
70
|
|
|
71
|
+
- **Не передавать пропы в компоненты через spread** (`<Foo {...x} />`). Только явные атрибуты; подробности и исключения — `no-props-spread.mdc` (в `app/src/ui` это дополнительно ловит ESLint).
|
|
42
72
|
- Описывать пропсы через `type Props = { ... }` или `interface Props { ... }`.
|
|
43
73
|
- Не использовать `any`; при необходимости:
|
|
44
74
|
- обобщения (`<T>`), `unknown`, тип‑предикаты и user‑defined type guards.
|
|
45
|
-
- Для доменных сущностей использовать типы из `@/types
|
|
75
|
+
- Для доменных сущностей использовать типы из `@/types` (и enum из `@/types/enums`), а не описывать их заново (`public-imports.mdc`).
|
|
46
76
|
|
|
47
77
|
# Логика и side effects
|
|
48
78
|
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Эталонные фичи репозитория — копировать структуру при реализации новых задач. Заполните пути после init в целевом репо.
|
|
3
|
+
globs:
|
|
4
|
+
- app/src/ui/**/*
|
|
5
|
+
- app/src/store/**/*
|
|
6
|
+
- app/src/api/**/*
|
|
7
|
+
- app/src/types/**/*
|
|
8
|
+
alwaysApply: false
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Эталонные фичи (reference features)
|
|
12
|
+
|
|
13
|
+
Перед реализацией найди фичу того же типа и **повтори её структуру**, не изобретая новую организацию файлов.
|
|
14
|
+
|
|
15
|
+
## Таблица эталонов
|
|
16
|
+
|
|
17
|
+
Замени **TBD** на реальные пути после договорённости в команде (или при `ai-rules init` в целевом репо):
|
|
18
|
+
|
|
19
|
+
| Слой | Эталон | Что копировать |
|
|
20
|
+
|------|--------|----------------|
|
|
21
|
+
| UI page | **TBD** `app/src/ui/pages/<Example>/` | `components/`, `*.data.ts`, `styles.ts`, barrel |
|
|
22
|
+
| Store slice | **TBD** `app/src/store/slices/<example>/` | slice, thunks, selectors, types |
|
|
23
|
+
| API service | **TBD** `app/src/api/services/<example>/` | service, mappers, barrel |
|
|
24
|
+
| Types module | **TBD** `app/src/types/<example>/` | domain types, JSDoc, barrel export |
|
|
25
|
+
| Unit tests | **TBD** рядом с эталонным mapper/service | `*.spec.ts`, describe/it naming |
|
|
26
|
+
| E2E area | **TBD** `app/__tests__/e2e/<Area>/` | `*.cases.md`, page objects, `_shared/` |
|
|
27
|
+
|
|
28
|
+
## Как использовать
|
|
29
|
+
|
|
30
|
+
1. Определи затронутые слои из `decomposition.md` или задачи.
|
|
31
|
+
2. Открой эталон из таблицы (после заполнения путей).
|
|
32
|
+
3. Зеркаль именование, порядок файлов, паттерны импортов и тестов.
|
|
33
|
+
4. Если эталона нет — выбери **самую близкую** существующую фичу того же слоя и зафиксируй выбор в handoff.
|
|
34
|
+
|
|
35
|
+
## Связанные правила
|
|
36
|
+
|
|
37
|
+
- `code-quality-and-refactoring.mdc` — повторять паттерны, не deep-import.
|
|
38
|
+
- `feature-delivery-workflow.mdc` — порядок слоёв.
|
|
39
|
+
- skill `feature-delivery` — end-to-end сценарий.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Redux Toolkit и состояние приложения
|
|
3
|
-
globs: src/store/**/*.ts
|
|
3
|
+
globs: app/src/store/**/*.ts
|
|
4
4
|
alwaysApply: false
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -16,7 +16,7 @@ alwaysApply: false
|
|
|
16
16
|
|
|
17
17
|
# Структура слайсов
|
|
18
18
|
|
|
19
|
-
- Каждый доменный модуль — свой слайс в `src/store/slices/**`.
|
|
19
|
+
- Каждый доменный модуль — свой слайс в `app/src/store/slices/**`.
|
|
20
20
|
- Слайс экспортирует:
|
|
21
21
|
- `reducer` по умолчанию;
|
|
22
22
|
- `actions` именованным экспортом;
|
|
@@ -30,17 +30,23 @@ alwaysApply: false
|
|
|
30
30
|
- Асинхронные запросы:
|
|
31
31
|
- через `createAsyncThunk` или RTK Query.
|
|
32
32
|
- внутри thunk:
|
|
33
|
-
- вызывать API через
|
|
34
|
-
- не вызывать HTTP‑клиент напрямую — только через
|
|
33
|
+
- вызывать API через сервисы, импортированные из `@/api` (**`public-imports.mdc`**);
|
|
34
|
+
- не вызывать HTTP‑клиент напрямую — только через эти сервисы.
|
|
35
35
|
- Сайд‑эффекты (логирование, аналитика, работа с файлами):
|
|
36
|
-
- выносить в middleware (`src/store/middleware/**`) или специализированные слайсы.
|
|
36
|
+
- выносить в middleware (`app/src/store/middleware/**`) или специализированные слайсы.
|
|
37
37
|
|
|
38
38
|
# Типизация
|
|
39
39
|
|
|
40
40
|
- Использовать `RootState`, `AppDispatch` и типизированные хуки `useAppDispatch`, `useAppSelector` (если есть).
|
|
41
|
+
- **HTTP и ошибки API**:
|
|
42
|
+
- не импортировать типы **сторонних HTTP‑библиотек**, которых нет в актуальных зависимостях и существующих слайсах (ориентир — **`package.json`** и соседние файлы);
|
|
43
|
+
- когда сервис возвращает **обёртку ответа** прикладного клиента — использовать **соответствующий тип из `@/types`** (как в barrel и в аналогичных thunk’ах);
|
|
44
|
+
- при ошибках после вызова сервиса — опираться на **тот же класс/контракт ошибки транспорта**, что использует общий клиент (из `@/types`), и разбирать тело/статус **по полям текущей реализации**, а не по воображаемому API;
|
|
45
|
+
- в **`catch`** предпочитать **`instanceof`** на класс ошибки транспорта из `@/types` (если он есть в коде) вместо голого `as`, когда это выразимо без шума (см. `no-type-assertion-as-import-export.mdc`).
|
|
41
46
|
- Для сущностей:
|
|
42
|
-
- доменные типы (включая вычисляемые поля) определять в
|
|
47
|
+
- доменные типы (включая вычисляемые поля) определять в `app/src/types/**`, экспортировать через barrel и импортировать в слайсы из `@/types` как **источник правды** для структуры данных (`public-imports.mdc`);
|
|
43
48
|
- избегать дублирования описаний сущностей в нескольких местах.
|
|
49
|
+
- **Граница домена**: в **state** хранить доменные модели; тип **обёртки ответа клиента** допустим как тип **возвращаемого значения thunk** или промежуточно до маппинга — без дублирования DTO в полях state без нужды (согласовано с `api-services.mdc` и `http-client.mdc`).
|
|
44
50
|
|
|
45
51
|
# Тестирование слайсов
|
|
46
52
|
|
|
@@ -56,4 +62,5 @@ alwaysApply: false
|
|
|
56
62
|
- Не класть логику API внутрь редюсеров/компонентов.
|
|
57
63
|
- Строго типизировать state и actions.
|
|
58
64
|
- Использовать единый стиль именования actions и селекторов, как в существующих слайсах.
|
|
65
|
+
- При работе с ошибками и ответами HTTP опираться на **`http-client.mdc`** и контракты из `@/types`, а не на типы внешних HTTP‑библиотек вне зависимостей проекта.
|
|
59
66
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Роль агента для проведения технического ретроспективы (retro) команды / спринта. On-demand — предпочтительнее slash-команда /technical-retro.
|
|
3
|
+
alwaysApply: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Техническое ретро — rule alias
|
|
7
|
+
|
|
8
|
+
Полный сценарий (включая блок **«Работа агентов»** для slug из `.cursor/team/tasks/`) — в slash-комmand:
|
|
9
|
+
|
|
10
|
+
**`.cursor/commands/technical-retro.md`** → `/technical-retro`
|
|
11
|
+
|
|
12
|
+
Используй rule только если command недоступен. Не дублируй содержимое command в ответе — следуй command-файлу.
|
|
@@ -1,17 +1,31 @@
|
|
|
1
1
|
---
|
|
2
2
|
description: Unit и интеграционные тесты (Testing Library и runner проекта)
|
|
3
|
-
globs:
|
|
3
|
+
globs:
|
|
4
|
+
- app/src/**/*.spec.{ts,tsx}
|
|
5
|
+
- app/src/**/*.test.{ts,tsx}
|
|
4
6
|
alwaysApply: false
|
|
5
7
|
---
|
|
6
8
|
|
|
7
9
|
# Общие правила тестирования
|
|
8
10
|
|
|
11
|
+
- **Имена файлов:** для **новых** тестов использовать суффикс **`*.spec.ts` / `*.spec.tsx`**. Существующие **`*.test.ts` / `*.test.tsx`** не переименовывать без отдельной задачи (легаси).
|
|
9
12
|
- **Runner и матчеры** — как в проекте (часто Jest или Vitest); для компонентов — **@testing-library/react**.
|
|
10
13
|
- Основная цель тестов:
|
|
11
14
|
- проверять **поведение и бизнес‑правила**, а не реализацию или внутренние детали.
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
+
- **Именование unit‑тестов** (строки в `describe` / `it` / `test`):
|
|
16
|
+
- формулировки **только на русском языке** — понятные бизнес‑фразы (что проверяется и какой ожидается результат);
|
|
17
|
+
- **каждое предложение** в названии **начинается с заглавной буквы** (в том числе после `.`, `!`, `?` и при нескольких предложениях в одной строке); первая буква всей строки — тоже заглавная.
|
|
18
|
+
- **Проверка в CI:** ESLint (`jest/valid-title` в `app/eslint.config.mjs`) требует, чтобы строка начиналась с русской заглавной (А–Я, Ё), и запрещает пробел после точки, за которым сразу идёт строчная буква (типичный случай нарушения «с заглавной после точки»).
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
// ✅ Хорошо
|
|
22
|
+
it('Возвращает пустой список. Пользователь не авторизован', () => {})
|
|
23
|
+
it('При ошибке сети показывается сообщение об ошибке', () => {})
|
|
24
|
+
|
|
25
|
+
// ❌ Плохо (не с заглавной после точки; или не русский)
|
|
26
|
+
it('Возвращает пустой список. пользователь не авторизован', () => {})
|
|
27
|
+
it('Returns empty list when user is guest', () => {})
|
|
28
|
+
```
|
|
15
29
|
|
|
16
30
|
# Тесты компонентов
|
|
17
31
|
|
|
@@ -27,6 +41,11 @@ alwaysApply: false
|
|
|
27
41
|
- мокать store (через test‑store) или использовать принятый в проекте способ моков HTTP/API.
|
|
28
42
|
- Не мокать то, что является частью публичного контракта фичи, если это ломает смысл теста.
|
|
29
43
|
|
|
44
|
+
# HTTP‑клиент
|
|
45
|
+
|
|
46
|
+
- При изменении **реализации общего HTTP‑клиента** (разбор тел, заголовки, ветки ошибок, 401/refresh, `FormData`, `blob` и т.п.) — **обновить или добавить behavior‑тесты** рядом с модулем клиента в `app/src/lib/clients/**` (предпочтительно `*.spec.ts`; легаси `*.test.ts` — не трогать без задачи).
|
|
47
|
+
- Проверять смысловые ветки: успешный JSON, HTTP‑ошибка, сеть, релевантные для проекта сценарии авторизации.
|
|
48
|
+
|
|
30
49
|
# Мапперы и преобразование данных
|
|
31
50
|
|
|
32
51
|
- Функции маппинга данных (DTO -> доменная модель и обратно), особенно содержащие вычисляемые поля и ветвления, должны быть покрыты unit‑тестами.
|
|
@@ -35,12 +54,13 @@ alwaysApply: false
|
|
|
35
54
|
# Требование к агенту
|
|
36
55
|
|
|
37
56
|
При добавлении тестов:
|
|
38
|
-
- Следовать существующей структуре и паттернам тестов в `
|
|
57
|
+
- Следовать существующей структуре и паттернам тестов в репозитории: файл `*.spec.ts(x)` рядом с модулем или в общем каталоге тестов — как в соседних фичах.
|
|
39
58
|
- Добавлять тесты для критичных веток логики и edge‑кейсов.
|
|
40
59
|
- При работе с данными:
|
|
41
|
-
- использовать **типы респонса** из API (DTO‑типы), а также **целевые доменные типы** из `@/types
|
|
42
|
-
- по возможности опираться на данные и обработчики из `src/mocks/**` (или аналог в репо), а не плодить случайные тестовые данные "с нуля".
|
|
43
|
-
-
|
|
44
|
-
- **не создавать** поддиректорию `__tests__` внутри папки компонента;
|
|
45
|
-
-
|
|
60
|
+
- использовать **типы респонса** из API (DTO‑типы), а также **целевые доменные типы** из `@/types`, не дублировать интерфейсы в тестах;
|
|
61
|
+
- по возможности опираться на данные и обработчики из `app/src/mocks/**` (или аналог в репо), а не плодить случайные тестовые данные "с нуля".
|
|
62
|
+
- Размещение:
|
|
63
|
+
- для **компонентов UI** — **не создавать** поддиректорию `__tests__` внутри папки компонента; тест — соседний `*.spec.tsx`.
|
|
64
|
+
- в **других модулях** (например `api/services`) допустима уже существующая схема с `__tests__` — не ломать ради единообразия с UI.
|
|
65
|
+
- **новые** файлы — `*.spec.ts` / `*.spec.tsx` (см. блок «Имена файлов» выше).
|
|
46
66
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Стиль JSDoc для доменных и транспортных типов в app/src/types
|
|
3
|
+
globs: app/src/types/**/*.ts
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Документация типов в `app/src/types`
|
|
8
|
+
|
|
9
|
+
При добавлении или существенном изменении типов в этом слое **следовать уже принятому в репозитории стилю JSDoc** (см. примеры: `User.types.ts`, `Common.types.ts`, `ServerValidation.types.ts`, `TreatmentPlan/*.types.ts`).
|
|
10
|
+
|
|
11
|
+
## Язык и форма
|
|
12
|
+
|
|
13
|
+
- Текст комментариев — **на русском**, кратко и по делу: что означает тип или поле в предметной области или в контракте с API.
|
|
14
|
+
- **Не опираться** на теги в духе `@param`, `@returns`, `@see`, `@deprecated` для описания типов — в этом слое они **не используются**; достаточно обычного текста в `/** … */`.
|
|
15
|
+
|
|
16
|
+
## Экспортируемый `type` / `interface`
|
|
17
|
+
|
|
18
|
+
- Сразу **перед объявлением** — блок `/** … */`.
|
|
19
|
+
- Если нужно пояснить источник данных, ограничения или неочевидности — **второй абзац** в том же блоке (в JSDoc для абзаца — пустая строка между строками текста).
|
|
20
|
+
- Для **вложенных** объектов в том же файле каждый такой тип документируется отдельным блоком над своим объявлением.
|
|
21
|
+
|
|
22
|
+
## Поля
|
|
23
|
+
|
|
24
|
+
- У **каждого** публичного свойства — **однострочный** `/** … */` на строке непосредственно **над** полем.
|
|
25
|
+
- Если поле **не приходит с бэкенда «как есть»**, а вычисляется или дополняется на фронте (маппер, селектор, UI) — начать описание с префикса **`[computed]`** (как в `TUserProfile`, типах плана лечения).
|
|
26
|
+
- Для форматов данных указывать это **в тексте**: например дата `YYYY-MM-DD`, пример отображаемой строки в кавычках.
|
|
27
|
+
|
|
28
|
+
## Классы и прочие объявления
|
|
29
|
+
|
|
30
|
+
- Для **классов** (например ошибки транспорта) при изменении публичного API — краткий блок над классом и **комментарии к публичным полям** по тем же правилам, что у свойств интерфейса.
|
|
31
|
+
|
|
32
|
+
## `enum`
|
|
33
|
+
|
|
34
|
+
- В `enums.ts` исторически часто **без JSDoc** на каждом члене; для новых enum допустимо короткое описание **над самим enum**, если назначение неочевидно из имени. Подписи для UI — как принято, через объекты `*Names` рядом с enum.
|
|
35
|
+
|
|
36
|
+
## Практика для агента
|
|
37
|
+
|
|
38
|
+
- Добавляя новый тип или поле, **не оставлять** новые публичные поля без пояснения, если смысл не равен имени на 100%.
|
|
39
|
+
- Правя файл, где уже есть такие комментарии, **поддерживать тот же стиль**, а не смешивать с англоязычными или «теговыми» блоками.
|
|
40
|
+
- Не раздувать комментарии: одна-две фразы на тип, одна строка на поле — норма; исключение — действительно сложная доменная оговорка.
|
|
41
|
+
|
|
42
|
+
См. также импорты и barrel: `public-imports.mdc`.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# `.cursor/skills` (preset next)
|
|
2
|
+
|
|
3
|
+
Project skills for Cursor. They keep long workflows out of always-on rules while preserving the same team conventions as the Claude preset.
|
|
4
|
+
|
|
5
|
+
| Skill | When to use |
|
|
6
|
+
|-------|-------------|
|
|
7
|
+
| `feature-delivery` | End-to-end feature work across types, API, store, UI, tests |
|
|
8
|
+
| `code-review` | MR/diff review using project architecture and test standards |
|
|
9
|
+
| `debug-investigation` | Reproducing and fixing bugs with root-cause evidence |
|
|
10
|
+
| `ci-investigation` | Diagnosing and fixing failing CI checks on PRs/branches |
|
|
11
|
+
| `unit-testing` | Planning, generating, or healing unit test coverage |
|
|
12
|
+
| `playwright-e2e` | Planning, generating, or healing Playwright e2e coverage |
|
|
13
|
+
| `technical-retro` | Technical retrospective for a task, sprint, incident, or agent pipeline |
|
|
14
|
+
|
|
15
|
+
Skills are copied to `.cursor/skills/` by `ai-rules init cursor --preset next`.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ci-investigation
|
|
3
|
+
description: Investigates failing CI checks on PRs and branches — lint, type-check, unit, e2e — with local reproduction and minimal fixes. Use when CI is red or for ci-fix pipeline tasks.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# CI Investigation
|
|
7
|
+
|
|
8
|
+
## Workflow
|
|
9
|
+
|
|
10
|
+
1. Identify the **first failing check** (lint, type-check, unit, e2e, build).
|
|
11
|
+
2. Capture error output — ignore cascading failures until root cause is found.
|
|
12
|
+
3. Reproduce locally with the same commands CI uses from `app/`:
|
|
13
|
+
- `lint:js`, `lint:css`, `type-check`
|
|
14
|
+
- targeted unit test file or suite
|
|
15
|
+
- affected Playwright spec if e2e failed
|
|
16
|
+
4. Inspect git diff for changed files related to the failure.
|
|
17
|
+
5. Apply **minimal fix** — no unrelated refactors.
|
|
18
|
+
|
|
19
|
+
## Artifact
|
|
20
|
+
|
|
21
|
+
Write `ci-report.md` under the task slug folder:
|
|
22
|
+
|
|
23
|
+
- Failed check name and link/log excerpt
|
|
24
|
+
- Root cause classification
|
|
25
|
+
- Fix applied (or handoff to feature-developer)
|
|
26
|
+
- Validation commands and results
|
|
27
|
+
|
|
28
|
+
## Handoff Rules
|
|
29
|
+
|
|
30
|
+
- Config-only or one-line fixes → fix in place, re-run check.
|
|
31
|
+
- Missing tests or architecture work → document and route to `feature-developer` or `qa-tester`.
|
|
32
|
+
- Flaky e2e → prefer `playwright-test-healer` after ci-investigator identifies the spec.
|
|
33
|
+
|
|
34
|
+
## Validation
|
|
35
|
+
|
|
36
|
+
Always re-run the failing command locally before marking complete. If environment blocks execution, state the exact command and blocker.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-review
|
|
3
|
+
description: Reviews pull requests, merge requests, git diffs, and branch changes using the preset's architecture, import, UI, API, and testing standards. Use when the user asks for review or when code-reviewer runs in an agent pipeline.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Code Review
|
|
7
|
+
|
|
8
|
+
## Inputs
|
|
9
|
+
|
|
10
|
+
Use the local repository as the source of truth: `git status`, `git diff`, task artifacts under `.cursor/team/tasks/<slug>/` when present, and opened files. Do not invent hosting metadata such as labels, CI status, or reviewers.
|
|
11
|
+
|
|
12
|
+
## Review Order
|
|
13
|
+
|
|
14
|
+
1. Understand the intent and affected layers.
|
|
15
|
+
2. Check correctness and regressions first.
|
|
16
|
+
3. Verify architecture boundaries: UI does not know DTO/transport, store does not depend on UI, API services do not pull UI/store.
|
|
17
|
+
4. Check public imports through `@/types` and `@/api`, plus barrel updates for new public symbols.
|
|
18
|
+
5. Review UI consistency, styling conventions, and prop shape.
|
|
19
|
+
6. Check tests: unit for mapper/domain logic, behavior tests for HTTP client changes, e2e plan/spec updates for user flows.
|
|
20
|
+
7. Report validation gaps: lint, stylelint, type-check, or relevant tests not run.
|
|
21
|
+
|
|
22
|
+
## Output
|
|
23
|
+
|
|
24
|
+
Lead with findings ordered by severity. Each finding should include the file, the problem, impact, and a concrete fix direction. If there are no findings, say so and call out remaining test or validation risk.
|
|
25
|
+
|
|
26
|
+
For agent team tasks, write `.cursor/team/tasks/<slug>/review.md` and set `status.json` to `completed` or `changes_requested`.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: debug-investigation
|
|
3
|
+
description: Investigates bugs, failing tests, crashes, and incorrect behavior with runtime evidence before applying minimal fixes. Use for bugfix tasks, debugger agent runs, regressions, and flaky test diagnosis.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Debug Investigation
|
|
7
|
+
|
|
8
|
+
## Process
|
|
9
|
+
|
|
10
|
+
1. Reproduce the issue or collect the closest available evidence: error output, failing test, browser snapshot, logs, or user steps.
|
|
11
|
+
2. Define expected vs actual behavior in one sentence.
|
|
12
|
+
3. Trace the failing path through the smallest relevant slice of the codebase.
|
|
13
|
+
4. Identify the root cause before editing. Avoid broad refactors during bugfixes.
|
|
14
|
+
5. Apply the smallest fix that preserves existing architecture and public contracts.
|
|
15
|
+
6. Add or update a regression test when the behavior is user-facing or likely to recur.
|
|
16
|
+
7. Run the narrow failing check first, then relevant lint/type/test validation.
|
|
17
|
+
|
|
18
|
+
## Artifacts
|
|
19
|
+
|
|
20
|
+
For agent team tasks, write `.cursor/team/tasks/<slug>/debug-report.md` with:
|
|
21
|
+
|
|
22
|
+
- Reproduction steps or evidence source.
|
|
23
|
+
- Root cause.
|
|
24
|
+
- Fix scope.
|
|
25
|
+
- Regression coverage.
|
|
26
|
+
- Remaining risk.
|
|
27
|
+
|
|
28
|
+
Update `status.json` when complete.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: feature-delivery
|
|
3
|
+
description: Delivers Next.js frontend features end-to-end across domain types, API services, store, UI, mocks, tests, and validation. Use when implementing or extending a feature, especially through /task or feature-developer.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Feature Delivery
|
|
7
|
+
|
|
8
|
+
1. Read task brief, acceptance criteria, and decomposition if present.
|
|
9
|
+
2. Read **`feature-delivery-workflow.mdc`** and **`reference-features.mdc`** — follow layer order and mirror closest reference feature.
|
|
10
|
+
3. Add or update focused tests for changed behavior.
|
|
11
|
+
4. Validation from `app/`: **invoke** **`post-change-lint.mdc`** after code edits (requestable, not always-on — but mandatory when code changed). Pipeline: scoped lint OK if next step is `build-verifier`.
|
|
12
|
+
|
|
13
|
+
## Handoff
|
|
14
|
+
|
|
15
|
+
Summarize by layer, validation results, and known gaps. Agent team: update `.cursor/team/tasks/<slug>/status.json`.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: playwright-e2e
|
|
3
|
+
description: Plans, generates, and heals Playwright e2e tests using this preset's app/__tests__/e2e layout, *.cases.md plans, page objects, and shared helpers. Use for e2e planning, test generation, or fixing failing browser tests.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Playwright E2E
|
|
7
|
+
|
|
8
|
+
## Project Layout
|
|
9
|
+
|
|
10
|
+
- Test root: `app/__tests__/e2e`.
|
|
11
|
+
- Test plans: `*.cases.md` files under the matching feature folder.
|
|
12
|
+
- Executable specs: `*.spec.ts` files in the same folder.
|
|
13
|
+
- Seed/setup reference: `app/__tests__/e2e/seed.spec.ts`.
|
|
14
|
+
|
|
15
|
+
Do not introduce top-level `specs/` or `tests/` folders for real coverage unless the user explicitly asks for a sandbox.
|
|
16
|
+
|
|
17
|
+
## Planner
|
|
18
|
+
|
|
19
|
+
Create or update the relevant `*.cases.md` file. Each scenario should include title, preconditions, steps, and expected result. Cover happy path, important edge cases, validation, and error states.
|
|
20
|
+
|
|
21
|
+
## Generator
|
|
22
|
+
|
|
23
|
+
Generate specs from `*.cases.md` into the same folder. Reuse existing page objects and `_shared/` helpers. Keep test names aligned with scenario names.
|
|
24
|
+
|
|
25
|
+
## Healer
|
|
26
|
+
|
|
27
|
+
Fix selectors, waits, setup, or page-object details without weakening business assertions. Use the matching `*.cases.md` file as the behavior contract.
|
|
28
|
+
|
|
29
|
+
## Validation
|
|
30
|
+
|
|
31
|
+
Run the affected spec when feasible. If the environment blocks execution, report the command that should be run and the blocker.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: technical-retro
|
|
3
|
+
description: Facilitates technical retrospectives for tasks, sprints, incidents, releases, and agent-team pipelines. Use when the user asks for retro, postmortem, process review, or action items after delivery.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Technical Retro
|
|
7
|
+
|
|
8
|
+
## Inputs
|
|
9
|
+
|
|
10
|
+
Ask for missing period, focus, task slug, participants, or format constraints. If a slug is provided, read `.cursor/team/tasks/<slug>/` artifacts and local git status/diff. Do not invent facts not present in artifacts or the user's message.
|
|
11
|
+
|
|
12
|
+
## Facilitation Principles
|
|
13
|
+
|
|
14
|
+
- Focus on process and system behavior, not blame.
|
|
15
|
+
- Separate facts, interpretations, and proposed actions.
|
|
16
|
+
- Balance what worked with what slowed delivery.
|
|
17
|
+
- Keep action items concrete, owned, and measurable.
|
|
18
|
+
|
|
19
|
+
## Default Structure
|
|
20
|
+
|
|
21
|
+
1. Goal and scope.
|
|
22
|
+
2. Timeline or factual observations.
|
|
23
|
+
3. What worked.
|
|
24
|
+
4. What hurt quality, speed, or confidence.
|
|
25
|
+
5. Root causes for the top one or two issues.
|
|
26
|
+
6. Experiments and action items.
|
|
27
|
+
|
|
28
|
+
## Agent Team Block
|
|
29
|
+
|
|
30
|
+
For `/task` pipelines, include router, analyst, developer, **build-verifier**, reviewer, QA/e2e, hooks, and rules.
|
|
31
|
+
|
|
32
|
+
## Preset feedback loop
|
|
33
|
+
|
|
34
|
+
If the same issue appeared in 2+ tasks, add section **Preset updates**:
|
|
35
|
+
|
|
36
|
+
- Proposed change to `.cursor/rules/`, `.cursor/agents/`, or `.cursor/skills/`
|
|
37
|
+
- One concrete diff or file path to update
|
|
38
|
+
- Whether it belongs in always-on rules vs globs vs skill
|
|
39
|
+
|
|
40
|
+
Do not apply preset changes without user approval.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: unit-testing
|
|
3
|
+
description: Plans, generates, and heals unit tests for mappers, thunks, HTTP client behavior, and React components using colocated *.spec.ts files and tests-unit rules. Use for unit test planning, generation, or fixing failing unit tests.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Unit Testing
|
|
7
|
+
|
|
8
|
+
## Project Layout
|
|
9
|
+
|
|
10
|
+
- Specs colocated with source: `*.spec.ts` / `*.spec.tsx` next to the module under test.
|
|
11
|
+
- Legacy `*.test.ts` / `*.test.tsx` — do not rename without a separate task.
|
|
12
|
+
- Runner: Jest or Vitest as configured in the target repo; components use `@testing-library/react`.
|
|
13
|
+
|
|
14
|
+
Follow **`tests-unit.mdc`** (Cursor) or **`rules/testing/tests-unit.md`** (Claude).
|
|
15
|
+
|
|
16
|
+
## Planner
|
|
17
|
+
|
|
18
|
+
Write or update `.cursor/team/tasks/<slug>/unit-test-plan.md` (or `.claude/team/...`).
|
|
19
|
+
|
|
20
|
+
Each scenario needs a Russian `it()` title (capital letter after each sentence). Cover mappers, thunks, client behavior branches, and component interactions per AC.
|
|
21
|
+
|
|
22
|
+
## Generator
|
|
23
|
+
|
|
24
|
+
Implement specs from `unit-test-plan.md`. Reuse project test-store, HTTP mocks, and existing test utilities. Do not change production code.
|
|
25
|
+
|
|
26
|
+
## Healer
|
|
27
|
+
|
|
28
|
+
Fix mocks, async timing, selectors, and setup — preserve business assertions. Use `unit-test-plan.md` and `brief.md` as the behavior contract.
|
|
29
|
+
|
|
30
|
+
## Validation
|
|
31
|
+
|
|
32
|
+
Run affected unit tests from `app/` when feasible. Report command, pass/fail, and remaining gaps vs plan.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Agent team artifacts
|
|
2
|
+
|
|
3
|
+
Каталог артефактов пайплайна «команда агентов» Cursor.
|
|
4
|
+
|
|
5
|
+
## Layout
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
.cursor/team/
|
|
9
|
+
active-task.json
|
|
10
|
+
fixtures/ # pipeline profile examples (feature-full, feature-light, bugfix-standard)
|
|
11
|
+
tasks/
|
|
12
|
+
<slug>/
|
|
13
|
+
pipeline.json
|
|
14
|
+
status.json
|
|
15
|
+
brief.md
|
|
16
|
+
decomposition.md
|
|
17
|
+
debug-report.md # fixApplied: true/false
|
|
18
|
+
validation-report.md # build-verifier: PASS | FAIL
|
|
19
|
+
architecture.md
|
|
20
|
+
migration-plan.md
|
|
21
|
+
ci-report.md
|
|
22
|
+
a11y-review.md
|
|
23
|
+
perf-report.md
|
|
24
|
+
security-review.md
|
|
25
|
+
api-contract-review.md
|
|
26
|
+
unit-test-plan.md
|
|
27
|
+
documentation.md
|
|
28
|
+
review.md
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## pipeline.json schema
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"slug": "order-history-date-filter",
|
|
36
|
+
"intent": "feature",
|
|
37
|
+
"summary": "Add date filter to Order History",
|
|
38
|
+
"steps": [
|
|
39
|
+
{ "agent": "task-analyst", "label": "Clarify and decompose" },
|
|
40
|
+
{ "agent": "feature-developer", "label": "Implement + unit tests", "scope": "unit-in-dev" },
|
|
41
|
+
{ "agent": "build-verifier", "label": "Validation gate" },
|
|
42
|
+
{ "agent": "code-reviewer", "label": "Code review" },
|
|
43
|
+
{ "agent": "qa-tester", "label": "E2E", "scope": "e2e-only" }
|
|
44
|
+
],
|
|
45
|
+
"humanGates": ["after:task-analyst"],
|
|
46
|
+
"autoChain": true,
|
|
47
|
+
"skipped": []
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Step fields
|
|
52
|
+
|
|
53
|
+
| Field | Description |
|
|
54
|
+
|-------|-------------|
|
|
55
|
+
| `agent` | kebab-case name or array when `parallel: true` |
|
|
56
|
+
| `label` | Human-readable step name |
|
|
57
|
+
| `scope` | Passed to agents (e.g. `unit-in-dev`, `e2e-only`) |
|
|
58
|
+
| `skipIf` | `debugger.fixed` \| `ci-investigator.resolved` |
|
|
59
|
+
| `parallel` | Invoke all `agent` values in one parent turn |
|
|
60
|
+
|
|
61
|
+
## status.json (pipeline mode)
|
|
62
|
+
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"slug": "order-history-date-filter",
|
|
66
|
+
"intent": "feature",
|
|
67
|
+
"pipelineIndex": 0,
|
|
68
|
+
"currentAgent": "task-analyst",
|
|
69
|
+
"phase": "executing",
|
|
70
|
+
"state": "in_progress",
|
|
71
|
+
"awaitingHumanGate": false,
|
|
72
|
+
"parallelCompleted": [],
|
|
73
|
+
"retryAfterFix": null,
|
|
74
|
+
"updatedAt": "2026-05-29T12:00:00.000Z"
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### phase
|
|
79
|
+
|
|
80
|
+
Prefer **`executing`** for pipeline mode. Legacy: `analysis`, `development`, `review`, `testing`, `done`.
|
|
81
|
+
|
|
82
|
+
### state
|
|
83
|
+
|
|
84
|
+
| Value | Description |
|
|
85
|
+
|-------|-------------|
|
|
86
|
+
| `in_progress` | Current step running |
|
|
87
|
+
| `completed` | Current step finished |
|
|
88
|
+
| `awaiting_approval` | Human gate; use `/task-continue` |
|
|
89
|
+
| `changes_requested` | Reviewer requires fixes |
|
|
90
|
+
| `validation_failed` | build-verifier failed |
|
|
91
|
+
| `approved` | Legacy continue |
|
|
92
|
+
|
|
93
|
+
## Workflow entry
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
/task <описание задачи>
|
|
97
|
+
/task-continue <slug>
|
|
98
|
+
/technical-retro <slug>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Legacy: `/feature-start`, `/feature-continue`.
|
|
102
|
+
|
|
103
|
+
## Creating task dirs
|
|
104
|
+
|
|
105
|
+
Bootstrap `<slug>/` by **writing** `pipeline.json` / `status.json` (Write tool). Do **not** use Shell `mkdir -p` — Cursor’s default sandbox returns `Operation not permitted` (especially for repos on macOS Desktop/Documents).
|
|
106
|
+
|
|
107
|
+
## Git
|
|
108
|
+
|
|
109
|
+
Commit task artifacts if you want them to survive `ai-rules clean cursor`. Or copy finished tasks to `docs/agent-workflow/tasks/<slug>/`.
|