@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
|
@@ -25,16 +25,12 @@ You generate unit tests from project test plans.
|
|
|
25
25
|
|
|
26
26
|
Run affected unit tests from `app/` when feasible. Report files changed, commands run, failures, and gaps.
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
"state": "completed",
|
|
35
|
-
"updatedAt": "<ISO8601>"
|
|
36
|
-
}
|
|
37
|
-
```
|
|
28
|
+
## Artifact contract
|
|
29
|
+
|
|
30
|
+
- **Authoritative inputs:** read `.claude/team/tasks/<slug>/artifact-manifest.json` first; consume handoff `artifactInputIds` when supplied, otherwise consume the manifest entries for `unit-test-plan.md`, brief/decomposition when present, and target modules.
|
|
31
|
+
- **Owned outputs:** generated/updated `*.spec.ts` / `*.spec.tsx` paths; upsert only the manifest entry assigned by handoff (`artifactOutputId`; fallback `unit-test-generator`) and preserve all foreign entries.
|
|
32
|
+
- **Terminal receipt:** cover applicable AC/task IDs, list authoritative evidence paths, and emit `completed` or `blocked`. Bind it to the supplied `attemptId` when present.
|
|
33
|
+
- **Shared state:** never create or mutate `status.json` or `metrics.json`; the orchestration runtime/hook owns lifecycle, gates, retries, attempts, and timestamps.
|
|
38
34
|
|
|
39
35
|
## Design guidance
|
|
40
36
|
|
|
@@ -26,16 +26,12 @@ Use **`unit-testing` skill**, **`debug-investigation` skill**, and **`rules/test
|
|
|
26
26
|
|
|
27
27
|
Report root cause, files changed, validation result, and remaining risk.
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"state": "completed",
|
|
36
|
-
"updatedAt": "<ISO8601>"
|
|
37
|
-
}
|
|
38
|
-
```
|
|
29
|
+
## Artifact contract
|
|
30
|
+
|
|
31
|
+
- **Authoritative inputs:** read `.claude/team/tasks/<slug>/artifact-manifest.json` first; consume handoff `artifactInputIds` when supplied, otherwise consume the manifest entries for failing test evidence, `unit-test-plan.md` when present, and recent diff.
|
|
32
|
+
- **Owned outputs:** healed `*.spec.ts` / `*.spec.tsx` paths (and minimal production fixes only when evidenced); upsert only the manifest entry assigned by handoff (`artifactOutputId`; fallback `unit-test-healer`) and preserve all foreign entries.
|
|
33
|
+
- **Terminal receipt:** cover applicable AC/task IDs, list authoritative evidence paths, and emit `completed` or `blocked`. Bind it to the supplied `attemptId` when present.
|
|
34
|
+
- **Shared state:** never create or mutate `status.json` or `metrics.json`; the orchestration runtime/hook owns lifecycle, gates, retries, attempts, and timestamps.
|
|
39
35
|
|
|
40
36
|
## Design guidance
|
|
41
37
|
|
|
@@ -46,18 +46,12 @@ Fixtures, mocks, test-store patterns to reuse.
|
|
|
46
46
|
|
|
47
47
|
Test titles in the plan must follow Russian capitalization rules from `rules/testing/tests-unit.md`.
|
|
48
48
|
|
|
49
|
-
##
|
|
49
|
+
## Artifact contract
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
"slug": "<slug>",
|
|
56
|
-
"currentAgent": "unit-test-planner",
|
|
57
|
-
"state": "completed",
|
|
58
|
-
"updatedAt": "<ISO8601>"
|
|
59
|
-
}
|
|
60
|
-
```
|
|
51
|
+
- **Authoritative inputs:** read `.claude/team/tasks/<slug>/artifact-manifest.json` first; consume handoff `artifactInputIds` when supplied, otherwise consume the manifest entries for brief/decomposition and target modules under `app/src/**`.
|
|
52
|
+
- **Owned outputs:** `unit-test-plan.md`; upsert only the manifest entry assigned by handoff (`artifactOutputId`; fallback `unit-test-planner`) and preserve all foreign entries.
|
|
53
|
+
- **Terminal receipt:** cover applicable AC/task IDs, list authoritative evidence paths, and emit `completed` or `blocked`. Bind it to the supplied `attemptId` when present.
|
|
54
|
+
- **Shared state:** never create or mutate `status.json` or `metrics.json`; the orchestration runtime/hook owns lifecycle, gates, retries, attempts, and timestamps.
|
|
61
55
|
|
|
62
56
|
Do not write `*.spec.ts` files — that is `unit-test-generator`'s job.
|
|
63
57
|
|
|
@@ -25,14 +25,16 @@ description: Route a natural-language task through the agent-team pipeline: task
|
|
|
25
25
|
|
|
26
26
|
## Алгоритм
|
|
27
27
|
|
|
28
|
-
1. **Slug** — kebab-case из описания (≤48 символов). Создай `.claude/team/tasks/<slug>/` через запись файла (Write / Edit) — **не** полагайся на Shell `mkdir` как единственный способ создать каталог.
|
|
28
|
+
1. **Slug** — kebab-case из описания (≤48 символов). Создай `.claude/team/tasks/<slug>/` через запись файла (Write / Edit); runtime/hook владеет `status.json` — **не** полагайся на Shell `mkdir` как единственный способ создать каталог.
|
|
29
29
|
2. **Router** — вызови subagent **task-router** с описанием задачи и путём к slug.
|
|
30
30
|
3. **План** — покажи пользователю таблицу из `pipeline.json`: intent, steps, skipped, humanGates.
|
|
31
31
|
4. **Intent retro** — если `intent === "retro"`, выполни `/technical-retro` и **остановись**.
|
|
32
|
-
5. **Старт** —
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
|
|
32
|
+
5. **Старт** — после router:
|
|
33
|
+
- подтверди `pipeline.json` и `active-task.json`;
|
|
34
|
+
- **не** пиши lifecycle-поля `status.json` / `metrics.json` сам — их владеет orchestration runtime/hook (см. **agent-artifact-contracts**). Если `status.json` отсутствует, допустим только минимальный bootstrap (`slug`, `intent`, `pipelineIndex: 0`, `currentAgent: steps[0]`, `state: in_progress`) — **не** увеличивай `pipelineIndex` вручную;
|
|
35
|
+
- вызови subagent для `pipeline.steps[0].agent` (slug, пути к артефактам, scope).
|
|
36
|
+
6. **После каждого агента** — дождись hook handoff / reconciliation terminal receipt → `status.state`; не запускай следующий шаг, пока `status.json` не отражает handoff (или пока нет `followup_message` от hook).
|
|
37
|
+
7. **Human gate** — если после текущего шага есть gate в `humanGates` (`after:<agent>`), после завершения агента **остановись** и попроси `/task-continue <slug>` (или `/feature-continue <slug>`).
|
|
36
38
|
|
|
37
39
|
## Не делать
|
|
38
40
|
|
|
@@ -51,4 +53,4 @@ description: Route a natural-language task through the agent-team pipeline: task
|
|
|
51
53
|
|
|
52
54
|
## Metrics
|
|
53
55
|
|
|
54
|
-
|
|
56
|
+
Runtime/hook owns `metrics.json` and `status.json` attempt ledgers. Before the first invocation ensure `task_started` and one `activeAttempts[attemptId]` + `attempt_started` exist (router/runtime bootstrap — parent must not invent parallel indices). On `/task-continue`, run the installed chain hook `end_human_gate` action (or wrapper) so `human_gate_ended` lands before the next attempt. Do not calculate durations in agents.
|
|
@@ -122,6 +122,27 @@ function roleFor(agent) {
|
|
|
122
122
|
if (/writer/.test(agent || '')) return 'docs';
|
|
123
123
|
return 'implementation';
|
|
124
124
|
}
|
|
125
|
+
const DEFAULT_ARTIFACT_OUTPUT_IDS = {
|
|
126
|
+
'task-router': 'routing',
|
|
127
|
+
'task-analyst': 'analysis',
|
|
128
|
+
'solution-architect': 'architecture',
|
|
129
|
+
'migration-specialist': 'migration-plan',
|
|
130
|
+
debugger: 'debug',
|
|
131
|
+
'ci-investigator': 'ci',
|
|
132
|
+
'feature-developer': 'implementation',
|
|
133
|
+
'build-verifier': 'validation',
|
|
134
|
+
'code-reviewer': 'review',
|
|
135
|
+
'security-reviewer': 'security-review',
|
|
136
|
+
'accessibility-reviewer': 'a11y-review',
|
|
137
|
+
'performance-auditor': 'perf-report',
|
|
138
|
+
'api-contract-reviewer': 'api-contract-review',
|
|
139
|
+
'tech-writer': 'documentation',
|
|
140
|
+
};
|
|
141
|
+
function artifactOutputIdFor(step, agent) {
|
|
142
|
+
if (step && typeof step.artifactOutputId === 'string') return step.artifactOutputId;
|
|
143
|
+
if (step?.artifactOutputIds && typeof step.artifactOutputIds[agent] === 'string') return step.artifactOutputIds[agent];
|
|
144
|
+
return DEFAULT_ARTIFACT_OUTPUT_IDS[agent] || agent;
|
|
145
|
+
}
|
|
125
146
|
function activateAttempts(step, stepIndex) {
|
|
126
147
|
const active = { ...(status.activeAttempts || {}) }; const agents = getStepAgents(step);
|
|
127
148
|
const parallelGroupId = step.parallel && agents.length > 1 ? `${status.metricsRunId || slug}:step-${stepIndex}` : null;
|
|
@@ -144,11 +165,61 @@ function resolvedAttempt() {
|
|
|
144
165
|
try { const receipts = JSON.parse(fs.readFileSync(path.join(taskDir, '.metrics-receipts.json'), 'utf8')); const receipt = Array.isArray(receipts) ? receipts.find((item) => active[item.attemptId]) : null; if (receipt) return { attemptId: receipt.attemptId, entry: active[receipt.attemptId], confidence: 'fallback', source: 'agent' }; } catch {}
|
|
145
166
|
return null;
|
|
146
167
|
}
|
|
168
|
+
function readBoundReceiptOutcome(agent, step, resolved) {
|
|
169
|
+
if (!agent || !resolved) return { outcome: null, receiptRequired: false };
|
|
170
|
+
const manifestPath = path.join(taskDir, 'artifact-manifest.json');
|
|
171
|
+
if (!fs.existsSync(manifestPath)) return { outcome: null, receiptRequired: false };
|
|
172
|
+
try {
|
|
173
|
+
const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
|
|
174
|
+
const artifacts = Array.isArray(manifest.artifacts) ? manifest.artifacts : [];
|
|
175
|
+
const expectedOutputId = artifactOutputIdFor(step, agent);
|
|
176
|
+
const attemptStartedAt = Date.parse(resolved.entry.startedAt);
|
|
177
|
+
const owned = artifacts
|
|
178
|
+
.filter((entry) => {
|
|
179
|
+
if (!entry || entry.producer !== agent || !entry.receipt || typeof entry.receipt.outcome !== 'string') return false;
|
|
180
|
+
const boundByAttempt = typeof entry.receipt.attemptId === 'string' && entry.receipt.attemptId === resolved.attemptId;
|
|
181
|
+
const boundByOutput = entry.receipt.attemptId == null && entry.id === expectedOutputId;
|
|
182
|
+
if (!boundByAttempt && !boundByOutput) return false;
|
|
183
|
+
const terminalAt = Date.parse(entry.timestamps?.completedAt || entry.timestamps?.updatedAt || '');
|
|
184
|
+
return Number.isFinite(terminalAt) && (!Number.isFinite(attemptStartedAt) || terminalAt >= attemptStartedAt);
|
|
185
|
+
})
|
|
186
|
+
.sort((a, b) => {
|
|
187
|
+
const ta = Date.parse(a.timestamps?.completedAt || a.timestamps?.updatedAt || 0) || 0;
|
|
188
|
+
const tb = Date.parse(b.timestamps?.completedAt || b.timestamps?.updatedAt || 0) || 0;
|
|
189
|
+
return tb - ta;
|
|
190
|
+
});
|
|
191
|
+
return { outcome: owned[0]?.receipt?.outcome || null, receiptRequired: true };
|
|
192
|
+
} catch {
|
|
193
|
+
return { outcome: null, receiptRequired: false };
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
function reconcileStatusFromManifest(agent, step, resolved) {
|
|
197
|
+
const terminal = new Set(['completed', 'blocked', 'changes_requested', 'validation_failed']);
|
|
198
|
+
const { outcome, receiptRequired } = readBoundReceiptOutcome(agent, step, resolved);
|
|
199
|
+
if (terminal.has(outcome)) {
|
|
200
|
+
status.state = outcome;
|
|
201
|
+
return outcome;
|
|
202
|
+
}
|
|
203
|
+
if (receiptRequired) {
|
|
204
|
+
status.state = 'awaiting_artifact_receipt';
|
|
205
|
+
status.phase = 'blocked';
|
|
206
|
+
return status.state;
|
|
207
|
+
}
|
|
208
|
+
if (terminal.has(status.state)) return status.state;
|
|
209
|
+
// Host reported subagent completed and no blocking receipt → treat as completed for metrics/advance.
|
|
210
|
+
if (hookInput.status === 'completed') {
|
|
211
|
+
status.state = 'completed';
|
|
212
|
+
return 'completed';
|
|
213
|
+
}
|
|
214
|
+
return status.state;
|
|
215
|
+
}
|
|
216
|
+
|
|
147
217
|
function finishActiveAttempt() {
|
|
148
218
|
const resolved = resolvedAttempt(); if (!resolved) return null;
|
|
149
219
|
const durationMs = Date.parse(now) - Date.parse(resolved.entry.startedAt);
|
|
150
|
-
|
|
151
|
-
|
|
220
|
+
const outcome = ['completed', 'blocked', 'changes_requested', 'validation_failed'].includes(status.state) ? status.state : 'unknown';
|
|
221
|
+
appendMetric({ type: 'attempt_finished', at: now, attemptId: resolved.attemptId, outcome, durationMs: Number.isFinite(durationMs) && durationMs >= 0 ? durationMs : null, retryAfterFix: status.retryAfterFix || null, source: resolved.source || 'hook', attributionConfidence: resolved.confidence });
|
|
222
|
+
const active = { ...(status.activeAttempts || {}) }; delete active[resolved.attemptId]; status.activeAttempts = active; status.lastCompletedAttempt = { attemptId: resolved.attemptId, completedAt: now }; return { ...resolved, outcome };
|
|
152
223
|
}
|
|
153
224
|
function beginHumanGate() { const eventId = `${status.metricsRunId || slug}:gate:${Date.now()}`; appendMetric({ eventId, type: 'human_gate_started', at: now, source: 'hook', attributionConfidence: 'high' }); status.activeHumanGateEventId = eventId; }
|
|
154
225
|
function endHumanGateIfResumed() {
|
|
@@ -217,54 +288,54 @@ function findNextExecutableStep(steps, startIdx, dir) {
|
|
|
217
288
|
const AGENT_HANDOFF = {
|
|
218
289
|
'task-analyst': (s) =>
|
|
219
290
|
`Invoke task-analyst for slug "${s}". Write brief.md and decomposition.md under .claude/team/tasks/${s}/. ` +
|
|
220
|
-
`
|
|
291
|
+
`Upsert the analysis receipt in artifact-manifest.json; do not mutate status.json lifecycle fields. Do not use legacy phase analysis.`,
|
|
221
292
|
debugger: (s) =>
|
|
222
293
|
`Invoke debugger subagent for slug "${s}". Investigate root cause; write debug-report.md with fixApplied: true/false. ` +
|
|
223
|
-
`
|
|
294
|
+
`Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
|
|
224
295
|
'solution-architect': (s) =>
|
|
225
|
-
`Invoke solution-architect for slug "${s}". Read brief.md; write architecture.md.
|
|
296
|
+
`Invoke solution-architect for slug "${s}". Read brief.md; write architecture.md. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
|
|
226
297
|
'migration-specialist': (s) =>
|
|
227
|
-
`Invoke migration-specialist for slug "${s}". Read brief.md; write migration-plan.md.
|
|
298
|
+
`Invoke migration-specialist for slug "${s}". Read brief.md; write migration-plan.md. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
|
|
228
299
|
'api-contract-reviewer': (s) =>
|
|
229
|
-
`Invoke api-contract-reviewer (readonly) for slug "${s}". Write api-contract-review.md.
|
|
300
|
+
`Invoke api-contract-reviewer (readonly) for slug "${s}". Write api-contract-review.md. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
|
|
230
301
|
'ci-investigator': (s) =>
|
|
231
302
|
`Invoke ci-investigator for slug "${s}". Diagnose CI failure; write ci-report.md; apply minimal fix. ` +
|
|
232
|
-
`Use ci-investigation skill.
|
|
303
|
+
`Use ci-investigation skill. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
|
|
233
304
|
'feature-developer': (s) =>
|
|
234
305
|
`Invoke feature-developer for slug "${s}". Read brief.md, decomposition.md, validation-report.md, review.md, architecture.md, migration-plan.md, api-contract-review.md, debug-report.md if present. ` +
|
|
235
|
-
`Follow architecture/feature-delivery-workflow.md and architecture/reference-features.md. Include unit tests for mappers/logic before handoff.
|
|
306
|
+
`Follow architecture/feature-delivery-workflow.md and architecture/reference-features.md. Include unit tests for mappers/logic before handoff. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
|
|
236
307
|
'build-verifier': (s) =>
|
|
237
308
|
`Invoke build-verifier (readonly) for slug "${s}". Run lint:js, lint:css, type-check, and targeted unit tests from app/. ` +
|
|
238
|
-
`Write validation-report.md
|
|
309
|
+
`Write validation-report.md and emit receipt outcome completed or validation_failed. Do not edit production code.`,
|
|
239
310
|
'accessibility-reviewer': (s) =>
|
|
240
|
-
`Invoke accessibility-reviewer (readonly) for slug "${s}". Review UI diff; write a11y-review.md.
|
|
311
|
+
`Invoke accessibility-reviewer (readonly) for slug "${s}". Review UI diff; write a11y-review.md. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
|
|
241
312
|
'performance-auditor': (s) =>
|
|
242
|
-
`Invoke performance-auditor (readonly) for slug "${s}". Write perf-report.md.
|
|
313
|
+
`Invoke performance-auditor (readonly) for slug "${s}". Write perf-report.md. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
|
|
243
314
|
'code-reviewer': (s) =>
|
|
244
315
|
`Invoke code-reviewer subagent (readonly) for slug "${s}". Review git diff vs brief.md per tooling-and-review/code-review-mr.md. ` +
|
|
245
|
-
`
|
|
316
|
+
`Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
|
|
246
317
|
'security-reviewer': (s) =>
|
|
247
|
-
`Invoke security-reviewer (readonly) for slug "${s}". Write security-review.md.
|
|
318
|
+
`Invoke security-reviewer (readonly) for slug "${s}". Write security-review.md. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
|
|
248
319
|
'qa-tester': (s, scope) =>
|
|
249
320
|
`Invoke qa-tester for slug "${s}"${scope ? ` (scope: ${scope})` : ''}. ` +
|
|
250
|
-
`Add/update tests per brief. Follow testing/playwright-agents.md.
|
|
321
|
+
`Add/update tests per brief. Follow testing/playwright-agents.md. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
|
|
251
322
|
'unit-test-planner': (s) =>
|
|
252
|
-
`Invoke unit-test-planner for slug "${s}". Write unit-test-plan.md. Use unit-testing skill.
|
|
323
|
+
`Invoke unit-test-planner for slug "${s}". Write unit-test-plan.md. Use unit-testing skill. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
|
|
253
324
|
'unit-test-generator': (s) =>
|
|
254
|
-
`Invoke unit-test-generator for slug "${s}". Implement specs from unit-test-plan.md. Use unit-testing skill.
|
|
325
|
+
`Invoke unit-test-generator for slug "${s}". Implement specs from unit-test-plan.md. Use unit-testing skill. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
|
|
255
326
|
'unit-test-healer': (s) =>
|
|
256
|
-
`Invoke unit-test-healer for slug "${s}". Fix failing unit tests. Use unit-testing and debug-investigation skills.
|
|
327
|
+
`Invoke unit-test-healer for slug "${s}". Fix failing unit tests. Use unit-testing and debug-investigation skills. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
|
|
257
328
|
'playwright-test-planner': (s) =>
|
|
258
329
|
`Invoke playwright-test-planner for slug "${s}". Create/update app/__tests__/e2e/**/*.cases.md. ` +
|
|
259
|
-
`Follow testing/playwright-agents.md and the playwright-e2e skill.
|
|
330
|
+
`Follow testing/playwright-agents.md and the playwright-e2e skill. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
|
|
260
331
|
'playwright-test-generator': (s) =>
|
|
261
332
|
`Invoke playwright-test-generator for slug "${s}". Generate/update *.spec.ts from matching *.cases.md. ` +
|
|
262
|
-
`Use playwright MCP when available. Follow testing/playwright-agents.md and the playwright-e2e skill.
|
|
333
|
+
`Use playwright MCP when available. Follow testing/playwright-agents.md and the playwright-e2e skill. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
|
|
263
334
|
'playwright-test-healer': (s) =>
|
|
264
335
|
`Invoke playwright-test-healer for slug "${s}". Fix failing/flaky e2e while preserving cases.md assertions. ` +
|
|
265
|
-
`Use playwright MCP when available. Follow testing/playwright-agents.md and debug-investigation.
|
|
336
|
+
`Use playwright MCP when available. Follow testing/playwright-agents.md and debug-investigation. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
|
|
266
337
|
'tech-writer': (s) =>
|
|
267
|
-
`Invoke tech-writer for slug "${s}". Write documentation.md from task artifacts.
|
|
338
|
+
`Invoke tech-writer for slug "${s}". Write documentation.md from task artifacts. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
|
|
268
339
|
};
|
|
269
340
|
|
|
270
341
|
const REVIEW_AGENTS = new Set([
|
|
@@ -277,15 +348,20 @@ const REVIEW_AGENTS = new Set([
|
|
|
277
348
|
function metricsHandoff(agent) {
|
|
278
349
|
const matches = Object.entries(status.activeAttempts || {}).filter(([, entry]) => entry.agent === agent);
|
|
279
350
|
if (matches.length === 1) {
|
|
280
|
-
return ` Metrics attemptId: ${matches[0][0]};
|
|
351
|
+
return ` Metrics attemptId: ${matches[0][0]}; write owned artifact-manifest receipt outcome. If the hook cannot identify a parallel stop, append a minimal { attemptId, outcome } receipt to .metrics-receipts.json; do not mutate status.json or calculate duration.`;
|
|
281
352
|
}
|
|
282
353
|
return ' Metrics: use the supplied attemptId when available; for a parallel completion, write a minimal { attemptId, outcome } receipt to .metrics-receipts.json rather than relying on currentAgent. Do not calculate duration.';
|
|
283
354
|
}
|
|
284
355
|
|
|
285
|
-
function
|
|
356
|
+
function artifactHandoff(step, agent) {
|
|
357
|
+
const inputIds = Array.isArray(step?.artifactInputIds) ? step.artifactInputIds.join(', ') : 'manifest defaults';
|
|
358
|
+
return ` Artifact inputs: ${inputIds}; owned output ID: ${artifactOutputIdFor(step, agent)}. Bind the terminal receipt to the supplied attemptId.`;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
function handoffForAgent(agent, scope, step = null) {
|
|
286
362
|
const fn = AGENT_HANDOFF[agent];
|
|
287
|
-
const handoff = fn ? fn(slug, scope) : `Invoke ${agent} subagent for slug "${slug}".
|
|
288
|
-
return handoff + metricsHandoff(agent);
|
|
363
|
+
const handoff = fn ? fn(slug, scope) : `Invoke ${agent} subagent for slug "${slug}". Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`;
|
|
364
|
+
return handoff + artifactHandoff(step, agent) + metricsHandoff(agent);
|
|
289
365
|
}
|
|
290
366
|
|
|
291
367
|
function handoffForParallelStep(step) {
|
|
@@ -295,7 +371,8 @@ function handoffForParallelStep(step) {
|
|
|
295
371
|
.map(([attemptId, entry]) => `${entry.agent}=${attemptId}`);
|
|
296
372
|
return (
|
|
297
373
|
`Invoke IN PARALLEL (one message, multiple Task calls): ${agents.join(' AND ')} for slug "${slug}". ` +
|
|
298
|
-
`Each agent writes its artifact and
|
|
374
|
+
`Each agent writes its artifact and owned receipt; the hook records parallelCompleted from stops. Do not mutate status.json lifecycle fields. ` +
|
|
375
|
+
`Artifact inputs: ${Array.isArray(step.artifactInputIds) ? step.artifactInputIds.join(', ') : 'manifest defaults'}; owned output IDs: ${agents.map((agent) => `${agent}=${artifactOutputIdFor(step, agent)}`).join('; ')}. ` +
|
|
299
376
|
`Metrics attemptIds: ${attemptIds.join('; ')}. If the hook cannot identify a parallel stop, append a minimal { attemptId, outcome } receipt to .metrics-receipts.json; do not calculate duration.`
|
|
300
377
|
);
|
|
301
378
|
}
|
|
@@ -334,8 +411,12 @@ function legacyFlow() {
|
|
|
334
411
|
appendMetric({ type: 'retry_scheduled', at: now, attemptId: predecessorAttemptId, nextAgent: agent, retryAfterFix: retryAfterFix || null, source: 'hook', attributionConfidence: 'unknown' });
|
|
335
412
|
activateAttempts({ agent }, stepIndex);
|
|
336
413
|
}
|
|
337
|
-
if (status.state === 'changes_requested'
|
|
414
|
+
if (status.state === 'changes_requested') {
|
|
338
415
|
const reviewer = status.currentAgent;
|
|
416
|
+
if (!reviewer) {
|
|
417
|
+
process.stdout.write('{}');
|
|
418
|
+
process.exit(0);
|
|
419
|
+
}
|
|
339
420
|
scheduleLegacyRetry('feature-developer', reviewer);
|
|
340
421
|
writeStatus({
|
|
341
422
|
currentAgent: 'feature-developer',
|
|
@@ -409,7 +490,7 @@ if (hookInput.action === 'end_human_gate') {
|
|
|
409
490
|
parallelCompleted: [],
|
|
410
491
|
});
|
|
411
492
|
if (resumeNext.step.parallel && resumeAgents.length > 1) out(handoffForParallelStep(resumeNext.step));
|
|
412
|
-
else out(handoffForAgent(resumeAgents[0], resumeNext.step.scope));
|
|
493
|
+
else out(handoffForAgent(resumeAgents[0], resumeNext.step.scope, resumeNext.step));
|
|
413
494
|
process.exit(0);
|
|
414
495
|
}
|
|
415
496
|
}
|
|
@@ -438,6 +519,19 @@ const steps = pipeline.steps || [];
|
|
|
438
519
|
const initialIdx = typeof status.pipelineIndex === 'number' ? status.pipelineIndex : 0;
|
|
439
520
|
const initialStep = steps[initialIdx];
|
|
440
521
|
const activeAttemptCountBeforeFinish = Object.keys(status.activeAttempts || {}).length;
|
|
522
|
+
const completingAgentHint = (() => {
|
|
523
|
+
const resolved = resolvedAttempt();
|
|
524
|
+
if (resolved?.entry?.agent) return resolved.entry.agent;
|
|
525
|
+
if (status.currentAgent) return status.currentAgent;
|
|
526
|
+
return getStepAgents(initialStep)[0];
|
|
527
|
+
})();
|
|
528
|
+
const reconcilingAttempt = resolvedAttempt();
|
|
529
|
+
reconcileStatusFromManifest(completingAgentHint, initialStep, reconcilingAttempt);
|
|
530
|
+
if (status.state === 'awaiting_artifact_receipt') {
|
|
531
|
+
writeStatus({});
|
|
532
|
+
process.stdout.write('{}');
|
|
533
|
+
process.exit(0);
|
|
534
|
+
}
|
|
441
535
|
const finishedAttempt = finishActiveAttempt();
|
|
442
536
|
if (!finishedAttempt && (hookInput.attemptId || activeAttemptCountBeforeFinish > 0)) {
|
|
443
537
|
process.stdout.write('{}');
|
|
@@ -445,6 +539,7 @@ if (!finishedAttempt && (hookInput.attemptId || activeAttemptCountBeforeFinish >
|
|
|
445
539
|
}
|
|
446
540
|
endHumanGateIfResumed();
|
|
447
541
|
if (steps.length === 0 || pipeline.autoChain === false) {
|
|
542
|
+
writeStatus({});
|
|
448
543
|
process.stdout.write('{}');
|
|
449
544
|
process.exit(0);
|
|
450
545
|
}
|
|
@@ -470,8 +565,75 @@ function scheduleRetry(agent, retryAfterFix, predecessor, explicitStepIndex = nu
|
|
|
470
565
|
return stepIndex;
|
|
471
566
|
}
|
|
472
567
|
|
|
473
|
-
|
|
474
|
-
|
|
568
|
+
const idx = typeof status.pipelineIndex === 'number' ? status.pipelineIndex : 0;
|
|
569
|
+
const currentStep = steps[idx];
|
|
570
|
+
const completedAgent = finishedAttempt?.entry?.agent || status.currentAgent || getStepAgents(currentStep)[0];
|
|
571
|
+
const stepAgents = getStepAgents(currentStep);
|
|
572
|
+
|
|
573
|
+
if (currentStep?.parallel && stepAgents.length > 1) {
|
|
574
|
+
const done = [...(status.parallelCompleted || [])];
|
|
575
|
+
const outcomes = { ...(status.parallelOutcomes || {}) };
|
|
576
|
+
if (finishedAttempt && completedAgent) {
|
|
577
|
+
if (!done.includes(completedAgent)) done.push(completedAgent);
|
|
578
|
+
outcomes[completedAgent] = {
|
|
579
|
+
outcome: finishedAttempt.outcome || status.state,
|
|
580
|
+
attemptId: finishedAttempt.attemptId,
|
|
581
|
+
confidence: finishedAttempt.confidence,
|
|
582
|
+
};
|
|
583
|
+
}
|
|
584
|
+
writeStatus({ parallelCompleted: done, parallelOutcomes: outcomes });
|
|
585
|
+
const remaining = stepAgents.filter((agent) => !done.includes(agent));
|
|
586
|
+
if (remaining.length > 0) {
|
|
587
|
+
process.stdout.write('{}');
|
|
588
|
+
process.exit(0);
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
const blockedProducer = stepAgents.find((agent) => outcomes[agent]?.outcome === 'blocked');
|
|
592
|
+
if (blockedProducer) {
|
|
593
|
+
writeStatus({ parallelCompleted: [], parallelOutcomes: {}, state: 'blocked', phase: 'blocked', currentAgent: blockedProducer });
|
|
594
|
+
process.stdout.write('{}');
|
|
595
|
+
process.exit(0);
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
const retryReviewer = stepAgents.find((agent) => outcomes[agent]?.outcome === 'changes_requested');
|
|
599
|
+
if (retryReviewer) {
|
|
600
|
+
const retryAfterFixStepIndex = idx;
|
|
601
|
+
const predecessor = outcomes[retryReviewer]
|
|
602
|
+
? {
|
|
603
|
+
attemptId: outcomes[retryReviewer].attemptId,
|
|
604
|
+
confidence: outcomes[retryReviewer].confidence,
|
|
605
|
+
}
|
|
606
|
+
: finishedAttempt;
|
|
607
|
+
const developerIndex = scheduleRetry('feature-developer', retryReviewer, predecessor);
|
|
608
|
+
writeStatus({
|
|
609
|
+
pipelineIndex: developerIndex,
|
|
610
|
+
currentAgent: 'feature-developer',
|
|
611
|
+
state: 'in_progress',
|
|
612
|
+
phase: 'executing',
|
|
613
|
+
retryAfterFix: retryReviewer,
|
|
614
|
+
retryAfterFixStepIndex,
|
|
615
|
+
parallelCompleted: [],
|
|
616
|
+
parallelOutcomes: {},
|
|
617
|
+
});
|
|
618
|
+
out(handoffForAgent('feature-developer', steps[developerIndex]?.scope, steps[developerIndex]) + ` After fixes, re-run ${retryReviewer}.`);
|
|
619
|
+
process.exit(0);
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
writeStatus({ parallelCompleted: [], parallelOutcomes: {}, state: 'completed' });
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
if (status.state === 'blocked') {
|
|
626
|
+
writeStatus({ state: 'blocked', phase: 'blocked', currentAgent: completedAgent });
|
|
627
|
+
process.stdout.write('{}');
|
|
628
|
+
process.exit(0);
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
if (status.state === 'changes_requested') {
|
|
632
|
+
const reviewer = status.currentAgent || finishedAttempt?.entry?.agent;
|
|
633
|
+
if (!reviewer) {
|
|
634
|
+
process.stdout.write('{}');
|
|
635
|
+
process.exit(0);
|
|
636
|
+
}
|
|
475
637
|
const retryAfterFixStepIndex = typeof status.pipelineIndex === 'number' ? status.pipelineIndex : 0;
|
|
476
638
|
const developerIndex = scheduleRetry('feature-developer', reviewer, finishedAttempt);
|
|
477
639
|
writeStatus({
|
|
@@ -482,7 +644,7 @@ if (status.state === 'changes_requested' && REVIEW_AGENTS.has(status.currentAgen
|
|
|
482
644
|
retryAfterFix: reviewer,
|
|
483
645
|
retryAfterFixStepIndex,
|
|
484
646
|
});
|
|
485
|
-
out(handoffForAgent('feature-developer') + ` After fixes, re-run ${reviewer}.`);
|
|
647
|
+
out(handoffForAgent('feature-developer', steps[developerIndex]?.scope, steps[developerIndex]) + ` After fixes, re-run ${reviewer}.`);
|
|
486
648
|
process.exit(0);
|
|
487
649
|
}
|
|
488
650
|
|
|
@@ -497,7 +659,7 @@ if (status.state === 'validation_failed' && status.currentAgent === 'build-verif
|
|
|
497
659
|
retryAfterFix: 'build-verifier',
|
|
498
660
|
retryAfterFixStepIndex,
|
|
499
661
|
});
|
|
500
|
-
out(handoffForAgent('feature-developer') + ' Read validation-report.md. After fixes, re-run build-verifier.');
|
|
662
|
+
out(handoffForAgent('feature-developer', steps[developerIndex]?.scope, steps[developerIndex]) + ' Read validation-report.md. After fixes, re-run build-verifier.');
|
|
501
663
|
process.exit(0);
|
|
502
664
|
}
|
|
503
665
|
|
|
@@ -505,35 +667,16 @@ if (status.state === 'completed' && status.retryAfterFix) {
|
|
|
505
667
|
const retry = status.retryAfterFix;
|
|
506
668
|
const retryIndex = scheduleRetry(retry, null, finishedAttempt, status.retryAfterFixStepIndex);
|
|
507
669
|
writeStatus({ pipelineIndex: retryIndex, currentAgent: retry, state: 'in_progress', retryAfterFix: null, retryAfterFixStepIndex: null });
|
|
508
|
-
out(handoffForAgent(retry));
|
|
670
|
+
out(handoffForAgent(retry, steps[retryIndex]?.scope, steps[retryIndex]));
|
|
509
671
|
process.exit(0);
|
|
510
672
|
}
|
|
511
673
|
|
|
512
|
-
const idx = typeof status.pipelineIndex === 'number' ? status.pipelineIndex : 0;
|
|
513
|
-
const currentStep = steps[idx];
|
|
514
674
|
if (!currentStep) {
|
|
515
675
|
writeStatus({ phase: 'done', state: 'completed', currentAgent: null });
|
|
516
676
|
out(`Pipeline complete for "${slug}". Run /technical-retro ${slug}.`);
|
|
517
677
|
process.exit(0);
|
|
518
678
|
}
|
|
519
679
|
|
|
520
|
-
const completedAgent = finishedAttempt?.entry?.agent || status.currentAgent || getStepAgents(currentStep)[0];
|
|
521
|
-
const stepAgents = getStepAgents(currentStep);
|
|
522
|
-
|
|
523
|
-
if (currentStep.parallel && stepAgents.length > 1) {
|
|
524
|
-
const done = [...(status.parallelCompleted || [])];
|
|
525
|
-
if (completedAgent && !done.includes(completedAgent)) {
|
|
526
|
-
done.push(completedAgent);
|
|
527
|
-
}
|
|
528
|
-
writeStatus({ parallelCompleted: done });
|
|
529
|
-
const remaining = stepAgents.filter((a) => !done.includes(a));
|
|
530
|
-
if (remaining.length > 0) {
|
|
531
|
-
process.stdout.write('{}');
|
|
532
|
-
process.exit(0);
|
|
533
|
-
}
|
|
534
|
-
writeStatus({ parallelCompleted: [] });
|
|
535
|
-
}
|
|
536
|
-
|
|
537
680
|
if (hasGateAfterStep(currentStep, pipeline.humanGates)) {
|
|
538
681
|
beginHumanGate();
|
|
539
682
|
writeStatus({
|
|
@@ -575,6 +718,6 @@ writeStatus({
|
|
|
575
718
|
if (nextStep.parallel && nextAgents.length > 1) {
|
|
576
719
|
out(handoffForParallelStep(nextStep));
|
|
577
720
|
} else {
|
|
578
|
-
out(handoffForAgent(nextAgents[0], nextStep.scope));
|
|
721
|
+
out(handoffForAgent(nextAgents[0], nextStep.scope, nextStep));
|
|
579
722
|
}
|
|
580
723
|
NODE
|
|
@@ -50,7 +50,7 @@ Work request без `/task` — см. **`tooling-and-review/agent-team-intake.md
|
|
|
50
50
|
| `playwright-test-healer` | tests only | failing/flaky e2e fixes |
|
|
51
51
|
| `tech-writer` | docs only | docs-only, feature/migration docs |
|
|
52
52
|
|
|
53
|
-
Full prompts: `.claude/agents/*.md`. Artifact conventions: `.claude/team/README.md
|
|
53
|
+
Full prompts: `.claude/agents/*.md`. Artifact conventions: `.claude/team/README.md`; schema SoT: **agent-artifact-contracts**.
|
|
54
54
|
|
|
55
55
|
## Dynamic pipeline
|
|
56
56
|
|
|
@@ -76,9 +76,21 @@ flowchart TD
|
|
|
76
76
|
|
|
77
77
|
**Source of truth for order:** `pipeline.json` → `steps[]`. Never hardcode analyst → dev → review → QA when `pipeline.json` exists.
|
|
78
78
|
|
|
79
|
+
New pipelines retain top-level `profile` and include `routingDecision` with `complexity`, `riskFlags`, non-empty `routingReasons`, `estimatedWorkPackages`, and `openDecisionCount`. The stack `task-router` owns heuristics; this metadata is auditable evidence and does not change hook semantics.
|
|
80
|
+
|
|
79
81
|
## Metrics lifecycle
|
|
80
82
|
|
|
81
|
-
Use the local `metrics.json` ledger described by **agent-task-metrics**:
|
|
83
|
+
Use the local `metrics.json` ledger described by **agent-task-metrics**: the orchestration runtime initializes attempts before invocation, hooks record host-clock ends, and agents never guess a parallel completion from `currentAgent`.
|
|
84
|
+
|
|
85
|
+
## Artifact context index and receipts
|
|
86
|
+
|
|
87
|
+
Each slug has one `artifact-manifest.json`: `.cursor/team/tasks/<slug>/` or `.claude/team/tasks/<slug>/`. Schema SoT: **agent-artifact-contracts**.
|
|
88
|
+
|
|
89
|
+
- Read the manifest before broad prior-artifact discovery. Each step receives authoritative input entry IDs, owns named output entry IDs, and finishes with one terminal receipt linked to AC/task IDs.
|
|
90
|
+
- Markdown remains detailed evidence; the manifest records producer, status, authoritative paths, timestamps, outcome, and evidence paths.
|
|
91
|
+
- Agents upsert only entries they own and preserve foreign entries. Parallel agents use distinct IDs; the parent/orchestrator serializes manifest merges.
|
|
92
|
+
- The orchestration runtime/hook is the single writer for `status.json` lifecycle fields and `metrics.json`. Agents read status for eligibility but never rewrite state, gate, retry, attempt, timestamp, or metrics fields.
|
|
93
|
+
- Missing/stale manifests are reported as a handoff gap; fall back to `brief.md`, `decomposition.md`, and `pipeline.json` rather than inventing authority.
|
|
82
94
|
|
|
83
95
|
## status.json (pipeline mode)
|
|
84
96
|
|
|
@@ -90,10 +102,23 @@ Use the local `metrics.json` ledger described by **agent-task-metrics**: initial
|
|
|
90
102
|
"currentAgent": "task-analyst",
|
|
91
103
|
"phase": "executing",
|
|
92
104
|
"state": "in_progress",
|
|
93
|
-
"awaitingHumanGate": false
|
|
105
|
+
"awaitingHumanGate": false,
|
|
106
|
+
"activeAttempts": {},
|
|
107
|
+
"lastCompletedAttempt": null,
|
|
108
|
+
"parallelCompleted": [],
|
|
109
|
+
"parallelOutcomes": {}
|
|
94
110
|
}
|
|
95
111
|
```
|
|
96
112
|
|
|
113
|
+
| Field | Meaning |
|
|
114
|
+
|-------|---------|
|
|
115
|
+
| `activeAttempts` | Transient timing bridge keyed by `attemptId` |
|
|
116
|
+
| `lastCompletedAttempt` | Diagnostic pointer to the latest finished attempt |
|
|
117
|
+
| `parallelCompleted` | Agents that have stopped in the current parallel step |
|
|
118
|
+
| `parallelOutcomes` | Per-agent `{ outcome, attemptId, confidence }` for the current parallel join; cleared when the step advances or retries |
|
|
119
|
+
|
|
120
|
+
On each `subagentStop`, the hook reconciles `status.state` from the completing producer's terminal `artifact-manifest.json` receipt when agents left lifecycle fields untouched. Wait for that handoff before invoking the next step.
|
|
121
|
+
|
|
97
122
|
| state | Meaning |
|
|
98
123
|
|-------|---------|
|
|
99
124
|
| `in_progress` | Current step running |
|
|
@@ -140,7 +165,7 @@ Use the available Claude Code subagent / Agent tool. Pass: slug, artifact paths,
|
|
|
140
165
|
- **`strong`** → `opus` (matches strong-agent frontmatter). Prefer explicit per-invocation `model` when frontmatter pins are flaky.
|
|
141
166
|
3. Parallel steps: apply the step-level `model` to each agent (or omit → each frontmatter).
|
|
142
167
|
|
|
143
|
-
After each agent completes,
|
|
168
|
+
After each agent completes, verify its terminal manifest receipt, then let the orchestration runtime/hook reconcile `status.json` (`completed`, a blocking outcome, or `awaiting_approval`) from that receipt. Do not ask the agent to mutate shared lifecycle fields, and do not invoke the next specialist until the hook has written the handoff / updated `status.json`.
|
|
144
169
|
|
|
145
170
|
## Legacy mode
|
|
146
171
|
|
|
@@ -9,6 +9,7 @@ paths:
|
|
|
9
9
|
|
|
10
10
|
<!-- shared-core: meta/preset-layering.md -->
|
|
11
11
|
|
|
12
|
+
|
|
12
13
|
# Preset layering
|
|
13
14
|
|
|
14
15
|
Правила для **авторов пресетов** (`packages/ai-rules/presets/**`). Не always-on в consumer apps.
|
|
@@ -24,7 +25,7 @@ paths:
|
|
|
24
25
|
## Куда класть новое правило
|
|
25
26
|
|
|
26
27
|
1. Общие принципы для всех стеков → **core** + адаптеры с `<!-- shared-core: … -->`.
|
|
27
|
-
2. Только один из installable стеков (`next` / `ios-swift` / `go` / `java` / `mcp-ts` / `php-hexagonal` / `php-laravel`) → **stack-specific** (не в `_shared`).
|
|
28
|
+
2. Только один из installable стеков (`next` / `nuxt` / `svelte` / `ios-swift` / `go` / `java` / `mcp-ts` / `php-hexagonal` / `php-laravel`) → **stack-specific** (не в `_shared`).
|
|
28
29
|
3. Только Cursor или только Claude packaging → platform artifact / frontmatter, не дублировать семантику.
|
|
29
30
|
|
|
30
31
|
## SoT
|
|
@@ -9,6 +9,7 @@ paths:
|
|
|
9
9
|
|
|
10
10
|
<!-- shared-core: meta/preset-no-cross-stack-leakage.md -->
|
|
11
11
|
|
|
12
|
+
|
|
12
13
|
# Preset no cross-stack leakage
|
|
13
14
|
|
|
14
15
|
Запрет протекания stack-specific имён, путей и handoff stems между пресетами.
|
|
@@ -16,6 +17,8 @@ paths:
|
|
|
16
17
|
## Principles
|
|
17
18
|
|
|
18
19
|
- `next` must not require iOS-only agents/tooling (`xcuitest-*`, `xcodebuild` as required handoff, Keychain-only rules).
|
|
20
|
+
- `nuxt` must not require iOS-only agents/tooling (`xcuitest-*`, `xcodebuild` as required handoff, Keychain-only rules).
|
|
21
|
+
- `svelte` must not require iOS-only agents/tooling (`xcuitest-*`, `xcodebuild` as required handoff, Keychain-only rules).
|
|
19
22
|
- `ios-swift` must not ship Playwright handoffs or Next lint recipes as required commands.
|
|
20
23
|
- `go` / `java` / `php-hexagonal` / `php-laravel` / `mcp-ts` must not ship Playwright, XCUITest, Next lint recipes, or `xcodebuild`/`SwiftLint` as required handoffs.
|
|
21
24
|
- `mcp-ts` must not ship Go tool commands (`go test`, `go vet`, `golangci-lint`) or `integration-test-*` agents as required delivery gates.
|
|
@@ -36,6 +39,18 @@ Required instead: `xcuitest-test-*` stems; build-verifier mentions `xcodebuild`
|
|
|
36
39
|
- `xcuitest-test-` as handoff stems
|
|
37
40
|
- Requiring `xcodebuild` / SwiftLint as the default post-change gate for Next app work
|
|
38
41
|
|
|
42
|
+
## Forbidden in nuxt hooks/agents (FAIL when present as required)
|
|
43
|
+
|
|
44
|
+
- `xcuitest-test-` as handoff stems
|
|
45
|
+
- Requiring `xcodebuild` / SwiftLint as the default post-change gate for Nuxt app work
|
|
46
|
+
- Frontend profile mirrors `next`: Playwright / `lint:js` / `lint:css` allowed
|
|
47
|
+
|
|
48
|
+
## Forbidden in svelte hooks/agents (FAIL when present as required)
|
|
49
|
+
|
|
50
|
+
- `xcuitest-test-` as handoff stems
|
|
51
|
+
- Requiring `xcodebuild` / SwiftLint as the default post-change gate for SvelteKit app work
|
|
52
|
+
- Frontend profile mirrors `next` / `nuxt`: Playwright / `lint:js` / `lint:css` allowed
|
|
53
|
+
|
|
39
54
|
## Forbidden in go / java / php-hexagonal / php-laravel hooks/agents (FAIL)
|
|
40
55
|
|
|
41
56
|
Shared backend-stack bans (`go`, `java`, `php-hexagonal`, and `php-laravel`):
|
|
@@ -66,4 +81,4 @@ Required instead: package-manager–discovered typecheck/test (`mcp-ts-tooling`,
|
|
|
66
81
|
|
|
67
82
|
## Chain fork
|
|
68
83
|
|
|
69
|
-
`hooks/chain-team-phases.sh` must differ **byte-wise** pairwise among `next`, `ios-swift`, `go`, `java`, `mcp-ts`, `php-hexagonal`, and `php-laravel` (per platform).
|
|
84
|
+
`hooks/chain-team-phases.sh` must differ **byte-wise** pairwise among `next`, `nuxt`, `svelte`, `ios-swift`, `go`, `java`, `mcp-ts`, `php-hexagonal`, and `php-laravel` (per platform).
|