@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
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- app/src/api/**/*
|
|
4
|
+
- app/src/store/**/*
|
|
5
|
+
- app/src/types/**/*
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Не использовать `as` для приведения типов при экспорте и импорте
|
|
9
|
+
|
|
10
|
+
## О чём речь
|
|
11
|
+
|
|
12
|
+
Речь о **type assertion** в TypeScript: выражение вида `значение as Тип`.
|
|
13
|
+
|
|
14
|
+
**Не относится к правилу** (это не assertion, а синтаксис модулей):
|
|
15
|
+
|
|
16
|
+
- переименование при экспорте: `export { foo as bar }`, `export { default as Baz } from '...'`;
|
|
17
|
+
- переименование при импорте: `import { foo as bar } from '...'`;
|
|
18
|
+
- `import type { Foo as Bar }` — алиас типа в импорте типов.
|
|
19
|
+
|
|
20
|
+
## Требование
|
|
21
|
+
|
|
22
|
+
- На **публичной границе модуля** (экспорт, присваивание импортированным символам с принудительным приведением) **не использовать** `as Тип` для «подгонки» типов, если можно обойтись нормальной типизацией.
|
|
23
|
+
|
|
24
|
+
## Предпочитать вместо `as`
|
|
25
|
+
|
|
26
|
+
- явную аннотацию: `const x: T = ...` / `function f(): T`;
|
|
27
|
+
- **дженерики** у функций и классов;
|
|
28
|
+
- **`satisfies`** (когда нужно проверить совместимость без сужения до `any`);
|
|
29
|
+
- сужение **`unknown`** после проверки (type guards, `zod` и т.п.);
|
|
30
|
+
- правку **исходных типов/DTO/мапперов**, а не assertion на выходе.
|
|
31
|
+
|
|
32
|
+
## Когда `as` допустим
|
|
33
|
+
|
|
34
|
+
- взаимодействие с **не типизированными** или некорректно типизированными внешними модулями;
|
|
35
|
+
- узкие места после **валидации** данных;
|
|
36
|
+
- **`as const`** — литеральные типы;
|
|
37
|
+
- блок **`catch (error)`** после HTTP: по возможности **`instanceof`** на **класс ошибки транспорта** из `@/types`; голый **`as`** — только если `instanceof` недоступен.
|
|
38
|
+
|
|
39
|
+
## Примеры
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
// ❌ Плохо: assertion на экспортируемом API
|
|
43
|
+
export const config = loadRaw() as AppConfig
|
|
44
|
+
|
|
45
|
+
// ✅ Лучше: аннотация + проверка или маппер
|
|
46
|
+
export const config: AppConfig = mapToAppConfig(loadRaw())
|
|
47
|
+
|
|
48
|
+
// ❌ Плохо: сразу после импорта «ломаем» тип
|
|
49
|
+
import { getData } from './api'
|
|
50
|
+
export const data = getData() as MyDto[]
|
|
51
|
+
|
|
52
|
+
// ✅ Лучше: типизировать getData / обернуть типобезопасной функцией
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Требование к агенту
|
|
56
|
+
|
|
57
|
+
При ревью и генерации кода **не добавлять** новые `as Тип` на экспортируемые сущности без явной необходимости.
|
|
58
|
+
|
|
59
|
+
В слайсах и сервисах при обработке ошибок API сначала рассматривать **`instanceof`** на класс ошибки транспорта из `@/types` (`api-and-data/http-client.md`, `api-and-data/store-rtk.md`).
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- app/src/types/**/*.ts
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Документация типов в `app/src/types`
|
|
7
|
+
|
|
8
|
+
При добавлении или существенном изменении типов в этом слое **следовать уже принятому в репозитории стилю JSDoc** (см. примеры: `User.types.ts`, `Common.types.ts`, `ServerValidation.types.ts`, `TreatmentPlan/*.types.ts`).
|
|
9
|
+
|
|
10
|
+
## Язык и форма
|
|
11
|
+
|
|
12
|
+
- Текст комментариев — **на русском**, кратко и по делу.
|
|
13
|
+
- **Не использовать** `@param`, `@returns`, `@see`, `@deprecated` для описания типов — достаточно обычного текста в `/** … */`.
|
|
14
|
+
|
|
15
|
+
## Экспортируемый `type` / `interface`
|
|
16
|
+
|
|
17
|
+
- Сразу **перед объявлением** — блок `/** … */`.
|
|
18
|
+
- Для вложенных объектов — отдельный блок над каждым объявлением.
|
|
19
|
+
|
|
20
|
+
## Поля
|
|
21
|
+
|
|
22
|
+
- У **каждого** публичного свойства — **однострочный** `/** … */` над полем.
|
|
23
|
+
- Если поле **вычисляется на фронте** — префикс **`[computed]`**.
|
|
24
|
+
- Форматы данных указывать **в тексте** (например дата `YYYY-MM-DD`).
|
|
25
|
+
|
|
26
|
+
## Классы и enum
|
|
27
|
+
|
|
28
|
+
- Для **классов** — блок над классом и комментарии к публичным полям.
|
|
29
|
+
- В `enums.ts` исторически часто **без JSDoc** на каждом члене; для новых enum допустимо описание **над enum**.
|
|
30
|
+
|
|
31
|
+
## Практика для агента
|
|
32
|
+
|
|
33
|
+
- Не оставлять новые публичные поля без пояснения, если смысл не равен имени на 100%.
|
|
34
|
+
- Поддерживать **тот же стиль**, что в файле.
|
|
35
|
+
- Одна-две фразы на тип, одна строка на поле — норма.
|
|
36
|
+
|
|
37
|
+
См. также импорты и barrel: `architecture/public-imports.md`.
|
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
# Testing
|
|
2
2
|
|
|
3
|
-
Unit
|
|
3
|
+
Unit, e2e, Playwright agents.
|
|
4
|
+
|
|
5
|
+
| Файл | Содержание | Загрузка |
|
|
6
|
+
|------|------------|----------|
|
|
7
|
+
| `playwright-agents.md` | Planner / generator / healer — структура e2e | session start |
|
|
8
|
+
| `tests-unit.md` | Unit/integration, именование на русском | `paths: app/src/**/*.spec.*`, `*.test.*` |
|
|
9
|
+
| `tests-e2e-structure.md` | `*.cases.md`, page objects, data-testid | `paths: app/__tests__/e2e/**` |
|
|
10
|
+
|
|
11
|
+
См. также `.claude/agents/playwright-test-*.md` после `ai-rules init`.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- app/__tests__/e2e/**
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Playwright Agents in this project
|
|
7
|
+
|
|
8
|
+
Playwright Agents (planner, generator, healer) **must follow the existing e2e structure**:
|
|
9
|
+
|
|
10
|
+
- **Test directory**: `app/__tests__/e2e`
|
|
11
|
+
- **Test plans (specs)**: `*.cases.md` files under `app/__tests__/e2e/**`
|
|
12
|
+
- **Executable tests**: `*.spec.ts` files under `app/__tests__/e2e/**`
|
|
13
|
+
- **Seed test**: `app/__tests__/e2e/seed.spec.ts`
|
|
14
|
+
|
|
15
|
+
Do **not** introduce separate top-level `specs/` and `tests/` folders for real test coverage. Those may be used only as temporary sandboxes if explicitly requested.
|
|
16
|
+
|
|
17
|
+
## Planner (test plans)
|
|
18
|
+
|
|
19
|
+
When acting as a **Planner** (or working with the Playwright planner agent):
|
|
20
|
+
|
|
21
|
+
- **Treat `*.cases.md` as the canonical test plan files**, equivalent to Playwright's `specs/*.md`.
|
|
22
|
+
- **Location**:
|
|
23
|
+
- For a feature/domain, use the corresponding `*.cases.md` file under `app/__tests__/e2e`, e.g.:
|
|
24
|
+
- `app/__tests__/e2e/OrderHistory/order-history.cases.md`
|
|
25
|
+
- `app/__tests__/e2e/BillingReport/invoice-list.cases.md`
|
|
26
|
+
- **Content requirements**:
|
|
27
|
+
- Group scenarios by feature and subfeature using headings.
|
|
28
|
+
- For each scenario include:
|
|
29
|
+
- clear title,
|
|
30
|
+
- preconditions,
|
|
31
|
+
- ordered steps,
|
|
32
|
+
- expected results.
|
|
33
|
+
- Write in concise business language, but precise enough for automatic test generation.
|
|
34
|
+
- **Seed**:
|
|
35
|
+
- Assume environment is prepared by `app/__tests__/e2e/seed.spec.ts` (login, baseURL, mocks, etc.).
|
|
36
|
+
|
|
37
|
+
When asked to "generate a test plan" for a feature, **create or update the appropriate `*.cases.md` file in `app/__tests__/e2e/**`**, not in a separate `specs/` folder.
|
|
38
|
+
|
|
39
|
+
## Generator (tests from plans)
|
|
40
|
+
|
|
41
|
+
When acting as a **Generator** (or working with the Playwright generator agent):
|
|
42
|
+
|
|
43
|
+
- **Source of truth for scenarios**:
|
|
44
|
+
- Use the relevant `*.cases.md` file under `app/__tests__/e2e/**` as the test plan.
|
|
45
|
+
- **Target for tests**:
|
|
46
|
+
- Generate or update `*.spec.ts` files under the same folder, e.g.:
|
|
47
|
+
- plan: `app/__tests__/e2e/OrderHistory/order-history.cases.md`
|
|
48
|
+
- tests: `app/__tests__/e2e/OrderHistory/order-history.spec.ts` (or additional `*.spec.ts` in that folder if needed).
|
|
49
|
+
- **Structure**:
|
|
50
|
+
- Use `test.describe` to group by top-level plan sections (feature / user flow).
|
|
51
|
+
- Use `test(...)` titles that match scenario names from the plan.
|
|
52
|
+
- Prefer Page Object and fluent interfaces that already exist in this project, for example:
|
|
53
|
+
- `app/__tests__/e2e/OrderHistory/OrderHistoryPage.ts`
|
|
54
|
+
- shared helpers under `app/__tests__/e2e/_shared/`.
|
|
55
|
+
- **Seed**:
|
|
56
|
+
- If a seed test is needed, use `app/__tests__/e2e/seed.spec.ts` as the reference for environment setup.
|
|
57
|
+
|
|
58
|
+
Do **not** generate Playwright tests into a separate `tests/` folder by default. Keep all e2e tests under `app/__tests__/e2e/**` to respect project conventions.
|
|
59
|
+
|
|
60
|
+
## Healer (fixing tests)
|
|
61
|
+
|
|
62
|
+
When acting as a **Healer** (or working with the Playwright healer agent):
|
|
63
|
+
|
|
64
|
+
- Operate only on `*.spec.ts` files under `app/__tests__/e2e/**`.
|
|
65
|
+
- Use `*.cases.md` in the same folder as **documentation of the intended behavior**:
|
|
66
|
+
- Do not weaken or change business assertions in tests in a way that conflicts with the corresponding `*.cases.md`.
|
|
67
|
+
- Prefer updating locators, waits, and flow details to match the UI while keeping the scenario semantics intact.
|
|
68
|
+
- When multiple specs are involved, prioritize:
|
|
69
|
+
- the spec file in the same folder as the failing test,
|
|
70
|
+
- then shared utilities in `app/__tests__/e2e/_shared/`.
|
|
71
|
+
|
|
72
|
+
Healer should keep tests aligned with the existing test plans (`*.cases.md`) and with the page objects and helpers already used in the project.
|
|
73
|
+
|
|
74
|
+
См. также агенты в `.claude/agents/` пресета и **`testing/tests-e2e-structure.md`**.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- app/__tests__/e2e/**
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Структура e2e в проекте
|
|
7
|
+
|
|
8
|
+
- Папка e2e: `app/__tests__/e2e/**`.
|
|
9
|
+
- Планы сценариев:
|
|
10
|
+
- `*.cases.md` файлы — **канонический источник сценариев**.
|
|
11
|
+
- Тесты:
|
|
12
|
+
- `*.spec.ts` файлы — реализация сценариев на Playwright.
|
|
13
|
+
- Общие утилиты и абстракции:
|
|
14
|
+
- `app/__tests__/e2e/_shared/**` — константы, fluent‑интерфейсы, хелперы.
|
|
15
|
+
|
|
16
|
+
# Принципы
|
|
17
|
+
|
|
18
|
+
- Каждый сценарий из `*.cases.md` должен иметь соответствующий тест (или набор тестов).
|
|
19
|
+
- **Нельзя** ослаблять проверки в тестах, если это противоречит бизнес‑ожиданиям из планов.
|
|
20
|
+
- Предпочтительно использовать:
|
|
21
|
+
- page‑objects (например, `OrderHistoryPage.ts`);
|
|
22
|
+
- общие хелперы из `_shared`.
|
|
23
|
+
|
|
24
|
+
# Именование e2e‑тестов
|
|
25
|
+
|
|
26
|
+
- Язык:
|
|
27
|
+
- все названия `test` / `it`, `describe`‑блоков и шагов в `*.cases.md` должны быть сформулированы **на русском языке**, описывая поведение и ожидаемый результат.
|
|
28
|
+
- Формат заголовков e2e‑тестов (`test(...)` / `it(...)`):
|
|
29
|
+
- перед текстовым описанием сценария указывается **префикс с номером** в формате: `ПРЕФИКС-XXX Описание сценария`.
|
|
30
|
+
- `ПРЕФИКС` — аббревиатура из **первых букв слов** тестируемой сущности, записанная **латиницей в верхнем регистре**.
|
|
31
|
+
- пример: `OrderHistory` → `OH`, `BillingReport` → `BR`.
|
|
32
|
+
- `XXX` — порядковый номер теста **с тремя разрядами и лидирующими нулями**: `001`, `002`, `010`, `123` и т.д.
|
|
33
|
+
- пример полного названия e2e‑теста:
|
|
34
|
+
- `test('OH-001 Отображается список заказов', async ({ page }) => { ... })`
|
|
35
|
+
- внутри одной сущности (`ПРЕФИКС`) номера тестов должны образовывать **непротиворечивую последовательность**, без дубликатов номеров.
|
|
36
|
+
|
|
37
|
+
# data-testid для e2e
|
|
38
|
+
|
|
39
|
+
- **Приоритет селекторов:** `data-testid` для стабильных элементов; `getByRole` и `getByLabel` для форм и доступных элементов.
|
|
40
|
+
- **Именование:** схема `{parent}__{element}` (например, `history-page__title`, `history-page__recognition-banner__attach-files-button`).
|
|
41
|
+
- **Где добавлять:** на корневые контейнеры страниц и ключевые интерактивные элементы (кнопки, ссылки, поля), к которым обращаются page objects.
|
|
42
|
+
- **При изменении UI:** обновлять data-testid в компонентах и соответствующие селекторы в page objects; сверять с `*.cases.md`.
|
|
43
|
+
|
|
44
|
+
# Требование к агенту
|
|
45
|
+
|
|
46
|
+
При добавлении/изменении e2e‑тестов:
|
|
47
|
+
|
|
48
|
+
- Сначала смотреть соответствующий `*.cases.md` и синхронизировать названия сценариев.
|
|
49
|
+
- Размещать спеки рядом с планами в той же директории.
|
|
50
|
+
- Переиспользовать общие page‑objects и хелперы, а не копировать селекторы напрямую в каждый тест.
|
|
51
|
+
|
|
52
|
+
См. также **`testing/playwright-agents.md`** для planner/generator/healer.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- app/src/**/*.spec.ts
|
|
4
|
+
- app/src/**/*.spec.tsx
|
|
5
|
+
- app/src/**/*.test.ts
|
|
6
|
+
- app/src/**/*.test.tsx
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Общие правила тестирования
|
|
10
|
+
|
|
11
|
+
- **Имена файлов:** для **новых** тестов использовать суффикс **`*.spec.ts` / `*.spec.tsx`**. Существующие **`*.test.ts` / `*.test.tsx`** не переименовывать без отдельной задачи (легаси).
|
|
12
|
+
- **Runner и матчеры** — как в проекте (часто Jest или Vitest); для компонентов — **@testing-library/react**.
|
|
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
|
+
```
|
|
29
|
+
|
|
30
|
+
# Тесты компонентов
|
|
31
|
+
|
|
32
|
+
- Использовать `render` из `@testing-library/react`.
|
|
33
|
+
- Ассерты:
|
|
34
|
+
- матчеры DOM для Testing Library, как подключены в проекте (`toBeInTheDocument`, `toHaveTextContent` и т.п.).
|
|
35
|
+
- Взаимодействия:
|
|
36
|
+
- `userEvent` из `@testing-library/user-event`.
|
|
37
|
+
|
|
38
|
+
# Изоляция и моки
|
|
39
|
+
|
|
40
|
+
- Для работы с API/store:
|
|
41
|
+
- мокать store (через test‑store) или использовать принятый в проекте способ моков HTTP/API.
|
|
42
|
+
- Не мокать то, что является частью публичного контракта фичи, если это ломает смысл теста.
|
|
43
|
+
|
|
44
|
+
# HTTP‑клиент
|
|
45
|
+
|
|
46
|
+
- При изменении **реализации общего HTTP‑клиента** (разбор тел, заголовки, ветки ошибок, 401/refresh, `FormData`, `blob` и т.п.) — **обновить или добавить behavior‑тесты** рядом с модулем клиента в `app/src/lib/clients/**` (предпочтительно `*.spec.ts`; легаси `*.test.ts` — не трогать без задачи).
|
|
47
|
+
- Проверять смысловые ветки: успешный JSON, HTTP‑ошибка, сеть, релевантные для проекта сценарии авторизации.
|
|
48
|
+
|
|
49
|
+
# Мапперы и преобразование данных
|
|
50
|
+
|
|
51
|
+
- Функции маппинга данных (DTO → доменная модель и обратно), особенно содержащие вычисляемые поля и ветвления, должны быть покрыты unit‑тестами.
|
|
52
|
+
- В тестах мапперов особое внимание уделять edge‑кейсам и регрессии бизнес‑правил (например, граничные значения, отсутствие полей, неожиданные комбинации значений).
|
|
53
|
+
|
|
54
|
+
# Требование к агенту
|
|
55
|
+
|
|
56
|
+
При добавлении тестов:
|
|
57
|
+
|
|
58
|
+
- Следовать существующей структуре и паттернам тестов в репозитории: файл `*.spec.ts(x)` рядом с модулем или в общем каталоге тестов — как в соседних фичах.
|
|
59
|
+
- Добавлять тесты для критичных веток логики и edge‑кейсов.
|
|
60
|
+
- При работе с данными:
|
|
61
|
+
- использовать **типы респонса** из API (DTO‑типы), а также **целевые доменные типы** из `@/types`, не дублировать интерфейсы в тестах;
|
|
62
|
+
- по возможности опираться на данные и обработчики из `app/src/mocks/**` (или аналог в репо), а не плодить случайные тестовые данные «с нуля».
|
|
63
|
+
- Размещение:
|
|
64
|
+
- для **компонентов UI** — **не создавать** поддиректорию `__tests__` внутри папки компонента; тест — соседний `*.spec.tsx`.
|
|
65
|
+
- в **других модулях** (например `api/services`) допустима уже существующая схема с `__tests__` — не ломать ради единообразия с UI.
|
|
66
|
+
- **новые** файлы — `*.spec.ts` / `*.spec.tsx` (см. блок «Имена файлов» выше).
|
|
@@ -1,3 +1,14 @@
|
|
|
1
1
|
# Tooling and review
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Lint, package manager, качество кода, agent team, code review MR.
|
|
4
|
+
|
|
5
|
+
| Файл | Содержание | Загрузка |
|
|
6
|
+
|------|------------|----------|
|
|
7
|
+
| `package-manager.md` | yarn / pnpm / npm / bun — определить по lockfile | session start |
|
|
8
|
+
| `post-change-lint.md` | `lint:js` + `lint:css` после изменений (**обязателен** при code edits) | `paths:` commands/team/agents + `app/**` |
|
|
9
|
+
| `code-quality.md` | Boy scout rule, рефакторинг, ESLint | session start |
|
|
10
|
+
| `agent-team-intake.md` | Когда предлагать `/task` и router pipeline | `paths:` commands/team |
|
|
11
|
+
| `agent-team-orchestrator.md` | Dynamic agent team: router, pipeline, gates | `paths:` commands/team/agents |
|
|
12
|
+
| `code-review-mr.md` | Чеклист ревью merge request | `paths:` review-related |
|
|
13
|
+
|
|
14
|
+
On-demand (не rule): **`commands/technical-retro.md`** (фасилитация ретро).
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- .claude/commands/**/*
|
|
4
|
+
- .claude/team/**/*
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Agent team intake
|
|
8
|
+
|
|
9
|
+
When the user message looks like a **work request** (implement, add, fix, refactor, review MR, write tests, spike) — not a question about how code works:
|
|
10
|
+
|
|
11
|
+
1. Prefer **`/task <their request>`** or invoke **task-router** first.
|
|
12
|
+
2. Do not jump straight to coding without router + pipeline when scope is non-trivial.
|
|
13
|
+
3. Pure questions («как работает X», «объясни») — answer normally, no `/task`.
|
|
14
|
+
|
|
15
|
+
Exceptions: user explicitly says «без pipeline», «просто сделай», or continues an active slug.
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- .claude/commands/**/*
|
|
4
|
+
- .claude/team/**/*
|
|
5
|
+
- .claude/agents/**/*
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Agent team orchestrator
|
|
9
|
+
|
|
10
|
+
Parent agent = **manager**. Router plans; specialists execute. Artifacts: `.claude/team/tasks/<slug>/`.
|
|
11
|
+
|
|
12
|
+
Work request без `/task` — см. **`tooling-and-review/agent-team-intake.md`**.
|
|
13
|
+
|
|
14
|
+
## Entry points
|
|
15
|
+
|
|
16
|
+
| Command | When |
|
|
17
|
+
|---------|------|
|
|
18
|
+
| **`/task <desc>`** | **Preferred** — router → dynamic pipeline → first agent |
|
|
19
|
+
| `/task-continue <slug>` | After human gate or pause |
|
|
20
|
+
| `/feature-start <desc>` | Legacy: analyst-only start (no router) |
|
|
21
|
+
| `/feature-continue <slug>` | Alias of task-continue |
|
|
22
|
+
| `/technical-retro [slug]` | Retro with agent team block |
|
|
23
|
+
|
|
24
|
+
## Roles
|
|
25
|
+
|
|
26
|
+
| Agent | May edit production code | Typical intent |
|
|
27
|
+
|-------|--------------------------|----------------|
|
|
28
|
+
| `task-router` | no | Every `/task` — writes `pipeline.json` |
|
|
29
|
+
| `task-analyst` | no | feature, refactor, test-only, a11y, docs-only, migration |
|
|
30
|
+
| `solution-architect` | no | spike, complex cross-layer feature |
|
|
31
|
+
| `migration-specialist` | no | migration — phased upgrade plan |
|
|
32
|
+
| `api-contract-reviewer` | no | new/changed backend API contracts |
|
|
33
|
+
| `debugger` | yes, minimal fixes only | bugfix |
|
|
34
|
+
| `ci-investigator` | yes, minimal CI fixes | ci-fix |
|
|
35
|
+
| `feature-developer` | yes | feature, bugfix, refactor, migration, a11y |
|
|
36
|
+
| `build-verifier` | no | lint/type-check/unit gate after developer |
|
|
37
|
+
| `accessibility-reviewer` | no | a11y, UI-heavy feature |
|
|
38
|
+
| `performance-auditor` | no | perf-audit, perf-sensitive feature |
|
|
39
|
+
| `code-reviewer` | no | most pipelines, review-only |
|
|
40
|
+
| `security-reviewer` | no | auth, forms, sensitive data |
|
|
41
|
+
| `qa-tester` | tests only | feature, bugfix, test-only |
|
|
42
|
+
| `unit-test-planner` | no | unit-only — coverage plan |
|
|
43
|
+
| `unit-test-generator` | tests only | unit-only — spec generation |
|
|
44
|
+
| `unit-test-healer` | tests only | failing/flaky unit tests |
|
|
45
|
+
| `playwright-test-planner` | no | e2e scenario planning |
|
|
46
|
+
| `playwright-test-generator` | tests only | e2e spec generation |
|
|
47
|
+
| `playwright-test-healer` | tests only | failing/flaky e2e fixes |
|
|
48
|
+
| `tech-writer` | docs only | docs-only, feature/migration docs |
|
|
49
|
+
|
|
50
|
+
Full prompts: `.claude/agents/*.md`. Artifact conventions: `.claude/team/README.md`.
|
|
51
|
+
|
|
52
|
+
## Dynamic pipeline
|
|
53
|
+
|
|
54
|
+
```mermaid
|
|
55
|
+
flowchart TD
|
|
56
|
+
task["/task prompt"]
|
|
57
|
+
router["task-router"]
|
|
58
|
+
pipeline["pipeline.json"]
|
|
59
|
+
step0["steps 0..N"]
|
|
60
|
+
gate{"humanGates?"}
|
|
61
|
+
hook["subagentStop hook"]
|
|
62
|
+
retro["/technical-retro"]
|
|
63
|
+
|
|
64
|
+
task --> router
|
|
65
|
+
router --> pipeline
|
|
66
|
+
pipeline --> step0
|
|
67
|
+
step0 --> gate
|
|
68
|
+
gate -->|"/task-continue"| step0
|
|
69
|
+
step0 --> hook
|
|
70
|
+
hook --> step0
|
|
71
|
+
step0 --> retro
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Source of truth for order:** `pipeline.json` → `steps[]`. Never hardcode analyst → dev → review → QA when `pipeline.json` exists.
|
|
75
|
+
|
|
76
|
+
## status.json (pipeline mode)
|
|
77
|
+
|
|
78
|
+
```json
|
|
79
|
+
{
|
|
80
|
+
"slug": "...",
|
|
81
|
+
"intent": "feature",
|
|
82
|
+
"pipelineIndex": 0,
|
|
83
|
+
"currentAgent": "task-analyst",
|
|
84
|
+
"phase": "executing",
|
|
85
|
+
"state": "in_progress",
|
|
86
|
+
"awaitingHumanGate": false
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
| state | Meaning |
|
|
91
|
+
|-------|---------|
|
|
92
|
+
| `in_progress` | Current step running |
|
|
93
|
+
| `completed` | Current step done; hook or orchestrator advances |
|
|
94
|
+
| `awaiting_approval` | Human gate; wait for `/task-continue` |
|
|
95
|
+
| `changes_requested` | Reviewer blocked; re-run developer (`retryAfterFix`) |
|
|
96
|
+
| `validation_failed` | build-verifier failed; re-run developer then build-verifier |
|
|
97
|
+
|
|
98
|
+
## Pipeline step options
|
|
99
|
+
|
|
100
|
+
| Field | Use |
|
|
101
|
+
|-------|-----|
|
|
102
|
+
| `skipIf` | `debugger.fixed` / `ci-investigator.resolved` |
|
|
103
|
+
| `parallel: true` | `agent` array — invoke all in one parent turn |
|
|
104
|
+
| `scope` | e.g. `unit-in-dev`, `e2e-only` |
|
|
105
|
+
|
|
106
|
+
## Rules (strict)
|
|
107
|
+
|
|
108
|
+
1. **`/task` always starts with task-router** (except user says "skip router" with documented pipeline).
|
|
109
|
+
2. Read `pipeline.json` before every subagent invocation.
|
|
110
|
+
3. One role per subagent call — **except** parallel steps.
|
|
111
|
+
4. **Never** skip `humanGates` without `/task-continue` or explicit user approval.
|
|
112
|
+
5. Persist handoffs including `validation-report.md` (write files; do not rely on Shell `mkdir` alone).
|
|
113
|
+
6. On `changes_requested`: hook sets `retryAfterFix` → developer → same reviewer.
|
|
114
|
+
7. On `validation_failed`: hook sets `retryAfterFix: build-verifier` → developer → build-verifier.
|
|
115
|
+
8. When all steps complete, suggest `/technical-retro <slug>`.
|
|
116
|
+
9. If `autoChain: false`, manual step only.
|
|
117
|
+
|
|
118
|
+
## Team artifact I/O
|
|
119
|
+
|
|
120
|
+
Create `.claude/team/tasks/<slug>/**` by writing files (Write/Edit). Avoid Shell-only `mkdir` as the bootstrap step.
|
|
121
|
+
|
|
122
|
+
## Invoking agents
|
|
123
|
+
|
|
124
|
+
Use the available Claude Code subagent mechanism. Pass: slug, artifact paths, step `scope` if set.
|
|
125
|
+
|
|
126
|
+
After each agent completes, ensure `status.json` has `state: completed` (or `awaiting_approval` if gate applies).
|
|
127
|
+
|
|
128
|
+
## Legacy mode
|
|
129
|
+
|
|
130
|
+
If `pipeline.json` is missing (old `/feature-start` tasks), fall back to fixed phases: analysis → development → review → testing.
|
|
131
|
+
|
|
132
|
+
## Skip pipeline when
|
|
133
|
+
|
|
134
|
+
Do **not** run `/task` + router for:
|
|
135
|
+
|
|
136
|
+
- Pure questions («как работает X», «объясни»).
|
|
137
|
+
- Typo / one-file fix / trivial config with no architecture risk.
|
|
138
|
+
- User explicitly says «без pipeline», «просто сделай», or continues an active slug.
|
|
139
|
+
- Single-line `docs-only` with no code impact.
|
|
140
|
+
|
|
141
|
+
Borderline work requests — см. **`tooling-and-review/agent-team-intake.md`**.
|
|
142
|
+
|
|
143
|
+
## Auto-detection (optional)
|
|
144
|
+
|
|
145
|
+
When user describes a **non-trivial task** (not a question), suggest `/task <message>` or run router if they agree.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Поддержка и улучшение качества кода
|
|
2
|
+
|
|
3
|
+
## Поддержка существующего стиля
|
|
4
|
+
|
|
5
|
+
- Новые изменения должны:
|
|
6
|
+
- следовать существующим паттернам (имена, структура, типизация);
|
|
7
|
+
- минимизировать «стилистический шум» (лишние правки форматирования, rename без нужды).
|
|
8
|
+
- Перед добавлением нового решения:
|
|
9
|
+
- искать аналогичное в коде и **повторять подход**, а не изобретать новый;
|
|
10
|
+
- проверять, нет ли уже подходящего компонента или паттерна в существующем UI‑коде и пакетах проекта, прежде чем добавлять новый кастомный контрол;
|
|
11
|
+
- использовать при обращении к чужим модулям только их **public API** (index/barrel‑файлы и явно экспортируемые сущности), а deep‑импорты внутренних файлов рассматривать как повод для рефакторинга.
|
|
12
|
+
|
|
13
|
+
## Рефакторинг при изменениях
|
|
14
|
+
|
|
15
|
+
- Разрешён лёгкий refactor, если он:
|
|
16
|
+
- уменьшает дублирование;
|
|
17
|
+
- повышает читаемость;
|
|
18
|
+
- не ломает публичные контракты модулей.
|
|
19
|
+
- Примеры допустимых улучшений:
|
|
20
|
+
- вынести дублирующуюся логику в общий хук/утилиту;
|
|
21
|
+
- типизировать `any` и `unknown`, если это безболезненно;
|
|
22
|
+
- разделить слишком крупный компонент на несколько более простых;
|
|
23
|
+
- заменить локальные «магические» CSS‑значения (цвета, отступы, размеры) на токены/примитивы дизайна проекта;
|
|
24
|
+
- заменить deep‑импорты внутренних файлов других модулей на обращения к их public API.
|
|
25
|
+
|
|
26
|
+
## Ограничения
|
|
27
|
+
|
|
28
|
+
- Не выполнять «большой» рефакторинг, если задача точечная и не про архитектуру:
|
|
29
|
+
- не менять структуру директорий;
|
|
30
|
+
- не менять названия публичных типов/функций без явного запроса.
|
|
31
|
+
- При необходимости крупного изменения:
|
|
32
|
+
- сначала локально улучшить архитектуру минимальными шагами;
|
|
33
|
+
- оставить код в консистентном состоянии.
|
|
34
|
+
|
|
35
|
+
## Линтеры
|
|
36
|
+
|
|
37
|
+
Lint/stylelint — только **`tooling-and-review/post-change-lint.md`**; ESLint config: `app/eslint.config.mjs`. Отключение правила (`eslint-disable`) — только **точечно** с кратким комментарием «зачем».
|
|
38
|
+
|
|
39
|
+
## Требование к агенту
|
|
40
|
+
|
|
41
|
+
- **Boy scout rule:** оставлять модуль немного лучше, чем до изменения (простые, безопасные улучшения).
|
|
42
|
+
- Не жертвовать архитектурой и слоями ради краткости реализации.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- .claude/commands/**/*
|
|
4
|
+
- .claude/agents/code-reviewer.md
|
|
5
|
+
- .claude/skills/code-review/**/*
|
|
6
|
+
- .claude/team/**/review.md
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Code review merge requests
|
|
10
|
+
|
|
11
|
+
On-demand rule for review flows. **Procedure and output format:** skill `code-review`.
|
|
12
|
+
|
|
13
|
+
## Checklist references
|
|
14
|
+
|
|
15
|
+
- Architecture layers: `architecture/architecture-boundaries.md`, `stack/next-app-core.md`; network: `api-and-data/http-client.md`
|
|
16
|
+
- Imports: `architecture/public-imports.md`, `architecture/layer-barrel-exports.md`
|
|
17
|
+
- UI: `ui-and-accessibility/react-ui.md`
|
|
18
|
+
- Tests: `testing/tests-unit.md`, `testing/playwright-agents.md`, `testing/tests-e2e-structure.md`
|
|
19
|
+
- Lint gate before final report: `tooling-and-review/post-change-lint.md`
|
|
20
|
+
|
|
21
|
+
## When to load
|
|
22
|
+
|
|
23
|
+
- User asks for review/MR/diff
|
|
24
|
+
- Pipeline step `code-reviewer`
|
|
25
|
+
|
|
26
|
+
## Constraints
|
|
27
|
+
|
|
28
|
+
- Focus on MR diff, not the whole repo.
|
|
29
|
+
- Use local `git diff` — do not invent hosting metadata.
|
|
30
|
+
- Boy scout rule: suggest fixes feasible within the MR scope.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Менеджер пакетов (терминал)
|
|
2
|
+
|
|
3
|
+
Перед **`npm install` / `yarn` / `pnpm` / `bun`** и **`… run …`** определи менеджер репозитория и **используй только его**.
|
|
4
|
+
|
|
5
|
+
## Как определить
|
|
6
|
+
|
|
7
|
+
1. **`packageManager`** в `package.json` (корень или `app/package.json`).
|
|
8
|
+
2. **Lockfile** рядом: `yarn.lock` → yarn; `pnpm-lock.yaml` → pnpm; `package-lock.json` → npm; `bun.lock(b)` → bun.
|
|
9
|
+
3. Если неоднозначно — где `node_modules` и какой lockfile в CI.
|
|
10
|
+
|
|
11
|
+
Рабочий каталог для scripts — **`app/`**. Примеры: `yarn lint`, `pnpm run test`. Не угадывай — проверь файлы.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Прогон ESLint и Stylelint после изменений кода. Requestable — подгружать после правок app/**; агенты обязаны запускать после code edits.
|
|
3
|
+
paths:
|
|
4
|
+
- .claude/commands/**/*
|
|
5
|
+
- .claude/team/**/*
|
|
6
|
+
- .claude/agents/**/*
|
|
7
|
+
- app/**/*.{ts,tsx,js,jsx,mjs,css}
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Линтеры после изменений кода
|
|
11
|
+
|
|
12
|
+
**Requestable, но обязателен при изменениях кода:** правило не session-start (экономия контекста); после правок исходников агент **должен** следовать этому чеклисту.
|
|
13
|
+
|
|
14
|
+
## Когда применять
|
|
15
|
+
|
|
16
|
+
После **любого** изменения исходников в `app/**` (TS/TSX/JS/MJS, CSS, styled/Linaria в `.ts`/`.tsx`).
|
|
17
|
+
|
|
18
|
+
Исключения: правки документации вне `app/`, конфигов CI, `.claude/rules/**`, если исполняемый код приложения не менялся.
|
|
19
|
+
|
|
20
|
+
**Pipeline exception:** если задача идёт через agent team и следующий шаг — `build-verifier`, developer может ограничиться lint/type-check **изменённых файлов**; полный прогон — обязанность `build-verifier`. В single-agent режиме (без pipeline) — всегда полный прогон.
|
|
21
|
+
|
|
22
|
+
## Обязательные команды
|
|
23
|
+
|
|
24
|
+
Рабочий каталог — **`app/`**. Менеджер пакетов — **`tooling-and-review/package-manager.md`**.
|
|
25
|
+
|
|
26
|
+
1. **`lint:js`** — полный ESLint по проекту.
|
|
27
|
+
2. **`lint:css`** — полный Stylelint (`**/*.{css,ts}`).
|
|
28
|
+
|
|
29
|
+
Точечный lint на один файл **не заменяет** полный прогон перед завершением задачи (кроме pipeline exception выше).
|
|
30
|
+
|
|
31
|
+
## Алгоритм
|
|
32
|
+
|
|
33
|
+
1. Завершить правки кода.
|
|
34
|
+
2. Запустить **`lint:js`** и **`lint:css`** из `app/`.
|
|
35
|
+
3. Проанализировать весь вывод; исправить errors/warnings в изменённых файлах; для Stylelint — **`lint:css --fix`** если автоисправимо.
|
|
36
|
+
4. Повторить до exit code 0 или зафиксировать блокер в ответе пользователю.
|
|
37
|
+
5. **`type-check`** при изменениях TypeScript. CI-уровень: **`lint`** (= `lint:js` + `lint:css` + `type-check`).
|
|
38
|
+
|
|
39
|
+
## Что исправлять
|
|
40
|
+
|
|
41
|
+
- **Errors** — обязательно.
|
|
42
|
+
- **Warnings** — обязательно в файлах задачи; вне скоупа — упомянуть, если мешают нулевому exit code.
|
|
43
|
+
|
|
44
|
+
Конфиги: `app/eslint.config.mjs`, `app/.stylelintrc` (порядок CSS — `ui-and-accessibility/css-property-order.md`).
|
|
@@ -1,3 +1,12 @@
|
|
|
1
1
|
# UI and accessibility
|
|
2
2
|
|
|
3
|
-
Компоненты, стили,
|
|
3
|
+
Компоненты, стили, пропсы.
|
|
4
|
+
|
|
5
|
+
| Файл | Содержание | Загрузка |
|
|
6
|
+
|------|------------|----------|
|
|
7
|
+
| `no-props-spread.md` | Явные пропсы, без `{...props}` | `paths: app/src/**/*.tsx` |
|
|
8
|
+
| `css-property-order.md` | Порядок CSS (Stylelint idiomatic-order) | `paths:` styles/css |
|
|
9
|
+
| `react-ui.md` | Структура, стили (`Root`), `.data.ts`, хуки | `paths: app/src/ui/**` |
|
|
10
|
+
| `react-a11y-coding.md` | A11y при написании UI | `paths: app/src/ui/**` |
|
|
11
|
+
|
|
12
|
+
Deprecated stub `component-styles.md` **removed** — styles colocation lives in `react-ui.md`.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
paths:
|
|
3
|
+
- app/src/ui/**/*.styles.ts
|
|
4
|
+
- app/src/ui/**/*.styles.tsx
|
|
5
|
+
- app/src/ui/**/styles.ts
|
|
6
|
+
- app/src/ui/**/styles.tsx
|
|
7
|
+
- app/**/*.css
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Порядок CSS-свойств (как в Stylelint)
|
|
11
|
+
|
|
12
|
+
Порядок свойств — как в **`app/.stylelintrc`** (`stylelint-config-idiomatic-order`). Не дублировать список вручную.
|
|
13
|
+
|
|
14
|
+
Автоисправление из `app/`: **`lint:css --fix`**. Полный прогон — **`tooling-and-review/post-change-lint.md`**.
|