@bonesofspring/ai-rules 0.2.14 → 0.2.16
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 +24 -1
- package/README.md +3 -1
- package/bin/cli.js +2 -0
- package/package.json +2 -1
- package/presets/_shared/core/agent-team/agent-team-intake.md +2 -2
- package/presets/_shared/core/agent-team/agent-team-orchestrator.md +4 -4
- package/presets/_shared/core/architecture/feature-delivery-workflow.md +27 -27
- package/presets/_shared/core/architecture/reference-features.template.md +23 -23
- package/presets/_shared/core/meta/preset-layering.md +12 -12
- package/presets/_shared/core/meta/preset-no-cross-stack-leakage.md +26 -13
- package/presets/_shared/core/meta/preset-pr-checklist.md +6 -6
- package/presets/_shared/core/meta/preset-token-budget.md +3 -3
- package/presets/_shared/core/meta/preset-twin-sync.md +2 -0
- package/presets/_shared/core/quality/code-quality-and-refactoring.md +19 -19
- package/presets/_shared/core/quality/design-guidance.md +54 -54
- package/presets/_shared/core/review/code-review-mr.md +4 -4
- package/presets/_shared/core/review/technical-retro.md +3 -3
- package/presets/claude/android-kotlin/CLAUDE.md +38 -0
- package/presets/claude/android-kotlin/MCP.md +16 -0
- package/presets/claude/android-kotlin/README.md +32 -0
- package/presets/claude/android-kotlin/REPO_AGENTS.md +48 -0
- package/presets/claude/android-kotlin/agents/README.md +44 -0
- package/presets/claude/android-kotlin/agents/accessibility-reviewer.md +60 -0
- package/presets/claude/android-kotlin/agents/api-contract-reviewer.md +70 -0
- package/presets/claude/android-kotlin/agents/build-verifier.md +67 -0
- package/presets/claude/android-kotlin/agents/ci-investigator.md +74 -0
- package/presets/claude/android-kotlin/agents/code-reviewer.md +74 -0
- package/presets/claude/android-kotlin/agents/codebase-analyzer.md +28 -0
- package/presets/claude/android-kotlin/agents/debugger.md +77 -0
- package/presets/claude/android-kotlin/agents/feature-developer.md +63 -0
- package/presets/claude/android-kotlin/agents/instrumentation-test-generator.md +19 -0
- package/presets/claude/android-kotlin/agents/instrumentation-test-healer.md +19 -0
- package/presets/claude/android-kotlin/agents/instrumentation-test-planner.md +19 -0
- package/presets/claude/android-kotlin/agents/migration-specialist.md +74 -0
- package/presets/claude/android-kotlin/agents/performance-auditor.md +67 -0
- package/presets/claude/android-kotlin/agents/qa-tester.md +66 -0
- package/presets/claude/android-kotlin/agents/security-reviewer.md +65 -0
- package/presets/claude/android-kotlin/agents/solution-architect.md +21 -0
- package/presets/claude/android-kotlin/agents/task-analyst.md +36 -0
- package/presets/claude/android-kotlin/agents/task-router.md +103 -0
- package/presets/claude/android-kotlin/agents/tech-writer.md +61 -0
- package/presets/claude/android-kotlin/agents/unit-test-generator.md +55 -0
- package/presets/claude/android-kotlin/agents/unit-test-healer.md +54 -0
- package/presets/claude/android-kotlin/agents/unit-test-planner.md +65 -0
- package/presets/claude/android-kotlin/commands/README.md +51 -0
- package/presets/claude/android-kotlin/commands/feature-continue.md +19 -0
- package/presets/claude/android-kotlin/commands/feature-start.md +33 -0
- package/presets/claude/android-kotlin/commands/task-continue.md +50 -0
- package/presets/claude/android-kotlin/commands/task.md +56 -0
- package/presets/claude/android-kotlin/commands/technical-retro.md +85 -0
- package/presets/claude/android-kotlin/hooks/README.md +16 -0
- package/presets/claude/android-kotlin/hooks/chain-team-phases.sh +705 -0
- package/presets/claude/android-kotlin/hooks/examples/README.md +18 -0
- package/presets/claude/android-kotlin/hooks/examples/format-edited.example.sh +13 -0
- package/presets/claude/android-kotlin/hooks/examples/secret-guard.example.sh +10 -0
- package/presets/claude/android-kotlin/hooks/examples/test-on-save.example.sh +8 -0
- package/presets/claude/android-kotlin/hooks/guard-shell-command.sh +80 -0
- package/presets/claude/android-kotlin/mcp.json +12 -0
- package/presets/claude/android-kotlin/rules/README.md +63 -0
- package/presets/claude/android-kotlin/rules/api-and-data/README.md +10 -0
- package/presets/claude/android-kotlin/rules/api-and-data/networking.md +30 -0
- package/presets/claude/android-kotlin/rules/api-and-data/persistence.md +29 -0
- package/presets/claude/android-kotlin/rules/architecture/README.md +9 -0
- package/presets/claude/android-kotlin/rules/architecture/boundaries.md +27 -0
- package/presets/claude/android-kotlin/rules/architecture/di-dagger-feature-holders.md +34 -0
- package/presets/claude/android-kotlin/rules/architecture/feature-delivery.md +41 -0
- package/presets/claude/android-kotlin/rules/architecture/module-public-api.md +29 -0
- package/presets/claude/android-kotlin/rules/architecture/reference-features.md +28 -0
- package/presets/claude/android-kotlin/rules/stack/README.md +6 -0
- package/presets/claude/android-kotlin/rules/stack/android-app-core.md +27 -0
- package/presets/claude/android-kotlin/rules/stack/kotlin-conventions.md +30 -0
- package/presets/claude/android-kotlin/rules/testing/README.md +10 -0
- package/presets/claude/android-kotlin/rules/testing/ui.md +28 -0
- package/presets/claude/android-kotlin/rules/testing/unit.md +29 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/README.md +19 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/agent-team-intake.md +18 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/agent-team-orchestrator.md +127 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/anti-sycophancy-discipline.md +29 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/code-quality.md +52 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/code-review.md +88 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/design-guidance.md +110 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/gradle-tooling.md +30 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/post-change-build.md +34 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/preset-layering.md +36 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/preset-no-cross-stack-leakage.md +100 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/preset-pr-checklist.md +39 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/preset-token-budget.md +41 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/preset-twin-sync.md +56 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/security-android.md +29 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/technical-retro.md +18 -0
- package/presets/claude/android-kotlin/rules/ui-and-accessibility/README.md +7 -0
- package/presets/claude/android-kotlin/rules/ui-and-accessibility/compose.md +31 -0
- package/presets/claude/android-kotlin/rules/ui-and-accessibility/navigation.md +30 -0
- package/presets/claude/android-kotlin/rules/ui-and-accessibility/viewmodels.md +27 -0
- package/presets/claude/android-kotlin/skills/README.md +14 -0
- package/presets/claude/android-kotlin/skills/ci-investigation/SKILL.md +39 -0
- package/presets/claude/android-kotlin/skills/code-review/SKILL.md +39 -0
- package/presets/claude/android-kotlin/skills/debug-investigation/SKILL.md +34 -0
- package/presets/claude/android-kotlin/skills/feature-delivery/SKILL.md +35 -0
- package/presets/claude/android-kotlin/skills/instrumentation-ui-e2e/SKILL.md +17 -0
- package/presets/claude/android-kotlin/skills/technical-retro/SKILL.md +54 -0
- package/presets/claude/android-kotlin/skills/unit-testing/SKILL.md +32 -0
- package/presets/claude/android-kotlin/skills/write-adr/SKILL.md +41 -0
- package/presets/claude/android-kotlin/team/README.md +54 -0
- package/presets/claude/android-kotlin/team/conventions.md +17 -0
- package/presets/claude/android-kotlin/team/fixtures/bugfix-standard.json +47 -0
- package/presets/claude/android-kotlin/team/fixtures/feature-full.json +97 -0
- package/presets/claude/android-kotlin/team/fixtures/feature-light.json +38 -0
- package/presets/claude/go/MCP.md +7 -7
- package/presets/claude/go/README.md +3 -3
- package/presets/claude/go/agents/README.md +2 -2
- package/presets/claude/go/agents/task-router.md +13 -13
- package/presets/claude/go/commands/README.md +8 -8
- package/presets/claude/go/commands/feature-continue.md +21 -21
- package/presets/claude/go/commands/feature-start.md +16 -16
- package/presets/claude/go/commands/task-continue.md +14 -14
- package/presets/claude/go/commands/task.md +32 -32
- package/presets/claude/go/commands/technical-retro.md +38 -38
- package/presets/claude/go/rules/architecture/boundaries.md +10 -10
- package/presets/claude/go/rules/stack/README.md +1 -1
- package/presets/claude/go/rules/stack/go-app-core.md +11 -11
- package/presets/claude/go/rules/tooling-and-review/README.md +1 -1
- package/presets/claude/go/rules/tooling-and-review/agent-team-intake.md +2 -2
- package/presets/claude/go/rules/tooling-and-review/agent-team-orchestrator.md +4 -4
- package/presets/claude/go/rules/tooling-and-review/code-quality.md +21 -20
- package/presets/claude/go/rules/tooling-and-review/code-review.md +4 -4
- package/presets/claude/go/rules/tooling-and-review/design-guidance.md +54 -54
- package/presets/claude/go/rules/tooling-and-review/post-change-test.md +1 -1
- package/presets/claude/go/rules/tooling-and-review/preset-layering.md +12 -13
- package/presets/claude/go/rules/tooling-and-review/preset-no-cross-stack-leakage.md +26 -14
- package/presets/claude/go/rules/tooling-and-review/preset-pr-checklist.md +6 -7
- package/presets/claude/go/rules/tooling-and-review/preset-token-budget.md +3 -4
- package/presets/claude/go/rules/tooling-and-review/preset-twin-sync.md +2 -1
- package/presets/claude/go/rules/tooling-and-review/technical-retro.md +3 -3
- package/presets/claude/go/team/README.md +1 -1
- package/presets/claude/ios-swift/CLAUDE.md +16 -16
- package/presets/claude/ios-swift/MCP.md +10 -8
- package/presets/claude/ios-swift/README.md +8 -8
- package/presets/claude/ios-swift/agents/README.md +11 -11
- package/presets/claude/ios-swift/agents/feature-developer.md +1 -1
- package/presets/claude/ios-swift/agents/task-analyst.md +1 -1
- package/presets/claude/ios-swift/agents/task-router.md +18 -18
- package/presets/claude/ios-swift/commands/README.md +48 -10
- package/presets/claude/ios-swift/commands/feature-continue.md +9 -41
- package/presets/claude/ios-swift/commands/feature-start.md +19 -16
- package/presets/claude/ios-swift/commands/task-continue.md +14 -14
- package/presets/claude/ios-swift/commands/task.md +33 -33
- package/presets/claude/ios-swift/commands/technical-retro.md +61 -38
- package/presets/claude/ios-swift/rules/README.md +7 -7
- package/presets/claude/ios-swift/rules/api-and-data/README.md +1 -1
- package/presets/claude/ios-swift/rules/api-and-data/networking.md +31 -31
- package/presets/claude/ios-swift/rules/api-and-data/persistence.md +13 -13
- package/presets/claude/ios-swift/rules/architecture/README.md +1 -1
- package/presets/claude/ios-swift/rules/architecture/boundaries.md +20 -20
- package/presets/claude/ios-swift/rules/architecture/feature-delivery.md +31 -30
- package/presets/claude/ios-swift/rules/architecture/module-public-api.md +11 -11
- package/presets/claude/ios-swift/rules/architecture/reference-features.md +25 -22
- package/presets/claude/ios-swift/rules/stack/README.md +1 -1
- package/presets/claude/ios-swift/rules/stack/ios-app-core.md +10 -10
- package/presets/claude/ios-swift/rules/stack/swift-conventions.md +17 -17
- package/presets/claude/ios-swift/rules/testing/README.md +1 -1
- package/presets/claude/ios-swift/rules/testing/ui.md +27 -27
- package/presets/claude/ios-swift/rules/testing/unit.md +25 -25
- package/presets/claude/ios-swift/rules/tooling-and-review/README.md +5 -2
- package/presets/claude/ios-swift/rules/tooling-and-review/agent-team-intake.md +2 -2
- package/presets/claude/ios-swift/rules/tooling-and-review/agent-team-orchestrator.md +51 -21
- package/presets/claude/ios-swift/rules/tooling-and-review/code-quality.md +25 -24
- package/presets/claude/ios-swift/rules/tooling-and-review/code-review.md +40 -39
- package/presets/claude/ios-swift/rules/tooling-and-review/design-guidance.md +54 -54
- package/presets/claude/ios-swift/rules/tooling-and-review/post-change-build.md +18 -18
- package/presets/claude/ios-swift/rules/tooling-and-review/preset-layering.md +12 -13
- package/presets/claude/ios-swift/rules/tooling-and-review/preset-no-cross-stack-leakage.md +26 -14
- package/presets/claude/ios-swift/rules/tooling-and-review/preset-pr-checklist.md +6 -7
- package/presets/claude/ios-swift/rules/tooling-and-review/preset-token-budget.md +3 -4
- package/presets/claude/ios-swift/rules/tooling-and-review/preset-twin-sync.md +2 -1
- package/presets/claude/ios-swift/rules/tooling-and-review/security-ios.md +14 -14
- package/presets/claude/ios-swift/rules/tooling-and-review/technical-retro.md +4 -4
- package/presets/claude/ios-swift/rules/tooling-and-review/xcode-tooling.md +11 -11
- package/presets/claude/ios-swift/rules/ui-and-accessibility/README.md +1 -1
- package/presets/claude/ios-swift/rules/ui-and-accessibility/navigation.md +13 -13
- package/presets/claude/ios-swift/rules/ui-and-accessibility/swiftui.md +39 -39
- package/presets/claude/ios-swift/rules/ui-and-accessibility/viewmodels.md +24 -24
- package/presets/claude/ios-swift/skills/README.md +3 -3
- package/presets/claude/ios-swift/team/README.md +6 -2
- package/presets/claude/java/MCP.md +5 -5
- package/presets/claude/java/agents/README.md +2 -2
- package/presets/claude/java/agents/task-router.md +13 -13
- package/presets/claude/java/commands/README.md +8 -8
- package/presets/claude/java/commands/feature-continue.md +21 -21
- package/presets/claude/java/commands/feature-start.md +16 -16
- package/presets/claude/java/commands/task-continue.md +14 -14
- package/presets/claude/java/commands/task.md +32 -32
- package/presets/claude/java/commands/technical-retro.md +38 -38
- package/presets/claude/java/rules/architecture/boundaries.md +10 -10
- package/presets/claude/java/rules/stack/README.md +1 -1
- package/presets/claude/java/rules/stack/java-app-core.md +9 -9
- package/presets/claude/java/rules/tooling-and-review/README.md +1 -1
- package/presets/claude/java/rules/tooling-and-review/agent-team-intake.md +2 -2
- package/presets/claude/java/rules/tooling-and-review/agent-team-orchestrator.md +4 -4
- package/presets/claude/java/rules/tooling-and-review/code-quality.md +21 -20
- package/presets/claude/java/rules/tooling-and-review/code-review.md +5 -4
- package/presets/claude/java/rules/tooling-and-review/design-guidance.md +55 -54
- package/presets/claude/java/rules/tooling-and-review/post-change-test.md +1 -1
- package/presets/claude/java/rules/tooling-and-review/preset-layering.md +12 -13
- package/presets/claude/java/rules/tooling-and-review/preset-no-cross-stack-leakage.md +26 -14
- package/presets/claude/java/rules/tooling-and-review/preset-pr-checklist.md +6 -7
- package/presets/claude/java/rules/tooling-and-review/preset-token-budget.md +3 -4
- package/presets/claude/java/rules/tooling-and-review/preset-twin-sync.md +2 -1
- package/presets/claude/java/rules/tooling-and-review/technical-retro.md +3 -3
- package/presets/claude/java/team/README.md +1 -1
- package/presets/claude/mcp-ts/MCP.md +5 -5
- package/presets/claude/mcp-ts/agents/task-router.md +7 -7
- package/presets/claude/mcp-ts/commands/README.md +1 -1
- package/presets/claude/mcp-ts/commands/feature-continue.md +8 -8
- package/presets/claude/mcp-ts/commands/feature-start.md +17 -17
- package/presets/claude/mcp-ts/commands/task-continue.md +14 -14
- package/presets/claude/mcp-ts/commands/task.md +32 -32
- package/presets/claude/mcp-ts/commands/technical-retro.md +54 -54
- package/presets/claude/mcp-ts/rules/architecture/mcp-server-boundaries.md +2 -2
- package/presets/claude/mcp-ts/rules/stack/mcp-ts-app-core.md +9 -9
- package/presets/claude/mcp-ts/rules/tooling-and-review/agent-team-intake.md +3 -3
- package/presets/claude/mcp-ts/rules/tooling-and-review/agent-team-orchestrator.md +4 -4
- package/presets/claude/mcp-ts/rules/tooling-and-review/code-quality.md +21 -20
- package/presets/claude/mcp-ts/rules/tooling-and-review/code-review.md +5 -4
- package/presets/claude/mcp-ts/rules/tooling-and-review/design-guidance.md +55 -54
- package/presets/claude/mcp-ts/rules/tooling-and-review/post-change-test.md +1 -1
- package/presets/claude/mcp-ts/rules/tooling-and-review/preset-layering.md +12 -13
- package/presets/claude/mcp-ts/rules/tooling-and-review/preset-no-cross-stack-leakage.md +26 -14
- package/presets/claude/mcp-ts/rules/tooling-and-review/preset-pr-checklist.md +6 -7
- package/presets/claude/mcp-ts/rules/tooling-and-review/preset-token-budget.md +3 -4
- package/presets/claude/mcp-ts/rules/tooling-and-review/preset-twin-sync.md +2 -1
- package/presets/claude/mcp-ts/rules/tooling-and-review/technical-retro.md +3 -3
- package/presets/claude/next/CLAUDE.md +17 -17
- package/presets/claude/next/MCP.md +8 -8
- package/presets/claude/next/README.md +16 -16
- package/presets/claude/next/agents/README.md +19 -19
- package/presets/claude/next/agents/feature-developer.md +1 -1
- package/presets/claude/next/agents/task-analyst.md +1 -1
- package/presets/claude/next/agents/task-router.md +16 -16
- package/presets/claude/next/commands/README.md +9 -9
- package/presets/claude/next/commands/feature-continue.md +21 -21
- package/presets/claude/next/commands/feature-start.md +16 -16
- package/presets/claude/next/commands/task-continue.md +14 -14
- package/presets/claude/next/commands/task.md +33 -33
- package/presets/claude/next/commands/technical-retro.md +38 -38
- package/presets/claude/next/rules/README.md +12 -12
- package/presets/claude/next/rules/api-and-data/README.md +6 -6
- package/presets/claude/next/rules/api-and-data/api-services.md +42 -42
- package/presets/claude/next/rules/api-and-data/http-client.md +22 -21
- package/presets/claude/next/rules/api-and-data/store-rtk.md +60 -60
- package/presets/claude/next/rules/architecture/README.md +8 -8
- package/presets/claude/next/rules/architecture/architecture-boundaries-ui.md +6 -6
- package/presets/claude/next/rules/architecture/architecture-boundaries.md +44 -44
- package/presets/claude/next/rules/architecture/feature-delivery-workflow.md +39 -39
- package/presets/claude/next/rules/architecture/layer-barrel-exports.md +30 -29
- package/presets/claude/next/rules/architecture/public-imports.md +13 -13
- package/presets/claude/next/rules/architecture/reference-features.md +16 -16
- package/presets/claude/next/rules/stack/README.md +9 -9
- package/presets/claude/next/rules/stack/arrow-functions.md +7 -7
- package/presets/claude/next/rules/stack/navigation-router-ui.md +6 -6
- package/presets/claude/next/rules/stack/navigation-router.md +37 -37
- package/presets/claude/next/rules/stack/next-app-core.md +17 -17
- package/presets/claude/next/rules/stack/next-app-router.md +17 -17
- package/presets/claude/next/rules/stack/no-type-assertion.md +28 -28
- package/presets/claude/next/rules/stack/types-jsdoc.md +31 -20
- package/presets/claude/next/rules/testing/README.md +5 -5
- package/presets/claude/next/rules/testing/playwright-agents.md +1 -1
- package/presets/claude/next/rules/testing/tests-e2e-structure.md +48 -47
- package/presets/claude/next/rules/testing/tests-unit.md +50 -51
- package/presets/claude/next/rules/tooling-and-review/README.md +9 -9
- package/presets/claude/next/rules/tooling-and-review/agent-team-intake.md +2 -2
- package/presets/claude/next/rules/tooling-and-review/agent-team-orchestrator.md +4 -4
- package/presets/claude/next/rules/tooling-and-review/code-quality.md +25 -24
- package/presets/claude/next/rules/tooling-and-review/code-review-mr.md +4 -4
- package/presets/claude/next/rules/tooling-and-review/design-guidance.md +54 -54
- package/presets/claude/next/rules/tooling-and-review/package-manager.md +7 -7
- package/presets/claude/next/rules/tooling-and-review/post-change-lint.md +22 -22
- package/presets/claude/next/rules/tooling-and-review/preset-layering.md +12 -13
- package/presets/claude/next/rules/tooling-and-review/preset-no-cross-stack-leakage.md +26 -14
- package/presets/claude/next/rules/tooling-and-review/preset-pr-checklist.md +6 -7
- package/presets/claude/next/rules/tooling-and-review/preset-token-budget.md +3 -4
- package/presets/claude/next/rules/tooling-and-review/preset-twin-sync.md +2 -1
- package/presets/claude/next/rules/tooling-and-review/technical-retro.md +4 -4
- package/presets/claude/next/rules/ui-and-accessibility/README.md +7 -7
- package/presets/claude/next/rules/ui-and-accessibility/css-property-order.md +3 -3
- package/presets/claude/next/rules/ui-and-accessibility/no-props-spread.md +18 -18
- package/presets/claude/next/rules/ui-and-accessibility/react-a11y-coding.md +20 -20
- package/presets/claude/next/rules/ui-and-accessibility/react-ui.md +63 -63
- package/presets/claude/next/skills/README.md +4 -4
- package/presets/claude/next/skills/feature-delivery/SKILL.md +1 -1
- package/presets/claude/next/team/README.md +2 -2
- package/presets/claude/nuxt/CLAUDE.md +19 -19
- package/presets/claude/nuxt/MCP.md +8 -8
- package/presets/claude/nuxt/README.md +18 -18
- package/presets/claude/nuxt/agents/README.md +38 -31
- package/presets/claude/nuxt/agents/feature-developer.md +1 -1
- package/presets/claude/nuxt/agents/task-analyst.md +1 -1
- package/presets/claude/nuxt/agents/task-router.md +22 -22
- package/presets/claude/nuxt/commands/README.md +48 -10
- package/presets/claude/nuxt/commands/feature-continue.md +9 -41
- package/presets/claude/nuxt/commands/feature-start.md +19 -16
- package/presets/claude/nuxt/commands/task-continue.md +14 -14
- package/presets/claude/nuxt/commands/task.md +33 -33
- package/presets/claude/nuxt/commands/technical-retro.md +61 -38
- package/presets/claude/nuxt/rules/README.md +5 -5
- package/presets/claude/nuxt/rules/api-and-data/README.md +6 -6
- package/presets/claude/nuxt/rules/api-and-data/api-services.md +44 -43
- package/presets/claude/nuxt/rules/api-and-data/store-pinia.md +27 -26
- package/presets/claude/nuxt/rules/architecture/README.md +8 -8
- package/presets/claude/nuxt/rules/architecture/architecture-boundaries-ui.md +8 -7
- package/presets/claude/nuxt/rules/architecture/architecture-boundaries.md +59 -58
- package/presets/claude/nuxt/rules/architecture/feature-delivery-workflow.md +45 -44
- package/presets/claude/nuxt/rules/architecture/layer-barrel-exports.md +32 -31
- package/presets/claude/nuxt/rules/architecture/public-imports.md +15 -14
- package/presets/claude/nuxt/rules/architecture/reference-features.md +18 -17
- package/presets/claude/nuxt/rules/stack/README.md +8 -8
- package/presets/claude/nuxt/rules/stack/navigation-router-ui.md +6 -6
- package/presets/claude/nuxt/rules/stack/navigation-router.md +37 -37
- package/presets/claude/nuxt/rules/stack/no-type-assertion.md +30 -29
- package/presets/claude/nuxt/rules/stack/nuxt-app-core.md +17 -16
- package/presets/claude/nuxt/rules/stack/types-jsdoc.md +23 -22
- package/presets/claude/nuxt/rules/testing/README.md +5 -5
- package/presets/claude/nuxt/rules/testing/tests-e2e-structure.md +45 -45
- package/presets/claude/nuxt/rules/testing/tests-unit.md +52 -52
- package/presets/claude/nuxt/rules/tooling-and-review/README.md +9 -9
- package/presets/claude/nuxt/rules/tooling-and-review/agent-team-intake.md +3 -2
- package/presets/claude/nuxt/rules/tooling-and-review/agent-team-orchestrator.md +5 -4
- package/presets/claude/nuxt/rules/tooling-and-review/anti-sycophancy-discipline.md +1 -0
- package/presets/claude/nuxt/rules/tooling-and-review/code-quality.md +26 -24
- package/presets/claude/nuxt/rules/tooling-and-review/code-review-mr.md +6 -5
- package/presets/claude/nuxt/rules/tooling-and-review/design-guidance.md +55 -54
- package/presets/claude/nuxt/rules/tooling-and-review/package-manager.md +9 -8
- package/presets/claude/nuxt/rules/tooling-and-review/post-change-lint.md +24 -23
- package/presets/claude/nuxt/rules/tooling-and-review/preset-layering.md +13 -13
- package/presets/claude/nuxt/rules/tooling-and-review/preset-no-cross-stack-leakage.md +27 -14
- package/presets/claude/nuxt/rules/tooling-and-review/preset-pr-checklist.md +7 -7
- package/presets/claude/nuxt/rules/tooling-and-review/preset-token-budget.md +3 -4
- package/presets/claude/nuxt/rules/tooling-and-review/preset-twin-sync.md +3 -1
- package/presets/claude/nuxt/rules/tooling-and-review/technical-retro.md +5 -4
- package/presets/claude/nuxt/rules/ui-and-accessibility/README.md +7 -7
- package/presets/claude/nuxt/rules/ui-and-accessibility/vue-ui.md +7 -6
- package/presets/claude/nuxt/skills/README.md +4 -4
- package/presets/claude/nuxt/skills/feature-delivery/SKILL.md +1 -1
- package/presets/claude/nuxt/team/README.md +8 -4
- package/presets/claude/php-hexagonal/MCP.md +7 -7
- package/presets/claude/php-hexagonal/agents/README.md +3 -3
- package/presets/claude/php-hexagonal/agents/task-router.md +12 -12
- package/presets/claude/php-hexagonal/commands/README.md +9 -9
- package/presets/claude/php-hexagonal/commands/feature-continue.md +21 -21
- package/presets/claude/php-hexagonal/commands/feature-start.md +16 -16
- package/presets/claude/php-hexagonal/commands/task-continue.md +14 -14
- package/presets/claude/php-hexagonal/commands/task.md +32 -32
- package/presets/claude/php-hexagonal/commands/technical-retro.md +38 -38
- package/presets/claude/php-hexagonal/rules/architecture/boundaries.md +11 -10
- package/presets/claude/php-hexagonal/rules/stack/README.md +1 -1
- package/presets/claude/php-hexagonal/rules/stack/php-app-core.md +11 -10
- package/presets/claude/php-hexagonal/rules/tooling-and-review/README.md +1 -1
- package/presets/claude/php-hexagonal/rules/tooling-and-review/agent-team-intake.md +2 -2
- package/presets/claude/php-hexagonal/rules/tooling-and-review/agent-team-orchestrator.md +4 -4
- package/presets/claude/php-hexagonal/rules/tooling-and-review/code-quality.md +21 -21
- package/presets/claude/php-hexagonal/rules/tooling-and-review/code-review.md +4 -4
- package/presets/claude/php-hexagonal/rules/tooling-and-review/design-guidance.md +54 -54
- package/presets/claude/php-hexagonal/rules/tooling-and-review/post-change-test.md +1 -1
- package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-layering.md +12 -13
- package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-no-cross-stack-leakage.md +26 -14
- package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-pr-checklist.md +6 -7
- package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-token-budget.md +3 -4
- package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-twin-sync.md +2 -1
- package/presets/claude/php-hexagonal/rules/tooling-and-review/technical-retro.md +3 -3
- package/presets/claude/php-hexagonal/team/README.md +1 -1
- package/presets/claude/php-laravel/agents/README.md +3 -3
- package/presets/claude/php-laravel/agents/task-router.md +14 -14
- package/presets/claude/php-laravel/commands/README.md +9 -9
- package/presets/claude/php-laravel/commands/feature-continue.md +21 -21
- package/presets/claude/php-laravel/commands/feature-start.md +16 -16
- package/presets/claude/php-laravel/commands/task-continue.md +14 -14
- package/presets/claude/php-laravel/commands/task.md +32 -32
- package/presets/claude/php-laravel/commands/technical-retro.md +38 -38
- package/presets/claude/php-laravel/rules/api-and-data/events-listeners.md +1 -1
- package/presets/claude/php-laravel/rules/architecture/boundaries.md +11 -11
- package/presets/claude/php-laravel/rules/stack/laravel-app-core.md +8 -8
- package/presets/claude/php-laravel/rules/tooling-and-review/agent-team-intake.md +3 -2
- package/presets/claude/php-laravel/rules/tooling-and-review/agent-team-orchestrator.md +4 -4
- package/presets/claude/php-laravel/rules/tooling-and-review/code-quality.md +21 -20
- package/presets/claude/php-laravel/rules/tooling-and-review/code-review.md +4 -5
- package/presets/claude/php-laravel/rules/tooling-and-review/design-guidance.md +54 -54
- package/presets/claude/php-laravel/rules/tooling-and-review/post-change-test.md +1 -1
- package/presets/claude/php-laravel/rules/tooling-and-review/preset-layering.md +13 -13
- package/presets/claude/php-laravel/rules/tooling-and-review/preset-no-cross-stack-leakage.md +27 -14
- package/presets/claude/php-laravel/rules/tooling-and-review/preset-pr-checklist.md +7 -7
- package/presets/claude/php-laravel/rules/tooling-and-review/preset-token-budget.md +4 -4
- package/presets/claude/php-laravel/rules/tooling-and-review/preset-twin-sync.md +3 -1
- package/presets/claude/php-laravel/rules/tooling-and-review/technical-retro.md +4 -3
- package/presets/claude/php-laravel/team/README.md +1 -1
- package/presets/claude/svelte/CLAUDE.md +17 -17
- package/presets/claude/svelte/MCP.md +8 -8
- package/presets/claude/svelte/README.md +1 -1
- package/presets/claude/svelte/agents/README.md +37 -30
- package/presets/claude/svelte/agents/feature-developer.md +1 -1
- package/presets/claude/svelte/agents/task-analyst.md +1 -1
- package/presets/claude/svelte/agents/task-router.md +19 -18
- package/presets/claude/svelte/commands/README.md +48 -10
- package/presets/claude/svelte/commands/feature-continue.md +9 -41
- package/presets/claude/svelte/commands/feature-start.md +19 -16
- package/presets/claude/svelte/commands/task-continue.md +14 -14
- package/presets/claude/svelte/commands/task.md +33 -33
- package/presets/claude/svelte/commands/technical-retro.md +61 -38
- package/presets/claude/svelte/rules/README.md +2 -2
- package/presets/claude/svelte/rules/api-and-data/README.md +6 -6
- package/presets/claude/svelte/rules/api-and-data/api-services.md +14 -14
- package/presets/claude/svelte/rules/api-and-data/store-svelte.md +26 -26
- package/presets/claude/svelte/rules/architecture/README.md +8 -8
- package/presets/claude/svelte/rules/architecture/architecture-boundaries-ui.md +7 -7
- package/presets/claude/svelte/rules/architecture/architecture-boundaries.md +19 -19
- package/presets/claude/svelte/rules/architecture/feature-delivery-workflow.md +26 -26
- package/presets/claude/svelte/rules/architecture/layer-barrel-exports.md +31 -31
- package/presets/claude/svelte/rules/architecture/public-imports.md +8 -8
- package/presets/claude/svelte/rules/architecture/reference-features.md +18 -18
- package/presets/claude/svelte/rules/stack/README.md +8 -8
- package/presets/claude/svelte/rules/stack/navigation-router-ui.md +1 -1
- package/presets/claude/svelte/rules/stack/navigation-router.md +6 -6
- package/presets/claude/svelte/rules/stack/no-type-assertion.md +29 -29
- package/presets/claude/svelte/rules/stack/svelte-app-core.md +16 -16
- package/presets/claude/svelte/rules/stack/types-jsdoc.md +22 -22
- package/presets/claude/svelte/rules/testing/README.md +5 -5
- package/presets/claude/svelte/rules/testing/tests-e2e-structure.md +45 -46
- package/presets/claude/svelte/rules/testing/tests-unit.md +17 -17
- package/presets/claude/svelte/rules/tooling-and-review/README.md +9 -9
- package/presets/claude/svelte/rules/tooling-and-review/agent-team-intake.md +2 -2
- package/presets/claude/svelte/rules/tooling-and-review/agent-team-orchestrator.md +9 -9
- package/presets/claude/svelte/rules/tooling-and-review/code-quality.md +25 -24
- package/presets/claude/svelte/rules/tooling-and-review/code-review-mr.md +5 -5
- package/presets/claude/svelte/rules/tooling-and-review/design-guidance.md +54 -54
- package/presets/claude/svelte/rules/tooling-and-review/package-manager.md +8 -8
- package/presets/claude/svelte/rules/tooling-and-review/post-change-lint.md +23 -23
- package/presets/claude/svelte/rules/tooling-and-review/preset-layering.md +12 -13
- package/presets/claude/svelte/rules/tooling-and-review/preset-no-cross-stack-leakage.md +26 -14
- package/presets/claude/svelte/rules/tooling-and-review/preset-pr-checklist.md +6 -7
- package/presets/claude/svelte/rules/tooling-and-review/preset-token-budget.md +3 -4
- package/presets/claude/svelte/rules/tooling-and-review/preset-twin-sync.md +2 -1
- package/presets/claude/svelte/rules/tooling-and-review/technical-retro.md +4 -4
- package/presets/claude/svelte/rules/ui-and-accessibility/README.md +7 -7
- package/presets/claude/svelte/rules/ui-and-accessibility/svelte-ui.md +6 -6
- package/presets/claude/svelte/skills/README.md +4 -4
- package/presets/claude/svelte/skills/feature-delivery/SKILL.md +1 -1
- package/presets/claude/svelte/team/README.md +8 -4
- package/presets/cursor/android-kotlin/AGENTS.md +50 -0
- package/presets/cursor/android-kotlin/BUGBOT.md +16 -0
- package/presets/cursor/android-kotlin/MCP.md +16 -0
- package/presets/cursor/android-kotlin/README.md +35 -0
- package/presets/cursor/android-kotlin/REPO_AGENTS.md +48 -0
- package/presets/cursor/android-kotlin/agents/README.md +44 -0
- package/presets/cursor/android-kotlin/agents/accessibility-reviewer.md +60 -0
- package/presets/cursor/android-kotlin/agents/api-contract-reviewer.md +70 -0
- package/presets/cursor/android-kotlin/agents/build-verifier.md +67 -0
- package/presets/cursor/android-kotlin/agents/ci-investigator.md +74 -0
- package/presets/cursor/android-kotlin/agents/code-reviewer.md +74 -0
- package/presets/cursor/android-kotlin/agents/codebase-analyzer.md +28 -0
- package/presets/cursor/android-kotlin/agents/debugger.md +77 -0
- package/presets/cursor/android-kotlin/agents/feature-developer.md +63 -0
- package/presets/cursor/android-kotlin/agents/instrumentation-test-generator.md +19 -0
- package/presets/cursor/android-kotlin/agents/instrumentation-test-healer.md +19 -0
- package/presets/cursor/android-kotlin/agents/instrumentation-test-planner.md +19 -0
- package/presets/cursor/android-kotlin/agents/migration-specialist.md +74 -0
- package/presets/cursor/android-kotlin/agents/performance-auditor.md +67 -0
- package/presets/cursor/android-kotlin/agents/qa-tester.md +66 -0
- package/presets/cursor/android-kotlin/agents/security-reviewer.md +65 -0
- package/presets/cursor/android-kotlin/agents/solution-architect.md +21 -0
- package/presets/cursor/android-kotlin/agents/task-analyst.md +36 -0
- package/presets/cursor/android-kotlin/agents/task-router.md +103 -0
- package/presets/cursor/android-kotlin/agents/tech-writer.md +61 -0
- package/presets/cursor/android-kotlin/agents/unit-test-generator.md +55 -0
- package/presets/cursor/android-kotlin/agents/unit-test-healer.md +54 -0
- package/presets/cursor/android-kotlin/agents/unit-test-planner.md +65 -0
- package/presets/cursor/android-kotlin/commands/README.md +51 -0
- package/presets/cursor/android-kotlin/commands/feature-continue.md +19 -0
- package/presets/cursor/android-kotlin/commands/feature-start.md +33 -0
- package/presets/cursor/android-kotlin/commands/task-continue.md +50 -0
- package/presets/cursor/android-kotlin/commands/task.md +56 -0
- package/presets/cursor/android-kotlin/commands/technical-retro.md +85 -0
- package/presets/cursor/android-kotlin/hooks/README.md +12 -0
- package/presets/cursor/android-kotlin/hooks/chain-team-phases.sh +723 -0
- package/presets/cursor/android-kotlin/hooks/examples/README.md +18 -0
- package/presets/cursor/android-kotlin/hooks/examples/format-edited.example.sh +13 -0
- package/presets/cursor/android-kotlin/hooks/examples/secret-guard.example.sh +10 -0
- package/presets/cursor/android-kotlin/hooks/examples/test-on-save.example.sh +8 -0
- package/presets/cursor/android-kotlin/hooks/guard-shell-command.sh +80 -0
- package/presets/cursor/android-kotlin/hooks.json +17 -0
- package/presets/cursor/android-kotlin/mcp.json +11 -0
- package/presets/cursor/android-kotlin/rules/README.md +61 -0
- package/presets/cursor/android-kotlin/rules/agent-team-intake.mdc +16 -0
- package/presets/cursor/android-kotlin/rules/agent-team-orchestrator.mdc +124 -0
- package/presets/cursor/android-kotlin/rules/android-app-core.mdc +28 -0
- package/presets/cursor/android-kotlin/rules/anti-sycophancy-discipline.mdc +30 -0
- package/presets/cursor/android-kotlin/rules/architecture-boundaries.mdc +28 -0
- package/presets/cursor/android-kotlin/rules/code-quality-and-refactoring.mdc +53 -0
- package/presets/cursor/android-kotlin/rules/code-review-mr.mdc +84 -0
- package/presets/cursor/android-kotlin/rules/compose-ui.mdc +32 -0
- package/presets/cursor/android-kotlin/rules/design-guidance.mdc +111 -0
- package/presets/cursor/android-kotlin/rules/di-dagger-feature-holders.mdc +35 -0
- package/presets/cursor/android-kotlin/rules/feature-delivery-workflow.mdc +36 -0
- package/presets/cursor/android-kotlin/rules/gradle-tooling.mdc +31 -0
- package/presets/cursor/android-kotlin/rules/kotlin-conventions.mdc +31 -0
- package/presets/cursor/android-kotlin/rules/module-public-api.mdc +30 -0
- package/presets/cursor/android-kotlin/rules/navigation-feature-launcher.mdc +31 -0
- package/presets/cursor/android-kotlin/rules/networking-data.mdc +31 -0
- package/presets/cursor/android-kotlin/rules/persistence-data.mdc +30 -0
- package/presets/cursor/android-kotlin/rules/post-change-build.mdc +30 -0
- package/presets/cursor/android-kotlin/rules/preset-layering.mdc +36 -0
- package/presets/cursor/android-kotlin/rules/preset-no-cross-stack-leakage.mdc +100 -0
- package/presets/cursor/android-kotlin/rules/preset-pr-checklist.mdc +39 -0
- package/presets/cursor/android-kotlin/rules/preset-token-budget.mdc +41 -0
- package/presets/cursor/android-kotlin/rules/preset-twin-sync.mdc +56 -0
- package/presets/cursor/android-kotlin/rules/reference-features.mdc +29 -0
- package/presets/cursor/android-kotlin/rules/security-android.mdc +30 -0
- package/presets/cursor/android-kotlin/rules/state-and-viewmodels.mdc +28 -0
- package/presets/cursor/android-kotlin/rules/technical-retro.mdc +16 -0
- package/presets/cursor/android-kotlin/rules/tests-ui.mdc +29 -0
- package/presets/cursor/android-kotlin/rules/tests-unit.mdc +30 -0
- package/presets/cursor/android-kotlin/skills/README.md +14 -0
- package/presets/cursor/android-kotlin/skills/ci-investigation/SKILL.md +39 -0
- package/presets/cursor/android-kotlin/skills/code-review/SKILL.md +39 -0
- package/presets/cursor/android-kotlin/skills/debug-investigation/SKILL.md +34 -0
- package/presets/cursor/android-kotlin/skills/feature-delivery/SKILL.md +35 -0
- package/presets/cursor/android-kotlin/skills/instrumentation-ui-e2e/SKILL.md +17 -0
- package/presets/cursor/android-kotlin/skills/technical-retro/SKILL.md +54 -0
- package/presets/cursor/android-kotlin/skills/unit-testing/SKILL.md +32 -0
- package/presets/cursor/android-kotlin/skills/write-adr/SKILL.md +41 -0
- package/presets/cursor/android-kotlin/team/README.md +54 -0
- package/presets/cursor/android-kotlin/team/conventions.md +17 -0
- package/presets/cursor/android-kotlin/team/fixtures/bugfix-standard.json +47 -0
- package/presets/cursor/android-kotlin/team/fixtures/feature-full.json +97 -0
- package/presets/cursor/android-kotlin/team/fixtures/feature-light.json +38 -0
- package/presets/cursor/go/AGENTS.md +10 -10
- package/presets/cursor/go/MCP.md +7 -7
- package/presets/cursor/go/README.md +4 -4
- package/presets/cursor/go/agents/README.md +3 -3
- package/presets/cursor/go/agents/task-router.md +13 -13
- package/presets/cursor/go/commands/README.md +23 -23
- package/presets/cursor/go/commands/feature-continue.md +8 -8
- package/presets/cursor/go/commands/feature-start.md +17 -17
- package/presets/cursor/go/commands/task-continue.md +14 -14
- package/presets/cursor/go/commands/task.md +32 -32
- package/presets/cursor/go/commands/technical-retro.md +49 -49
- package/presets/cursor/go/rules/README.md +3 -3
- package/presets/cursor/go/rules/agent-team-intake.mdc +2 -2
- package/presets/cursor/go/rules/agent-team-orchestrator.mdc +4 -4
- package/presets/cursor/go/rules/architecture-boundaries.mdc +10 -10
- package/presets/cursor/go/rules/code-quality-and-refactoring.mdc +21 -20
- package/presets/cursor/go/rules/code-review-mr.mdc +4 -4
- package/presets/cursor/go/rules/design-guidance.mdc +54 -54
- package/presets/cursor/go/rules/go-app-core.mdc +11 -11
- package/presets/cursor/go/rules/post-change-test.mdc +1 -1
- package/presets/cursor/go/rules/preset-layering.mdc +12 -13
- package/presets/cursor/go/rules/preset-no-cross-stack-leakage.mdc +26 -14
- package/presets/cursor/go/rules/preset-pr-checklist.mdc +6 -7
- package/presets/cursor/go/rules/preset-token-budget.mdc +3 -4
- package/presets/cursor/go/rules/preset-twin-sync.mdc +2 -1
- package/presets/cursor/go/rules/technical-retro.mdc +3 -3
- package/presets/cursor/go/team/README.md +1 -1
- package/presets/cursor/ios-swift/AGENTS.md +20 -20
- package/presets/cursor/ios-swift/MCP.md +8 -8
- package/presets/cursor/ios-swift/README.md +9 -9
- package/presets/cursor/ios-swift/agents/README.md +7 -7
- package/presets/cursor/ios-swift/agents/feature-developer.md +1 -1
- package/presets/cursor/ios-swift/agents/task-analyst.md +1 -1
- package/presets/cursor/ios-swift/agents/task-router.md +16 -16
- package/presets/cursor/ios-swift/commands/README.md +23 -23
- package/presets/cursor/ios-swift/commands/feature-continue.md +8 -8
- package/presets/cursor/ios-swift/commands/feature-start.md +17 -17
- package/presets/cursor/ios-swift/commands/task-continue.md +14 -14
- package/presets/cursor/ios-swift/commands/task.md +33 -33
- package/presets/cursor/ios-swift/commands/technical-retro.md +50 -50
- package/presets/cursor/ios-swift/rules/README.md +23 -23
- package/presets/cursor/ios-swift/rules/agent-team-intake.mdc +2 -2
- package/presets/cursor/ios-swift/rules/agent-team-orchestrator.mdc +2 -2
- package/presets/cursor/ios-swift/rules/architecture-boundaries.mdc +20 -20
- package/presets/cursor/ios-swift/rules/code-quality-and-refactoring.mdc +25 -24
- package/presets/cursor/ios-swift/rules/code-review-mr.mdc +40 -40
- package/presets/cursor/ios-swift/rules/design-guidance.mdc +54 -54
- package/presets/cursor/ios-swift/rules/feature-delivery-workflow.mdc +30 -30
- package/presets/cursor/ios-swift/rules/ios-app-core.mdc +10 -10
- package/presets/cursor/ios-swift/rules/module-public-api.mdc +11 -11
- package/presets/cursor/ios-swift/rules/navigation-coordinators.mdc +13 -13
- package/presets/cursor/ios-swift/rules/networking-services.mdc +31 -31
- package/presets/cursor/ios-swift/rules/persistence-data.mdc +13 -13
- package/presets/cursor/ios-swift/rules/post-change-build.mdc +18 -18
- package/presets/cursor/ios-swift/rules/preset-layering.mdc +12 -13
- package/presets/cursor/ios-swift/rules/preset-no-cross-stack-leakage.mdc +26 -14
- package/presets/cursor/ios-swift/rules/preset-pr-checklist.mdc +6 -7
- package/presets/cursor/ios-swift/rules/preset-token-budget.mdc +3 -4
- package/presets/cursor/ios-swift/rules/preset-twin-sync.mdc +2 -1
- package/presets/cursor/ios-swift/rules/reference-features.mdc +22 -22
- package/presets/cursor/ios-swift/rules/security-ios.mdc +14 -14
- package/presets/cursor/ios-swift/rules/state-and-viewmodels.mdc +24 -24
- package/presets/cursor/ios-swift/rules/swift-conventions.mdc +17 -17
- package/presets/cursor/ios-swift/rules/swiftui-ui.mdc +39 -39
- package/presets/cursor/ios-swift/rules/technical-retro.mdc +4 -4
- package/presets/cursor/ios-swift/rules/tests-ui.mdc +27 -26
- package/presets/cursor/ios-swift/rules/tests-unit.mdc +25 -25
- package/presets/cursor/ios-swift/rules/xcode-tooling.mdc +11 -11
- package/presets/cursor/ios-swift/skills/README.md +3 -3
- package/presets/cursor/ios-swift/team/README.md +1 -1
- package/presets/cursor/java/AGENTS.md +10 -10
- package/presets/cursor/java/MCP.md +6 -6
- package/presets/cursor/java/agents/README.md +3 -3
- package/presets/cursor/java/agents/task-router.md +13 -13
- package/presets/cursor/java/commands/README.md +23 -23
- package/presets/cursor/java/commands/feature-continue.md +8 -8
- package/presets/cursor/java/commands/feature-start.md +17 -17
- package/presets/cursor/java/commands/task-continue.md +14 -14
- package/presets/cursor/java/commands/task.md +32 -32
- package/presets/cursor/java/commands/technical-retro.md +49 -49
- package/presets/cursor/java/rules/README.md +2 -2
- package/presets/cursor/java/rules/agent-team-intake.mdc +2 -2
- package/presets/cursor/java/rules/agent-team-orchestrator.mdc +4 -4
- package/presets/cursor/java/rules/architecture-boundaries.mdc +10 -10
- package/presets/cursor/java/rules/code-quality-and-refactoring.mdc +21 -20
- package/presets/cursor/java/rules/code-review-mr.mdc +4 -4
- package/presets/cursor/java/rules/design-guidance.mdc +54 -54
- package/presets/cursor/java/rules/java-app-core.mdc +9 -9
- package/presets/cursor/java/rules/post-change-test.mdc +1 -1
- package/presets/cursor/java/rules/preset-layering.mdc +12 -13
- package/presets/cursor/java/rules/preset-no-cross-stack-leakage.mdc +26 -14
- package/presets/cursor/java/rules/preset-pr-checklist.mdc +6 -7
- package/presets/cursor/java/rules/preset-token-budget.mdc +3 -4
- package/presets/cursor/java/rules/preset-twin-sync.mdc +2 -1
- package/presets/cursor/java/rules/technical-retro.mdc +3 -3
- package/presets/cursor/java/team/README.md +1 -1
- package/presets/cursor/mcp-ts/AGENTS.md +6 -6
- package/presets/cursor/mcp-ts/MCP.md +5 -5
- package/presets/cursor/mcp-ts/agents/task-router.md +7 -7
- package/presets/cursor/mcp-ts/commands/README.md +1 -1
- package/presets/cursor/mcp-ts/commands/feature-continue.md +8 -8
- package/presets/cursor/mcp-ts/commands/feature-start.md +17 -17
- package/presets/cursor/mcp-ts/commands/task-continue.md +14 -14
- package/presets/cursor/mcp-ts/commands/task.md +32 -32
- package/presets/cursor/mcp-ts/commands/technical-retro.md +50 -50
- package/presets/cursor/mcp-ts/rules/README.md +1 -1
- package/presets/cursor/mcp-ts/rules/agent-team-intake.mdc +3 -3
- package/presets/cursor/mcp-ts/rules/agent-team-orchestrator.mdc +4 -4
- package/presets/cursor/mcp-ts/rules/code-quality-and-refactoring.mdc +21 -20
- package/presets/cursor/mcp-ts/rules/code-review-mr.mdc +5 -4
- package/presets/cursor/mcp-ts/rules/design-guidance.mdc +55 -54
- package/presets/cursor/mcp-ts/rules/mcp-server-boundaries.mdc +2 -2
- package/presets/cursor/mcp-ts/rules/mcp-ts-app-core.mdc +9 -9
- package/presets/cursor/mcp-ts/rules/post-change-test.mdc +1 -1
- package/presets/cursor/mcp-ts/rules/preset-layering.mdc +12 -13
- package/presets/cursor/mcp-ts/rules/preset-no-cross-stack-leakage.mdc +26 -14
- package/presets/cursor/mcp-ts/rules/preset-pr-checklist.mdc +6 -7
- package/presets/cursor/mcp-ts/rules/preset-token-budget.mdc +3 -4
- package/presets/cursor/mcp-ts/rules/preset-twin-sync.mdc +2 -1
- package/presets/cursor/mcp-ts/rules/technical-retro.mdc +3 -3
- package/presets/cursor/next/AGENTS.md +15 -15
- package/presets/cursor/next/MCP.md +9 -9
- package/presets/cursor/next/README.md +9 -9
- package/presets/cursor/next/agents/README.md +22 -22
- package/presets/cursor/next/agents/feature-developer.md +1 -1
- package/presets/cursor/next/agents/task-analyst.md +1 -1
- package/presets/cursor/next/agents/task-router.md +16 -16
- package/presets/cursor/next/commands/README.md +22 -22
- package/presets/cursor/next/commands/feature-continue.md +8 -8
- package/presets/cursor/next/commands/feature-start.md +17 -17
- package/presets/cursor/next/commands/task-continue.md +14 -14
- package/presets/cursor/next/commands/task.md +33 -33
- package/presets/cursor/next/commands/technical-retro.md +49 -49
- package/presets/cursor/next/rules/README.md +52 -52
- package/presets/cursor/next/rules/agent-team-intake.mdc +2 -2
- package/presets/cursor/next/rules/agent-team-orchestrator.mdc +4 -4
- package/presets/cursor/next/rules/api-services.mdc +43 -43
- package/presets/cursor/next/rules/architecture-boundaries-ui.mdc +7 -7
- package/presets/cursor/next/rules/architecture-boundaries.mdc +45 -45
- package/presets/cursor/next/rules/arrow-functions.mdc +8 -8
- package/presets/cursor/next/rules/code-quality-and-refactoring.mdc +25 -24
- package/presets/cursor/next/rules/code-review-mr.mdc +5 -5
- package/presets/cursor/next/rules/css-property-order-stylelint.mdc +4 -4
- package/presets/cursor/next/rules/design-guidance.mdc +54 -54
- package/presets/cursor/next/rules/feature-delivery-workflow.mdc +43 -43
- package/presets/cursor/next/rules/http-client.mdc +23 -22
- package/presets/cursor/next/rules/layer-barrel-exports.mdc +31 -30
- package/presets/cursor/next/rules/navigation-router-stack.mdc +37 -37
- package/presets/cursor/next/rules/navigation-router-ui.mdc +7 -7
- package/presets/cursor/next/rules/next-app-core.mdc +16 -16
- package/presets/cursor/next/rules/next-app-router.mdc +17 -17
- package/presets/cursor/next/rules/no-props-spread.mdc +20 -20
- package/presets/cursor/next/rules/no-type-assertion-as-import-export.mdc +29 -29
- package/presets/cursor/next/rules/package-manager.mdc +8 -8
- package/presets/cursor/next/rules/post-change-lint.mdc +22 -22
- package/presets/cursor/next/rules/preset-layering.mdc +12 -13
- package/presets/cursor/next/rules/preset-no-cross-stack-leakage.mdc +26 -14
- package/presets/cursor/next/rules/preset-pr-checklist.mdc +6 -7
- package/presets/cursor/next/rules/preset-token-budget.mdc +3 -4
- package/presets/cursor/next/rules/preset-twin-sync.mdc +2 -1
- package/presets/cursor/next/rules/public-imports.mdc +14 -14
- package/presets/cursor/next/rules/react-a11y-coding.mdc +21 -21
- package/presets/cursor/next/rules/react-ui.mdc +66 -66
- package/presets/cursor/next/rules/reference-features.mdc +17 -17
- package/presets/cursor/next/rules/store-rtk.mdc +60 -60
- package/presets/cursor/next/rules/technical-retro.mdc +4 -4
- package/presets/cursor/next/rules/tests-e2e-structure.mdc +46 -46
- package/presets/cursor/next/rules/tests-unit.mdc +51 -52
- package/presets/cursor/next/rules/types-jsdoc.mdc +29 -22
- package/presets/cursor/next/skills/feature-delivery/SKILL.md +1 -1
- package/presets/cursor/next/team/README.md +2 -2
- package/presets/cursor/nuxt/AGENTS.md +15 -15
- package/presets/cursor/nuxt/MCP.md +9 -9
- package/presets/cursor/nuxt/README.md +10 -10
- package/presets/cursor/nuxt/agents/README.md +30 -30
- package/presets/cursor/nuxt/agents/feature-developer.md +1 -1
- package/presets/cursor/nuxt/agents/task-analyst.md +1 -1
- package/presets/cursor/nuxt/agents/task-router.md +16 -16
- package/presets/cursor/nuxt/commands/README.md +24 -24
- package/presets/cursor/nuxt/commands/feature-continue.md +8 -8
- package/presets/cursor/nuxt/commands/feature-start.md +17 -17
- package/presets/cursor/nuxt/commands/task-continue.md +14 -14
- package/presets/cursor/nuxt/commands/task.md +33 -33
- package/presets/cursor/nuxt/commands/technical-retro.md +50 -50
- package/presets/cursor/nuxt/rules/README.md +53 -53
- package/presets/cursor/nuxt/rules/agent-team-intake.mdc +2 -2
- package/presets/cursor/nuxt/rules/agent-team-orchestrator.mdc +4 -4
- package/presets/cursor/nuxt/rules/api-services.mdc +43 -43
- package/presets/cursor/nuxt/rules/architecture-boundaries-ui.mdc +7 -7
- package/presets/cursor/nuxt/rules/architecture-boundaries.mdc +58 -58
- package/presets/cursor/nuxt/rules/code-quality-and-refactoring.mdc +25 -24
- package/presets/cursor/nuxt/rules/code-review-mr.mdc +5 -5
- package/presets/cursor/nuxt/rules/design-guidance.mdc +54 -54
- package/presets/cursor/nuxt/rules/feature-delivery-workflow.mdc +44 -44
- package/presets/cursor/nuxt/rules/layer-barrel-exports.mdc +31 -31
- package/presets/cursor/nuxt/rules/navigation-router-stack.mdc +38 -38
- package/presets/cursor/nuxt/rules/navigation-router-ui.mdc +7 -7
- package/presets/cursor/nuxt/rules/no-type-assertion-as-import-export.mdc +29 -29
- package/presets/cursor/nuxt/rules/nuxt-app-core.mdc +16 -16
- package/presets/cursor/nuxt/rules/package-manager.mdc +8 -8
- package/presets/cursor/nuxt/rules/post-change-lint.mdc +23 -23
- package/presets/cursor/nuxt/rules/preset-layering.mdc +12 -13
- package/presets/cursor/nuxt/rules/preset-no-cross-stack-leakage.mdc +26 -14
- package/presets/cursor/nuxt/rules/preset-pr-checklist.mdc +6 -7
- package/presets/cursor/nuxt/rules/preset-token-budget.mdc +3 -4
- package/presets/cursor/nuxt/rules/preset-twin-sync.mdc +2 -1
- package/presets/cursor/nuxt/rules/public-imports.mdc +14 -14
- package/presets/cursor/nuxt/rules/reference-features.mdc +17 -17
- package/presets/cursor/nuxt/rules/store-pinia.mdc +26 -26
- package/presets/cursor/nuxt/rules/technical-retro.mdc +4 -4
- package/presets/cursor/nuxt/rules/tests-e2e-structure.mdc +45 -46
- package/presets/cursor/nuxt/rules/tests-unit.mdc +51 -52
- package/presets/cursor/nuxt/rules/types-jsdoc.mdc +22 -22
- package/presets/cursor/nuxt/rules/vue-ui.mdc +6 -6
- package/presets/cursor/nuxt/skills/feature-delivery/SKILL.md +1 -1
- package/presets/cursor/nuxt/team/README.md +2 -2
- package/presets/cursor/php-hexagonal/AGENTS.md +11 -11
- package/presets/cursor/php-hexagonal/MCP.md +7 -7
- package/presets/cursor/php-hexagonal/agents/README.md +4 -4
- package/presets/cursor/php-hexagonal/agents/task-router.md +12 -12
- package/presets/cursor/php-hexagonal/commands/README.md +25 -25
- package/presets/cursor/php-hexagonal/commands/feature-continue.md +8 -8
- package/presets/cursor/php-hexagonal/commands/feature-start.md +17 -17
- package/presets/cursor/php-hexagonal/commands/task-continue.md +14 -14
- package/presets/cursor/php-hexagonal/commands/task.md +32 -32
- package/presets/cursor/php-hexagonal/commands/technical-retro.md +49 -49
- package/presets/cursor/php-hexagonal/rules/README.md +2 -2
- package/presets/cursor/php-hexagonal/rules/agent-team-intake.mdc +2 -2
- package/presets/cursor/php-hexagonal/rules/agent-team-orchestrator.mdc +4 -4
- package/presets/cursor/php-hexagonal/rules/architecture-boundaries.mdc +10 -10
- package/presets/cursor/php-hexagonal/rules/code-quality-and-refactoring.mdc +20 -20
- package/presets/cursor/php-hexagonal/rules/code-review-mr.mdc +4 -4
- package/presets/cursor/php-hexagonal/rules/design-guidance.mdc +54 -54
- package/presets/cursor/php-hexagonal/rules/php-app-core.mdc +10 -10
- package/presets/cursor/php-hexagonal/rules/post-change-test.mdc +1 -1
- package/presets/cursor/php-hexagonal/rules/preset-layering.mdc +12 -13
- package/presets/cursor/php-hexagonal/rules/preset-no-cross-stack-leakage.mdc +26 -14
- package/presets/cursor/php-hexagonal/rules/preset-pr-checklist.mdc +6 -7
- package/presets/cursor/php-hexagonal/rules/preset-token-budget.mdc +3 -4
- package/presets/cursor/php-hexagonal/rules/preset-twin-sync.mdc +2 -1
- package/presets/cursor/php-hexagonal/rules/technical-retro.mdc +3 -3
- package/presets/cursor/php-hexagonal/team/README.md +1 -1
- package/presets/cursor/php-laravel/AGENTS.md +10 -10
- package/presets/cursor/php-laravel/agents/README.md +4 -4
- package/presets/cursor/php-laravel/agents/task-router.md +14 -14
- package/presets/cursor/php-laravel/commands/README.md +25 -25
- package/presets/cursor/php-laravel/commands/feature-continue.md +8 -8
- package/presets/cursor/php-laravel/commands/feature-start.md +17 -17
- package/presets/cursor/php-laravel/commands/task-continue.md +14 -14
- package/presets/cursor/php-laravel/commands/task.md +32 -32
- package/presets/cursor/php-laravel/commands/technical-retro.md +50 -50
- package/presets/cursor/php-laravel/rules/README.md +2 -2
- package/presets/cursor/php-laravel/rules/agent-team-intake.mdc +2 -2
- package/presets/cursor/php-laravel/rules/agent-team-orchestrator.mdc +4 -4
- package/presets/cursor/php-laravel/rules/architecture-boundaries.mdc +11 -11
- package/presets/cursor/php-laravel/rules/code-quality-and-refactoring.mdc +20 -20
- package/presets/cursor/php-laravel/rules/code-review-mr.mdc +4 -5
- package/presets/cursor/php-laravel/rules/design-guidance.mdc +54 -54
- package/presets/cursor/php-laravel/rules/events-listeners.mdc +1 -1
- package/presets/cursor/php-laravel/rules/laravel-app-core.mdc +8 -8
- package/presets/cursor/php-laravel/rules/post-change-test.mdc +1 -1
- package/presets/cursor/php-laravel/rules/preset-layering.mdc +12 -13
- package/presets/cursor/php-laravel/rules/preset-no-cross-stack-leakage.mdc +26 -14
- package/presets/cursor/php-laravel/rules/preset-pr-checklist.mdc +6 -7
- package/presets/cursor/php-laravel/rules/preset-token-budget.mdc +3 -4
- package/presets/cursor/php-laravel/rules/preset-twin-sync.mdc +2 -1
- package/presets/cursor/php-laravel/rules/technical-retro.mdc +3 -3
- package/presets/cursor/php-laravel/team/README.md +1 -1
- package/presets/cursor/svelte/AGENTS.md +15 -15
- package/presets/cursor/svelte/MCP.md +9 -9
- package/presets/cursor/svelte/README.md +9 -9
- package/presets/cursor/svelte/agents/README.md +29 -29
- package/presets/cursor/svelte/agents/feature-developer.md +1 -1
- package/presets/cursor/svelte/agents/task-analyst.md +1 -1
- package/presets/cursor/svelte/agents/task-router.md +16 -16
- package/presets/cursor/svelte/commands/README.md +24 -24
- package/presets/cursor/svelte/commands/feature-continue.md +8 -8
- package/presets/cursor/svelte/commands/feature-start.md +17 -17
- package/presets/cursor/svelte/commands/task-continue.md +14 -14
- package/presets/cursor/svelte/commands/task.md +33 -33
- package/presets/cursor/svelte/commands/technical-retro.md +50 -50
- package/presets/cursor/svelte/rules/README.md +34 -34
- package/presets/cursor/svelte/rules/agent-team-intake.mdc +2 -2
- package/presets/cursor/svelte/rules/agent-team-orchestrator.mdc +4 -4
- package/presets/cursor/svelte/rules/api-services.mdc +14 -14
- package/presets/cursor/svelte/rules/architecture-boundaries-ui.mdc +7 -7
- package/presets/cursor/svelte/rules/architecture-boundaries.mdc +19 -19
- package/presets/cursor/svelte/rules/code-quality-and-refactoring.mdc +25 -24
- package/presets/cursor/svelte/rules/code-review-mr.mdc +5 -5
- package/presets/cursor/svelte/rules/design-guidance.mdc +54 -54
- package/presets/cursor/svelte/rules/feature-delivery-workflow.mdc +26 -26
- package/presets/cursor/svelte/rules/layer-barrel-exports.mdc +31 -31
- package/presets/cursor/svelte/rules/navigation-router-stack.mdc +6 -6
- package/presets/cursor/svelte/rules/navigation-router-ui.mdc +1 -1
- package/presets/cursor/svelte/rules/no-type-assertion-as-import-export.mdc +29 -29
- package/presets/cursor/svelte/rules/package-manager.mdc +8 -8
- package/presets/cursor/svelte/rules/post-change-lint.mdc +23 -23
- package/presets/cursor/svelte/rules/preset-layering.mdc +12 -13
- package/presets/cursor/svelte/rules/preset-no-cross-stack-leakage.mdc +26 -14
- package/presets/cursor/svelte/rules/preset-pr-checklist.mdc +6 -7
- package/presets/cursor/svelte/rules/preset-token-budget.mdc +3 -4
- package/presets/cursor/svelte/rules/preset-twin-sync.mdc +2 -1
- package/presets/cursor/svelte/rules/public-imports.mdc +8 -8
- package/presets/cursor/svelte/rules/reference-features.mdc +17 -17
- package/presets/cursor/svelte/rules/store-svelte.mdc +26 -26
- package/presets/cursor/svelte/rules/svelte-app-core.mdc +16 -16
- package/presets/cursor/svelte/rules/svelte-ui.mdc +6 -6
- package/presets/cursor/svelte/rules/technical-retro.mdc +4 -4
- package/presets/cursor/svelte/rules/tests-e2e-structure.mdc +45 -46
- package/presets/cursor/svelte/rules/tests-unit.mdc +17 -17
- package/presets/cursor/svelte/rules/types-jsdoc.mdc +22 -22
- package/presets/cursor/svelte/skills/feature-delivery/SKILL.md +1 -1
- package/presets/cursor/svelte/team/README.md +2 -2
|
@@ -2,58 +2,58 @@
|
|
|
2
2
|
paths: pages/**/*,layouts/**/*,middleware/**/*,nuxt.config.*
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
#
|
|
5
|
+
# Navigation and routing: project stack first
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
**For any task involving navigation, page transitions, URLs, redirects, breadcrumbs, protected routes, or programmatic route changes** — before proposing code or imports, **do not** default to a “typical Vue SPA”. You must **explicitly check the target repository stack** and use **one** mechanism consistent with the project.
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## Dependencies: what to check first
|
|
10
10
|
|
|
11
|
-
1. **`package.json`**
|
|
12
|
-
- **`nuxt`** — Nuxt 3 (file-based routing);
|
|
13
|
-
- **`vue-router`**
|
|
14
|
-
- **`nuxt`**
|
|
11
|
+
1. **`package.json`** at the app root (the package with `nuxt.config.*` / the one that builds and deploys). Inspect **`dependencies`** and, if needed, **`peerDependencies`**:
|
|
12
|
+
- **`nuxt`** — Nuxt 3 (file-based routing); version matters for API nuances (check docs for that major).
|
|
13
|
+
- **`vue-router`** without Nuxt — separate SPA routing; do not replace its API with Nuxt calls (`navigateTo`, `<NuxtLink>`) without checking.
|
|
14
|
+
- **`nuxt`** and a separate manual `createRouter` at once — may be legacy or hybrid; **do not** pick an API by default — see “Routing implementation in the project” below.
|
|
15
15
|
|
|
16
|
-
2.
|
|
16
|
+
2. **Monorepo / workspaces** — routing may not live in the root `package.json`. Open **`package.json` of the workspace** that holds `pages/` and `nuxt.config.*`.
|
|
17
17
|
|
|
18
|
-
3.
|
|
18
|
+
3. **Installation fact** — when in doubt, check the lockfile (`bun.lock`, `package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`) or `node_modules`: confirm the declared package is actually installed.
|
|
19
19
|
|
|
20
|
-
##
|
|
20
|
+
## Routing implementation in the project (code and structure)
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
Before proposing a navigation pattern, **check how it is already done in the repository**:
|
|
23
23
|
|
|
24
|
-
1.
|
|
25
|
-
- **Nuxt 3 file-based routing:**
|
|
26
|
-
- **Nuxt 4 note:**
|
|
27
|
-
-
|
|
24
|
+
1. **Route tree**
|
|
25
|
+
- **Nuxt 3 file-based routing:** **`pages/`** directory (`.vue`), layouts in **`layouts/`**, middleware in **`middleware/`**, `definePageMeta`.
|
|
26
|
+
- **Nuxt 4 note:** `app/` may be `srcDir` — confirm via `nuxt.config`; **do not** confuse with Next `app/` + `page.tsx`.
|
|
27
|
+
- Plain **Vue Router SPA:** route config (`router/index.ts`, `createRouter`) without Nuxt file routing.
|
|
28
28
|
|
|
29
|
-
2.
|
|
30
|
-
-
|
|
31
|
-
-
|
|
29
|
+
2. **Entry points and wrappers**
|
|
30
|
+
- Search the code: **`navigateTo`**, **`<NuxtLink>`**, **`useRouter` / `useRoute`** (Nuxt auto-import), **`from 'vue-router'`**, **`createRouter`**, **`RouterLink`**.
|
|
31
|
+
- Where routes are declared (Nuxt file structure vs explicit `routes` in SPA).
|
|
32
32
|
|
|
33
|
-
3.
|
|
34
|
-
-
|
|
33
|
+
3. **Shared project abstractions**
|
|
34
|
+
- Link wrappers (`~/components/...`, design-system Link), path helpers, route constants — **use them**, do not duplicate raw API.
|
|
35
35
|
|
|
36
|
-
4.
|
|
37
|
-
-
|
|
36
|
+
4. **Neighboring feature files**
|
|
37
|
+
- New navigation code — same style as pages/composables in that area (`navigateTo` / `<NuxtLink>` vs `vue-router` as in neighboring imports).
|
|
38
38
|
|
|
39
|
-
##
|
|
39
|
+
## How to decide what to use (summary)
|
|
40
40
|
|
|
41
|
-
1.
|
|
42
|
-
2.
|
|
43
|
-
3.
|
|
41
|
+
1. **Dependencies** — see section above; they define the allowed package set.
|
|
42
|
+
2. **Structure** — Nuxt `pages/` vs Vue Router SPA by directories and config.
|
|
43
|
+
3. **Actual code** — which imports and wrappers already dominate in the app.
|
|
44
44
|
|
|
45
|
-
##
|
|
45
|
+
## What to use (short matrix)
|
|
46
46
|
|
|
47
|
-
|
|
|
48
|
-
|
|
49
|
-
| **Nuxt 3 file-based routing** | `navigateTo`, `useRouter`, `useRoute`, `useRouter().push` (
|
|
50
|
-
| **Vue Router SPA (
|
|
47
|
+
| Stack | Programmatic navigation / path read | Links |
|
|
48
|
+
|-------|-------------------------------------|-------|
|
|
49
|
+
| **Nuxt 3 file-based routing** | `navigateTo`, `useRouter`, `useRoute`, `useRouter().push` (per Nuxt docs for your version) | `<NuxtLink>` |
|
|
50
|
+
| **Vue Router SPA (no Nuxt)** | `vue-router` (`useRouter`, `useRoute`, `router.push`, …) | `<RouterLink>` / `<router-link>` |
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
**Do not:** add `react-router-dom` or `next/navigation` / `next/link` in a Nuxt project; import Next hooks (`usePathname`, `useSearchParams` from `next/navigation`); mix manual `createRouter` and Nuxt file routing without a clear reason in the codebase.
|
|
53
53
|
|
|
54
|
-
##
|
|
54
|
+
## Agent requirement
|
|
55
55
|
|
|
56
|
-
-
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
56
|
+
- Before generating or reviewing navigation code, **briefly state the conclusion** (e.g. “dependencies: `nuxt`; code uses `<NuxtLink>` / `navigateTo` everywhere → use the same”) and follow it.
|
|
57
|
+
- **Required check:** current **`dependencies`** in the relevant workspace `package.json` + **how routes and imports are already implemented** (repo search, neighboring files). Do not rely on a single signal alone (e.g. only the presence of a `pages/` folder).
|
|
58
|
+
- If the stack is unclear (hybrid) — **check lockfile / installed packages** and **dominant imports**, then pick the API.
|
|
59
|
+
- For **this** preset the baseline is **`nuxt-app-core.mdc`** + **`nuxt-pages-routing.mdc`**: Nuxt 3; prefer **`navigateTo`**, **`useRouter` / `useRoute`**, **`<NuxtLink>`**.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: Avoid type assertions via as at module boundaries (import/export)
|
|
3
3
|
paths:
|
|
4
4
|
- pages/**/*
|
|
5
5
|
- components/**/*
|
|
@@ -8,54 +8,55 @@ paths:
|
|
|
8
8
|
- composables/**/*
|
|
9
9
|
- types/**/*
|
|
10
10
|
---
|
|
11
|
-
# Не использовать `as` для приведения типов при экспорте и импорте (кроме необходимых случаев)
|
|
12
11
|
|
|
13
|
-
|
|
12
|
+
# Do not use `as` for type assertion on export and import (except necessary cases)
|
|
14
13
|
|
|
15
|
-
|
|
14
|
+
## What this is about
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
This is about TypeScript **type assertion**: expressions like `value as Type`.
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
- переименование при импорте: `import { foo as bar } from '...'`;
|
|
21
|
-
- `import type { Foo as Bar }` — алиас типа в импорте типов.
|
|
18
|
+
**Not covered by this rule** (not assertion — module syntax):
|
|
22
19
|
|
|
23
|
-
|
|
20
|
+
- rename on export: `export { foo as bar }`, `export { default as Baz } from '...'`;
|
|
21
|
+
- rename on import: `import { foo as bar } from '...'`;
|
|
22
|
+
- `import type { Foo as Bar }` — type alias in a type import.
|
|
24
23
|
|
|
25
|
-
|
|
24
|
+
## Requirement
|
|
26
25
|
|
|
27
|
-
|
|
26
|
+
- On the **public module boundary** (what is **exported** from a file / barrel, and what is immediately **assigned from imported symbols** with a forced cast) **do not use** `as Type` to “force-fit” types when normal typing would work.
|
|
28
27
|
|
|
29
|
-
|
|
30
|
-
- **дженерики** у функций и классов;
|
|
31
|
-
- **`satisfies`** (когда нужно проверить совместимость без сужения до `any`);
|
|
32
|
-
- сужение **`unknown`** после проверки (type guards, `zod` и т.п.);
|
|
33
|
-
- правку **исходных типов/DTO/мапперов**, а не assertion на выходе.
|
|
28
|
+
## Prefer instead of `as`
|
|
34
29
|
|
|
35
|
-
|
|
30
|
+
- an explicit annotation: `const x: T = ...` / `function f(): T`;
|
|
31
|
+
- **generics** on functions and classes;
|
|
32
|
+
- **`satisfies`** (when you need to check compatibility without narrowing to `any`);
|
|
33
|
+
- narrowing **`unknown`** after checks (type guards, `zod`, etc.);
|
|
34
|
+
- fixing **source types/DTOs/mappers**, not an assertion on the way out.
|
|
36
35
|
|
|
37
|
-
|
|
38
|
-
- узкие места после **валидации** данных, если типовый гард всё ещё не выразить без шума (предпочтительно всё же guard/`satisfies`);
|
|
39
|
-
- **`as const`** — когда нужны литеральные типы и широкий вывод ломает контракт (это отдельный механизм; применять по делу, не как замену типизации API).
|
|
40
|
-
- блок **`catch (error)`** после вызова HTTP через общий клиент: по возможности сужать через **`instanceof`** на **класс ошибки транспорта** из `@/types` (какой именно — по существующей реализации) и работать с уже суженным типом; голый **`as` к тому же типу** — только если `instanceof` недоступен (иной источник выброса) и осознанно.
|
|
36
|
+
## When `as` is allowed
|
|
41
37
|
|
|
42
|
-
|
|
38
|
+
- interaction with **untyped** or incorrectly typed external modules where there is no reasonable alternative;
|
|
39
|
+
- narrow spots after **validation**, if a type guard still cannot be expressed without noise (prefer guard/`satisfies` anyway);
|
|
40
|
+
- **`as const`** — when literal types are needed and wide inference breaks the contract (a separate mechanism; use on purpose, not as a substitute for API typing).
|
|
41
|
+
- a **`catch (error)`** block after HTTP via the shared client: prefer narrowing with **`instanceof`** on the **transport error class** from `@/types` (which one — follow the existing implementation) and work with the narrowed type; bare **`as` to the same type** — only if `instanceof` is unavailable (different throw source) and deliberately.
|
|
42
|
+
|
|
43
|
+
## Examples
|
|
43
44
|
|
|
44
45
|
```typescript
|
|
45
|
-
// ❌
|
|
46
|
+
// ❌ Bad: assertion on exported API
|
|
46
47
|
export const config = loadRaw() as AppConfig
|
|
47
48
|
|
|
48
|
-
// ✅
|
|
49
|
+
// ✅ Better: annotation + check or mapper
|
|
49
50
|
export const config: AppConfig = mapToAppConfig(loadRaw())
|
|
50
51
|
|
|
51
|
-
// ❌
|
|
52
|
+
// ❌ Bad: immediately after import we “break” the type
|
|
52
53
|
import { getData } from './api'
|
|
53
54
|
export const data = getData() as MyDto[]
|
|
54
55
|
|
|
55
|
-
// ✅
|
|
56
|
+
// ✅ Better: type getData / wrap with a type-safe function
|
|
56
57
|
```
|
|
57
58
|
|
|
58
|
-
##
|
|
59
|
+
## Agent requirement
|
|
59
60
|
|
|
60
|
-
|
|
61
|
-
-
|
|
61
|
+
On review and code generation **do not add** new `as Type` on exported entities and on the import → export chain without clear need; when possible fix the type contract at the source.
|
|
62
|
+
- In stores and services when handling API errors, first consider **`instanceof`** on the transport error class from `@/types` following existing code (`http-client.mdc`, `store-pinia.mdc`).
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: Baseline principles, stack, and architecture for a Nuxt 3 application (preset)
|
|
3
3
|
---
|
|
4
|
-
# Стек и окружение
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
# Stack and environment
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
Concrete versions — **from `package.json` and configs of the target repository**. Preset frame: Nuxt 3, Vue 3, TypeScript; runner/e2e/mocks/UI/APM — as established in the repo.
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
# Project structure
|
|
10
|
+
|
|
11
|
+
| Path | Purpose |
|
|
12
|
+
|------|---------|
|
|
12
13
|
| `pages/**` | File-based routes |
|
|
13
14
|
| `components/**` | UI components (SFC) |
|
|
14
15
|
| `composables/**` | Vue `use*` facades |
|
|
@@ -19,12 +20,12 @@ description: Базовые принципы, стек и архитектура
|
|
|
19
20
|
| `types/**` | Domain types (barrel) |
|
|
20
21
|
| `tests/e2e/**` | Playwright e2e |
|
|
21
22
|
|
|
22
|
-
**Aliases:** prefer `~/`, accept `@/`, respect `#imports` (
|
|
23
|
+
**Aliases:** prefer `~/`, accept `@/`, respect `#imports` (do not invent auto-import symbols). Scripts cwd — **repository root** (where `nuxt.config.*` lives), not a Next-style `app/` wrapper.
|
|
23
24
|
|
|
24
|
-
#
|
|
25
|
+
# Architectural layers
|
|
25
26
|
|
|
26
|
-
|
|
|
27
|
-
|
|
27
|
+
| Layer | Directory | Details |
|
|
28
|
+
|-------|-----------|---------|
|
|
28
29
|
| UI | `pages/**`, `components/**`, `layouts/**` | `vue-ui`, `architecture-boundaries-ui` |
|
|
29
30
|
| Composables | `composables/**` | thin orchestration; no raw HTTP |
|
|
30
31
|
| Store | `stores/**` | `store-pinia` — `defineStore` only |
|
|
@@ -33,11 +34,11 @@ description: Базовые принципы, стек и архитектура
|
|
|
33
34
|
| Server | `server/api/**` | `security-nuxt`; not a substitute for `api/**` |
|
|
34
35
|
| Types | `types/**` | `public-imports`, `types-jsdoc` |
|
|
35
36
|
|
|
36
|
-
|
|
37
|
+
Boundaries — **`architecture-boundaries`**. Imports `~/types` / `@/types`, `~/api` / `@/api` — **`public-imports`**. **Forbidden:** RTK / `store-rtk`, React/RSC defaults, `app/src/**` paths as the canon.
|
|
37
38
|
|
|
38
|
-
#
|
|
39
|
+
# Agent work
|
|
39
40
|
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
-
|
|
41
|
+
- Architecture and imports: `architecture-boundaries`, `public-imports`
|
|
42
|
+
- Features: `feature-delivery-workflow` + skill `feature-delivery`
|
|
43
|
+
- After edits: **invoke** `post-change-lint` (requestable); package manager: `package-manager`
|
|
44
|
+
- Copy neighbor patterns; prefer `unknown` over `any`
|
|
@@ -1,40 +1,41 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: JSDoc style for domain and transport types under types
|
|
3
3
|
paths: types/**/*.ts
|
|
4
4
|
---
|
|
5
|
-
# Документация типов в `types`
|
|
6
5
|
|
|
7
|
-
|
|
6
|
+
# Type documentation in `types`
|
|
8
7
|
|
|
9
|
-
|
|
8
|
+
When adding or substantially changing types in this layer **follow the JSDoc style already used in the repository** (see examples: `User.types.ts`, `Common.types.ts`, `ServerValidation.types.ts`, `TreatmentPlan/*.types.ts`).
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
- **Не опираться** на теги в духе `@param`, `@returns`, `@see`, `@deprecated` для описания типов — в этом слое они **не используются**; достаточно обычного текста в `/** … */`.
|
|
10
|
+
## Language and form
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
- Comment text — **in Russian**, short and to the point: what the type or field means in the domain or API contract.
|
|
13
|
+
- **Do not rely** on tags like `@param`, `@returns`, `@see`, `@deprecated` for type descriptions — they are **not used** in this layer; plain `/** … */` text is enough.
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
- Если нужно пояснить источник данных, ограничения или неочевидности — **второй абзац** в том же блоке (в JSDoc для абзаца — пустая строка между строками текста).
|
|
18
|
-
- Для **вложенных** объектов в том же файле каждый такой тип документируется отдельным блоком над своим объявлением.
|
|
15
|
+
## Exported `type` / `interface`
|
|
19
16
|
|
|
20
|
-
|
|
17
|
+
- Immediately **before the declaration** — a `/** … */` block.
|
|
18
|
+
- If you need to explain data source, constraints, or non-obvious bits — a **second paragraph** in the same block (blank line between paragraphs in JSDoc).
|
|
19
|
+
- For **nested** objects in the same file, each such type gets its own block above its declaration.
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
- Если поле **не приходит с бэкенда «как есть»**, а вычисляется или дополняется на фронте (маппер, селектор, UI) — начать описание с префикса **`[computed]`** (как в `TUserProfile`, типах плана лечения).
|
|
24
|
-
- Для форматов данных указывать это **в тексте**: например дата `YYYY-MM-DD`, пример отображаемой строки в кавычках.
|
|
21
|
+
## Fields
|
|
25
22
|
|
|
26
|
-
|
|
23
|
+
- Every **public** property — a **one-line** `/** … */` on the line immediately **above** the field.
|
|
24
|
+
- If a field **does not come from the backend “as is”** but is computed or enriched on the frontend (mapper, selector, UI) — start the description with the **`[computed]`** prefix (as in `TUserProfile`, treatment-plan types).
|
|
25
|
+
- For data formats, state that **in the text**: e.g. date `YYYY-MM-DD`, example display string in quotes.
|
|
27
26
|
|
|
28
|
-
|
|
27
|
+
## Classes and other declarations
|
|
28
|
+
|
|
29
|
+
- For **classes** (e.g. transport errors), when changing the public API — a short block above the class and **comments on public fields** by the same rules as interface properties.
|
|
29
30
|
|
|
30
31
|
## `enum`
|
|
31
32
|
|
|
32
|
-
-
|
|
33
|
+
- In `enums.ts` historically often **without JSDoc** on each member; for new enums a short description **above the enum itself** is OK if purpose is not obvious from the name. UI labels — as usual, via `*Names` objects next to the enum.
|
|
33
34
|
|
|
34
|
-
##
|
|
35
|
+
## Agent practice
|
|
35
36
|
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
37
|
+
- When adding a new type or field, **do not leave** new public fields unexplained if the meaning is not 100% equal to the name.
|
|
38
|
+
- When editing a file that already has such comments, **keep the same style**, do not mix with English or “tag-style” blocks.
|
|
39
|
+
- Do not inflate comments: one–two phrases per type, one line per field — normal; exception — a truly complex domain caveat.
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
See also imports and barrel: `public-imports.mdc`.
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Unit, e2e, Playwright agents.
|
|
4
4
|
|
|
5
|
-
|
|
|
6
|
-
|
|
7
|
-
| `playwright-agents.md` | Planner / generator / healer —
|
|
8
|
-
| `tests-unit.md` | Unit/integration,
|
|
5
|
+
| File | Contents | Loading |
|
|
6
|
+
|------|----------|---------|
|
|
7
|
+
| `playwright-agents.md` | Planner / generator / healer — e2e structure | session start |
|
|
8
|
+
| `tests-unit.md` | Unit/integration, Russian locale naming | `paths: **/*.spec.*`, `*.test.*` |
|
|
9
9
|
| `tests-e2e-structure.md` | `*.cases.md`, page objects, data-testid | `paths: tests/e2e/**` |
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
See also `.claude/agents/playwright-test-*.md` after `ai-rules init`.
|
|
@@ -1,49 +1,49 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: Structure of e2e tests and plans (Playwright)
|
|
3
3
|
paths: tests/e2e/**/*
|
|
4
4
|
---
|
|
5
|
-
# Структура e2e в проекте
|
|
6
|
-
|
|
7
|
-
- Папка e2e: `tests/e2e/**`.
|
|
8
|
-
- Планы сценариев:
|
|
9
|
-
- `*.cases.md` файлы — **канонический источник сценариев**.
|
|
10
|
-
- Тесты:
|
|
11
|
-
- `*.spec.ts` файлы — реализация сценариев на Playwright.
|
|
12
|
-
- Общие утилиты и абстракции:
|
|
13
|
-
- `tests/e2e/_shared/**` — константы, fluent‑интерфейсы, хелперы.
|
|
14
|
-
|
|
15
|
-
# Принципы
|
|
16
|
-
|
|
17
|
-
- Каждый сценарий из `*.cases.md` должен иметь соответствующий тест (или набор тестов).
|
|
18
|
-
- **Нельзя** ослаблять проверки в тестах, если это противоречит бизнес‑ожиданиям из планов.
|
|
19
|
-
- Предпочтительно использовать:
|
|
20
|
-
- page‑objects (например, `OrderHistoryPage.ts`);
|
|
21
|
-
- общие хелперы из `_shared`.
|
|
22
|
-
|
|
23
|
-
# Именование e2e‑тестов
|
|
24
|
-
|
|
25
|
-
- Язык:
|
|
26
|
-
- все названия `test` / `it`, `describe`‑блоков и шагов в `*.cases.md` должны быть сформулированы **на русском языке**, описывая поведение и ожидаемый результат.
|
|
27
|
-
- Формат заголовков e2e‑тестов (`test(...)` / `it(...)`):
|
|
28
|
-
- перед текстовым описанием сценария указывается **префикс с номером** в формате: `ПРЕФИКС-XXX Описание сценария`.
|
|
29
|
-
- `ПРЕФИКС` — аббревиатура из **первых букв слов** тестируемой сущности, записанная **латиницей в верхнем регистре**.
|
|
30
|
-
- пример: `OrderHistory` → `OH`, `BillingReport` → `BR`.
|
|
31
|
-
- `XXX` — порядковый номер теста **с тремя разрядами и лидирующими нулями**: `001`, `002`, `010`, `123` и т.д.
|
|
32
|
-
- пример полного названия e2e‑теста:
|
|
33
|
-
- `test('OH-001 Отображается список заказов', async ({ page }) => { ... })`
|
|
34
|
-
- внутри одной сущности (`ПРЕФИКС`) номера тестов должны образовывать **непротиворечивую последовательность**, без дубликатов номеров.
|
|
35
|
-
|
|
36
|
-
# data-testid для e2e
|
|
37
|
-
|
|
38
|
-
- **Приоритет селекторов:** `data-testid` для стабильных элементов; `getByRole` и `getByLabel` для форм и доступных элементов.
|
|
39
|
-
- **Именование:** схема `{parent}__{element}` (например, `history-page__title`, `history-page__recognition-banner__attach-files-button`).
|
|
40
|
-
- **Где добавлять:** на корневые контейнеры страниц и ключевые интерактивные элементы (кнопки, ссылки, поля), к которым обращаются page objects.
|
|
41
|
-
- **При изменении UI:** обновлять data-testid в компонентах и соответствующие селекторы в page objects; сверять с `*.cases.md`.
|
|
42
|
-
|
|
43
|
-
# Требование к агенту
|
|
44
|
-
|
|
45
|
-
При добавлении/изменении e2e‑тестов:
|
|
46
|
-
- Сначала смотреть соответствующий `*.cases.md` и синхронизировать названия сценариев.
|
|
47
|
-
- Размещать спеки рядом с планами в той же директории.
|
|
48
|
-
- Переиспользовать общие page‑objects и хелперы, а не копировать селекторы напрямую в каждый тест.
|
|
49
5
|
|
|
6
|
+
# E2E structure in the project
|
|
7
|
+
|
|
8
|
+
- E2E folder: `tests/e2e/**`.
|
|
9
|
+
- Scenario plans:
|
|
10
|
+
- `*.cases.md` files — **canonical source of scenarios**.
|
|
11
|
+
- Tests:
|
|
12
|
+
- `*.spec.ts` files — Playwright scenario implementation.
|
|
13
|
+
- Shared utilities and abstractions:
|
|
14
|
+
- `tests/e2e/_shared/**` — constants, fluent interfaces, helpers.
|
|
15
|
+
|
|
16
|
+
# Principles
|
|
17
|
+
|
|
18
|
+
- Every scenario from `*.cases.md` must have a matching test (or set of tests).
|
|
19
|
+
- **Do not** weaken assertions in tests if that contradicts business expectations from the plans.
|
|
20
|
+
- Prefer:
|
|
21
|
+
- page objects (e.g. `OrderHistoryPage.ts`);
|
|
22
|
+
- shared helpers from `_shared`.
|
|
23
|
+
|
|
24
|
+
# E2E test naming
|
|
25
|
+
|
|
26
|
+
- Language:
|
|
27
|
+
- all `test` / `it` names, `describe` blocks, and steps in `*.cases.md` must be formulated **in Russian**, describing behavior and the expected result. <!-- i18n-keep: E5 -->
|
|
28
|
+
- E2E title format (`test(...)` / `it(...)`):
|
|
29
|
+
- before the scenario description, put a **numbered prefix** in the form: `PREFIX-XXX Scenario description`.
|
|
30
|
+
- `PREFIX` — abbreviation from the **first letters of the words** of the entity under test, written in **Latin uppercase**.
|
|
31
|
+
- example: `OrderHistory` → `OH`, `BillingReport` → `BR`.
|
|
32
|
+
- `XXX` — sequential test number **with three digits and leading zeros**: `001`, `002`, `010`, `123`, etc.
|
|
33
|
+
- full e2e title example:
|
|
34
|
+
- `test('OH-001 Отображается список заказов', async ({ page }) => { ... })` <!-- i18n-keep: E5 -->
|
|
35
|
+
- within one entity (`PREFIX`), test numbers must form a **consistent sequence** without duplicate numbers.
|
|
36
|
+
|
|
37
|
+
# data-testid for e2e
|
|
38
|
+
|
|
39
|
+
- **Selector priority:** `data-testid` for stable elements; `getByRole` and `getByLabel` for forms and accessible elements.
|
|
40
|
+
- **Naming:** scheme `{parent}__{element}` (e.g. `history-page__title`, `history-page__recognition-banner__attach-files-button`).
|
|
41
|
+
- **Where to add:** on page root containers and key interactive elements (buttons, links, fields) that page objects target.
|
|
42
|
+
- **When UI changes:** update data-testid in components and matching selectors in page objects; align with `*.cases.md`.
|
|
43
|
+
|
|
44
|
+
# Agent requirement
|
|
45
|
+
|
|
46
|
+
When adding/changing e2e tests:
|
|
47
|
+
- First look at the matching `*.cases.md` and sync scenario names.
|
|
48
|
+
- Place specs next to plans in the same directory.
|
|
49
|
+
- Reuse shared page objects and helpers; do not copy selectors into every test.
|
|
@@ -1,75 +1,75 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Unit
|
|
2
|
+
description: Unit and integration tests (Testing Library and project runner)
|
|
3
3
|
paths:
|
|
4
4
|
- "**/*.spec.{ts,tsx}"
|
|
5
5
|
- "**/*.test.{ts,tsx}"
|
|
6
6
|
---
|
|
7
|
-
# Общие правила тестирования
|
|
8
|
-
|
|
9
|
-
- **Имена файлов:** для **новых** тестов использовать суффикс **`*.spec.ts` / `*.spec.ts`**. Существующие **`*.test.ts` / `*.test.tsx`** не переименовывать без отдельной задачи (легаси).
|
|
10
|
-
- **Runner и матчеры** — как в проекте (часто Jest или Vitest); для компонентов — **@vue/test-utils**.
|
|
11
|
-
- Основная цель тестов:
|
|
12
|
-
- проверять **поведение и бизнес‑правила**, а не реализацию или внутренние детали.
|
|
13
|
-
- **Именование unit‑тестов** (строки в `describe` / `it` / `test`):
|
|
14
|
-
- формулировки **только на русском языке** — понятные бизнес‑фразы (что проверяется и какой ожидается результат);
|
|
15
|
-
- **каждое предложение** в названии **начинается с заглавной буквы** (в том числе после `.`, `!`, `?` и при нескольких предложениях в одной строке); первая буква всей строки — тоже заглавная.
|
|
16
|
-
- **Проверка в CI:** ESLint (`jest/valid-title` в `eslint.config.mjs`) требует, чтобы строка начиналась с русской заглавной (А–Я, Ё), и запрещает пробел после точки, за которым сразу идёт строчная буква (типичный случай нарушения «с заглавной после точки»).
|
|
17
|
-
|
|
18
|
-
```typescript
|
|
19
|
-
// ✅ Хорошо
|
|
20
|
-
it('Возвращает пустой список. Пользователь не авторизован', () => {})
|
|
21
|
-
it('При ошибке сети показывается сообщение об ошибке', () => {})
|
|
22
|
-
|
|
23
|
-
// ❌ Плохо (не с заглавной после точки; или не русский)
|
|
24
|
-
it('Возвращает пустой список. пользователь не авторизован', () => {})
|
|
25
|
-
it('Returns empty list when user is guest', () => {})
|
|
26
|
-
```
|
|
27
7
|
|
|
28
|
-
#
|
|
8
|
+
# General testing rules
|
|
9
|
+
|
|
10
|
+
- **File names:** for **new** tests use the **`*.spec.ts` / `*.spec.ts`** suffix. Do not rename existing **`*.test.ts` / `*.test.tsx`** without a separate task (legacy).
|
|
11
|
+
- **Runner and matchers** — as in the project (often Jest or Vitest); for components — **@vue/test-utils**.
|
|
12
|
+
- Primary goal of tests:
|
|
13
|
+
- verify **behavior and business rules**, not implementation or internal details.
|
|
14
|
+
- **Unit test naming** (strings in `describe` / `it` / `test`):
|
|
15
|
+
- consumer apps **may use Russian locale** for titles — clear business phrases (what is checked and expected outcome);
|
|
16
|
+
- when ESLint enforces Russian (see below), each sentence in the title **must start with a capital letter** (including after `.`, `!`, `?` and with multiple sentences on one line); the first letter of the whole string is capitalized too.
|
|
17
|
+
- **CI check (when configured):** ESLint (`jest/valid-title` in `eslint.config.mjs`) may require titles to start with a Russian capital letter and forbid a space after `.` followed immediately by a lowercase letter (typical "capital after period" violation).
|
|
18
|
+
|
|
19
|
+
Good (Russian locale in consumer app):
|
|
20
|
+
|
|
21
|
+
- `it('Возвращает пустой список. Пользователь не авторизован', () => {})` <!-- i18n-keep: E5 --> (Returns empty list. User is not authorized)
|
|
22
|
+
- `it('При ошибке сети показывается сообщение об ошибке', () => {})` <!-- i18n-keep: E5 --> (On network error, an error message is shown)
|
|
23
|
+
|
|
24
|
+
Bad (no capital after period; or wrong locale for configured ESLint):
|
|
29
25
|
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
- матчеры DOM для Testing Library, как подключены в проекте (`toBeInTheDocument`, `toHaveTextContent` и т.п.).
|
|
33
|
-
- Взаимодействия:
|
|
34
|
-
- `userEvent` из `@testing-library/user-event`.
|
|
26
|
+
- `it('Возвращает пустой список. пользователь не авторизован', () => {})` <!-- i18n-keep: E5 -->
|
|
27
|
+
- `it('Returns empty list when user is guest', () => {})`
|
|
35
28
|
|
|
36
|
-
#
|
|
29
|
+
# Component tests
|
|
37
30
|
|
|
38
|
-
-
|
|
39
|
-
|
|
40
|
-
-
|
|
31
|
+
- Use `render` from `@vue/test-utils`.
|
|
32
|
+
- Assertions:
|
|
33
|
+
- DOM matchers for Testing Library as wired in the project (`toBeInTheDocument`, `toHaveTextContent`, etc.).
|
|
34
|
+
- Interactions:
|
|
35
|
+
- `userEvent` from `@testing-library/user-event`.
|
|
41
36
|
|
|
42
|
-
#
|
|
37
|
+
# Isolation and mocks
|
|
43
38
|
|
|
44
|
-
-
|
|
45
|
-
-
|
|
39
|
+
- For API/store work:
|
|
40
|
+
- mock the store (via test-store) or use the project's accepted HTTP/API mock approach.
|
|
41
|
+
- Do not mock what is part of the feature's public contract if that breaks the test's meaning.
|
|
46
42
|
|
|
47
|
-
#
|
|
43
|
+
# HTTP client
|
|
48
44
|
|
|
49
|
-
-
|
|
50
|
-
-
|
|
45
|
+
- When changing the **shared HTTP client implementation** (body parsing, headers, error branches, 401/refresh, `FormData`, `blob`, etc.) — **update or add behavior tests** next to the client module in `lib/clients/**` (prefer `*.spec.ts`; legacy `*.test.ts` — do not touch without a task).
|
|
46
|
+
- Cover meaningful branches: successful JSON, HTTP error, network, auth scenarios relevant to the project.
|
|
51
47
|
|
|
52
|
-
#
|
|
48
|
+
# Mappers and data transformation
|
|
53
49
|
|
|
54
|
-
|
|
55
|
-
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
-
|
|
50
|
+
- Data mapping functions (DTO → domain model and back), especially with computed fields and branches, must have unit tests.
|
|
51
|
+
- In mapper tests, pay special attention to edge cases and business-rule regression (for example, boundary values, missing fields, unexpected value combinations).
|
|
52
|
+
|
|
53
|
+
# Agent requirement
|
|
54
|
+
|
|
55
|
+
When adding tests:
|
|
56
|
+
- Follow existing test structure and patterns in the repository: `*.spec.ts(x)` next to the module or in a shared test directory — as in neighboring features.
|
|
57
|
+
- Add tests for critical logic branches and edge cases.
|
|
58
|
+
- When working with data:
|
|
59
|
+
- use **response types** from the API (DTO types) and **target domain types** from `@/types`; do not duplicate interfaces in tests;
|
|
60
|
+
- when possible, rely on data and handlers from `mocks/**` (or repo equivalent), not ad-hoc random test data.
|
|
61
|
+
- Placement:
|
|
62
|
+
- for **UI components** — **do not create** a `__tests__` subdirectory inside the component folder; the test is a sibling `*.spec.ts`.
|
|
63
|
+
- in **other modules** (for example `api/services`) an existing `__tests__` layout is acceptable — do not break it for UI uniformity.
|
|
64
|
+
- **new** files — `*.spec.ts` / `*.spec.ts` (see "File names" above).
|
|
64
65
|
## Incorrect
|
|
65
66
|
|
|
66
67
|
```ts
|
|
67
68
|
it('returns empty list when guest', () => {})
|
|
68
|
-
it('Возвращает пустой список. пользователь не авторизован', () => {})
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
+
- `it('Возвращает пустой список. пользователь не авторизован', () => {})` <!-- i18n-keep: E5 -->
|
|
72
|
+
|
|
71
73
|
## Correct
|
|
72
74
|
|
|
73
|
-
|
|
74
|
-
it('Возвращает пустой список. Пользователь не авторизован', () => {})
|
|
75
|
-
```
|
|
75
|
+
- `it('Возвращает пустой список. Пользователь не авторизован', () => {})` <!-- i18n-keep: E5 -->
|