@bonesofspring/ai-rules 0.2.12 → 0.2.14
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 +32 -0
- package/README.md +6 -2
- package/bin/cli.js +4 -0
- package/package.json +1 -1
- package/presets/_shared/README.md +1 -1
- package/presets/_shared/core/agent-team/agent-artifact-contracts.md +114 -0
- package/presets/_shared/core/agent-team/agent-team-orchestrator.md +64 -5
- package/presets/_shared/core/meta/preset-layering.md +1 -1
- package/presets/_shared/core/meta/preset-no-cross-stack-leakage.md +15 -1
- package/presets/_shared/core/meta/preset-pr-checklist.md +1 -1
- package/presets/_shared/core/meta/preset-twin-sync.md +4 -0
- package/presets/claude/go/agents/build-verifier.md +10 -3
- package/presets/claude/go/agents/code-reviewer.md +8 -1
- package/presets/claude/go/agents/feature-developer.md +8 -1
- package/presets/claude/go/agents/task-analyst.md +8 -1
- package/presets/claude/go/agents/task-router.md +33 -5
- package/presets/claude/go/commands/task.md +8 -6
- package/presets/claude/go/hooks/chain-team-phases.sh +195 -53
- package/presets/claude/go/rules/tooling-and-review/agent-team-orchestrator.md +30 -5
- package/presets/claude/go/rules/tooling-and-review/preset-layering.md +2 -1
- package/presets/claude/go/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -1
- package/presets/claude/go/rules/tooling-and-review/preset-pr-checklist.md +2 -1
- package/presets/claude/go/rules/tooling-and-review/preset-token-budget.md +1 -0
- package/presets/claude/go/rules/tooling-and-review/preset-twin-sync.md +5 -0
- package/presets/claude/go/team/README.md +13 -2
- package/presets/claude/ios-swift/agents/build-verifier.md +10 -3
- package/presets/claude/ios-swift/agents/code-reviewer.md +9 -14
- package/presets/claude/ios-swift/agents/feature-developer.md +8 -1
- package/presets/claude/ios-swift/agents/task-analyst.md +8 -1
- package/presets/claude/ios-swift/agents/task-router.md +31 -3
- package/presets/claude/ios-swift/commands/task.md +8 -6
- package/presets/claude/ios-swift/hooks/chain-team-phases.sh +177 -54
- package/presets/claude/ios-swift/rules/tooling-and-review/agent-team-orchestrator.md +33 -2
- package/presets/claude/ios-swift/rules/tooling-and-review/preset-layering.md +2 -1
- package/presets/claude/ios-swift/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -1
- package/presets/claude/ios-swift/rules/tooling-and-review/preset-pr-checklist.md +2 -1
- package/presets/claude/ios-swift/rules/tooling-and-review/preset-token-budget.md +1 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/preset-twin-sync.md +5 -0
- package/presets/claude/ios-swift/team/README.md +13 -2
- package/presets/claude/java/agents/build-verifier.md +9 -2
- package/presets/claude/java/agents/code-reviewer.md +8 -1
- package/presets/claude/java/agents/feature-developer.md +8 -1
- package/presets/claude/java/agents/task-analyst.md +8 -1
- package/presets/claude/java/agents/task-router.md +31 -3
- package/presets/claude/java/commands/task.md +8 -6
- package/presets/claude/java/hooks/chain-team-phases.sh +195 -53
- package/presets/claude/java/rules/tooling-and-review/agent-team-orchestrator.md +30 -5
- package/presets/claude/java/rules/tooling-and-review/preset-layering.md +2 -1
- package/presets/claude/java/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -1
- package/presets/claude/java/rules/tooling-and-review/preset-pr-checklist.md +2 -1
- package/presets/claude/java/rules/tooling-and-review/preset-token-budget.md +1 -0
- package/presets/claude/java/rules/tooling-and-review/preset-twin-sync.md +5 -0
- package/presets/claude/java/team/README.md +13 -2
- package/presets/claude/mcp-ts/agents/build-verifier.md +10 -3
- package/presets/claude/mcp-ts/agents/feature-developer.md +7 -1
- package/presets/claude/mcp-ts/agents/task-analyst.md +8 -1
- package/presets/claude/mcp-ts/agents/task-router.md +33 -5
- package/presets/claude/mcp-ts/commands/task.md +8 -6
- package/presets/claude/mcp-ts/hooks/chain-team-phases.sh +181 -39
- package/presets/claude/mcp-ts/rules/tooling-and-review/agent-team-orchestrator.md +30 -5
- package/presets/claude/mcp-ts/rules/tooling-and-review/preset-layering.md +2 -1
- package/presets/claude/mcp-ts/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -1
- package/presets/claude/mcp-ts/rules/tooling-and-review/preset-pr-checklist.md +2 -1
- package/presets/claude/mcp-ts/rules/tooling-and-review/preset-token-budget.md +1 -0
- package/presets/claude/mcp-ts/rules/tooling-and-review/preset-twin-sync.md +5 -0
- package/presets/claude/mcp-ts/team/README.md +13 -2
- package/presets/claude/next/agents/accessibility-reviewer.md +6 -12
- package/presets/claude/next/agents/api-contract-reviewer.md +6 -12
- package/presets/claude/next/agents/build-verifier.md +10 -14
- package/presets/claude/next/agents/ci-investigator.md +7 -13
- package/presets/claude/next/agents/code-reviewer.md +9 -14
- package/presets/claude/next/agents/debugger.md +6 -12
- package/presets/claude/next/agents/feature-developer.md +8 -1
- package/presets/claude/next/agents/migration-specialist.md +6 -12
- package/presets/claude/next/agents/performance-auditor.md +5 -11
- package/presets/claude/next/agents/qa-tester.md +6 -12
- package/presets/claude/next/agents/security-reviewer.md +6 -12
- package/presets/claude/next/agents/solution-architect.md +6 -12
- package/presets/claude/next/agents/task-analyst.md +10 -16
- package/presets/claude/next/agents/task-router.md +31 -3
- package/presets/claude/next/agents/tech-writer.md +6 -13
- package/presets/claude/next/agents/unit-test-generator.md +6 -10
- package/presets/claude/next/agents/unit-test-healer.md +6 -10
- package/presets/claude/next/agents/unit-test-planner.md +5 -11
- package/presets/claude/next/commands/task.md +8 -6
- package/presets/claude/next/hooks/chain-team-phases.sh +197 -54
- package/presets/claude/next/rules/tooling-and-review/agent-team-orchestrator.md +29 -4
- package/presets/claude/next/rules/tooling-and-review/preset-layering.md +2 -1
- package/presets/claude/next/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -1
- package/presets/claude/next/rules/tooling-and-review/preset-pr-checklist.md +2 -1
- package/presets/claude/next/rules/tooling-and-review/preset-token-budget.md +1 -0
- package/presets/claude/next/rules/tooling-and-review/preset-twin-sync.md +5 -0
- package/presets/claude/next/team/README.md +15 -3
- package/presets/claude/next/team/fixtures/artifact-manifest.example.json +61 -0
- package/presets/claude/next/team/fixtures/bugfix-standard.json +10 -0
- package/presets/claude/next/team/fixtures/feature-full.json +10 -0
- package/presets/claude/next/team/fixtures/feature-light.json +10 -0
- package/presets/claude/nuxt/CLAUDE.md +39 -0
- package/presets/claude/nuxt/MCP.md +16 -0
- package/presets/claude/nuxt/README.md +39 -0
- package/presets/claude/nuxt/REPO_AGENTS.md +49 -0
- package/presets/claude/nuxt/agents/README.md +199 -0
- package/presets/claude/nuxt/agents/accessibility-reviewer.md +59 -0
- package/presets/claude/nuxt/agents/api-contract-reviewer.md +63 -0
- package/presets/claude/nuxt/agents/build-verifier.md +89 -0
- package/presets/claude/nuxt/agents/ci-investigator.md +60 -0
- package/presets/claude/nuxt/agents/code-reviewer.md +62 -0
- package/presets/claude/nuxt/agents/codebase-analyzer.md +28 -0
- package/presets/claude/nuxt/agents/debugger.md +65 -0
- package/presets/claude/nuxt/agents/feature-developer.md +59 -0
- package/presets/claude/nuxt/agents/migration-specialist.md +67 -0
- package/presets/claude/nuxt/agents/performance-auditor.md +66 -0
- package/presets/claude/nuxt/agents/playwright-test-generator.md +75 -0
- package/presets/claude/nuxt/agents/playwright-test-healer.md +61 -0
- package/presets/claude/nuxt/agents/playwright-test-planner.md +67 -0
- package/presets/claude/nuxt/agents/qa-tester.md +54 -0
- package/presets/claude/nuxt/agents/security-reviewer.md +60 -0
- package/presets/claude/nuxt/agents/solution-architect.md +68 -0
- package/presets/claude/nuxt/agents/task-analyst.md +109 -0
- package/presets/claude/nuxt/agents/task-router.md +140 -0
- package/presets/claude/nuxt/agents/tech-writer.md +54 -0
- package/presets/claude/nuxt/agents/unit-test-generator.md +37 -0
- package/presets/claude/nuxt/agents/unit-test-healer.md +38 -0
- package/presets/claude/nuxt/agents/unit-test-planner.md +60 -0
- package/presets/claude/nuxt/commands/README.md +13 -0
- package/presets/claude/nuxt/commands/feature-continue.md +51 -0
- package/presets/claude/nuxt/commands/feature-start.md +30 -0
- package/presets/claude/nuxt/commands/task-continue.md +50 -0
- package/presets/claude/nuxt/commands/task.md +56 -0
- package/presets/claude/nuxt/commands/technical-retro.md +62 -0
- package/presets/claude/nuxt/hooks/README.md +14 -0
- package/presets/claude/nuxt/hooks/chain-team-phases.sh +723 -0
- package/presets/claude/nuxt/hooks/examples/README.md +18 -0
- package/presets/claude/nuxt/hooks/examples/format-edited.example.sh +11 -0
- package/presets/claude/nuxt/hooks/examples/secret-guard.example.sh +10 -0
- package/presets/claude/nuxt/hooks/examples/test-on-save.example.sh +8 -0
- package/presets/claude/nuxt/hooks/guard-shell-command.sh +77 -0
- package/presets/claude/nuxt/mcp.json +20 -0
- package/presets/claude/nuxt/rules/README.md +90 -0
- package/presets/claude/nuxt/rules/anti-hallucination/vue-nuxt-anti-hallucination.md +72 -0
- package/presets/claude/nuxt/rules/api-and-data/README.md +9 -0
- package/presets/claude/nuxt/rules/api-and-data/api-services.md +76 -0
- package/presets/claude/nuxt/rules/api-and-data/http-client.md +16 -0
- package/presets/claude/nuxt/rules/api-and-data/store-pinia.md +67 -0
- package/presets/claude/nuxt/rules/architecture/README.md +12 -0
- package/presets/claude/nuxt/rules/architecture/architecture-boundaries-ui.md +15 -0
- package/presets/claude/nuxt/rules/architecture/architecture-boundaries.md +98 -0
- package/presets/claude/nuxt/rules/architecture/feature-delivery-workflow.md +88 -0
- package/presets/claude/nuxt/rules/architecture/layer-barrel-exports.md +71 -0
- package/presets/claude/nuxt/rules/architecture/public-imports.md +60 -0
- package/presets/claude/nuxt/rules/architecture/reference-features.md +49 -0
- package/presets/claude/nuxt/rules/stack/README.md +12 -0
- package/presets/claude/nuxt/rules/stack/navigation-router-ui.md +14 -0
- package/presets/claude/nuxt/rules/stack/navigation-router.md +59 -0
- package/presets/claude/nuxt/rules/stack/no-type-assertion.md +61 -0
- package/presets/claude/nuxt/rules/stack/nuxt-app-core.md +43 -0
- package/presets/claude/nuxt/rules/stack/nuxt-pages-routing.md +39 -0
- package/presets/claude/nuxt/rules/stack/script-setup-conventions.md +12 -0
- package/presets/claude/nuxt/rules/stack/types-jsdoc.md +40 -0
- package/presets/claude/nuxt/rules/testing/README.md +11 -0
- package/presets/claude/nuxt/rules/testing/playwright-agents.md +78 -0
- package/presets/claude/nuxt/rules/testing/tests-e2e-structure.md +49 -0
- package/presets/claude/nuxt/rules/testing/tests-unit.md +75 -0
- package/presets/claude/nuxt/rules/tooling-and-review/README.md +15 -0
- package/presets/claude/nuxt/rules/tooling-and-review/agent-team-intake.md +15 -0
- package/presets/claude/nuxt/rules/tooling-and-review/agent-team-orchestrator.md +191 -0
- package/presets/claude/nuxt/rules/tooling-and-review/anti-sycophancy-discipline.md +33 -0
- package/presets/claude/nuxt/rules/tooling-and-review/code-quality.md +49 -0
- package/presets/claude/nuxt/rules/tooling-and-review/code-review-mr.md +63 -0
- package/presets/claude/nuxt/rules/tooling-and-review/design-guidance.md +114 -0
- package/presets/claude/nuxt/rules/tooling-and-review/package-manager.md +16 -0
- package/presets/claude/nuxt/rules/tooling-and-review/post-change-lint.md +43 -0
- package/presets/claude/nuxt/rules/tooling-and-review/preset-layering.md +32 -0
- package/presets/claude/nuxt/rules/tooling-and-review/preset-no-cross-stack-leakage.md +79 -0
- package/presets/claude/nuxt/rules/tooling-and-review/preset-pr-checklist.md +35 -0
- package/presets/claude/nuxt/rules/tooling-and-review/preset-token-budget.md +39 -0
- package/presets/claude/nuxt/rules/tooling-and-review/preset-twin-sync.md +50 -0
- package/presets/claude/nuxt/rules/tooling-and-review/security-nuxt.md +37 -0
- package/presets/claude/nuxt/rules/tooling-and-review/technical-retro.md +15 -0
- package/presets/claude/nuxt/rules/ui-and-accessibility/README.md +12 -0
- package/presets/claude/nuxt/rules/ui-and-accessibility/css-property-order.md +11 -0
- package/presets/claude/nuxt/rules/ui-and-accessibility/no-v-bind-spread.md +12 -0
- package/presets/claude/nuxt/rules/ui-and-accessibility/vue-a11y-coding.md +16 -0
- package/presets/claude/nuxt/rules/ui-and-accessibility/vue-ui.md +34 -0
- package/presets/claude/nuxt/skills/README.md +17 -0
- package/presets/claude/nuxt/skills/ci-investigation/SKILL.md +36 -0
- package/presets/claude/nuxt/skills/code-review/SKILL.md +38 -0
- package/presets/claude/nuxt/skills/debug-investigation/SKILL.md +32 -0
- package/presets/claude/nuxt/skills/feature-delivery/SKILL.md +34 -0
- package/presets/claude/nuxt/skills/playwright-e2e/SKILL.md +37 -0
- package/presets/claude/nuxt/skills/technical-retro/SKILL.md +54 -0
- package/presets/claude/nuxt/skills/unit-testing/SKILL.md +32 -0
- package/presets/claude/nuxt/skills/vue-performance/SKILL.md +53 -0
- package/presets/claude/nuxt/skills/write-adr/SKILL.md +41 -0
- package/presets/claude/nuxt/team/README.md +136 -0
- package/presets/claude/nuxt/team/conventions.md +21 -0
- package/presets/claude/nuxt/team/fixtures/artifact-manifest.example.json +61 -0
- package/presets/claude/nuxt/team/fixtures/bugfix-standard.json +25 -0
- package/presets/claude/nuxt/team/fixtures/feature-full.json +28 -0
- package/presets/claude/nuxt/team/fixtures/feature-light.json +27 -0
- package/presets/claude/nuxt/team/tasks/.gitkeep +1 -0
- package/presets/claude/php-hexagonal/agents/build-verifier.md +10 -3
- package/presets/claude/php-hexagonal/agents/code-reviewer.md +8 -1
- package/presets/claude/php-hexagonal/agents/feature-developer.md +8 -1
- package/presets/claude/php-hexagonal/agents/task-analyst.md +8 -1
- package/presets/claude/php-hexagonal/agents/task-router.md +31 -3
- package/presets/claude/php-hexagonal/commands/task.md +8 -6
- package/presets/claude/php-hexagonal/hooks/README.md +1 -1
- package/presets/claude/php-hexagonal/hooks/chain-team-phases.sh +195 -53
- package/presets/claude/php-hexagonal/rules/tooling-and-review/agent-team-orchestrator.md +30 -5
- package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-layering.md +2 -1
- package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -1
- package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-pr-checklist.md +2 -1
- package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-token-budget.md +1 -0
- package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-twin-sync.md +5 -0
- package/presets/claude/php-hexagonal/team/README.md +13 -2
- package/presets/claude/php-laravel/agents/build-verifier.md +10 -3
- package/presets/claude/php-laravel/agents/code-reviewer.md +8 -1
- package/presets/claude/php-laravel/agents/feature-developer.md +8 -1
- package/presets/claude/php-laravel/agents/task-analyst.md +8 -1
- package/presets/claude/php-laravel/agents/task-router.md +31 -3
- package/presets/claude/php-laravel/commands/task.md +8 -6
- package/presets/claude/php-laravel/hooks/chain-team-phases.sh +195 -53
- package/presets/claude/php-laravel/rules/tooling-and-review/agent-team-orchestrator.md +30 -5
- package/presets/claude/php-laravel/rules/tooling-and-review/preset-layering.md +2 -1
- package/presets/claude/php-laravel/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -1
- package/presets/claude/php-laravel/rules/tooling-and-review/preset-pr-checklist.md +2 -1
- package/presets/claude/php-laravel/rules/tooling-and-review/preset-token-budget.md +1 -0
- package/presets/claude/php-laravel/rules/tooling-and-review/preset-twin-sync.md +5 -0
- package/presets/claude/php-laravel/team/README.md +13 -2
- package/presets/claude/svelte/CLAUDE.md +39 -0
- package/presets/claude/svelte/MCP.md +16 -0
- package/presets/claude/svelte/README.md +13 -0
- package/presets/claude/svelte/REPO_AGENTS.md +49 -0
- package/presets/claude/svelte/agents/README.md +199 -0
- package/presets/claude/svelte/agents/accessibility-reviewer.md +59 -0
- package/presets/claude/svelte/agents/api-contract-reviewer.md +63 -0
- package/presets/claude/svelte/agents/build-verifier.md +89 -0
- package/presets/claude/svelte/agents/ci-investigator.md +60 -0
- package/presets/claude/svelte/agents/code-reviewer.md +62 -0
- package/presets/claude/svelte/agents/codebase-analyzer.md +28 -0
- package/presets/claude/svelte/agents/debugger.md +65 -0
- package/presets/claude/svelte/agents/feature-developer.md +59 -0
- package/presets/claude/svelte/agents/migration-specialist.md +67 -0
- package/presets/claude/svelte/agents/performance-auditor.md +66 -0
- package/presets/claude/svelte/agents/playwright-test-generator.md +75 -0
- package/presets/claude/svelte/agents/playwright-test-healer.md +61 -0
- package/presets/claude/svelte/agents/playwright-test-planner.md +67 -0
- package/presets/claude/svelte/agents/qa-tester.md +54 -0
- package/presets/claude/svelte/agents/security-reviewer.md +60 -0
- package/presets/claude/svelte/agents/solution-architect.md +68 -0
- package/presets/claude/svelte/agents/task-analyst.md +109 -0
- package/presets/claude/svelte/agents/task-router.md +140 -0
- package/presets/claude/svelte/agents/tech-writer.md +54 -0
- package/presets/claude/svelte/agents/unit-test-generator.md +37 -0
- package/presets/claude/svelte/agents/unit-test-healer.md +38 -0
- package/presets/claude/svelte/agents/unit-test-planner.md +60 -0
- package/presets/claude/svelte/commands/README.md +13 -0
- package/presets/claude/svelte/commands/feature-continue.md +51 -0
- package/presets/claude/svelte/commands/feature-start.md +30 -0
- package/presets/claude/svelte/commands/task-continue.md +50 -0
- package/presets/claude/svelte/commands/task.md +56 -0
- package/presets/claude/svelte/commands/technical-retro.md +62 -0
- package/presets/claude/svelte/hooks/README.md +14 -0
- package/presets/claude/svelte/hooks/chain-team-phases.sh +723 -0
- package/presets/claude/svelte/hooks/examples/README.md +18 -0
- package/presets/claude/svelte/hooks/examples/format-edited.example.sh +13 -0
- package/presets/claude/svelte/hooks/examples/secret-guard.example.sh +10 -0
- package/presets/claude/svelte/hooks/examples/test-on-save.example.sh +14 -0
- package/presets/claude/svelte/hooks/guard-shell-command.sh +77 -0
- package/presets/claude/svelte/mcp.json +20 -0
- package/presets/claude/svelte/rules/README.md +90 -0
- package/presets/claude/svelte/rules/anti-hallucination/svelte-sveltekit-anti-hallucination.md +71 -0
- package/presets/claude/svelte/rules/api-and-data/README.md +9 -0
- package/presets/claude/svelte/rules/api-and-data/api-services.md +45 -0
- package/presets/claude/svelte/rules/api-and-data/http-client.md +17 -0
- package/presets/claude/svelte/rules/api-and-data/store-svelte.md +67 -0
- package/presets/claude/svelte/rules/architecture/README.md +12 -0
- package/presets/claude/svelte/rules/architecture/architecture-boundaries-ui.md +16 -0
- package/presets/claude/svelte/rules/architecture/architecture-boundaries.md +65 -0
- package/presets/claude/svelte/rules/architecture/feature-delivery-workflow.md +61 -0
- package/presets/claude/svelte/rules/architecture/layer-barrel-exports.md +73 -0
- package/presets/claude/svelte/rules/architecture/public-imports.md +43 -0
- package/presets/claude/svelte/rules/architecture/reference-features.md +50 -0
- package/presets/claude/svelte/rules/stack/README.md +12 -0
- package/presets/claude/svelte/rules/stack/navigation-router-ui.md +26 -0
- package/presets/claude/svelte/rules/stack/navigation-router.md +41 -0
- package/presets/claude/svelte/rules/stack/no-type-assertion.md +59 -0
- package/presets/claude/svelte/rules/stack/svelte-app-core.md +44 -0
- package/presets/claude/svelte/rules/stack/svelte-script-conventions.md +33 -0
- package/presets/claude/svelte/rules/stack/sveltekit-routing.md +40 -0
- package/presets/claude/svelte/rules/stack/types-jsdoc.md +42 -0
- package/presets/claude/svelte/rules/testing/README.md +11 -0
- package/presets/claude/svelte/rules/testing/playwright-agents.md +80 -0
- package/presets/claude/svelte/rules/testing/tests-e2e-structure.md +51 -0
- package/presets/claude/svelte/rules/testing/tests-unit.md +40 -0
- package/presets/claude/svelte/rules/tooling-and-review/README.md +15 -0
- package/presets/claude/svelte/rules/tooling-and-review/agent-team-intake.md +17 -0
- package/presets/claude/svelte/rules/tooling-and-review/agent-team-orchestrator.md +193 -0
- package/presets/claude/svelte/rules/tooling-and-review/anti-sycophancy-discipline.md +29 -0
- package/presets/claude/svelte/rules/tooling-and-review/code-quality.md +50 -0
- package/presets/claude/svelte/rules/tooling-and-review/code-review-mr.md +64 -0
- package/presets/claude/svelte/rules/tooling-and-review/design-guidance.md +110 -0
- package/presets/claude/svelte/rules/tooling-and-review/package-manager.md +17 -0
- package/presets/claude/svelte/rules/tooling-and-review/post-change-lint.md +44 -0
- package/presets/claude/svelte/rules/tooling-and-review/preset-layering.md +36 -0
- package/presets/claude/svelte/rules/tooling-and-review/preset-no-cross-stack-leakage.md +83 -0
- package/presets/claude/svelte/rules/tooling-and-review/preset-pr-checklist.md +39 -0
- package/presets/claude/svelte/rules/tooling-and-review/preset-token-budget.md +41 -0
- package/presets/claude/svelte/rules/tooling-and-review/preset-twin-sync.md +54 -0
- package/presets/claude/svelte/rules/tooling-and-review/security-sveltekit.md +41 -0
- package/presets/claude/svelte/rules/tooling-and-review/technical-retro.md +17 -0
- package/presets/claude/svelte/rules/ui-and-accessibility/README.md +12 -0
- package/presets/claude/svelte/rules/ui-and-accessibility/css-property-order.md +12 -0
- package/presets/claude/svelte/rules/ui-and-accessibility/no-rest-props-spread.md +32 -0
- package/presets/claude/svelte/rules/ui-and-accessibility/svelte-a11y-coding.md +28 -0
- package/presets/claude/svelte/rules/ui-and-accessibility/svelte-ui.md +38 -0
- package/presets/claude/svelte/skills/README.md +17 -0
- package/presets/claude/svelte/skills/ci-investigation/SKILL.md +36 -0
- package/presets/claude/svelte/skills/code-review/SKILL.md +38 -0
- package/presets/claude/svelte/skills/debug-investigation/SKILL.md +32 -0
- package/presets/claude/svelte/skills/feature-delivery/SKILL.md +34 -0
- package/presets/claude/svelte/skills/playwright-e2e/SKILL.md +37 -0
- package/presets/claude/svelte/skills/svelte-performance/SKILL.md +52 -0
- package/presets/claude/svelte/skills/technical-retro/SKILL.md +54 -0
- package/presets/claude/svelte/skills/unit-testing/SKILL.md +32 -0
- package/presets/claude/svelte/skills/write-adr/SKILL.md +41 -0
- package/presets/claude/svelte/team/README.md +136 -0
- package/presets/claude/svelte/team/conventions.md +21 -0
- package/presets/claude/svelte/team/fixtures/artifact-manifest.example.json +61 -0
- package/presets/claude/svelte/team/fixtures/bugfix-standard.json +25 -0
- package/presets/claude/svelte/team/fixtures/feature-full.json +28 -0
- package/presets/claude/svelte/team/fixtures/feature-light.json +27 -0
- package/presets/claude/svelte/team/tasks/.gitkeep +1 -0
- package/presets/cursor/go/agents/build-verifier.md +9 -2
- package/presets/cursor/go/agents/code-reviewer.md +8 -1
- package/presets/cursor/go/agents/feature-developer.md +8 -1
- package/presets/cursor/go/agents/task-analyst.md +8 -1
- package/presets/cursor/go/agents/task-router.md +31 -3
- package/presets/cursor/go/commands/task.md +8 -6
- package/presets/cursor/go/hooks/chain-team-phases.sh +195 -53
- package/presets/cursor/go/rules/agent-team-orchestrator.mdc +30 -5
- package/presets/cursor/go/rules/preset-layering.mdc +2 -1
- package/presets/cursor/go/rules/preset-no-cross-stack-leakage.mdc +16 -1
- package/presets/cursor/go/rules/preset-pr-checklist.mdc +2 -1
- package/presets/cursor/go/rules/preset-token-budget.mdc +1 -0
- package/presets/cursor/go/rules/preset-twin-sync.mdc +5 -0
- package/presets/cursor/go/team/README.md +13 -2
- package/presets/cursor/ios-swift/agents/build-verifier.md +10 -3
- package/presets/cursor/ios-swift/agents/code-reviewer.md +9 -14
- package/presets/cursor/ios-swift/agents/feature-developer.md +8 -1
- package/presets/cursor/ios-swift/agents/task-analyst.md +8 -1
- package/presets/cursor/ios-swift/agents/task-router.md +31 -3
- package/presets/cursor/ios-swift/commands/task.md +8 -6
- package/presets/cursor/ios-swift/hooks/chain-team-phases.sh +195 -54
- package/presets/cursor/ios-swift/rules/agent-team-orchestrator.mdc +23 -2
- package/presets/cursor/ios-swift/rules/preset-layering.mdc +2 -1
- package/presets/cursor/ios-swift/rules/preset-no-cross-stack-leakage.mdc +16 -1
- package/presets/cursor/ios-swift/rules/preset-pr-checklist.mdc +2 -1
- package/presets/cursor/ios-swift/rules/preset-token-budget.mdc +1 -0
- package/presets/cursor/ios-swift/rules/preset-twin-sync.mdc +5 -0
- package/presets/cursor/ios-swift/team/README.md +13 -2
- package/presets/cursor/java/agents/build-verifier.md +9 -2
- package/presets/cursor/java/agents/code-reviewer.md +8 -1
- package/presets/cursor/java/agents/feature-developer.md +8 -1
- package/presets/cursor/java/agents/task-analyst.md +8 -1
- package/presets/cursor/java/agents/task-router.md +31 -3
- package/presets/cursor/java/commands/task.md +8 -6
- package/presets/cursor/java/hooks/chain-team-phases.sh +195 -53
- package/presets/cursor/java/rules/agent-team-orchestrator.mdc +30 -5
- package/presets/cursor/java/rules/preset-layering.mdc +2 -1
- package/presets/cursor/java/rules/preset-no-cross-stack-leakage.mdc +16 -1
- package/presets/cursor/java/rules/preset-pr-checklist.mdc +2 -1
- package/presets/cursor/java/rules/preset-token-budget.mdc +1 -0
- package/presets/cursor/java/rules/preset-twin-sync.mdc +5 -0
- package/presets/cursor/java/team/README.md +13 -2
- package/presets/cursor/mcp-ts/agents/build-verifier.md +9 -2
- package/presets/cursor/mcp-ts/agents/feature-developer.md +7 -1
- package/presets/cursor/mcp-ts/agents/task-analyst.md +8 -1
- package/presets/cursor/mcp-ts/agents/task-router.md +31 -3
- package/presets/cursor/mcp-ts/commands/task.md +8 -6
- package/presets/cursor/mcp-ts/hooks/chain-team-phases.sh +181 -39
- package/presets/cursor/mcp-ts/rules/agent-team-orchestrator.mdc +30 -5
- package/presets/cursor/mcp-ts/rules/preset-layering.mdc +2 -1
- package/presets/cursor/mcp-ts/rules/preset-no-cross-stack-leakage.mdc +16 -1
- package/presets/cursor/mcp-ts/rules/preset-pr-checklist.mdc +2 -1
- package/presets/cursor/mcp-ts/rules/preset-token-budget.mdc +1 -0
- package/presets/cursor/mcp-ts/rules/preset-twin-sync.mdc +5 -0
- package/presets/cursor/mcp-ts/team/README.md +13 -2
- package/presets/cursor/next/agents/accessibility-reviewer.md +7 -14
- package/presets/cursor/next/agents/api-contract-reviewer.md +7 -14
- package/presets/cursor/next/agents/build-verifier.md +10 -15
- package/presets/cursor/next/agents/ci-investigator.md +7 -14
- package/presets/cursor/next/agents/code-reviewer.md +9 -14
- package/presets/cursor/next/agents/debugger.md +6 -12
- package/presets/cursor/next/agents/feature-developer.md +8 -1
- package/presets/cursor/next/agents/migration-specialist.md +7 -14
- package/presets/cursor/next/agents/performance-auditor.md +6 -13
- package/presets/cursor/next/agents/qa-tester.md +6 -13
- package/presets/cursor/next/agents/security-reviewer.md +7 -14
- package/presets/cursor/next/agents/solution-architect.md +6 -12
- package/presets/cursor/next/agents/task-analyst.md +10 -16
- package/presets/cursor/next/agents/task-router.md +31 -3
- package/presets/cursor/next/agents/tech-writer.md +6 -13
- package/presets/cursor/next/agents/unit-test-generator.md +6 -11
- package/presets/cursor/next/agents/unit-test-healer.md +6 -11
- package/presets/cursor/next/agents/unit-test-planner.md +6 -13
- package/presets/cursor/next/commands/task.md +8 -6
- package/presets/cursor/next/hooks/chain-team-phases.sh +197 -54
- package/presets/cursor/next/rules/agent-team-orchestrator.mdc +30 -5
- package/presets/cursor/next/rules/preset-layering.mdc +2 -1
- package/presets/cursor/next/rules/preset-no-cross-stack-leakage.mdc +16 -1
- package/presets/cursor/next/rules/preset-pr-checklist.mdc +2 -1
- package/presets/cursor/next/rules/preset-token-budget.mdc +1 -0
- package/presets/cursor/next/rules/preset-twin-sync.mdc +5 -0
- package/presets/cursor/next/team/README.md +16 -4
- package/presets/cursor/next/team/fixtures/artifact-manifest.example.json +61 -0
- package/presets/cursor/next/team/fixtures/bugfix-standard.json +10 -0
- package/presets/cursor/next/team/fixtures/feature-full.json +10 -0
- package/presets/cursor/next/team/fixtures/feature-light.json +10 -0
- package/presets/cursor/nuxt/AGENTS.md +39 -0
- package/presets/cursor/nuxt/BUGBOT.md +14 -0
- package/presets/cursor/nuxt/MCP.md +16 -0
- package/presets/cursor/nuxt/README.md +47 -0
- package/presets/cursor/nuxt/REPO_AGENTS.md +49 -0
- package/presets/cursor/nuxt/agents/README.md +206 -0
- package/presets/cursor/nuxt/agents/accessibility-reviewer.md +60 -0
- package/presets/cursor/nuxt/agents/api-contract-reviewer.md +64 -0
- package/presets/cursor/nuxt/agents/build-verifier.md +90 -0
- package/presets/cursor/nuxt/agents/ci-investigator.md +61 -0
- package/presets/cursor/nuxt/agents/code-reviewer.md +63 -0
- package/presets/cursor/nuxt/agents/codebase-analyzer.md +28 -0
- package/presets/cursor/nuxt/agents/debugger.md +66 -0
- package/presets/cursor/nuxt/agents/feature-developer.md +60 -0
- package/presets/cursor/nuxt/agents/migration-specialist.md +68 -0
- package/presets/cursor/nuxt/agents/performance-auditor.md +67 -0
- package/presets/cursor/nuxt/agents/playwright-test-generator.md +27 -0
- package/presets/cursor/nuxt/agents/playwright-test-healer.md +27 -0
- package/presets/cursor/nuxt/agents/playwright-test-planner.md +28 -0
- package/presets/cursor/nuxt/agents/qa-tester.md +55 -0
- package/presets/cursor/nuxt/agents/security-reviewer.md +61 -0
- package/presets/cursor/nuxt/agents/solution-architect.md +69 -0
- package/presets/cursor/nuxt/agents/task-analyst.md +110 -0
- package/presets/cursor/nuxt/agents/task-router.md +141 -0
- package/presets/cursor/nuxt/agents/tech-writer.md +55 -0
- package/presets/cursor/nuxt/agents/unit-test-generator.md +38 -0
- package/presets/cursor/nuxt/agents/unit-test-healer.md +39 -0
- package/presets/cursor/nuxt/agents/unit-test-planner.md +61 -0
- package/presets/cursor/nuxt/commands/README.md +51 -0
- package/presets/cursor/nuxt/commands/feature-continue.md +19 -0
- package/presets/cursor/nuxt/commands/feature-start.md +33 -0
- package/presets/cursor/nuxt/commands/task-continue.md +50 -0
- package/presets/cursor/nuxt/commands/task.md +56 -0
- package/presets/cursor/nuxt/commands/technical-retro.md +85 -0
- package/presets/cursor/nuxt/hooks/README.md +12 -0
- package/presets/cursor/nuxt/hooks/chain-team-phases.sh +727 -0
- package/presets/cursor/nuxt/hooks/examples/README.md +18 -0
- package/presets/cursor/nuxt/hooks/examples/format-edited.example.sh +11 -0
- package/presets/cursor/nuxt/hooks/examples/secret-guard.example.sh +10 -0
- package/presets/cursor/nuxt/hooks/examples/test-on-save.example.sh +8 -0
- package/presets/cursor/nuxt/hooks/guard-shell-command.sh +77 -0
- package/presets/cursor/nuxt/hooks.json +17 -0
- package/presets/cursor/nuxt/mcp.json +19 -0
- package/presets/cursor/nuxt/rules/README.md +108 -0
- package/presets/cursor/nuxt/rules/agent-team-intake.mdc +16 -0
- package/presets/cursor/nuxt/rules/agent-team-orchestrator.mdc +192 -0
- package/presets/cursor/nuxt/rules/anti-sycophancy-discipline.mdc +30 -0
- package/presets/cursor/nuxt/rules/api-services.mdc +79 -0
- package/presets/cursor/nuxt/rules/architecture-boundaries-ui.mdc +15 -0
- package/presets/cursor/nuxt/rules/architecture-boundaries.mdc +97 -0
- package/presets/cursor/nuxt/rules/code-quality-and-refactoring.mdc +51 -0
- package/presets/cursor/nuxt/rules/code-review-mr.mdc +58 -0
- package/presets/cursor/nuxt/rules/css-property-order-stylelint.mdc +12 -0
- package/presets/cursor/nuxt/rules/design-guidance.mdc +111 -0
- package/presets/cursor/nuxt/rules/feature-delivery-workflow.mdc +83 -0
- package/presets/cursor/nuxt/rules/http-client.mdc +15 -0
- package/presets/cursor/nuxt/rules/layer-barrel-exports.mdc +74 -0
- package/presets/cursor/nuxt/rules/navigation-router-stack.mdc +61 -0
- package/presets/cursor/nuxt/rules/navigation-router-ui.mdc +16 -0
- package/presets/cursor/nuxt/rules/no-type-assertion-as-import-export.mdc +60 -0
- package/presets/cursor/nuxt/rules/no-v-bind-spread.mdc +13 -0
- package/presets/cursor/nuxt/rules/nuxt-app-core.mdc +45 -0
- package/presets/cursor/nuxt/rules/nuxt-pages-routing.mdc +37 -0
- package/presets/cursor/nuxt/rules/package-manager.mdc +18 -0
- package/presets/cursor/nuxt/rules/playwright-agents.mdc +80 -0
- package/presets/cursor/nuxt/rules/post-change-lint.mdc +42 -0
- package/presets/cursor/nuxt/rules/preset-layering.mdc +37 -0
- package/presets/cursor/nuxt/rules/preset-no-cross-stack-leakage.mdc +84 -0
- package/presets/cursor/nuxt/rules/preset-pr-checklist.mdc +40 -0
- package/presets/cursor/nuxt/rules/preset-token-budget.mdc +42 -0
- package/presets/cursor/nuxt/rules/preset-twin-sync.mdc +55 -0
- package/presets/cursor/nuxt/rules/public-imports.mdc +62 -0
- package/presets/cursor/nuxt/rules/reference-features.mdc +49 -0
- package/presets/cursor/nuxt/rules/script-setup-conventions.mdc +13 -0
- package/presets/cursor/nuxt/rules/security-nuxt.mdc +34 -0
- package/presets/cursor/nuxt/rules/store-pinia.mdc +68 -0
- package/presets/cursor/nuxt/rules/technical-retro.mdc +16 -0
- package/presets/cursor/nuxt/rules/tests-e2e-structure.mdc +51 -0
- package/presets/cursor/nuxt/rules/tests-unit.mdc +78 -0
- package/presets/cursor/nuxt/rules/types-jsdoc.mdc +42 -0
- package/presets/cursor/nuxt/rules/vue-a11y-coding.mdc +15 -0
- package/presets/cursor/nuxt/rules/vue-nuxt-anti-hallucination.mdc +68 -0
- package/presets/cursor/nuxt/rules/vue-ui.mdc +33 -0
- package/presets/cursor/nuxt/skills/README.md +17 -0
- package/presets/cursor/nuxt/skills/ci-investigation/SKILL.md +36 -0
- package/presets/cursor/nuxt/skills/code-review/SKILL.md +38 -0
- package/presets/cursor/nuxt/skills/debug-investigation/SKILL.md +32 -0
- package/presets/cursor/nuxt/skills/feature-delivery/SKILL.md +34 -0
- package/presets/cursor/nuxt/skills/playwright-e2e/SKILL.md +37 -0
- package/presets/cursor/nuxt/skills/technical-retro/SKILL.md +54 -0
- package/presets/cursor/nuxt/skills/unit-testing/SKILL.md +32 -0
- package/presets/cursor/nuxt/skills/vue-performance/SKILL.md +53 -0
- package/presets/cursor/nuxt/skills/write-adr/SKILL.md +41 -0
- package/presets/cursor/nuxt/team/README.md +140 -0
- package/presets/cursor/nuxt/team/conventions.md +21 -0
- package/presets/cursor/nuxt/team/fixtures/artifact-manifest.example.json +61 -0
- package/presets/cursor/nuxt/team/fixtures/bugfix-standard.json +25 -0
- package/presets/cursor/nuxt/team/fixtures/feature-full.json +28 -0
- package/presets/cursor/nuxt/team/fixtures/feature-light.json +27 -0
- package/presets/cursor/nuxt/team/fixtures/metrics-scenarios/tasks/human-gate/metrics.json +69 -0
- package/presets/cursor/nuxt/team/fixtures/metrics-scenarios/tasks/missing-ledger/status.json +5 -0
- package/presets/cursor/nuxt/team/fixtures/metrics-scenarios/tasks/parallel-receipts/metrics.json +79 -0
- package/presets/cursor/nuxt/team/fixtures/metrics-scenarios/tasks/serial-retry/metrics.json +124 -0
- package/presets/cursor/nuxt/team/fixtures/metrics-scenarios/tasks/validation-failed/metrics.json +124 -0
- package/presets/cursor/nuxt/team/fixtures/metrics.example.json +54 -0
- package/presets/cursor/nuxt/team/tasks/.gitkeep +0 -0
- package/presets/cursor/php-hexagonal/agents/build-verifier.md +9 -2
- package/presets/cursor/php-hexagonal/agents/code-reviewer.md +8 -1
- package/presets/cursor/php-hexagonal/agents/feature-developer.md +8 -1
- package/presets/cursor/php-hexagonal/agents/task-analyst.md +8 -1
- package/presets/cursor/php-hexagonal/agents/task-router.md +31 -3
- package/presets/cursor/php-hexagonal/commands/task.md +8 -6
- package/presets/cursor/php-hexagonal/hooks/chain-team-phases.sh +195 -53
- package/presets/cursor/php-hexagonal/rules/agent-team-orchestrator.mdc +30 -5
- package/presets/cursor/php-hexagonal/rules/preset-layering.mdc +2 -1
- package/presets/cursor/php-hexagonal/rules/preset-no-cross-stack-leakage.mdc +16 -1
- package/presets/cursor/php-hexagonal/rules/preset-pr-checklist.mdc +2 -1
- package/presets/cursor/php-hexagonal/rules/preset-token-budget.mdc +1 -0
- package/presets/cursor/php-hexagonal/rules/preset-twin-sync.mdc +5 -0
- package/presets/cursor/php-hexagonal/team/README.md +13 -2
- package/presets/cursor/php-laravel/agents/build-verifier.md +9 -2
- package/presets/cursor/php-laravel/agents/code-reviewer.md +8 -1
- package/presets/cursor/php-laravel/agents/feature-developer.md +8 -1
- package/presets/cursor/php-laravel/agents/task-analyst.md +8 -1
- package/presets/cursor/php-laravel/agents/task-router.md +31 -3
- package/presets/cursor/php-laravel/commands/task.md +8 -6
- package/presets/cursor/php-laravel/hooks/chain-team-phases.sh +195 -53
- package/presets/cursor/php-laravel/rules/agent-team-orchestrator.mdc +30 -5
- package/presets/cursor/php-laravel/rules/preset-layering.mdc +2 -1
- package/presets/cursor/php-laravel/rules/preset-no-cross-stack-leakage.mdc +16 -1
- package/presets/cursor/php-laravel/rules/preset-pr-checklist.mdc +2 -1
- package/presets/cursor/php-laravel/rules/preset-token-budget.mdc +1 -0
- package/presets/cursor/php-laravel/rules/preset-twin-sync.mdc +5 -0
- package/presets/cursor/php-laravel/team/README.md +13 -2
- package/presets/cursor/svelte/AGENTS.md +39 -0
- package/presets/cursor/svelte/BUGBOT.md +14 -0
- package/presets/cursor/svelte/MCP.md +16 -0
- package/presets/cursor/svelte/README.md +47 -0
- package/presets/cursor/svelte/REPO_AGENTS.md +49 -0
- package/presets/cursor/svelte/agents/README.md +206 -0
- package/presets/cursor/svelte/agents/accessibility-reviewer.md +60 -0
- package/presets/cursor/svelte/agents/api-contract-reviewer.md +64 -0
- package/presets/cursor/svelte/agents/build-verifier.md +90 -0
- package/presets/cursor/svelte/agents/ci-investigator.md +61 -0
- package/presets/cursor/svelte/agents/code-reviewer.md +63 -0
- package/presets/cursor/svelte/agents/codebase-analyzer.md +28 -0
- package/presets/cursor/svelte/agents/debugger.md +66 -0
- package/presets/cursor/svelte/agents/feature-developer.md +60 -0
- package/presets/cursor/svelte/agents/migration-specialist.md +68 -0
- package/presets/cursor/svelte/agents/performance-auditor.md +67 -0
- package/presets/cursor/svelte/agents/playwright-test-generator.md +27 -0
- package/presets/cursor/svelte/agents/playwright-test-healer.md +27 -0
- package/presets/cursor/svelte/agents/playwright-test-planner.md +28 -0
- package/presets/cursor/svelte/agents/qa-tester.md +55 -0
- package/presets/cursor/svelte/agents/security-reviewer.md +61 -0
- package/presets/cursor/svelte/agents/solution-architect.md +69 -0
- package/presets/cursor/svelte/agents/task-analyst.md +110 -0
- package/presets/cursor/svelte/agents/task-router.md +141 -0
- package/presets/cursor/svelte/agents/tech-writer.md +55 -0
- package/presets/cursor/svelte/agents/unit-test-generator.md +38 -0
- package/presets/cursor/svelte/agents/unit-test-healer.md +39 -0
- package/presets/cursor/svelte/agents/unit-test-planner.md +61 -0
- package/presets/cursor/svelte/commands/README.md +51 -0
- package/presets/cursor/svelte/commands/feature-continue.md +19 -0
- package/presets/cursor/svelte/commands/feature-start.md +33 -0
- package/presets/cursor/svelte/commands/task-continue.md +50 -0
- package/presets/cursor/svelte/commands/task.md +56 -0
- package/presets/cursor/svelte/commands/technical-retro.md +85 -0
- package/presets/cursor/svelte/hooks/README.md +12 -0
- package/presets/cursor/svelte/hooks/chain-team-phases.sh +727 -0
- package/presets/cursor/svelte/hooks/examples/README.md +18 -0
- package/presets/cursor/svelte/hooks/examples/format-edited.example.sh +13 -0
- package/presets/cursor/svelte/hooks/examples/secret-guard.example.sh +10 -0
- package/presets/cursor/svelte/hooks/examples/test-on-save.example.sh +14 -0
- package/presets/cursor/svelte/hooks/guard-shell-command.sh +77 -0
- package/presets/cursor/svelte/hooks.json +17 -0
- package/presets/cursor/svelte/mcp.json +19 -0
- package/presets/cursor/svelte/rules/README.md +86 -0
- package/presets/cursor/svelte/rules/agent-team-intake.mdc +16 -0
- package/presets/cursor/svelte/rules/agent-team-orchestrator.mdc +192 -0
- package/presets/cursor/svelte/rules/anti-sycophancy-discipline.mdc +30 -0
- package/presets/cursor/svelte/rules/api-services.mdc +46 -0
- package/presets/cursor/svelte/rules/architecture-boundaries-ui.mdc +15 -0
- package/presets/cursor/svelte/rules/architecture-boundaries.mdc +61 -0
- package/presets/cursor/svelte/rules/code-quality-and-refactoring.mdc +51 -0
- package/presets/cursor/svelte/rules/code-review-mr.mdc +58 -0
- package/presets/cursor/svelte/rules/css-property-order-stylelint.mdc +12 -0
- package/presets/cursor/svelte/rules/design-guidance.mdc +111 -0
- package/presets/cursor/svelte/rules/feature-delivery-workflow.mdc +55 -0
- package/presets/cursor/svelte/rules/http-client.mdc +16 -0
- package/presets/cursor/svelte/rules/layer-barrel-exports.mdc +74 -0
- package/presets/cursor/svelte/rules/navigation-router-stack.mdc +40 -0
- package/presets/cursor/svelte/rules/navigation-router-ui.mdc +25 -0
- package/presets/cursor/svelte/rules/no-rest-props-spread.mdc +32 -0
- package/presets/cursor/svelte/rules/no-type-assertion-as-import-export.mdc +60 -0
- package/presets/cursor/svelte/rules/package-manager.mdc +18 -0
- package/presets/cursor/svelte/rules/playwright-agents.mdc +80 -0
- package/presets/cursor/svelte/rules/post-change-lint.mdc +42 -0
- package/presets/cursor/svelte/rules/preset-layering.mdc +37 -0
- package/presets/cursor/svelte/rules/preset-no-cross-stack-leakage.mdc +84 -0
- package/presets/cursor/svelte/rules/preset-pr-checklist.mdc +40 -0
- package/presets/cursor/svelte/rules/preset-token-budget.mdc +42 -0
- package/presets/cursor/svelte/rules/preset-twin-sync.mdc +55 -0
- package/presets/cursor/svelte/rules/public-imports.mdc +45 -0
- package/presets/cursor/svelte/rules/reference-features.mdc +51 -0
- package/presets/cursor/svelte/rules/security-sveltekit.mdc +38 -0
- package/presets/cursor/svelte/rules/store-svelte.mdc +66 -0
- package/presets/cursor/svelte/rules/svelte-a11y-coding.mdc +27 -0
- package/presets/cursor/svelte/rules/svelte-app-core.mdc +45 -0
- package/presets/cursor/svelte/rules/svelte-script-conventions.mdc +33 -0
- package/presets/cursor/svelte/rules/svelte-sveltekit-anti-hallucination.mdc +69 -0
- package/presets/cursor/svelte/rules/svelte-ui.mdc +37 -0
- package/presets/cursor/svelte/rules/sveltekit-routing.mdc +39 -0
- package/presets/cursor/svelte/rules/technical-retro.mdc +16 -0
- package/presets/cursor/svelte/rules/tests-e2e-structure.mdc +51 -0
- package/presets/cursor/svelte/rules/tests-unit.mdc +42 -0
- package/presets/cursor/svelte/rules/types-jsdoc.mdc +42 -0
- package/presets/cursor/svelte/skills/README.md +17 -0
- package/presets/cursor/svelte/skills/ci-investigation/SKILL.md +36 -0
- package/presets/cursor/svelte/skills/code-review/SKILL.md +38 -0
- package/presets/cursor/svelte/skills/debug-investigation/SKILL.md +32 -0
- package/presets/cursor/svelte/skills/feature-delivery/SKILL.md +34 -0
- package/presets/cursor/svelte/skills/playwright-e2e/SKILL.md +37 -0
- package/presets/cursor/svelte/skills/svelte-performance/SKILL.md +52 -0
- package/presets/cursor/svelte/skills/technical-retro/SKILL.md +54 -0
- package/presets/cursor/svelte/skills/unit-testing/SKILL.md +32 -0
- package/presets/cursor/svelte/skills/write-adr/SKILL.md +41 -0
- package/presets/cursor/svelte/team/README.md +140 -0
- package/presets/cursor/svelte/team/conventions.md +21 -0
- package/presets/cursor/svelte/team/fixtures/artifact-manifest.example.json +61 -0
- package/presets/cursor/svelte/team/fixtures/bugfix-standard.json +25 -0
- package/presets/cursor/svelte/team/fixtures/feature-full.json +28 -0
- package/presets/cursor/svelte/team/fixtures/feature-light.json +27 -0
- package/presets/cursor/svelte/team/fixtures/metrics-scenarios/tasks/human-gate/metrics.json +69 -0
- package/presets/cursor/svelte/team/fixtures/metrics-scenarios/tasks/missing-ledger/status.json +5 -0
- package/presets/cursor/svelte/team/fixtures/metrics-scenarios/tasks/parallel-receipts/metrics.json +79 -0
- package/presets/cursor/svelte/team/fixtures/metrics-scenarios/tasks/serial-retry/metrics.json +124 -0
- package/presets/cursor/svelte/team/fixtures/metrics-scenarios/tasks/validation-failed/metrics.json +124 -0
- package/presets/cursor/svelte/team/fixtures/metrics.example.json +54 -0
- package/presets/cursor/svelte/team/tasks/.gitkeep +0 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Hooks cookbook (examples)
|
|
2
|
+
|
|
3
|
+
Optional scripts under `hooks/examples/`. **Not** referenced from default `hooks.json` (only `guard-shell-command.sh` + `chain-team-phases.sh`).
|
|
4
|
+
|
|
5
|
+
| Script | Purpose |
|
|
6
|
+
|--------|---------|
|
|
7
|
+
| `secret-guard.example.sh` | Fail if staged diff looks like secrets |
|
|
8
|
+
| `format-edited.example.sh` | Stack formatter / linter on edited files |
|
|
9
|
+
| `test-on-save.example.sh` | Scoped tests for the stack |
|
|
10
|
+
|
|
11
|
+
## Wiring (Cursor)
|
|
12
|
+
|
|
13
|
+
1. Copy an example into `hooks/` (drop `.example` suffix), e.g. `cp hooks/examples/secret-guard.example.sh hooks/secret-guard.sh`.
|
|
14
|
+
2. `chmod +x hooks/secret-guard.sh`.
|
|
15
|
+
3. Add a hook entry in `.cursor/hooks.json` (e.g. `beforeShellExecution` or `afterFileEdit` — see Cursor hooks docs).
|
|
16
|
+
4. Keep cookbook scripts **out** of the default preset `hooks.json` when contributing back upstream.
|
|
17
|
+
|
|
18
|
+
Stack: **nuxt** — recipes must stay stack-safe (no cross-stack lint/test commands).
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Optional: format/lint edited JS/TS under app/ after save.
|
|
3
|
+
# NOT in default hooks.json. Requires yarn scripts in app/.
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
ROOT="${CURSOR_PROJECT_DIR:-.}"
|
|
6
|
+
cd "$ROOT/app" 2>/dev/null || cd "$ROOT"
|
|
7
|
+
# Prefer project scripts; adjust names to match package.json
|
|
8
|
+
if command -v yarn >/dev/null 2>&1; then
|
|
9
|
+
yarn lint:js --fix 2>/dev/null || yarn eslint --fix . 2>/dev/null || true
|
|
10
|
+
fi
|
|
11
|
+
exit 0
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Optional cookbook: block committing likely secrets in staged diffs.
|
|
3
|
+
# NOT wired in default hooks.json — copy to hooks/ and register manually.
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
PATTERN='(AKIA[0-9A-Z]{16}|-----BEGIN (RSA |OPENSSH )?PRIVATE KEY-----|api[_-]?key\s*[:=]\s*['\''\"][^'\''\"]{12,})'
|
|
6
|
+
if git diff --cached -U0 2>/dev/null | grep -Eiq "$PATTERN"; then
|
|
7
|
+
echo "secret-guard: possible secret in staged diff — review before commit" >&2
|
|
8
|
+
exit 1
|
|
9
|
+
fi
|
|
10
|
+
exit 0
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Optional: scoped unit tests for changed files under app/src.
|
|
3
|
+
# NOT in default hooks.json. No Playwright here.
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
ROOT="${CURSOR_PROJECT_DIR:-.}"
|
|
6
|
+
cd "$ROOT/app" 2>/dev/null || exit 0
|
|
7
|
+
yarn test --findRelatedTests --passWithNoTests 2>/dev/null || yarn test --passWithNoTests 2>/dev/null || true
|
|
8
|
+
exit 0
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Lightweight shell guard for Claude projects using this preset.
|
|
3
|
+
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
input=$(cat)
|
|
7
|
+
|
|
8
|
+
INPUT="$input" node <<'NODE'
|
|
9
|
+
const fs = require('fs');
|
|
10
|
+
|
|
11
|
+
const raw = process.env.INPUT || '';
|
|
12
|
+
let event;
|
|
13
|
+
try {
|
|
14
|
+
event = JSON.parse(raw);
|
|
15
|
+
} catch {
|
|
16
|
+
process.stdout.write('{ "permission": "allow" }');
|
|
17
|
+
process.exit(0);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const command = String(event.command || event.input?.command || '');
|
|
21
|
+
if (!command.trim()) {
|
|
22
|
+
process.stdout.write('{ "permission": "allow" }');
|
|
23
|
+
process.exit(0);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function out(permission, userMessage, agentMessage) {
|
|
27
|
+
process.stdout.write(JSON.stringify({
|
|
28
|
+
permission,
|
|
29
|
+
user_message: userMessage,
|
|
30
|
+
agent_message: agentMessage || userMessage,
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const dangerousGit = /\bgit\s+(reset\s+--hard|clean\s+-[^\n]*f|push\s+--force|push\s+-f|checkout\s+--\s+)/;
|
|
35
|
+
if (dangerousGit.test(command)) {
|
|
36
|
+
out(
|
|
37
|
+
'ask',
|
|
38
|
+
'This command looks destructive for git state. Review it before continuing.',
|
|
39
|
+
'A project hook flagged a destructive git command. Ask the user before running it.',
|
|
40
|
+
);
|
|
41
|
+
process.exit(0);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const managerByFile = [
|
|
45
|
+
['yarn.lock', 'yarn'],
|
|
46
|
+
['pnpm-lock.yaml', 'pnpm'],
|
|
47
|
+
['package-lock.json', 'npm'],
|
|
48
|
+
].find(([file]) => fs.existsSync(file));
|
|
49
|
+
|
|
50
|
+
let expected = managerByFile?.[1];
|
|
51
|
+
if (!expected && fs.existsSync('package.json')) {
|
|
52
|
+
try {
|
|
53
|
+
const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8'));
|
|
54
|
+
const pm = typeof pkg.packageManager === 'string' ? pkg.packageManager : '';
|
|
55
|
+
expected = pm.split('@')[0] || undefined;
|
|
56
|
+
} catch {
|
|
57
|
+
// Ignore invalid package.json in the hook; the agent can diagnose it later.
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (!expected) {
|
|
62
|
+
process.stdout.write('{ "permission": "allow" }');
|
|
63
|
+
process.exit(0);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const used = command.match(/(^|[;&|]\s*)(npm|yarn|pnpm)\s+/)?.[2];
|
|
67
|
+
if (used && used !== expected) {
|
|
68
|
+
out(
|
|
69
|
+
'ask',
|
|
70
|
+
`This repository appears to use ${expected}, but the command uses ${used}. Confirm before continuing.`,
|
|
71
|
+
`Use ${expected} for package scripts and installs unless the user explicitly approves ${used}.`,
|
|
72
|
+
);
|
|
73
|
+
process.exit(0);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
process.stdout.write('{ "permission": "allow" }');
|
|
77
|
+
NODE
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mcpServers": {
|
|
3
|
+
"context7": {
|
|
4
|
+
"command": "npx",
|
|
5
|
+
"args": ["-y", "@upstash/context7-mcp"]
|
|
6
|
+
},
|
|
7
|
+
"playwright-test": {
|
|
8
|
+
"command": "npx",
|
|
9
|
+
"args": ["-y", "@playwright/mcp@latest"]
|
|
10
|
+
},
|
|
11
|
+
"chrome-devtools": {
|
|
12
|
+
"command": "npx",
|
|
13
|
+
"args": ["-y", "chrome-devtools-mcp@latest"]
|
|
14
|
+
},
|
|
15
|
+
"figma": {
|
|
16
|
+
"type": "http",
|
|
17
|
+
"url": "https://mcp.figma.com/mcp"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# `.claude/rules` (preset nuxt)
|
|
2
|
+
|
|
3
|
+
В Claude Code все `.md` под `rules/` **обнаруживаются рекурсивно**. Тела **derived** из Cursor SoT; индексы — не второй SoT.
|
|
4
|
+
|
|
5
|
+
## SoT sync
|
|
6
|
+
|
|
7
|
+
| Principle | Detail |
|
|
8
|
+
|-----------|--------|
|
|
9
|
+
| **SoT** | `presets/cursor/nuxt/rules/*.mdc` — edit here first |
|
|
10
|
+
| **Derive** | Claude topic `.md` = body + `paths:` (from Cursor `globs:` / requestable triggers) |
|
|
11
|
+
| **Drop** | Cursor-only keys (`alwaysApply`); keep short `description` |
|
|
12
|
+
| **Checklist** | change Cursor → update Claude twin **same PR** (**FAIL** if missing — includes `nuxt`; see `preset-twin-sync` / build-verifier) |
|
|
13
|
+
| **Shared core** | `presets/_shared/core/**` — see `<!-- shared-core: … -->` markers; taxonomy in `_shared/README.md` |
|
|
14
|
+
|
|
15
|
+
## Loading strategy
|
|
16
|
+
|
|
17
|
+
- **Session start (no `paths:`):** ровно **3** — `nuxt-app-core`, `package-manager`, `code-quality`
|
|
18
|
+
- **On-demand (`paths:` or via commands):** `post-change-lint`, `security-nuxt`, architecture, UI, tests, `vue-nuxt-anti-hallucination`, **preset-*** meta, …
|
|
19
|
+
- **Skills:** `feature-delivery`, `vue-performance`, `code-review`, …
|
|
20
|
+
|
|
21
|
+
## Cursor → Claude mapping
|
|
22
|
+
|
|
23
|
+
| Cursor `.mdc` (SoT) | Claude topic |
|
|
24
|
+
|---------------------|--------------|
|
|
25
|
+
| `nuxt-app-core.mdc` | `stack/nuxt-app-core.md` |
|
|
26
|
+
| `package-manager.mdc` | `tooling-and-review/package-manager.md` |
|
|
27
|
+
| `code-quality-and-refactoring.mdc` | `tooling-and-review/code-quality.md` |
|
|
28
|
+
| `anti-sycophancy-discipline.mdc` | `tooling-and-review/anti-sycophancy-discipline.md` |
|
|
29
|
+
| `vue-nuxt-anti-hallucination.mdc` | `anti-hallucination/vue-nuxt-anti-hallucination.md` |
|
|
30
|
+
| `design-guidance.mdc` | `tooling-and-review/design-guidance.md` |
|
|
31
|
+
| `nuxt-pages-routing.mdc` | `stack/nuxt-pages-routing.md` |
|
|
32
|
+
| `script-setup-conventions.mdc` | `stack/script-setup-conventions.md` |
|
|
33
|
+
| `types-jsdoc.mdc` | `stack/types-jsdoc.md` |
|
|
34
|
+
| `no-type-assertion-as-import-export.mdc` | `stack/no-type-assertion.md` |
|
|
35
|
+
| `navigation-router-stack.mdc` | `stack/navigation-router.md` |
|
|
36
|
+
| `navigation-router-ui.mdc` | `stack/navigation-router-ui.md` |
|
|
37
|
+
| `architecture-boundaries.mdc` | `architecture/architecture-boundaries.md` |
|
|
38
|
+
| `architecture-boundaries-ui.mdc` | `architecture/architecture-boundaries-ui.md` |
|
|
39
|
+
| `feature-delivery-workflow.mdc` | `architecture/feature-delivery-workflow.md` |
|
|
40
|
+
| `reference-features.mdc` | `architecture/reference-features.md` |
|
|
41
|
+
| `public-imports.mdc` | `architecture/public-imports.md` |
|
|
42
|
+
| `layer-barrel-exports.mdc` | `architecture/layer-barrel-exports.md` |
|
|
43
|
+
| `api-services.mdc` | `api-and-data/api-services.md` |
|
|
44
|
+
| `http-client.mdc` | `api-and-data/http-client.md` |
|
|
45
|
+
| `store-pinia.mdc` | `api-and-data/store-pinia.md` |
|
|
46
|
+
| `vue-ui.mdc` | `ui-and-accessibility/vue-ui.md` |
|
|
47
|
+
| `vue-a11y-coding.mdc` | `ui-and-accessibility/vue-a11y-coding.md` |
|
|
48
|
+
| `no-v-bind-spread.mdc` | `ui-and-accessibility/no-v-bind-spread.md` |
|
|
49
|
+
| `css-property-order-stylelint.mdc` | `ui-and-accessibility/css-property-order.md` |
|
|
50
|
+
| `tests-unit.mdc` | `testing/tests-unit.md` |
|
|
51
|
+
| `tests-e2e-structure.mdc` | `testing/tests-e2e-structure.md` |
|
|
52
|
+
| `playwright-agents.mdc` | `testing/playwright-agents.md` |
|
|
53
|
+
| `post-change-lint.mdc` | `tooling-and-review/post-change-lint.md` |
|
|
54
|
+
| `code-review-mr.mdc` | `tooling-and-review/code-review-mr.md` |
|
|
55
|
+
| `security-nuxt.mdc` | `tooling-and-review/security-nuxt.md` |
|
|
56
|
+
| `agent-team-intake.mdc` | `tooling-and-review/agent-team-intake.md` |
|
|
57
|
+
| `agent-team-orchestrator.mdc` | `tooling-and-review/agent-team-orchestrator.md` |
|
|
58
|
+
| `technical-retro.mdc` | `tooling-and-review/technical-retro.md` |
|
|
59
|
+
| `preset-layering.mdc` | `tooling-and-review/preset-layering.md` |
|
|
60
|
+
| `preset-twin-sync.mdc` | `tooling-and-review/preset-twin-sync.md` |
|
|
61
|
+
| `preset-token-budget.mdc` | `tooling-and-review/preset-token-budget.md` |
|
|
62
|
+
| `preset-pr-checklist.mdc` | `tooling-and-review/preset-pr-checklist.md` |
|
|
63
|
+
| `preset-no-cross-stack-leakage.mdc` | `tooling-and-review/preset-no-cross-stack-leakage.md` |
|
|
64
|
+
|
|
65
|
+
## Core → stack mapping
|
|
66
|
+
|
|
67
|
+
| Shared core | Cursor adapter | Notes |
|
|
68
|
+
|-------------|----------------|-------|
|
|
69
|
+
| `quality/code-quality-and-refactoring.md` | `code-quality-and-refactoring.mdc` / `code-quality.md` | + Stack notes (ESLint/Vue/CSS) |
|
|
70
|
+
| `quality/anti-sycophancy-discipline.md` | `anti-sycophancy-discipline.mdc` | requestable |
|
|
71
|
+
| `quality/design-guidance.md` | `design-guidance.mdc` | requestable |
|
|
72
|
+
| `agent-team/agent-team-orchestrator.md` | `agent-team-orchestrator.mdc` | Roles in Stack notes |
|
|
73
|
+
| `agent-team/agent-team-intake.md` | `agent-team-intake.mdc` | thin alias |
|
|
74
|
+
| `architecture/feature-delivery-workflow.md` | `feature-delivery-workflow.mdc` | Nuxt layer checklist |
|
|
75
|
+
| `architecture/reference-features.template.md` | `reference-features.mdc` | path table |
|
|
76
|
+
| `review/code-review-mr.md` | `code-review-mr.mdc` | Nuxt checklist refs |
|
|
77
|
+
| `review/technical-retro.md` | `technical-retro.mdc` | thin alias |
|
|
78
|
+
| `meta/preset-*.md` | `preset-*.mdc` | author globs only |
|
|
79
|
+
|
|
80
|
+
## Folders
|
|
81
|
+
|
|
82
|
+
| Папка | О чём |
|
|
83
|
+
|-------|--------|
|
|
84
|
+
| `stack/` | Nuxt core, pages routing, conventions |
|
|
85
|
+
| `architecture/` | Границы, feature-delivery, imports |
|
|
86
|
+
| `api-and-data/` | HTTP, services, Pinia |
|
|
87
|
+
| `anti-hallucination/` | Vue/Nuxt/Pinia banlists |
|
|
88
|
+
| `testing/` | Unit, e2e, Playwright |
|
|
89
|
+
| `ui-and-accessibility/` | Vue UI, a11y, props |
|
|
90
|
+
| `tooling-and-review/` | Quality, review, lint, agent-team, **preset meta** |
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Vue/Nuxt/Pinia anti-hallucination banlist — phantom imports, deprecated APIs, store phantoms
|
|
3
|
+
paths:
|
|
4
|
+
- "**/*.{vue,ts,js}"
|
|
5
|
+
- pages/**/*
|
|
6
|
+
- components/**/*
|
|
7
|
+
- composables/**/*
|
|
8
|
+
- stores/**/*
|
|
9
|
+
- server/**/*
|
|
10
|
+
---
|
|
11
|
+
# Vue / Nuxt / Pinia anti-hallucination
|
|
12
|
+
|
|
13
|
+
These rows **OVERRIDE** generation for the listed patterns. Before inventing an import, composable, or store helper: verify against `package.json` (installed majors), `nuxt.config.*`, and sibling files. If unsure, mark `// VERIFY: lib.symbol @ version` and surface the uncertainty — do not silently stub.
|
|
14
|
+
|
|
15
|
+
Routing-specific rows stay in **`nuxt-pages-routing`**. This rule covers broader Vue / Nuxt / Pinia phantoms across the app tree.
|
|
16
|
+
|
|
17
|
+
## 1. Phantom / wrong Nuxt imports
|
|
18
|
+
|
|
19
|
+
| ❌ Avoid | ✅ Prefer |
|
|
20
|
+
|---------|----------|
|
|
21
|
+
| `import { useRouter } from 'next/navigation'` / `next/router` | Nuxt auto-import `useRouter` / `useRoute` / `navigateTo` |
|
|
22
|
+
| `import Link from 'next/link'` / `<Link>` from Next | `<NuxtLink>` |
|
|
23
|
+
| `import Image from 'next/image'` | `<NuxtImg>` / project image helper (check `@nuxt/image`) |
|
|
24
|
+
| Invented: `nuxt/app/router`, `nuxt/server-only`, `nuxt/auth` | Real `#app` / `#imports` / documented Nuxt APIs for **installed** major |
|
|
25
|
+
| `defineNuxtConfig` options copied from blogs without checking major | Match installed Nuxt + existing `nuxt.config.*` |
|
|
26
|
+
| Pages Router Next APIs (`getServerSideProps`) in Nuxt | `useAsyncData` / `useFetch` / server routes / Pinia — mirror siblings |
|
|
27
|
+
|
|
28
|
+
## 2. SSR / client boundary
|
|
29
|
+
|
|
30
|
+
| ❌ Avoid | ✅ Prefer |
|
|
31
|
+
|---------|----------|
|
|
32
|
+
| Reading secrets via `useRuntimeConfig().apiSecret` in client-only UI blindly | Private keys under `runtimeConfig` (server); public under `runtimeConfig.public` |
|
|
33
|
+
| Using `window` / `document` in setup without client guards | `onMounted`, `import.meta.client`, `<ClientOnly>` |
|
|
34
|
+
| Pinia stores that assume browser storage during SSR without pattern | Persist plugins / cookie patterns already in repo; guard client APIs |
|
|
35
|
+
| Importing Node-only modules into universal SFC setup | Keep in `server/**` or server-only utils |
|
|
36
|
+
|
|
37
|
+
## 3. Vue patterns
|
|
38
|
+
|
|
39
|
+
| ❌ Avoid | ✅ Prefer |
|
|
40
|
+
|---------|----------|
|
|
41
|
+
| React hooks in Vue SFCs (`useState`/`useEffect` from `react`) | `ref` / `reactive` / `computed` / `watch` / lifecycle (`onMounted`, …) |
|
|
42
|
+
| `import { useEffectEvent } from 'vue'` (phantom) | Real Vue APIs for installed major; else local pattern + `VERIFY` |
|
|
43
|
+
| Options API churn in a `<script setup>` codebase | Follow neighbor SFCs (`script-setup-conventions`) |
|
|
44
|
+
| Phantom packages: `@vue/nonexistent`, invented `~/composables/useServerQuery` | Only lockfile packages + composables that exist |
|
|
45
|
+
|
|
46
|
+
## 4. Pinia phantoms
|
|
47
|
+
|
|
48
|
+
| ❌ Avoid | ✅ Prefer |
|
|
49
|
+
|---------|----------|
|
|
50
|
+
| RTK APIs: `createSlice`, `createAsyncThunk`, `useDispatch` | `defineStore` + actions (`store-pinia`) |
|
|
51
|
+
| Invented helpers: `definePiniaApi`, `store.injectEndpoints` | Documented Pinia + patterns from existing `stores/**` |
|
|
52
|
+
| Deep imports breaking public API: `~/stores/foo/internal` | Public store module / naming used by siblings |
|
|
53
|
+
| Storing raw transport DTOs in state | Domain models from `~/types` after mapper in `api/**` |
|
|
54
|
+
|
|
55
|
+
## 5. Navigation / data / fetch
|
|
56
|
+
|
|
57
|
+
| ❌ Avoid | ✅ Prefer |
|
|
58
|
+
|---------|----------|
|
|
59
|
+
| Raw `$fetch` / `fetch` from SFC bypassing `~/api` | Services via `~/api` / `@/api` (`api-services`, `http-client`) |
|
|
60
|
+
| Invented `useFetch` option names siblings never use | Copy from sibling; verify Nuxt data-fetching docs for installed major |
|
|
61
|
+
| Axios error shapes when the client is ofetch/`$fetch` | Transport errors from project types / ofetch patterns |
|
|
62
|
+
| Assuming `baseURL` without checking Nitro / runtimeConfig | Match `lib/clients` / existing client wrapper |
|
|
63
|
+
|
|
64
|
+
## 6. Version drift / auto-imports
|
|
65
|
+
|
|
66
|
+
| ❌ Avoid | ✅ Prefer |
|
|
67
|
+
|---------|----------|
|
|
68
|
+
| Bleeding-edge Nuxt/Vue APIs without checking `package.json` | Confirm majors; copy a compiling sibling |
|
|
69
|
+
| Inventing `#imports` symbols that are not generated | Check `.nuxt/imports` / docs; explicit import if missing |
|
|
70
|
+
| Mixing Vue 2 Options-only APIs into Vue 3 Nuxt 3 apps | Vue 3 idioms used in repo |
|
|
71
|
+
|
|
72
|
+
When a row conflicts with a verified sibling pattern in this repo, **the sibling wins** — update this banlist in a preset PR rather than inventing a third path.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# API and data
|
|
2
|
+
|
|
3
|
+
HTTP-транспорт, сервисы, Pinia store.
|
|
4
|
+
|
|
5
|
+
| Файл | Содержание | `paths:` |
|
|
6
|
+
|------|------------|----------|
|
|
7
|
+
| `http-client.md` | Единый HTTP-клиент, ошибки, связь со store | `lib/clients/**`, `api/clients/**` |
|
|
8
|
+
| `api-services.md` | Сервисы, мапперы, DTO → домен | `api/services/**` |
|
|
9
|
+
| `store-pinia.md` | Pinia, actions, типизация | `stores/**` |
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Конвенции API сервисов и мапперов
|
|
3
|
+
paths: api/services/**/*.ts
|
|
4
|
+
---
|
|
5
|
+
# Роль API слоя
|
|
6
|
+
|
|
7
|
+
- Инкапсулировать всё, что связано с:
|
|
8
|
+
- HTTP‑запросами через **экземпляры прикладных API‑клиентов** в `api/clients/**`, собранные на **общей реализации** из `lib/clients/**` (как в существующем коде); подробности — **`http-client.mdc`**; положение слоя в схеме **порты и адаптеры** — `architecture-boundaries.mdc`;
|
|
9
|
+
- URL/путями,
|
|
10
|
+
- заголовками и кодами ответов,
|
|
11
|
+
- DTO backend.
|
|
12
|
+
- Предоставлять UI и store **стабильный доменный интерфейс**:
|
|
13
|
+
- функции, работающие с доменными типами из `@/types` (`public-imports.mdc`).
|
|
14
|
+
- мапперы между DTO и доменными типами.
|
|
15
|
+
|
|
16
|
+
# Структура модулей
|
|
17
|
+
|
|
18
|
+
- Для каждой доменной области (например, заказы, биллинг, настройки аккаунта):
|
|
19
|
+
- отдельный каталог в `api/services/<ИмяСервиса или фичи>/**` по конвенции репозитория.
|
|
20
|
+
- Внутри модуля:
|
|
21
|
+
- файлы с вызовами API (`index.ts` или `*.service.ts`);
|
|
22
|
+
- файлы мапперов (`*responseMappers.ts`);
|
|
23
|
+
- специфичные типы запросов/ответов (если не вынесены в `types/**` с экспортом через barrel `@/types`).
|
|
24
|
+
- при необходимости — локальные `index.ts` / barrel внутри модуля для структуры **внутри** `api/**`; **снаружи** этого слоя UI, store и остальной код импортируют только из корневого barrel `api/index.ts` (`import … from '@/api'`, **`public-imports.mdc`**).
|
|
25
|
+
|
|
26
|
+
# Мапперы и типы
|
|
27
|
+
|
|
28
|
+
- Для каждого запроса/эндпоинта:
|
|
29
|
+
- описывать **response‑тип (DTO)**, точно соответствующий контракту backend;
|
|
30
|
+
- определять **целевой доменный тип** в `types/**`, с которым будет работать приложение (включая вычисляемые/агрегированные поля).
|
|
31
|
+
- Мапперы (например, `*responseMappers.ts`):
|
|
32
|
+
- чистые функции, без сайд‑эффектов;
|
|
33
|
+
- выполняют все необходимые вычисления и преобразования данных (булевы флаги, склейка строк, агрегаты и т.п.) при переводе из DTO в доменные модели;
|
|
34
|
+
- при необходимости обеспечивают обратное преобразование (доменные модели -> транспортные типы).
|
|
35
|
+
- UI и store работают только с доменными типами (из `@/types` или экспортируемыми из public API слоя API), а не с "сырыми" DTO.
|
|
36
|
+
- **Не вызывать `fetch` напрямую** в теле API‑методов: только через клиент; исключения — узкие модули (например JSON‑RPC), если так уже устроено в репозитории.
|
|
37
|
+
|
|
38
|
+
# Обработка ошибок
|
|
39
|
+
|
|
40
|
+
- API‑слой:
|
|
41
|
+
- не должен "глотать" ошибки без следа;
|
|
42
|
+
- либо бросает доменные/унифицированные ошибки;
|
|
43
|
+
- либо возвращает результат в `Result<T, E>`‑подобной форме (если такой паттерн принят в проекте).
|
|
44
|
+
- Интеграция с APM/трассировкой (если есть в проекте):
|
|
45
|
+
- централизованно (HTTP‑клиент, обёртки), а не в каждом методе сервиса.
|
|
46
|
+
|
|
47
|
+
# Требование к агенту
|
|
48
|
+
|
|
49
|
+
При добавлении/изменении API‑метода:
|
|
50
|
+
- Следовать существующим сервисам и мапперам как эталону.
|
|
51
|
+
- Пройти чеклист barrel-экспортов (**`layer-barrel-exports.mdc`**): локальный `index.ts` → фасад слоя → корневой barrel.
|
|
52
|
+
- Не смешивать слой API и UI/store:
|
|
53
|
+
- компоненты не должны зависеть от DTO;
|
|
54
|
+
- store не должен сам собирать URL/коды эндпоинтов и не обходить сервисы; **транспортный тип ответа** и **контракт ошибки** из `@/types` (как у прикладного клиента) допустимы в **Pinia actions** при разборе `catch`/payload, если так выстроен сервис (см. `store-pinia.mdc`, `http-client.mdc`).
|
|
55
|
+
- При использовании API‑сервисов в UI, store и утилитах **вне** `api/**` импортировать **только** из `@/api` (корневой barrel), см. **`public-imports.mdc`**; внутри слоя API — по относительным путям или `@/api/services/**` / `@/api/clients/**`, не дублируя публичный контракт мимо корневого barrel для внешних потребителей.
|
|
56
|
+
## Incorrect
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
// Returning raw DTO to store/UI without mapping
|
|
60
|
+
export const getCard = async (id: string) => {
|
|
61
|
+
const { data } = await cardsClient.get(`/cards/${id}`)
|
|
62
|
+
return data // backend DTO leaked upward
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Correct
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
import type { TCard } from '@/types'
|
|
70
|
+
import { mapCardResponse } from './cardResponseMappers'
|
|
71
|
+
|
|
72
|
+
export const getCard = async (id: string): Promise<TCard> => {
|
|
73
|
+
const { data } = await cardsClient.get(`/cards/${id}`)
|
|
74
|
+
return mapCardResponse(data)
|
|
75
|
+
}
|
|
76
|
+
```
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: HTTP client wrapper for Nuxt — $fetch/ofetch, one stack, error contracts
|
|
3
|
+
paths:
|
|
4
|
+
- lib/clients/**/*.ts
|
|
5
|
+
- api/clients/**/*.ts
|
|
6
|
+
- api/**/*.ts
|
|
7
|
+
---
|
|
8
|
+
# HTTP client
|
|
9
|
+
|
|
10
|
+
- One HTTP stack for the app: wrap **`$fetch` / ofetch** (or the client already used in `lib/clients/**`).
|
|
11
|
+
- Do not mix ad-hoc `fetch`/`axios` in features if a shared client exists.
|
|
12
|
+
- Services in `api/**` call the wrapper — UI/stores do not own transport.
|
|
13
|
+
- Map responses to domain models in services/mappers before Pinia.
|
|
14
|
+
- Errors: use project transport error types from `~/types` / `@/types`; narrow with `instanceof` when available.
|
|
15
|
+
- Base URL / auth headers: from `runtimeConfig` / existing client factories — do not hardcode secrets.
|
|
16
|
+
- Calling Nitro `/api/*` from the client is fine when that is the BFF pattern — still through services.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Pinia stores и клиентское состояние приложения (Nuxt)
|
|
3
|
+
paths:
|
|
4
|
+
- stores/**/*.ts
|
|
5
|
+
- stores/**/*.js
|
|
6
|
+
---
|
|
7
|
+
# Общие принципы
|
|
8
|
+
|
|
9
|
+
- Использовать **Pinia** (`defineStore`) — setup или options store, как у соседей в репо.
|
|
10
|
+
- Модуль: `@pinia/nuxt` (или установленный эквивалент) — проверить `package.json` / `nuxt.config`.
|
|
11
|
+
- В store хранить **доменные модели**, не сырые DTO из API.
|
|
12
|
+
- Маппинг DTO → domain — в `api/**` (или server mappers) **до** записи в store.
|
|
13
|
+
- Разделять серверное состояние (данные API) и локальное UI‑состояние (фильтры/флаги) — UI-only можно в composable/`ref` страницы, если так принято в репо.
|
|
14
|
+
|
|
15
|
+
# Запрещено в этом пресете
|
|
16
|
+
|
|
17
|
+
- RTK / Redux: `createSlice`, `createAsyncThunk`, RTK Query, `useDispatch` / `useSelector`, stem `store-rtk`.
|
|
18
|
+
- Сырой `$fetch` / `fetch` из store в обход `~/api` / `@/api` сервисов (кроме узких documented исключений репо).
|
|
19
|
+
|
|
20
|
+
# Структура
|
|
21
|
+
|
|
22
|
+
- Один доменный модуль — свой файл в `stores/**` (например `stores/profile.ts`).
|
|
23
|
+
- Экспорт: `useXStore` через `defineStore('x', …)`.
|
|
24
|
+
- State: явный тип; аккуратная инициализация.
|
|
25
|
+
- Getters — производные от domain state; actions вызывают сервисы из `~/api` / `@/api` (`public-imports`).
|
|
26
|
+
|
|
27
|
+
# Асинхронность
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
// Incorrect — raw HTTP + DTO in state
|
|
31
|
+
export const useProfileStore = defineStore('profile', {
|
|
32
|
+
actions: {
|
|
33
|
+
async load() {
|
|
34
|
+
this.profile = await $fetch('/api/profile')
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
// Correct
|
|
40
|
+
import { profileApi } from '~/api'
|
|
41
|
+
|
|
42
|
+
export const useProfileStore = defineStore('profile', {
|
|
43
|
+
state: (): { profile: Profile | null } => ({ profile: null }),
|
|
44
|
+
actions: {
|
|
45
|
+
async load() {
|
|
46
|
+
this.profile = await profileApi.getProfile()
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
})
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
# Типизация и ошибки
|
|
53
|
+
|
|
54
|
+
- Доменные типы из `~/types` / `@/types`.
|
|
55
|
+
- Ошибки транспорта — контракты из `@/types` / принятый класс ошибки клиента (`http-client`), не выдуманные axios shapes.
|
|
56
|
+
- В UI: `storeToRefs` для state; actions вызывать напрямую с store.
|
|
57
|
+
|
|
58
|
+
# Тестирование
|
|
59
|
+
|
|
60
|
+
- Покрывать важные stores (инициализация, переходы, actions с моком API).
|
|
61
|
+
- Unit: Vitest; мокать `~/api` сервисы.
|
|
62
|
+
|
|
63
|
+
# Требование к агенту
|
|
64
|
+
|
|
65
|
+
- Не класть HTTP/transport в компоненты.
|
|
66
|
+
- Строго типизировать state/actions.
|
|
67
|
+
- Следовать стилю соседних stores.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Architecture rules
|
|
2
|
+
|
|
3
|
+
| Файл | Назначение |
|
|
4
|
+
|------|------------|
|
|
5
|
+
| `public-imports.md` | Импорты `@/types`, `@/types/enums`, `@/api` (вне `api/**`) |
|
|
6
|
+
| `architecture-boundaries-ui.md` | Slim границы UI при правках компонентов |
|
|
7
|
+
| `architecture-boundaries.md` | Полная карта UI / store / API (api, store, types, lib) |
|
|
8
|
+
| `layer-barrel-exports.md` | Двухуровневые barrel для слоёв с public API |
|
|
9
|
+
| `feature-delivery-workflow.md` | Сквозной чеклист новой фичи |
|
|
10
|
+
| `reference-features.md` | Эталонные пути UI/store/API/types |
|
|
11
|
+
|
|
12
|
+
Deprecated stubs `types-public-imports.md` / `api-public-imports.md` **removed** — use `public-imports.md`.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Границы слоя UI — slim rule для правок компонентов (без полной карты store/API)
|
|
3
|
+
paths:
|
|
4
|
+
- components/**/*.vue
|
|
5
|
+
- components/**/*.ts
|
|
6
|
+
---
|
|
7
|
+
# UI layer boundaries (slim)
|
|
8
|
+
|
|
9
|
+
- **Импорты:** `components/**`, `composables/**`, `stores/**` (public), типы из `~/types` / `@/types`, API — только `from '~/api'` / `from '@/api'` (`public-imports`).
|
|
10
|
+
- **Запрещено:** прямой HTTP‑клиент (`$fetch` / ofetch вне `lib/clients`); знание DTO — только доменные типы.
|
|
11
|
+
- **Состояние:** сценарии с записью и координация шагов — через Pinia actions (`store-pinia`); узкие прямые вызовы `~/api` для чтения — только как в соседних фичах.
|
|
12
|
+
- **Организация:** алиасы `~/` / `@/`; без deep‑импортов в чужие фичи; только public API.
|
|
13
|
+
- **Barrel:** при новых публичных символах — реэкспорт по `layer-barrel-exports` (правило грузится на `index.ts`).
|
|
14
|
+
|
|
15
|
+
Полная карта слоёв (store, API, порты‑адаптеры): **`architecture-boundaries`** — при правках `api`, `stores`, `types`, `lib`.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Архитектурные границы и правила импортов
|
|
3
|
+
paths:
|
|
4
|
+
- api/**/*
|
|
5
|
+
- stores/**/*
|
|
6
|
+
- types/**/*
|
|
7
|
+
- lib/**/*
|
|
8
|
+
---
|
|
9
|
+
# Границы между слоями
|
|
10
|
+
|
|
11
|
+
- **UI (`pages/**`, `components/**`, `layouts/**`)**:
|
|
12
|
+
- Может импортировать: `components/**`, `composables/**`, `stores/**` (public), типы из `~/types` / `@/types` и enum из `~/types/enums` / `@/types/enums` (**только как в `public-imports.mdc`**), контракт к API — **только** `import … from '~/api'` / `from '@/api'` (**`public-imports.mdc`**).
|
|
13
|
+
- Не должен:
|
|
14
|
+
- обращаться к HTTP‑клиенту напрямую (`$fetch` / ofetch вне `lib/clients`);
|
|
15
|
+
- знать детали DTO backend — только доменные типы.
|
|
16
|
+
- **Store (`stores/**`)** — Pinia `defineStore` only (`store-pinia.mdc`):
|
|
17
|
+
- Может импортировать: другие `stores/**` (public), сервисы и публичные сущности API — **только** из `~/api` / `@/api` (**`public-imports.mdc`**), типы из `~/types` / `@/types` и enum из `~/types/enums` / `@/types/enums` (**`public-imports.mdc`**).
|
|
18
|
+
- Не должен:
|
|
19
|
+
- зависеть от конкретных UI‑компонентов / страниц;
|
|
20
|
+
- напрямую работать с global/window API.
|
|
21
|
+
- Вызовы к backend — только через сервисы, импортируемые из `~/api` / `@/api`; **транспортные** типы ответа и ошибки (из `@/types`, в том же виде, что у прикладного HTTP‑клиента) в **Pinia actions** допустимы, если так выстроен API‑слой (`http-client.mdc`, `store-pinia.mdc`).
|
|
22
|
+
- **API (`api/**`)** — реализация в `services/**`, `clients/**`, реэкспорт в `api/index.ts`:
|
|
23
|
+
- Внутри слоя: типы из `@/types` и enum из `@/types/enums` (**`public-imports.mdc`**); импорты `@/api/services/**`, `@/api/clients/**`, относительные пути между файлами слоя (`http-client.mdc`, `api-services.mdc`).
|
|
24
|
+
- Не должен:
|
|
25
|
+
- тянуть в себя UI или store;
|
|
26
|
+
- смешивать HTTP‑слой и доменный слой — использовать мапперы.
|
|
27
|
+
|
|
28
|
+
## UI и обращение к API (`~/api` / `@/api`)
|
|
29
|
+
|
|
30
|
+
- По умолчанию сценарии с **изменением серверного состояния** и координация нескольких шагов — через **Pinia actions** (`defineStore`, паттерн фичи в репозитории).
|
|
31
|
+
- Прямой вызов методов сервисов, импортированных из **`~/api` / `@/api`**, из UI допустим только в **узких случаях**: преимущественно **чтение** или действие **без необходимости держать результат в Pinia**; те же **доменные типы**, что использовала бы store action; **не** дублировать уже существующий сценарий из store и **не** протаскивать DTO в компоненты.
|
|
32
|
+
- Предпочтительно оформлять такие вызовы так же, как в **соседних фичах** репозитория (composable‑фасад, `use*` и т.д.).
|
|
33
|
+
|
|
34
|
+
## Порты и адаптеры (краткая карта)
|
|
35
|
+
|
|
36
|
+
- **Входящий адаптер**: UI — ввод пользователя, отображение; зависит от store и доменных типов, не от транспорта.
|
|
37
|
+
- **Оркестрация сценариев**: store (Pinia actions) — вызывает сервисы, кладёт в state **доменные** модели после маппинга.
|
|
38
|
+
- **Исходящий порт (контракт к backend)**: публичный API **`~/api` / `@/api`** (barrel `api/index.ts`; реализация — в `api/services/**` и т.д., см. `public-imports.mdc`).
|
|
39
|
+
- **Исходящий адаптер**: общая реализация HTTP в **`lib/clients/**`** и экземпляры в **`api/clients/**`** (обёртка `$fetch` / ofetch).
|
|
40
|
+
|
|
41
|
+
## Фича как срез
|
|
42
|
+
|
|
43
|
+
- Для сложной фичи выравниваются имена и термины (**единый язык** предметной области) в типах, getters/actions, сервисах и UI; структура папок — как в соседних фичах репозитория.
|
|
44
|
+
|
|
45
|
+
# Правила импортов
|
|
46
|
+
|
|
47
|
+
- Всегда использовать алиас `~/` или `@/` для импортов между слоями (как принято в репо); уважать `#imports`.
|
|
48
|
+
- Внутри одного модуля/фичи можно использовать относительные импорты, но **без подъёма выше корня фичи** (избегать `../../../`).
|
|
49
|
+
- При обращении из компонентов, composables, утилит и других модулей к чужому слою или фиче использовать только **public API** (barrel/index‑файлы и явно экспортируемые сущности), не делать deep‑импорты внутренних файлов других фич; для регламентированных слоёв — **`layer-barrel-exports.mdc`** и `public-imports.mdc`; для API‑слоя снаружи `api/**` — **`public-imports.mdc`** (только `~/api` / `@/api`).
|
|
50
|
+
- При добавлении нового кода проверять:
|
|
51
|
+
- если модуль переиспользуемый — он должен зависеть только от более "низких" слоёв (types, utils, api), но не от страниц.
|
|
52
|
+
|
|
53
|
+
# Организация фич
|
|
54
|
+
|
|
55
|
+
- Для сложных фич (например, `OrderCheckout`):
|
|
56
|
+
- Страница / route: `pages/**` и/или `components/pages/OrderCheckoutPage/**`.
|
|
57
|
+
- Локальные компоненты: поддиректории `components/**` внутри страницы.
|
|
58
|
+
- Связанный store: `stores/orderCheckout.ts` (или схема соседних Pinia‑модулей в репо).
|
|
59
|
+
- API: `api/services/OrdersApi/OrderCheckout/**` (имя корневого сервиса взять из принятой в проекте схемы).
|
|
60
|
+
- Типы: `types/**` с экспортом через barrel **`types/index.ts`** (`public-imports.mdc`).
|
|
61
|
+
|
|
62
|
+
# Требование к агенту
|
|
63
|
+
|
|
64
|
+
При добавлении новой функциональности:
|
|
65
|
+
- Разместить файлы в **соответствующих слоях**.
|
|
66
|
+
- Проверить существующие фичи с аналогичной структурой и **повторить их организацию**.
|
|
67
|
+
- Не "коротить" слои (например, не вызывать API прямо из компонента только ради упрощения).
|
|
68
|
+
- **Запрещено:** RTK / Redux (`createSlice`, `createAsyncThunk`, `useDispatch`, `stores/slices/**` как канон).
|
|
69
|
+
|
|
70
|
+
## Incorrect
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
// UI calling HTTP client / deep service path directly
|
|
74
|
+
import { httpClient } from '@/lib/clients/HttpClient'
|
|
75
|
+
import { fetchOrders } from '@/api/services/OrdersApi/orders.service'
|
|
76
|
+
|
|
77
|
+
export const loadOrdersInPage = async () => {
|
|
78
|
+
// bypasses store and @/api barrel
|
|
79
|
+
await httpClient.get('/orders')
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Correct
|
|
84
|
+
|
|
85
|
+
```vue
|
|
86
|
+
<script setup lang="ts">
|
|
87
|
+
import { storeToRefs } from 'pinia'
|
|
88
|
+
import { useOrdersStore } from '~/stores/orders'
|
|
89
|
+
|
|
90
|
+
const ordersStore = useOrdersStore()
|
|
91
|
+
const { orders } = storeToRefs(ordersStore)
|
|
92
|
+
|
|
93
|
+
// UI → Pinia action → services from ~/api
|
|
94
|
+
onMounted(() => {
|
|
95
|
+
void ordersStore.loadOrders()
|
|
96
|
+
})
|
|
97
|
+
</script>
|
|
98
|
+
```
|