@bonesofspring/ai-rules 0.2.26 → 0.2.27
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 +7 -0
- package/LICENSE +21 -0
- package/README.md +1 -1
- package/bin/cli.js +262 -44
- package/bin/lib/safe-path.js +93 -0
- package/bin/lib/seed-ai-local-team.js +5 -0
- package/bin/mavis-install.js +35 -8
- package/bin/opencode-install.js +34 -11
- package/docs/LOCAL-OVERLAY.md +186 -0
- package/docs/MAVIS-COMPATIBILITY.md +174 -0
- package/docs/MAVIS.md +120 -0
- package/docs/OPENCODE-COMPATIBILITY.md +54 -0
- package/docs/OPENCODE.md +123 -0
- package/docs/PRESET-CONTRIBUTION.md +431 -0
- package/docs/PRESET-ENGLISH-STYLE.md +91 -0
- package/docs/specs/INDEX.md +9 -0
- package/docs/specs/_templates/feature.md +32 -0
- package/docs/specs/_templates/page.md +47 -0
- package/package.json +6 -1
- package/presets/_shared/core/meta/preset-layering.md +1 -1
- package/presets/_shared/core/meta/preset-pr-checklist.md +1 -1
- package/presets/_shared/core/meta/preset-token-budget.md +10 -10
- package/presets/_shared/core/quality/code-quality-and-refactoring.md +6 -0
- package/presets/claude/android-kotlin/agents/build-verifier.md +2 -2
- package/presets/claude/android-kotlin/commands/task.md +1 -1
- package/presets/claude/android-kotlin/hooks/chain-team-phases.sh +32 -3
- package/presets/claude/android-kotlin/hooks/examples/README.md +5 -3
- package/presets/claude/android-kotlin/hooks/examples/test-on-save.example.sh +6 -4
- package/presets/claude/android-kotlin/rules/README.md +1 -1
- package/presets/claude/android-kotlin/rules/tooling-and-review/code-quality.md +6 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/mcp-usage.md +1 -1
- package/presets/claude/android-kotlin/rules/tooling-and-review/preset-layering.md +2 -2
- package/presets/claude/android-kotlin/rules/tooling-and-review/preset-no-cross-stack-leakage.md +1 -1
- package/presets/claude/android-kotlin/rules/tooling-and-review/preset-pr-checklist.md +2 -2
- package/presets/claude/android-kotlin/rules/tooling-and-review/preset-token-budget.md +11 -11
- package/presets/claude/android-kotlin/rules/tooling-and-review/preset-twin-sync.md +1 -1
- package/presets/claude/android-kotlin/rules/ui-and-accessibility/compose.md +2 -0
- package/presets/claude/go/CLAUDE.md +1 -1
- package/presets/claude/go/agents/build-verifier.md +1 -1
- package/presets/claude/go/commands/task.md +1 -1
- package/presets/claude/go/hooks/chain-team-phases.sh +32 -3
- package/presets/claude/go/hooks/examples/README.md +5 -3
- package/presets/claude/go/rules/README.md +1 -1
- package/presets/claude/go/rules/api-and-data/adapters-driven.md +3 -3
- package/presets/claude/go/rules/api-and-data/adapters-driving.md +2 -2
- package/presets/claude/go/rules/api-and-data/api-grpc.md +2 -2
- package/presets/claude/go/rules/api-and-data/api-http.md +3 -3
- package/presets/claude/go/rules/api-and-data/messaging-adapters.md +1 -1
- package/presets/claude/go/rules/api-and-data/persistence-adapters.md +2 -2
- package/presets/claude/go/rules/architecture/application-usecases.md +1 -1
- package/presets/claude/go/rules/architecture/domain-layer.md +1 -1
- package/presets/claude/go/rules/architecture/feature-delivery.md +1 -1
- package/presets/claude/go/rules/architecture/ports-interfaces.md +2 -2
- package/presets/claude/go/rules/stack/go-conventions.md +1 -1
- package/presets/claude/go/rules/testing/e2e.md +2 -2
- package/presets/claude/go/rules/testing/integration.md +2 -2
- package/presets/claude/go/rules/testing/unit.md +1 -1
- package/presets/claude/go/rules/tooling-and-review/agent-team-intake.md +1 -1
- package/presets/claude/go/rules/tooling-and-review/agent-team-orchestrator.md +1 -1
- package/presets/claude/go/rules/tooling-and-review/code-quality.md +6 -0
- package/presets/claude/go/rules/tooling-and-review/code-review.md +1 -1
- package/presets/claude/go/rules/tooling-and-review/go-tooling.md +1 -1
- package/presets/claude/go/rules/tooling-and-review/mcp-usage.md +1 -1
- package/presets/claude/go/rules/tooling-and-review/post-change-test.md +1 -1
- package/presets/claude/go/rules/tooling-and-review/preset-layering.md +1 -1
- package/presets/claude/go/rules/tooling-and-review/preset-pr-checklist.md +1 -1
- package/presets/claude/go/rules/tooling-and-review/preset-token-budget.md +10 -10
- package/presets/claude/go/rules/tooling-and-review/security-go.md +3 -3
- package/presets/claude/go/rules/tooling-and-review/technical-retro.md +1 -1
- package/presets/claude/ios-swift/agents/build-verifier.md +3 -3
- package/presets/claude/ios-swift/commands/task.md +1 -1
- package/presets/claude/ios-swift/hooks/chain-team-phases.sh +32 -3
- package/presets/claude/ios-swift/hooks/examples/README.md +5 -3
- package/presets/claude/ios-swift/rules/README.md +1 -1
- package/presets/claude/ios-swift/rules/architecture/feature-delivery.md +3 -3
- package/presets/claude/ios-swift/rules/architecture/reference-features.md +1 -1
- package/presets/claude/ios-swift/rules/tooling-and-review/code-quality.md +6 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/mcp-usage.md +1 -1
- package/presets/claude/ios-swift/rules/tooling-and-review/post-change-build.md +2 -2
- package/presets/claude/ios-swift/rules/tooling-and-review/preset-layering.md +2 -2
- package/presets/claude/ios-swift/rules/tooling-and-review/preset-no-cross-stack-leakage.md +1 -1
- package/presets/claude/ios-swift/rules/tooling-and-review/preset-pr-checklist.md +2 -2
- package/presets/claude/ios-swift/rules/tooling-and-review/preset-token-budget.md +11 -11
- package/presets/claude/ios-swift/rules/tooling-and-review/preset-twin-sync.md +1 -1
- package/presets/claude/ios-swift/rules/ui-and-accessibility/swiftui.md +7 -0
- package/presets/claude/java/CLAUDE.md +2 -2
- package/presets/claude/java/agents/build-verifier.md +1 -1
- package/presets/claude/java/commands/task.md +1 -1
- package/presets/claude/java/hooks/chain-team-phases.sh +32 -3
- package/presets/claude/java/hooks/examples/README.md +5 -3
- package/presets/claude/java/rules/README.md +1 -1
- package/presets/claude/java/rules/tooling-and-review/agent-team-orchestrator.md +1 -1
- package/presets/claude/java/rules/tooling-and-review/code-quality.md +6 -0
- package/presets/claude/java/rules/tooling-and-review/mcp-usage.md +1 -1
- package/presets/claude/java/rules/tooling-and-review/preset-layering.md +1 -1
- package/presets/claude/java/rules/tooling-and-review/preset-pr-checklist.md +1 -1
- package/presets/claude/java/rules/tooling-and-review/preset-token-budget.md +10 -10
- package/presets/claude/mcp-ts/CLAUDE.md +1 -1
- package/presets/claude/mcp-ts/agents/build-verifier.md +1 -1
- package/presets/claude/mcp-ts/commands/task.md +1 -1
- package/presets/claude/mcp-ts/hooks/chain-team-phases.sh +32 -3
- package/presets/claude/mcp-ts/rules/README.md +1 -1
- package/presets/claude/mcp-ts/rules/api-and-data/mcp-auth-secrets.md +4 -4
- package/presets/claude/mcp-ts/rules/api-and-data/mcp-contract-testing.md +2 -2
- package/presets/claude/mcp-ts/rules/api-and-data/mcp-tool-design.md +1 -1
- package/presets/claude/mcp-ts/rules/api-and-data/mcp-transport-packaging.md +2 -2
- package/presets/claude/mcp-ts/rules/architecture/mcp-server-boundaries.md +1 -1
- package/presets/claude/mcp-ts/rules/testing/unit.md +2 -2
- package/presets/claude/mcp-ts/rules/tooling-and-review/anti-sycophancy-discipline.md +2 -2
- package/presets/claude/mcp-ts/rules/tooling-and-review/code-quality.md +6 -0
- package/presets/claude/mcp-ts/rules/tooling-and-review/mcp-ts-tooling.md +3 -3
- package/presets/claude/mcp-ts/rules/tooling-and-review/post-change-test.md +1 -1
- package/presets/claude/mcp-ts/rules/tooling-and-review/preset-layering.md +1 -1
- package/presets/claude/mcp-ts/rules/tooling-and-review/preset-pr-checklist.md +1 -1
- package/presets/claude/mcp-ts/rules/tooling-and-review/preset-token-budget.md +10 -10
- package/presets/claude/mcp-ts/rules/tooling-and-review/security-mcp.md +1 -1
- package/presets/claude/next/README.md +1 -1
- package/presets/claude/next/agents/build-verifier.md +2 -2
- package/presets/claude/next/commands/task.md +1 -1
- package/presets/claude/next/hooks/chain-team-phases.sh +32 -3
- package/presets/claude/next/hooks/examples/README.md +5 -3
- package/presets/claude/next/rules/README.md +1 -1
- package/presets/claude/next/rules/api-and-data/api-services.md +6 -4
- package/presets/claude/next/rules/api-and-data/store-rtk.md +6 -5
- package/presets/claude/next/rules/architecture/feature-delivery-workflow.md +4 -0
- package/presets/claude/next/rules/architecture/reference-features.md +1 -1
- package/presets/claude/next/rules/stack/next-app-core.md +2 -1
- package/presets/claude/next/rules/testing/tests-unit.md +1 -0
- package/presets/claude/next/rules/tooling-and-review/code-quality.md +6 -0
- package/presets/claude/next/rules/tooling-and-review/preset-layering.md +2 -2
- package/presets/claude/next/rules/tooling-and-review/preset-no-cross-stack-leakage.md +1 -1
- package/presets/claude/next/rules/tooling-and-review/preset-pr-checklist.md +2 -2
- package/presets/claude/next/rules/tooling-and-review/preset-token-budget.md +11 -11
- package/presets/claude/next/rules/tooling-and-review/preset-twin-sync.md +1 -1
- package/presets/claude/next/rules/ui-and-accessibility/react-ui.md +37 -1
- package/presets/claude/next/team/fixtures/metrics-scenarios/tasks/human-gate/metrics.json +69 -0
- package/presets/claude/next/team/fixtures/metrics-scenarios/tasks/missing-ledger/status.json +5 -0
- package/presets/claude/next/team/fixtures/metrics-scenarios/tasks/parallel-receipts/metrics.json +79 -0
- package/presets/claude/next/team/fixtures/metrics-scenarios/tasks/serial-retry/metrics.json +124 -0
- package/presets/claude/next/team/fixtures/metrics-scenarios/tasks/validation-failed/metrics.json +124 -0
- package/presets/claude/next/team/fixtures/metrics.example.json +54 -0
- package/presets/claude/nuxt/agents/build-verifier.md +2 -2
- package/presets/claude/nuxt/commands/task.md +1 -1
- package/presets/claude/nuxt/hooks/chain-team-phases.sh +32 -3
- package/presets/claude/nuxt/hooks/examples/README.md +5 -3
- package/presets/claude/nuxt/hooks/examples/format-edited.example.sh +8 -7
- package/presets/claude/nuxt/hooks/examples/test-on-save.example.sh +8 -3
- package/presets/claude/nuxt/rules/README.md +1 -1
- package/presets/claude/nuxt/rules/architecture/layer-barrel-exports.md +1 -1
- package/presets/claude/nuxt/rules/architecture/reference-features.md +1 -1
- package/presets/claude/nuxt/rules/tooling-and-review/code-quality.md +6 -0
- package/presets/claude/nuxt/rules/tooling-and-review/preset-layering.md +2 -2
- package/presets/claude/nuxt/rules/tooling-and-review/preset-no-cross-stack-leakage.md +1 -1
- package/presets/claude/nuxt/rules/tooling-and-review/preset-pr-checklist.md +2 -2
- package/presets/claude/nuxt/rules/tooling-and-review/preset-token-budget.md +11 -11
- package/presets/claude/nuxt/rules/tooling-and-review/preset-twin-sync.md +1 -1
- package/presets/claude/nuxt/rules/ui-and-accessibility/vue-ui.md +7 -0
- package/presets/claude/nuxt/team/fixtures/metrics-scenarios/tasks/human-gate/metrics.json +69 -0
- package/presets/claude/nuxt/team/fixtures/metrics-scenarios/tasks/missing-ledger/status.json +5 -0
- package/presets/claude/nuxt/team/fixtures/metrics-scenarios/tasks/parallel-receipts/metrics.json +79 -0
- package/presets/claude/nuxt/team/fixtures/metrics-scenarios/tasks/serial-retry/metrics.json +124 -0
- package/presets/claude/nuxt/team/fixtures/metrics-scenarios/tasks/validation-failed/metrics.json +124 -0
- package/presets/claude/nuxt/team/fixtures/metrics.example.json +54 -0
- package/presets/claude/php-hexagonal/CLAUDE.md +2 -2
- package/presets/claude/php-hexagonal/agents/build-verifier.md +1 -1
- package/presets/claude/php-hexagonal/commands/task.md +1 -1
- package/presets/claude/php-hexagonal/hooks/chain-team-phases.sh +32 -3
- package/presets/claude/php-hexagonal/hooks/examples/README.md +5 -3
- package/presets/claude/php-hexagonal/rules/README.md +1 -1
- package/presets/claude/php-hexagonal/rules/tooling-and-review/agent-team-orchestrator.md +1 -1
- package/presets/claude/php-hexagonal/rules/tooling-and-review/code-quality.md +6 -0
- package/presets/claude/php-hexagonal/rules/tooling-and-review/mcp-usage.md +1 -1
- package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-layering.md +1 -1
- package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-pr-checklist.md +1 -1
- package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-token-budget.md +10 -10
- package/presets/claude/php-laravel/agents/build-verifier.md +1 -1
- package/presets/claude/php-laravel/commands/task.md +1 -1
- package/presets/claude/php-laravel/hooks/chain-team-phases.sh +32 -3
- package/presets/claude/php-laravel/hooks/examples/README.md +5 -3
- package/presets/claude/php-laravel/rules/README.md +1 -1
- package/presets/claude/php-laravel/rules/tooling-and-review/agent-team-orchestrator.md +1 -1
- package/presets/claude/php-laravel/rules/tooling-and-review/code-quality.md +6 -0
- package/presets/claude/php-laravel/rules/tooling-and-review/mcp-usage.md +1 -1
- package/presets/claude/php-laravel/rules/tooling-and-review/preset-layering.md +1 -1
- package/presets/claude/php-laravel/rules/tooling-and-review/preset-pr-checklist.md +1 -1
- package/presets/claude/php-laravel/rules/tooling-and-review/preset-token-budget.md +10 -10
- package/presets/claude/svelte/agents/build-verifier.md +2 -2
- package/presets/claude/svelte/commands/task.md +1 -1
- package/presets/claude/svelte/hooks/chain-team-phases.sh +32 -3
- package/presets/claude/svelte/hooks/examples/README.md +5 -3
- package/presets/claude/svelte/rules/README.md +1 -1
- package/presets/claude/svelte/rules/api-and-data/store-svelte.md +1 -1
- package/presets/claude/svelte/rules/architecture/layer-barrel-exports.md +1 -1
- package/presets/claude/svelte/rules/architecture/reference-features.md +1 -1
- package/presets/claude/svelte/rules/tooling-and-review/code-quality.md +6 -0
- package/presets/claude/svelte/rules/tooling-and-review/mcp-usage.md +1 -1
- package/presets/claude/svelte/rules/tooling-and-review/preset-layering.md +2 -2
- package/presets/claude/svelte/rules/tooling-and-review/preset-no-cross-stack-leakage.md +1 -1
- package/presets/claude/svelte/rules/tooling-and-review/preset-pr-checklist.md +2 -2
- package/presets/claude/svelte/rules/tooling-and-review/preset-token-budget.md +11 -11
- package/presets/claude/svelte/rules/tooling-and-review/preset-twin-sync.md +1 -1
- package/presets/claude/svelte/rules/ui-and-accessibility/no-rest-props-spread.md +1 -1
- package/presets/claude/svelte/rules/ui-and-accessibility/svelte-ui.md +7 -0
- package/presets/claude/svelte/team/fixtures/metrics-scenarios/tasks/human-gate/metrics.json +69 -0
- package/presets/claude/svelte/team/fixtures/metrics-scenarios/tasks/missing-ledger/status.json +5 -0
- package/presets/claude/svelte/team/fixtures/metrics-scenarios/tasks/parallel-receipts/metrics.json +79 -0
- package/presets/claude/svelte/team/fixtures/metrics-scenarios/tasks/serial-retry/metrics.json +124 -0
- package/presets/claude/svelte/team/fixtures/metrics-scenarios/tasks/validation-failed/metrics.json +124 -0
- package/presets/claude/svelte/team/fixtures/metrics.example.json +54 -0
- package/presets/cursor/android-kotlin/agents/build-verifier.md +2 -2
- package/presets/cursor/android-kotlin/commands/task.md +1 -1
- package/presets/cursor/android-kotlin/hooks/chain-team-phases.sh +32 -3
- package/presets/cursor/android-kotlin/hooks/examples/test-on-save.example.sh +6 -4
- package/presets/cursor/android-kotlin/rules/README.md +1 -1
- package/presets/cursor/android-kotlin/rules/code-quality-and-refactoring.mdc +6 -0
- package/presets/cursor/android-kotlin/rules/compose-ui.mdc +2 -0
- package/presets/cursor/android-kotlin/rules/preset-layering.mdc +2 -2
- package/presets/cursor/android-kotlin/rules/preset-no-cross-stack-leakage.mdc +1 -1
- package/presets/cursor/android-kotlin/rules/preset-pr-checklist.mdc +2 -2
- package/presets/cursor/android-kotlin/rules/preset-token-budget.mdc +11 -11
- package/presets/cursor/android-kotlin/rules/preset-twin-sync.mdc +1 -1
- package/presets/cursor/go/README.md +1 -1
- package/presets/cursor/go/agents/build-verifier.md +1 -1
- package/presets/cursor/go/commands/task.md +1 -1
- package/presets/cursor/go/hooks/chain-team-phases.sh +32 -3
- package/presets/cursor/go/rules/README.md +2 -2
- package/presets/cursor/go/rules/code-quality-and-refactoring.mdc +6 -0
- package/presets/cursor/go/rules/preset-layering.mdc +1 -1
- package/presets/cursor/go/rules/preset-pr-checklist.mdc +1 -1
- package/presets/cursor/go/rules/preset-token-budget.mdc +10 -10
- package/presets/cursor/ios-swift/README.md +1 -1
- package/presets/cursor/ios-swift/agents/build-verifier.md +3 -3
- package/presets/cursor/ios-swift/commands/task.md +1 -1
- package/presets/cursor/ios-swift/hooks/chain-team-phases.sh +32 -3
- package/presets/cursor/ios-swift/rules/README.md +2 -2
- package/presets/cursor/ios-swift/rules/code-quality-and-refactoring.mdc +6 -0
- package/presets/cursor/ios-swift/rules/preset-layering.mdc +2 -2
- package/presets/cursor/ios-swift/rules/preset-no-cross-stack-leakage.mdc +1 -1
- package/presets/cursor/ios-swift/rules/preset-pr-checklist.mdc +2 -2
- package/presets/cursor/ios-swift/rules/preset-token-budget.mdc +11 -11
- package/presets/cursor/ios-swift/rules/preset-twin-sync.mdc +1 -1
- package/presets/cursor/ios-swift/rules/reference-features.mdc +1 -1
- package/presets/cursor/ios-swift/rules/swiftui-ui.mdc +7 -0
- package/presets/cursor/java/AGENTS.md +1 -1
- package/presets/cursor/java/agents/build-verifier.md +1 -1
- package/presets/cursor/java/commands/task.md +1 -1
- package/presets/cursor/java/hooks/chain-team-phases.sh +32 -3
- package/presets/cursor/java/rules/README.md +2 -2
- package/presets/cursor/java/rules/agent-team-orchestrator.mdc +1 -1
- package/presets/cursor/java/rules/code-quality-and-refactoring.mdc +6 -0
- package/presets/cursor/java/rules/preset-layering.mdc +1 -1
- package/presets/cursor/java/rules/preset-pr-checklist.mdc +1 -1
- package/presets/cursor/java/rules/preset-token-budget.mdc +10 -10
- package/presets/cursor/mcp-ts/agents/build-verifier.md +1 -1
- package/presets/cursor/mcp-ts/commands/task.md +1 -1
- package/presets/cursor/mcp-ts/hooks/chain-team-phases.sh +32 -3
- package/presets/cursor/mcp-ts/rules/README.md +2 -2
- package/presets/cursor/mcp-ts/rules/anti-sycophancy-discipline.mdc +2 -2
- package/presets/cursor/mcp-ts/rules/code-quality-and-refactoring.mdc +6 -0
- package/presets/cursor/mcp-ts/rules/mcp-auth-secrets.mdc +4 -4
- package/presets/cursor/mcp-ts/rules/mcp-contract-testing.mdc +2 -2
- package/presets/cursor/mcp-ts/rules/mcp-server-boundaries.mdc +1 -1
- package/presets/cursor/mcp-ts/rules/mcp-tool-design.mdc +1 -1
- package/presets/cursor/mcp-ts/rules/mcp-transport-packaging.mdc +2 -2
- package/presets/cursor/mcp-ts/rules/mcp-ts-tooling.mdc +3 -3
- package/presets/cursor/mcp-ts/rules/preset-layering.mdc +1 -1
- package/presets/cursor/mcp-ts/rules/preset-pr-checklist.mdc +1 -1
- package/presets/cursor/mcp-ts/rules/preset-token-budget.mdc +10 -10
- package/presets/cursor/mcp-ts/rules/security-mcp.mdc +1 -1
- package/presets/cursor/mcp-ts/rules/tests-unit.mdc +2 -2
- package/presets/cursor/next/README.md +2 -2
- package/presets/cursor/next/agents/build-verifier.md +2 -2
- package/presets/cursor/next/commands/task.md +1 -1
- package/presets/cursor/next/hooks/chain-team-phases.sh +32 -3
- package/presets/cursor/next/rules/README.md +1 -1
- package/presets/cursor/next/rules/api-services.mdc +6 -4
- package/presets/cursor/next/rules/code-quality-and-refactoring.mdc +6 -0
- package/presets/cursor/next/rules/feature-delivery-workflow.mdc +4 -0
- package/presets/cursor/next/rules/next-app-core.mdc +2 -1
- package/presets/cursor/next/rules/preset-layering.mdc +2 -2
- package/presets/cursor/next/rules/preset-no-cross-stack-leakage.mdc +1 -1
- package/presets/cursor/next/rules/preset-pr-checklist.mdc +2 -2
- package/presets/cursor/next/rules/preset-token-budget.mdc +11 -11
- package/presets/cursor/next/rules/preset-twin-sync.mdc +1 -1
- package/presets/cursor/next/rules/react-ui.mdc +37 -1
- package/presets/cursor/next/rules/reference-features.mdc +1 -1
- package/presets/cursor/next/rules/store-rtk.mdc +6 -5
- package/presets/cursor/next/rules/tests-unit.mdc +1 -0
- package/presets/cursor/nuxt/README.md +1 -1
- package/presets/cursor/nuxt/agents/build-verifier.md +2 -2
- package/presets/cursor/nuxt/commands/task.md +1 -1
- package/presets/cursor/nuxt/hooks/chain-team-phases.sh +32 -3
- package/presets/cursor/nuxt/hooks/examples/format-edited.example.sh +8 -7
- package/presets/cursor/nuxt/hooks/examples/test-on-save.example.sh +8 -3
- package/presets/cursor/nuxt/rules/anti-sycophancy-discipline.mdc +1 -1
- package/presets/cursor/nuxt/rules/code-quality-and-refactoring.mdc +6 -0
- package/presets/cursor/nuxt/rules/design-guidance.mdc +1 -1
- package/presets/cursor/nuxt/rules/layer-barrel-exports.mdc +1 -1
- package/presets/cursor/nuxt/rules/preset-layering.mdc +2 -2
- package/presets/cursor/nuxt/rules/preset-no-cross-stack-leakage.mdc +1 -1
- package/presets/cursor/nuxt/rules/preset-pr-checklist.mdc +2 -2
- package/presets/cursor/nuxt/rules/preset-token-budget.mdc +11 -11
- package/presets/cursor/nuxt/rules/preset-twin-sync.mdc +1 -1
- package/presets/cursor/nuxt/rules/reference-features.mdc +1 -1
- package/presets/cursor/nuxt/rules/vue-ui.mdc +7 -0
- package/presets/cursor/php-hexagonal/AGENTS.md +1 -1
- package/presets/cursor/php-hexagonal/agents/build-verifier.md +1 -1
- package/presets/cursor/php-hexagonal/commands/task.md +1 -1
- package/presets/cursor/php-hexagonal/hooks/chain-team-phases.sh +32 -3
- package/presets/cursor/php-hexagonal/rules/README.md +2 -2
- package/presets/cursor/php-hexagonal/rules/agent-team-orchestrator.mdc +1 -1
- package/presets/cursor/php-hexagonal/rules/code-quality-and-refactoring.mdc +6 -0
- package/presets/cursor/php-hexagonal/rules/preset-layering.mdc +1 -1
- package/presets/cursor/php-hexagonal/rules/preset-pr-checklist.mdc +1 -1
- package/presets/cursor/php-hexagonal/rules/preset-token-budget.mdc +10 -10
- package/presets/cursor/php-laravel/AGENTS.md +1 -1
- package/presets/cursor/php-laravel/agents/build-verifier.md +1 -1
- package/presets/cursor/php-laravel/commands/task.md +1 -1
- package/presets/cursor/php-laravel/hooks/chain-team-phases.sh +32 -3
- package/presets/cursor/php-laravel/rules/README.md +2 -2
- package/presets/cursor/php-laravel/rules/agent-team-orchestrator.mdc +1 -1
- package/presets/cursor/php-laravel/rules/code-quality-and-refactoring.mdc +6 -0
- package/presets/cursor/php-laravel/rules/preset-layering.mdc +1 -1
- package/presets/cursor/php-laravel/rules/preset-pr-checklist.mdc +1 -1
- package/presets/cursor/php-laravel/rules/preset-token-budget.mdc +10 -10
- package/presets/cursor/svelte/README.md +1 -1
- package/presets/cursor/svelte/agents/build-verifier.md +2 -2
- package/presets/cursor/svelte/commands/task.md +1 -1
- package/presets/cursor/svelte/hooks/chain-team-phases.sh +32 -3
- package/presets/cursor/svelte/rules/code-quality-and-refactoring.mdc +6 -0
- package/presets/cursor/svelte/rules/layer-barrel-exports.mdc +1 -1
- package/presets/cursor/svelte/rules/preset-layering.mdc +2 -2
- package/presets/cursor/svelte/rules/preset-no-cross-stack-leakage.mdc +1 -1
- package/presets/cursor/svelte/rules/preset-pr-checklist.mdc +2 -2
- package/presets/cursor/svelte/rules/preset-token-budget.mdc +11 -11
- package/presets/cursor/svelte/rules/preset-twin-sync.mdc +1 -1
- package/presets/cursor/svelte/rules/reference-features.mdc +1 -1
- package/presets/cursor/svelte/rules/svelte-ui.mdc +7 -0
- package/presets/mavis/android-kotlin/adapter-map.json +1 -1
- package/presets/mavis/android-kotlin/agents/build-verifier.md +2 -2
- package/presets/mavis/android-kotlin/commands/spec-start.md +2 -2
- package/presets/mavis/android-kotlin/commands/task.md +6 -6
- package/presets/mavis/android-kotlin/hooks/chain-team-phases.sh +32 -3
- package/presets/mavis/android-kotlin/rules/code-quality-and-refactoring.md +14 -0
- package/presets/mavis/android-kotlin/rules/code-review-mr.md +39 -0
- package/presets/mavis/android-kotlin/rules/compose-ui.md +2 -0
- package/presets/mavis/android-kotlin/rules/design-guidance.md +5 -0
- package/presets/mavis/android-kotlin/rules/mcp-usage.md +8 -0
- package/presets/mavis/android-kotlin/rules/mockup-review.md +4 -0
- package/presets/mavis/android-kotlin/rules/preset-layering.md +1 -1
- package/presets/mavis/android-kotlin/rules/preset-no-cross-stack-leakage.md +4 -0
- package/presets/mavis/android-kotlin/rules/preset-pr-checklist.md +1 -1
- package/presets/mavis/android-kotlin/rules/preset-token-budget.md +10 -10
- package/presets/mavis/android-kotlin/rules/product-specs-authoring.md +6 -0
- package/presets/mavis/android-kotlin/rules/product-specs.md +5 -0
- package/presets/mavis/android-kotlin/rules/ux-design.md +4 -0
- package/presets/mavis/android-kotlin/skills/debug-investigation/SKILL.md +39 -0
- package/presets/mavis/go/adapter-map.json +1 -1
- package/presets/mavis/go/agents/build-verifier.md +1 -1
- package/presets/mavis/go/commands/spec-start.md +2 -2
- package/presets/mavis/go/commands/task.md +6 -6
- package/presets/mavis/go/hooks/chain-team-phases.sh +32 -3
- package/presets/mavis/go/rules/agent-team-intake.md +4 -0
- package/presets/mavis/go/rules/code-quality-and-refactoring.md +15 -0
- package/presets/mavis/go/rules/code-review-mr.md +7 -0
- package/presets/mavis/go/rules/design-guidance.md +5 -0
- package/presets/mavis/go/rules/mcp-usage.md +7 -0
- package/presets/mavis/go/rules/preset-layering.md +1 -1
- package/presets/mavis/go/rules/preset-pr-checklist.md +1 -1
- package/presets/mavis/go/rules/preset-token-budget.md +10 -10
- package/presets/mavis/go/rules/product-specs-authoring.md +6 -0
- package/presets/mavis/go/rules/product-specs.md +6 -0
- package/presets/mavis/go/skills/debug-investigation/SKILL.md +20 -0
- package/presets/mavis/ios-swift/adapter-map.json +1 -1
- package/presets/mavis/ios-swift/agents/build-verifier.md +3 -3
- package/presets/mavis/ios-swift/commands/spec-start.md +2 -2
- package/presets/mavis/ios-swift/commands/task.md +6 -6
- package/presets/mavis/ios-swift/hooks/chain-team-phases.sh +32 -3
- package/presets/mavis/ios-swift/rules/code-quality-and-refactoring.md +14 -0
- package/presets/mavis/ios-swift/rules/code-review-mr.md +39 -0
- package/presets/mavis/ios-swift/rules/design-guidance.md +5 -0
- package/presets/mavis/ios-swift/rules/feature-delivery-workflow.md +66 -0
- package/presets/mavis/ios-swift/rules/mcp-usage.md +8 -0
- package/presets/mavis/ios-swift/rules/mockup-review.md +4 -0
- package/presets/mavis/ios-swift/rules/preset-layering.md +1 -1
- package/presets/mavis/ios-swift/rules/preset-pr-checklist.md +1 -1
- package/presets/mavis/ios-swift/rules/preset-token-budget.md +10 -10
- package/presets/mavis/ios-swift/rules/product-specs-authoring.md +6 -0
- package/presets/mavis/ios-swift/rules/product-specs.md +5 -0
- package/presets/mavis/ios-swift/rules/reference-features.md +49 -0
- package/presets/mavis/ios-swift/rules/swiftui-ui.md +7 -0
- package/presets/mavis/ios-swift/rules/ux-design.md +4 -0
- package/presets/mavis/ios-swift/skills/debug-investigation/SKILL.md +39 -0
- package/presets/mavis/java/adapter-map.json +1 -1
- package/presets/mavis/java/agents/build-verifier.md +1 -1
- package/presets/mavis/java/commands/spec-start.md +2 -2
- package/presets/mavis/java/commands/task.md +6 -6
- package/presets/mavis/java/hooks/chain-team-phases.sh +32 -3
- package/presets/mavis/java/rules/agent-team-intake.md +4 -0
- package/presets/mavis/java/rules/code-quality-and-refactoring.md +15 -0
- package/presets/mavis/java/rules/code-review-mr.md +9 -0
- package/presets/mavis/java/rules/design-guidance.md +6 -0
- package/presets/mavis/java/rules/mcp-usage.md +6 -0
- package/presets/mavis/java/rules/preset-layering.md +1 -1
- package/presets/mavis/java/rules/preset-pr-checklist.md +1 -1
- package/presets/mavis/java/rules/preset-token-budget.md +10 -10
- package/presets/mavis/java/rules/product-specs-authoring.md +6 -0
- package/presets/mavis/java/rules/product-specs.md +6 -0
- package/presets/mavis/java/skills/debug-investigation/SKILL.md +20 -0
- package/presets/mavis/mcp-ts/adapter-map.json +1 -1
- package/presets/mavis/mcp-ts/agents/build-verifier.md +1 -1
- package/presets/mavis/mcp-ts/commands/spec-start.md +2 -2
- package/presets/mavis/mcp-ts/commands/task.md +6 -6
- package/presets/mavis/mcp-ts/hooks/chain-team-phases.sh +32 -3
- package/presets/mavis/mcp-ts/rules/agent-team-intake.md +5 -0
- package/presets/mavis/mcp-ts/rules/anti-sycophancy-discipline.md +4 -0
- package/presets/mavis/mcp-ts/rules/code-quality-and-refactoring.md +15 -0
- package/presets/mavis/mcp-ts/rules/code-review-mr.md +6 -0
- package/presets/mavis/mcp-ts/rules/design-guidance.md +5 -0
- package/presets/mavis/mcp-ts/rules/mcp-usage.md +7 -0
- package/presets/mavis/mcp-ts/rules/preset-layering.md +1 -1
- package/presets/mavis/mcp-ts/rules/preset-pr-checklist.md +1 -1
- package/presets/mavis/mcp-ts/rules/preset-token-budget.md +10 -10
- package/presets/mavis/mcp-ts/rules/product-specs-authoring.md +6 -0
- package/presets/mavis/mcp-ts/rules/product-specs.md +6 -0
- package/presets/mavis/mcp-ts/skills/debug-investigation/SKILL.md +15 -0
- package/presets/mavis/next/adapter-map.json +1 -1
- package/presets/mavis/next/agents/build-verifier.md +2 -2
- package/presets/mavis/next/commands/spec-start.md +2 -2
- package/presets/mavis/next/commands/task.md +6 -6
- package/presets/mavis/next/hooks/chain-team-phases.sh +32 -3
- package/presets/mavis/next/rules/api-services.md +6 -4
- package/presets/mavis/next/rules/code-quality-and-refactoring.md +13 -0
- package/presets/mavis/next/rules/code-review-mr.md +13 -0
- package/presets/mavis/next/rules/design-guidance.md +5 -0
- package/presets/mavis/next/rules/feature-delivery-workflow.md +85 -0
- package/presets/mavis/next/rules/mcp-usage.md +9 -0
- package/presets/mavis/next/rules/mockup-review.md +4 -0
- package/presets/mavis/next/rules/next-app-core.md +2 -1
- package/presets/mavis/next/rules/preset-layering.md +1 -1
- package/presets/mavis/next/rules/preset-pr-checklist.md +1 -1
- package/presets/mavis/next/rules/preset-token-budget.md +10 -10
- package/presets/mavis/next/rules/product-specs-authoring.md +6 -0
- package/presets/mavis/next/rules/product-specs.md +6 -0
- package/presets/mavis/next/rules/react-ui.md +37 -1
- package/presets/mavis/next/rules/reference-features.md +36 -0
- package/presets/mavis/next/rules/store-rtk.md +6 -5
- package/presets/mavis/next/rules/tests-e2e-structure.md +15 -0
- package/presets/mavis/next/rules/tests-unit.md +33 -0
- package/presets/mavis/next/rules/ux-design.md +4 -0
- package/presets/mavis/next/skills/debug-investigation/SKILL.md +28 -0
- package/presets/mavis/nuxt/adapter-map.json +1 -1
- package/presets/mavis/nuxt/agents/build-verifier.md +2 -2
- package/presets/mavis/nuxt/commands/spec-start.md +2 -2
- package/presets/mavis/nuxt/commands/task.md +6 -6
- package/presets/mavis/nuxt/hooks/chain-team-phases.sh +32 -3
- package/presets/mavis/nuxt/rules/code-quality-and-refactoring.md +13 -0
- package/presets/mavis/nuxt/rules/code-review-mr.md +13 -0
- package/presets/mavis/nuxt/rules/design-guidance.md +5 -0
- package/presets/mavis/nuxt/rules/feature-delivery-workflow.md +82 -0
- package/presets/mavis/nuxt/rules/mcp-usage.md +9 -0
- package/presets/mavis/nuxt/rules/mockup-review.md +4 -0
- package/presets/mavis/nuxt/rules/preset-layering.md +1 -1
- package/presets/mavis/nuxt/rules/preset-pr-checklist.md +1 -1
- package/presets/mavis/nuxt/rules/preset-token-budget.md +10 -10
- package/presets/mavis/nuxt/rules/product-specs-authoring.md +6 -0
- package/presets/mavis/nuxt/rules/product-specs.md +5 -0
- package/presets/mavis/nuxt/rules/reference-features.md +36 -0
- package/presets/mavis/nuxt/rules/tests-e2e-structure.md +16 -0
- package/presets/mavis/nuxt/rules/tests-unit.md +11 -0
- package/presets/mavis/nuxt/rules/ux-design.md +4 -0
- package/presets/mavis/nuxt/rules/vue-ui.md +7 -0
- package/presets/mavis/nuxt/skills/debug-investigation/SKILL.md +30 -0
- package/presets/mavis/php-hexagonal/adapter-map.json +1 -1
- package/presets/mavis/php-hexagonal/agents/build-verifier.md +1 -1
- package/presets/mavis/php-hexagonal/commands/spec-start.md +2 -2
- package/presets/mavis/php-hexagonal/commands/task.md +6 -6
- package/presets/mavis/php-hexagonal/hooks/chain-team-phases.sh +32 -3
- package/presets/mavis/php-hexagonal/rules/agent-team-intake.md +4 -0
- package/presets/mavis/php-hexagonal/rules/code-quality-and-refactoring.md +15 -0
- package/presets/mavis/php-hexagonal/rules/code-review-mr.md +9 -0
- package/presets/mavis/php-hexagonal/rules/design-guidance.md +6 -0
- package/presets/mavis/php-hexagonal/rules/mcp-usage.md +6 -0
- package/presets/mavis/php-hexagonal/rules/preset-layering.md +1 -1
- package/presets/mavis/php-hexagonal/rules/preset-pr-checklist.md +1 -1
- package/presets/mavis/php-hexagonal/rules/preset-token-budget.md +10 -10
- package/presets/mavis/php-hexagonal/rules/product-specs-authoring.md +6 -0
- package/presets/mavis/php-hexagonal/rules/product-specs.md +6 -0
- package/presets/mavis/php-hexagonal/skills/debug-investigation/SKILL.md +20 -0
- package/presets/mavis/php-laravel/adapter-map.json +1 -1
- package/presets/mavis/php-laravel/agents/build-verifier.md +1 -1
- package/presets/mavis/php-laravel/commands/spec-start.md +2 -2
- package/presets/mavis/php-laravel/commands/task.md +6 -6
- package/presets/mavis/php-laravel/hooks/chain-team-phases.sh +32 -3
- package/presets/mavis/php-laravel/rules/agent-team-intake.md +4 -0
- package/presets/mavis/php-laravel/rules/code-quality-and-refactoring.md +15 -0
- package/presets/mavis/php-laravel/rules/code-review-mr.md +10 -0
- package/presets/mavis/php-laravel/rules/design-guidance.md +6 -0
- package/presets/mavis/php-laravel/rules/mcp-usage.md +6 -0
- package/presets/mavis/php-laravel/rules/preset-layering.md +1 -1
- package/presets/mavis/php-laravel/rules/preset-pr-checklist.md +1 -1
- package/presets/mavis/php-laravel/rules/preset-token-budget.md +10 -10
- package/presets/mavis/php-laravel/rules/product-specs-authoring.md +6 -0
- package/presets/mavis/php-laravel/rules/product-specs.md +6 -0
- package/presets/mavis/php-laravel/skills/debug-investigation/SKILL.md +20 -0
- package/presets/mavis/svelte/adapter-map.json +1 -1
- package/presets/mavis/svelte/agents/build-verifier.md +2 -2
- package/presets/mavis/svelte/commands/spec-start.md +2 -2
- package/presets/mavis/svelte/commands/task.md +6 -6
- package/presets/mavis/svelte/hooks/chain-team-phases.sh +32 -3
- package/presets/mavis/svelte/rules/code-quality-and-refactoring.md +13 -0
- package/presets/mavis/svelte/rules/code-review-mr.md +13 -0
- package/presets/mavis/svelte/rules/design-guidance.md +5 -0
- package/presets/mavis/svelte/rules/feature-delivery-workflow.md +54 -0
- package/presets/mavis/svelte/rules/mcp-usage.md +9 -0
- package/presets/mavis/svelte/rules/mockup-review.md +4 -0
- package/presets/mavis/svelte/rules/preset-layering.md +1 -1
- package/presets/mavis/svelte/rules/preset-pr-checklist.md +1 -1
- package/presets/mavis/svelte/rules/preset-token-budget.md +10 -10
- package/presets/mavis/svelte/rules/product-specs-authoring.md +6 -0
- package/presets/mavis/svelte/rules/product-specs.md +5 -0
- package/presets/mavis/svelte/rules/reference-features.md +37 -0
- package/presets/mavis/svelte/rules/svelte-ui.md +7 -0
- package/presets/mavis/svelte/rules/tests-e2e-structure.md +16 -0
- package/presets/mavis/svelte/rules/tests-unit.md +11 -0
- package/presets/mavis/svelte/rules/ux-design.md +4 -0
- package/presets/mavis/svelte/skills/debug-investigation/SKILL.md +30 -0
- package/presets/opencode/android-kotlin/adapter-map.json +1 -1
- package/presets/opencode/android-kotlin/agents/build-verifier.md +2 -2
- package/presets/opencode/android-kotlin/commands/spec-start.md +1 -1
- package/presets/opencode/android-kotlin/commands/task-continue.md +1 -1
- package/presets/opencode/android-kotlin/commands/task.md +1 -1
- package/presets/opencode/android-kotlin/commands/technical-retro.md +1 -1
- package/presets/opencode/android-kotlin/hooks/chain-team-phases.sh +32 -3
- package/presets/opencode/android-kotlin/rules/code-quality-and-refactoring.md +14 -0
- package/presets/opencode/android-kotlin/rules/code-review-mr.md +39 -0
- package/presets/opencode/android-kotlin/rules/compose-ui.md +2 -0
- package/presets/opencode/android-kotlin/rules/design-guidance.md +5 -0
- package/presets/opencode/android-kotlin/rules/mcp-usage.md +8 -0
- package/presets/opencode/android-kotlin/rules/mockup-review.md +4 -0
- package/presets/opencode/android-kotlin/rules/preset-layering.md +1 -1
- package/presets/opencode/android-kotlin/rules/preset-no-cross-stack-leakage.md +4 -0
- package/presets/opencode/android-kotlin/rules/preset-pr-checklist.md +1 -1
- package/presets/opencode/android-kotlin/rules/preset-token-budget.md +10 -10
- package/presets/opencode/android-kotlin/rules/product-specs-authoring.md +6 -0
- package/presets/opencode/android-kotlin/rules/product-specs.md +5 -0
- package/presets/opencode/android-kotlin/rules/ux-design.md +4 -0
- package/presets/opencode/android-kotlin/skills/ci-investigation/SKILL.md +1 -1
- package/presets/opencode/android-kotlin/skills/code-review/SKILL.md +1 -1
- package/presets/opencode/android-kotlin/skills/debug-investigation/SKILL.md +1 -1
- package/presets/opencode/android-kotlin/skills/feature-delivery/SKILL.md +1 -1
- package/presets/opencode/android-kotlin/skills/instrumentation-ui-e2e/SKILL.md +1 -1
- package/presets/opencode/android-kotlin/skills/mockup-review/SKILL.md +1 -1
- package/presets/opencode/android-kotlin/skills/spec-authoring/SKILL.md +1 -1
- package/presets/opencode/android-kotlin/skills/spec-discovery/SKILL.md +1 -1
- package/presets/opencode/android-kotlin/skills/technical-retro/SKILL.md +1 -1
- package/presets/opencode/android-kotlin/skills/unit-testing/SKILL.md +1 -1
- package/presets/opencode/android-kotlin/skills/ux-design/SKILL.md +1 -1
- package/presets/opencode/android-kotlin/skills/write-adr/SKILL.md +1 -1
- package/presets/opencode/go/adapter-map.json +1 -1
- package/presets/opencode/go/agents/build-verifier.md +1 -1
- package/presets/opencode/go/commands/spec-start.md +1 -1
- package/presets/opencode/go/commands/task-continue.md +1 -1
- package/presets/opencode/go/commands/task.md +1 -1
- package/presets/opencode/go/commands/technical-retro.md +1 -1
- package/presets/opencode/go/hooks/chain-team-phases.sh +32 -3
- package/presets/opencode/go/rules/agent-team-intake.md +4 -0
- package/presets/opencode/go/rules/code-quality-and-refactoring.md +15 -0
- package/presets/opencode/go/rules/code-review-mr.md +7 -0
- package/presets/opencode/go/rules/design-guidance.md +5 -0
- package/presets/opencode/go/rules/mcp-usage.md +7 -0
- package/presets/opencode/go/rules/preset-layering.md +1 -1
- package/presets/opencode/go/rules/preset-pr-checklist.md +1 -1
- package/presets/opencode/go/rules/preset-token-budget.md +10 -10
- package/presets/opencode/go/rules/product-specs-authoring.md +6 -0
- package/presets/opencode/go/rules/product-specs.md +6 -0
- package/presets/opencode/go/skills/ci-investigation/SKILL.md +1 -1
- package/presets/opencode/go/skills/code-review/SKILL.md +1 -1
- package/presets/opencode/go/skills/debug-investigation/SKILL.md +1 -1
- package/presets/opencode/go/skills/feature-delivery/SKILL.md +1 -1
- package/presets/opencode/go/skills/integration-testing/SKILL.md +1 -1
- package/presets/opencode/go/skills/spec-authoring/SKILL.md +1 -1
- package/presets/opencode/go/skills/spec-discovery/SKILL.md +1 -1
- package/presets/opencode/go/skills/technical-retro/SKILL.md +1 -1
- package/presets/opencode/go/skills/unit-testing/SKILL.md +1 -1
- package/presets/opencode/go/skills/write-adr/SKILL.md +1 -1
- package/presets/opencode/ios-swift/adapter-map.json +1 -1
- package/presets/opencode/ios-swift/agents/build-verifier.md +3 -3
- package/presets/opencode/ios-swift/commands/spec-start.md +1 -1
- package/presets/opencode/ios-swift/commands/task-continue.md +1 -1
- package/presets/opencode/ios-swift/commands/task.md +1 -1
- package/presets/opencode/ios-swift/commands/technical-retro.md +1 -1
- package/presets/opencode/ios-swift/hooks/chain-team-phases.sh +32 -3
- package/presets/opencode/ios-swift/rules/code-quality-and-refactoring.md +14 -0
- package/presets/opencode/ios-swift/rules/code-review-mr.md +39 -0
- package/presets/opencode/ios-swift/rules/design-guidance.md +5 -0
- package/presets/opencode/ios-swift/rules/feature-delivery-workflow.md +66 -0
- package/presets/opencode/ios-swift/rules/mcp-usage.md +8 -0
- package/presets/opencode/ios-swift/rules/mockup-review.md +4 -0
- package/presets/opencode/ios-swift/rules/preset-layering.md +1 -1
- package/presets/opencode/ios-swift/rules/preset-pr-checklist.md +1 -1
- package/presets/opencode/ios-swift/rules/preset-token-budget.md +10 -10
- package/presets/opencode/ios-swift/rules/product-specs-authoring.md +6 -0
- package/presets/opencode/ios-swift/rules/product-specs.md +5 -0
- package/presets/opencode/ios-swift/rules/reference-features.md +49 -0
- package/presets/opencode/ios-swift/rules/swiftui-ui.md +7 -0
- package/presets/opencode/ios-swift/rules/ux-design.md +4 -0
- package/presets/opencode/ios-swift/skills/ci-investigation/SKILL.md +1 -1
- package/presets/opencode/ios-swift/skills/code-review/SKILL.md +1 -1
- package/presets/opencode/ios-swift/skills/debug-investigation/SKILL.md +1 -1
- package/presets/opencode/ios-swift/skills/feature-delivery/SKILL.md +1 -1
- package/presets/opencode/ios-swift/skills/mockup-review/SKILL.md +1 -1
- package/presets/opencode/ios-swift/skills/spec-authoring/SKILL.md +1 -1
- package/presets/opencode/ios-swift/skills/spec-discovery/SKILL.md +1 -1
- package/presets/opencode/ios-swift/skills/technical-retro/SKILL.md +1 -1
- package/presets/opencode/ios-swift/skills/unit-testing/SKILL.md +1 -1
- package/presets/opencode/ios-swift/skills/ux-design/SKILL.md +1 -1
- package/presets/opencode/ios-swift/skills/write-adr/SKILL.md +1 -1
- package/presets/opencode/ios-swift/skills/xcuitest-e2e/SKILL.md +1 -1
- package/presets/opencode/java/adapter-map.json +1 -1
- package/presets/opencode/java/agents/build-verifier.md +1 -1
- package/presets/opencode/java/commands/spec-start.md +1 -1
- package/presets/opencode/java/commands/task-continue.md +1 -1
- package/presets/opencode/java/commands/task.md +1 -1
- package/presets/opencode/java/commands/technical-retro.md +1 -1
- package/presets/opencode/java/hooks/chain-team-phases.sh +32 -3
- package/presets/opencode/java/rules/agent-team-intake.md +4 -0
- package/presets/opencode/java/rules/code-quality-and-refactoring.md +15 -0
- package/presets/opencode/java/rules/code-review-mr.md +9 -0
- package/presets/opencode/java/rules/design-guidance.md +6 -0
- package/presets/opencode/java/rules/mcp-usage.md +6 -0
- package/presets/opencode/java/rules/preset-layering.md +1 -1
- package/presets/opencode/java/rules/preset-pr-checklist.md +1 -1
- package/presets/opencode/java/rules/preset-token-budget.md +10 -10
- package/presets/opencode/java/rules/product-specs-authoring.md +6 -0
- package/presets/opencode/java/rules/product-specs.md +6 -0
- package/presets/opencode/java/skills/ci-investigation/SKILL.md +1 -1
- package/presets/opencode/java/skills/code-review/SKILL.md +1 -1
- package/presets/opencode/java/skills/debug-investigation/SKILL.md +1 -1
- package/presets/opencode/java/skills/feature-delivery/SKILL.md +1 -1
- package/presets/opencode/java/skills/integration-testing/SKILL.md +1 -1
- package/presets/opencode/java/skills/spec-authoring/SKILL.md +1 -1
- package/presets/opencode/java/skills/spec-discovery/SKILL.md +1 -1
- package/presets/opencode/java/skills/technical-retro/SKILL.md +1 -1
- package/presets/opencode/java/skills/unit-testing/SKILL.md +1 -1
- package/presets/opencode/java/skills/write-adr/SKILL.md +1 -1
- package/presets/opencode/mcp-ts/adapter-map.json +1 -1
- package/presets/opencode/mcp-ts/agents/build-verifier.md +1 -1
- package/presets/opencode/mcp-ts/commands/spec-start.md +1 -1
- package/presets/opencode/mcp-ts/commands/task-continue.md +1 -1
- package/presets/opencode/mcp-ts/commands/task.md +1 -1
- package/presets/opencode/mcp-ts/commands/technical-retro.md +1 -1
- package/presets/opencode/mcp-ts/hooks/chain-team-phases.sh +32 -3
- package/presets/opencode/mcp-ts/rules/agent-team-intake.md +5 -0
- package/presets/opencode/mcp-ts/rules/anti-sycophancy-discipline.md +4 -0
- package/presets/opencode/mcp-ts/rules/code-quality-and-refactoring.md +15 -0
- package/presets/opencode/mcp-ts/rules/code-review-mr.md +6 -0
- package/presets/opencode/mcp-ts/rules/design-guidance.md +5 -0
- package/presets/opencode/mcp-ts/rules/mcp-usage.md +7 -0
- package/presets/opencode/mcp-ts/rules/preset-layering.md +1 -1
- package/presets/opencode/mcp-ts/rules/preset-pr-checklist.md +1 -1
- package/presets/opencode/mcp-ts/rules/preset-token-budget.md +10 -10
- package/presets/opencode/mcp-ts/rules/product-specs-authoring.md +6 -0
- package/presets/opencode/mcp-ts/rules/product-specs.md +6 -0
- package/presets/opencode/mcp-ts/skills/code-review/SKILL.md +1 -1
- package/presets/opencode/mcp-ts/skills/debug-investigation/SKILL.md +1 -1
- package/presets/opencode/mcp-ts/skills/feature-delivery/SKILL.md +1 -1
- package/presets/opencode/mcp-ts/skills/spec-authoring/SKILL.md +1 -1
- package/presets/opencode/mcp-ts/skills/spec-discovery/SKILL.md +1 -1
- package/presets/opencode/mcp-ts/skills/unit-testing/SKILL.md +1 -1
- package/presets/opencode/next/adapter-map.json +1 -1
- package/presets/opencode/next/agents/build-verifier.md +2 -2
- package/presets/opencode/next/commands/spec-start.md +1 -1
- package/presets/opencode/next/commands/task-continue.md +1 -1
- package/presets/opencode/next/commands/task.md +1 -1
- package/presets/opencode/next/commands/technical-retro.md +1 -1
- package/presets/opencode/next/hooks/chain-team-phases.sh +32 -3
- package/presets/opencode/next/rules/api-services.md +6 -4
- package/presets/opencode/next/rules/code-quality-and-refactoring.md +13 -0
- package/presets/opencode/next/rules/code-review-mr.md +13 -0
- package/presets/opencode/next/rules/design-guidance.md +5 -0
- package/presets/opencode/next/rules/feature-delivery-workflow.md +85 -0
- package/presets/opencode/next/rules/mcp-usage.md +9 -0
- package/presets/opencode/next/rules/mockup-review.md +4 -0
- package/presets/opencode/next/rules/next-app-core.md +2 -1
- package/presets/opencode/next/rules/preset-layering.md +1 -1
- package/presets/opencode/next/rules/preset-pr-checklist.md +1 -1
- package/presets/opencode/next/rules/preset-token-budget.md +10 -10
- package/presets/opencode/next/rules/product-specs-authoring.md +6 -0
- package/presets/opencode/next/rules/product-specs.md +6 -0
- package/presets/opencode/next/rules/react-ui.md +37 -1
- package/presets/opencode/next/rules/reference-features.md +36 -0
- package/presets/opencode/next/rules/store-rtk.md +6 -5
- package/presets/opencode/next/rules/tests-e2e-structure.md +15 -0
- package/presets/opencode/next/rules/tests-unit.md +33 -0
- package/presets/opencode/next/rules/ux-design.md +4 -0
- package/presets/opencode/next/skills/ci-investigation/SKILL.md +1 -1
- package/presets/opencode/next/skills/code-review/SKILL.md +1 -1
- package/presets/opencode/next/skills/debug-investigation/SKILL.md +1 -1
- package/presets/opencode/next/skills/feature-delivery/SKILL.md +1 -1
- package/presets/opencode/next/skills/mockup-review/SKILL.md +1 -1
- package/presets/opencode/next/skills/playwright-e2e/SKILL.md +1 -1
- package/presets/opencode/next/skills/react-performance/SKILL.md +1 -1
- package/presets/opencode/next/skills/spec-authoring/SKILL.md +1 -1
- package/presets/opencode/next/skills/spec-discovery/SKILL.md +1 -1
- package/presets/opencode/next/skills/technical-retro/SKILL.md +1 -1
- package/presets/opencode/next/skills/unit-testing/SKILL.md +1 -1
- package/presets/opencode/next/skills/ux-design/SKILL.md +1 -1
- package/presets/opencode/next/skills/write-adr/SKILL.md +1 -1
- package/presets/opencode/nuxt/adapter-map.json +1 -1
- package/presets/opencode/nuxt/agents/build-verifier.md +2 -2
- package/presets/opencode/nuxt/commands/spec-start.md +1 -1
- package/presets/opencode/nuxt/commands/task-continue.md +1 -1
- package/presets/opencode/nuxt/commands/task.md +1 -1
- package/presets/opencode/nuxt/commands/technical-retro.md +1 -1
- package/presets/opencode/nuxt/hooks/chain-team-phases.sh +32 -3
- package/presets/opencode/nuxt/rules/code-quality-and-refactoring.md +13 -0
- package/presets/opencode/nuxt/rules/code-review-mr.md +13 -0
- package/presets/opencode/nuxt/rules/design-guidance.md +5 -0
- package/presets/opencode/nuxt/rules/feature-delivery-workflow.md +82 -0
- package/presets/opencode/nuxt/rules/mcp-usage.md +9 -0
- package/presets/opencode/nuxt/rules/mockup-review.md +4 -0
- package/presets/opencode/nuxt/rules/preset-layering.md +1 -1
- package/presets/opencode/nuxt/rules/preset-pr-checklist.md +1 -1
- package/presets/opencode/nuxt/rules/preset-token-budget.md +10 -10
- package/presets/opencode/nuxt/rules/product-specs-authoring.md +6 -0
- package/presets/opencode/nuxt/rules/product-specs.md +5 -0
- package/presets/opencode/nuxt/rules/reference-features.md +36 -0
- package/presets/opencode/nuxt/rules/tests-e2e-structure.md +16 -0
- package/presets/opencode/nuxt/rules/tests-unit.md +11 -0
- package/presets/opencode/nuxt/rules/ux-design.md +4 -0
- package/presets/opencode/nuxt/rules/vue-ui.md +7 -0
- package/presets/opencode/nuxt/skills/ci-investigation/SKILL.md +1 -1
- package/presets/opencode/nuxt/skills/code-review/SKILL.md +1 -1
- package/presets/opencode/nuxt/skills/debug-investigation/SKILL.md +1 -1
- package/presets/opencode/nuxt/skills/feature-delivery/SKILL.md +1 -1
- package/presets/opencode/nuxt/skills/mockup-review/SKILL.md +1 -1
- package/presets/opencode/nuxt/skills/playwright-e2e/SKILL.md +1 -1
- package/presets/opencode/nuxt/skills/spec-authoring/SKILL.md +1 -1
- package/presets/opencode/nuxt/skills/spec-discovery/SKILL.md +1 -1
- package/presets/opencode/nuxt/skills/technical-retro/SKILL.md +1 -1
- package/presets/opencode/nuxt/skills/unit-testing/SKILL.md +1 -1
- package/presets/opencode/nuxt/skills/ux-design/SKILL.md +1 -1
- package/presets/opencode/nuxt/skills/vue-performance/SKILL.md +1 -1
- package/presets/opencode/nuxt/skills/write-adr/SKILL.md +1 -1
- package/presets/opencode/php-hexagonal/adapter-map.json +1 -1
- package/presets/opencode/php-hexagonal/agents/build-verifier.md +1 -1
- package/presets/opencode/php-hexagonal/commands/spec-start.md +1 -1
- package/presets/opencode/php-hexagonal/commands/task-continue.md +1 -1
- package/presets/opencode/php-hexagonal/commands/task.md +1 -1
- package/presets/opencode/php-hexagonal/commands/technical-retro.md +1 -1
- package/presets/opencode/php-hexagonal/hooks/chain-team-phases.sh +32 -3
- package/presets/opencode/php-hexagonal/rules/agent-team-intake.md +4 -0
- package/presets/opencode/php-hexagonal/rules/code-quality-and-refactoring.md +15 -0
- package/presets/opencode/php-hexagonal/rules/code-review-mr.md +9 -0
- package/presets/opencode/php-hexagonal/rules/design-guidance.md +6 -0
- package/presets/opencode/php-hexagonal/rules/mcp-usage.md +6 -0
- package/presets/opencode/php-hexagonal/rules/preset-layering.md +1 -1
- package/presets/opencode/php-hexagonal/rules/preset-pr-checklist.md +1 -1
- package/presets/opencode/php-hexagonal/rules/preset-token-budget.md +10 -10
- package/presets/opencode/php-hexagonal/rules/product-specs-authoring.md +6 -0
- package/presets/opencode/php-hexagonal/rules/product-specs.md +6 -0
- package/presets/opencode/php-hexagonal/skills/ci-investigation/SKILL.md +1 -1
- package/presets/opencode/php-hexagonal/skills/code-review/SKILL.md +1 -1
- package/presets/opencode/php-hexagonal/skills/debug-investigation/SKILL.md +1 -1
- package/presets/opencode/php-hexagonal/skills/feature-delivery/SKILL.md +1 -1
- package/presets/opencode/php-hexagonal/skills/integration-testing/SKILL.md +1 -1
- package/presets/opencode/php-hexagonal/skills/spec-authoring/SKILL.md +1 -1
- package/presets/opencode/php-hexagonal/skills/spec-discovery/SKILL.md +1 -1
- package/presets/opencode/php-hexagonal/skills/technical-retro/SKILL.md +1 -1
- package/presets/opencode/php-hexagonal/skills/unit-testing/SKILL.md +1 -1
- package/presets/opencode/php-hexagonal/skills/write-adr/SKILL.md +1 -1
- package/presets/opencode/php-laravel/adapter-map.json +1 -1
- package/presets/opencode/php-laravel/agents/build-verifier.md +1 -1
- package/presets/opencode/php-laravel/commands/spec-start.md +1 -1
- package/presets/opencode/php-laravel/commands/task-continue.md +1 -1
- package/presets/opencode/php-laravel/commands/task.md +1 -1
- package/presets/opencode/php-laravel/commands/technical-retro.md +1 -1
- package/presets/opencode/php-laravel/hooks/chain-team-phases.sh +32 -3
- package/presets/opencode/php-laravel/rules/agent-team-intake.md +4 -0
- package/presets/opencode/php-laravel/rules/code-quality-and-refactoring.md +15 -0
- package/presets/opencode/php-laravel/rules/code-review-mr.md +10 -0
- package/presets/opencode/php-laravel/rules/design-guidance.md +6 -0
- package/presets/opencode/php-laravel/rules/mcp-usage.md +6 -0
- package/presets/opencode/php-laravel/rules/preset-layering.md +1 -1
- package/presets/opencode/php-laravel/rules/preset-pr-checklist.md +1 -1
- package/presets/opencode/php-laravel/rules/preset-token-budget.md +10 -10
- package/presets/opencode/php-laravel/rules/product-specs-authoring.md +6 -0
- package/presets/opencode/php-laravel/rules/product-specs.md +6 -0
- package/presets/opencode/php-laravel/skills/ci-investigation/SKILL.md +1 -1
- package/presets/opencode/php-laravel/skills/code-review/SKILL.md +1 -1
- package/presets/opencode/php-laravel/skills/debug-investigation/SKILL.md +1 -1
- package/presets/opencode/php-laravel/skills/feature-delivery/SKILL.md +1 -1
- package/presets/opencode/php-laravel/skills/integration-testing/SKILL.md +1 -1
- package/presets/opencode/php-laravel/skills/spec-authoring/SKILL.md +1 -1
- package/presets/opencode/php-laravel/skills/spec-discovery/SKILL.md +1 -1
- package/presets/opencode/php-laravel/skills/technical-retro/SKILL.md +1 -1
- package/presets/opencode/php-laravel/skills/unit-testing/SKILL.md +1 -1
- package/presets/opencode/php-laravel/skills/write-adr/SKILL.md +1 -1
- package/presets/opencode/svelte/adapter-map.json +1 -1
- package/presets/opencode/svelte/agents/build-verifier.md +2 -2
- package/presets/opencode/svelte/commands/spec-start.md +1 -1
- package/presets/opencode/svelte/commands/task-continue.md +1 -1
- package/presets/opencode/svelte/commands/task.md +1 -1
- package/presets/opencode/svelte/commands/technical-retro.md +1 -1
- package/presets/opencode/svelte/hooks/chain-team-phases.sh +32 -3
- package/presets/opencode/svelte/rules/code-quality-and-refactoring.md +13 -0
- package/presets/opencode/svelte/rules/code-review-mr.md +13 -0
- package/presets/opencode/svelte/rules/design-guidance.md +5 -0
- package/presets/opencode/svelte/rules/feature-delivery-workflow.md +54 -0
- package/presets/opencode/svelte/rules/mcp-usage.md +9 -0
- package/presets/opencode/svelte/rules/mockup-review.md +4 -0
- package/presets/opencode/svelte/rules/preset-layering.md +1 -1
- package/presets/opencode/svelte/rules/preset-pr-checklist.md +1 -1
- package/presets/opencode/svelte/rules/preset-token-budget.md +10 -10
- package/presets/opencode/svelte/rules/product-specs-authoring.md +6 -0
- package/presets/opencode/svelte/rules/product-specs.md +5 -0
- package/presets/opencode/svelte/rules/reference-features.md +37 -0
- package/presets/opencode/svelte/rules/svelte-ui.md +7 -0
- package/presets/opencode/svelte/rules/tests-e2e-structure.md +16 -0
- package/presets/opencode/svelte/rules/tests-unit.md +11 -0
- package/presets/opencode/svelte/rules/ux-design.md +4 -0
- package/presets/opencode/svelte/skills/ci-investigation/SKILL.md +1 -1
- package/presets/opencode/svelte/skills/code-review/SKILL.md +1 -1
- package/presets/opencode/svelte/skills/debug-investigation/SKILL.md +1 -1
- package/presets/opencode/svelte/skills/feature-delivery/SKILL.md +1 -1
- package/presets/opencode/svelte/skills/mockup-review/SKILL.md +1 -1
- package/presets/opencode/svelte/skills/playwright-e2e/SKILL.md +1 -1
- package/presets/opencode/svelte/skills/spec-authoring/SKILL.md +1 -1
- package/presets/opencode/svelte/skills/spec-discovery/SKILL.md +1 -1
- package/presets/opencode/svelte/skills/svelte-performance/SKILL.md +1 -1
- package/presets/opencode/svelte/skills/technical-retro/SKILL.md +1 -1
- package/presets/opencode/svelte/skills/unit-testing/SKILL.md +1 -1
- package/presets/opencode/svelte/skills/ux-design/SKILL.md +1 -1
- package/presets/opencode/svelte/skills/write-adr/SKILL.md +1 -1
- package/scripts/capture-cli-golden.mjs +8 -5
- package/scripts/check-frontmatter.mjs +83 -0
- package/scripts/check-generated-drift.mjs +106 -0
- package/scripts/check-mavis-token-budget.mjs +1 -1
- package/scripts/check-opencode-token-budget.mjs +1 -1
- package/scripts/check-preset-structure.sh +27 -0
- package/scripts/check-preset-token-budget.sh +16 -17
- package/scripts/check-shared-core-drift.sh +10 -5
- package/scripts/close-agent-task-human-gate.mjs +6 -4
- package/scripts/fixtures/cli-golden/claude/next.json +24 -18
- package/scripts/fixtures/cli-golden/cursor/next.json +17 -17
- package/scripts/fixtures/cli-golden/mavis/android-kotlin.json +18 -18
- package/scripts/fixtures/cli-golden/mavis/go.json +15 -15
- package/scripts/fixtures/cli-golden/mavis/ios-swift.json +19 -19
- package/scripts/fixtures/cli-golden/mavis/java.json +15 -15
- package/scripts/fixtures/cli-golden/mavis/mcp-ts.json +16 -16
- package/scripts/fixtures/cli-golden/mavis/next.json +24 -24
- package/scripts/fixtures/cli-golden/mavis/nuxt.json +21 -21
- package/scripts/fixtures/cli-golden/mavis/php-hexagonal.json +15 -15
- package/scripts/fixtures/cli-golden/mavis/php-laravel.json +15 -15
- package/scripts/fixtures/cli-golden/mavis/svelte.json +21 -21
- package/scripts/fixtures/cli-golden/opencode/android-kotlin.json +31 -31
- package/scripts/fixtures/cli-golden/opencode/go.json +26 -26
- package/scripts/fixtures/cli-golden/opencode/ios-swift.json +32 -32
- package/scripts/fixtures/cli-golden/opencode/java.json +26 -26
- package/scripts/fixtures/cli-golden/opencode/mcp-ts.json +23 -23
- package/scripts/fixtures/cli-golden/opencode/next.json +38 -38
- package/scripts/fixtures/cli-golden/opencode/nuxt.json +35 -35
- package/scripts/fixtures/cli-golden/opencode/php-hexagonal.json +26 -26
- package/scripts/fixtures/cli-golden/opencode/php-laravel.json +26 -26
- package/scripts/fixtures/cli-golden/opencode/svelte.json +35 -35
- package/scripts/lib/generate-adapter-common.mjs +11 -0
- package/scripts/lib/generate-mavis-adapter.mjs +20 -10
- package/scripts/lib/generate-opencode-adapter.mjs +19 -4
- package/scripts/test-agent-task-metrics-hooks.mjs +5 -5
- package/scripts/test-chain-team-phases-coverage.mjs +176 -1
- package/scripts/test-cli-init-clean.mjs +165 -34
- package/scripts/test-mavis-context-budget.mjs +1 -1
- package/scripts/test-opencode-context-budget.mjs +1 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Task — unified entry point (router + pipeline)
|
|
2
2
|
|
|
3
|
-
Main command for task intake. Parent agent = orchestrator (`agent-team-orchestrator.md`). Intake for work requests without
|
|
3
|
+
Main command for task intake. Parent agent = orchestrator (`agent-team-orchestrator.md`). Intake for work requests without `/task` — `agent-team-intake.md`.
|
|
4
4
|
|
|
5
5
|
## Arguments
|
|
6
6
|
|
|
7
|
-
Everything after
|
|
7
|
+
Everything after `/task` is the task description in natural language.
|
|
8
8
|
|
|
9
9
|
Examples:
|
|
10
10
|
|
|
@@ -22,13 +22,13 @@ Examples:
|
|
|
22
22
|
1. **Slug** — kebab-case from the description (≤48 characters). Create `.ai.local/team/tasks/<slug>/` via **Write** (e.g. placeholder `pipeline.json` or empty marker) — runtime/hook owns `status.json` — **not** via Shell `mkdir` (sandbox → `Operation not permitted`).
|
|
23
23
|
2. **Router** — invoke subagent **task-router** with the task description and slug path.
|
|
24
24
|
3. **Plan** — show the user the table from `pipeline.json`: intent, steps, skipped, humanGates.
|
|
25
|
-
4. **Intent retro** — if `intent === "retro"`, run
|
|
25
|
+
4. **Intent retro** — if `intent === "retro"`, run `/technical-retro` and **stop**.
|
|
26
26
|
5. **Start** — after router:
|
|
27
27
|
- confirm `pipeline.json` and `active-task.json`;
|
|
28
28
|
- **do not** write lifecycle fields in `status.json` / `metrics.json` yourself — orchestration runtime/hook owns them (see **agent-artifact-contracts**). If `status.json` is missing, only minimal bootstrap is allowed (`slug`, `intent`, `pipelineIndex: 0`, `currentAgent: steps[0]`, `state: in_progress`) — **do not** increment `pipelineIndex` manually;
|
|
29
29
|
- invoke subagent for `pipeline.steps[0].agent` (slug, artifact paths, scope).
|
|
30
30
|
6. **After each agent** — wait for hook handoff / reconciliation terminal receipt → `status.state`; do not start the next step until `status.json` reflects handoff (or until there is a `followup_message` from the hook).
|
|
31
|
-
7. **Human gate** — if after the current step there is a gate in `humanGates` (`after:<agent>`), after the agent finishes **stop** and ask for continue
|
|
31
|
+
7. **Human gate** — if after the current step there is a gate in `humanGates` (`after:<agent>`), after the agent finishes **stop** and ask for `/task-continue <slug>`.
|
|
32
32
|
|
|
33
33
|
## Do not
|
|
34
34
|
|
|
@@ -38,10 +38,10 @@ Examples:
|
|
|
38
38
|
|
|
39
39
|
## If slug is taken
|
|
40
40
|
|
|
41
|
-
- `awaitingHumanGate` / `state: awaiting_approval` → offer artifact review or continue
|
|
41
|
+
- `awaitingHumanGate` / `state: awaiting_approval` → offer artifact review or `/task-continue <slug>`.
|
|
42
42
|
- `in_progress` → ask: continue or new slug.
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
## Metrics
|
|
46
46
|
|
|
47
|
-
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
|
|
47
|
+
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.
|
|
@@ -43,7 +43,10 @@ try {
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
const slug = active.slug;
|
|
46
|
-
|
|
46
|
+
// Reject non-kebab / traversal slugs: the runtime writes status.json and
|
|
47
|
+
// metrics.json under tasks/<slug>, so an unchecked slug could escape the tree.
|
|
48
|
+
const SLUG_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
49
|
+
if (typeof slug !== 'string' || slug.length > 48 || !SLUG_RE.test(slug)) {
|
|
47
50
|
process.stdout.write('{}');
|
|
48
51
|
process.exit(0);
|
|
49
52
|
}
|
|
@@ -70,6 +73,9 @@ function waitForMetricsLock() {
|
|
|
70
73
|
// and never blocked on the lock file, so two concurrent subagentStop events
|
|
71
74
|
// could both acquire the lock and corrupt metrics.json. Retry EEXIST with a
|
|
72
75
|
// 10 ms sleep up to 200 attempts (2 s ceiling). On any other error, throw.
|
|
76
|
+
// A lock left behind by a killed process is reclaimed once its mtime is older
|
|
77
|
+
// than STALE_LOCK_MS, so one crash cannot brick the task forever.
|
|
78
|
+
const STALE_LOCK_MS = 30000;
|
|
73
79
|
for (let attempt = 0; attempt < 200; attempt += 1) {
|
|
74
80
|
try {
|
|
75
81
|
const fd = fs.openSync(METRICS_LOCK, 'wx');
|
|
@@ -77,6 +83,13 @@ function waitForMetricsLock() {
|
|
|
77
83
|
return;
|
|
78
84
|
} catch (error) {
|
|
79
85
|
if (!error || error.code !== 'EEXIST') throw error;
|
|
86
|
+
try {
|
|
87
|
+
const lockStat = fs.statSync(METRICS_LOCK);
|
|
88
|
+
if (Date.now() - lockStat.mtimeMs > STALE_LOCK_MS) {
|
|
89
|
+
fs.unlinkSync(METRICS_LOCK);
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
} catch {}
|
|
80
93
|
const until = Date.now() + 10;
|
|
81
94
|
while (Date.now() < until) { /* 10 ms busy-wait */ }
|
|
82
95
|
}
|
|
@@ -490,7 +503,10 @@ function legacyFlow() {
|
|
|
490
503
|
|
|
491
504
|
|
|
492
505
|
if (hookInput.action === 'end_human_gate') {
|
|
493
|
-
|
|
506
|
+
// Only advance when a gate was actually open. A duplicate or retried
|
|
507
|
+
// end_human_gate must be a no-op, not a silent pipeline skip.
|
|
508
|
+
const gateWasOpen = Boolean(status.activeHumanGateEventId) || status.awaitingHumanGate === true;
|
|
509
|
+
status.awaitingHumanGate = false;
|
|
494
510
|
// A2 (retro §8): pin a single runId per pipeline so subsequent events don't
|
|
495
511
|
// fragment the metrics ledger across multiple runId sequences. Prefer
|
|
496
512
|
// metrics.json.task.runId when metrics already exist, then status.metricsRunId,
|
|
@@ -517,7 +533,7 @@ if (hookInput.action === 'end_human_gate') {
|
|
|
517
533
|
});
|
|
518
534
|
delete status.activeHumanGateEventId;
|
|
519
535
|
}
|
|
520
|
-
if (hookInput.activateNext && fs.existsSync(pipelinePath)) {
|
|
536
|
+
if (gateWasOpen && hookInput.activateNext && fs.existsSync(pipelinePath)) {
|
|
521
537
|
let resumePipeline = null;
|
|
522
538
|
try { resumePipeline = JSON.parse(fs.readFileSync(pipelinePath, 'utf8')); } catch {}
|
|
523
539
|
if (resumePipeline) {
|
|
@@ -539,6 +555,19 @@ if (hookInput.action === 'end_human_gate') {
|
|
|
539
555
|
else out(handoffForAgent(resumeAgents[0], resumeNext.step.scope, resumeNext.step));
|
|
540
556
|
process.exit(0);
|
|
541
557
|
}
|
|
558
|
+
// Gate on the final step: no executable step remains. Complete the
|
|
559
|
+
// pipeline instead of leaving it in_progress forever.
|
|
560
|
+
status.state = 'completed';
|
|
561
|
+
completeTaskMetrics();
|
|
562
|
+
writeStatus({
|
|
563
|
+
pipelineIndex: resumeSteps.length,
|
|
564
|
+
phase: 'done',
|
|
565
|
+
state: 'completed',
|
|
566
|
+
currentAgent: null,
|
|
567
|
+
awaitingHumanGate: false,
|
|
568
|
+
});
|
|
569
|
+
out(`Pipeline complete for "${slug}". Run /technical-retro ${slug}.`);
|
|
570
|
+
process.exit(0);
|
|
542
571
|
}
|
|
543
572
|
}
|
|
544
573
|
// A2 (retro §8): if gate closes the final human gate of the pipeline
|
|
@@ -9,3 +9,7 @@ When the user message looks like a **work request** (implement, add, fix, refact
|
|
|
9
9
|
3. Pure questions (“how does X work”, “explain”) — prefer agent **`codebase-analyzer`** (explain-as-is); trivial one-liners may be answered inline. Do not open `/task`.
|
|
10
10
|
|
|
11
11
|
Exceptions: user explicitly says “no pipeline”, “just do it”, or continues an active slug.
|
|
12
|
+
|
|
13
|
+
## Stack notes
|
|
14
|
+
|
|
15
|
+
- Scope: Java services (`src/main/java/**`, `configuration/`, `*Application.java`) — hexagonal ports/adapters — not Playwright/XCUITest UI flows.
|
|
@@ -14,6 +14,12 @@
|
|
|
14
14
|
- **CUPID:** Composable; Unix philosophy (one responsibility); Predictable; Idiomatic (repo); Domain-based.
|
|
15
15
|
- **Composition over inheritance;** Law of Demeter — no `a.b.c.d` chains; via public API / facade.
|
|
16
16
|
|
|
17
|
+
# Over-abstraction guardrails
|
|
18
|
+
|
|
19
|
+
- **No unnecessary constants:** do not hoist a one-off literal, string, or boolean into a named constant. Inline it, or use an existing token/enum when the value is meaningful and reused. Named constants are for shared, semantic, or repeated values.
|
|
20
|
+
- **No invented utilities:** do not add a `utils`/helper for a single call site or a thin pass-through wrapper. Inline it or extend the existing helper; a new shared utility is justified only after the Rule of Three.
|
|
21
|
+
- **Decompose over conditionals:** a unit (function, component, hook) that accumulates several branches (`if` / ternary / `switch`) should be split into smaller units with one reason to change instead of piling up conditions.
|
|
22
|
+
|
|
17
23
|
# Refactoring during changes
|
|
18
24
|
|
|
19
25
|
- Light refactor is OK if it reduces duplication, improves readability, and does not break public contracts.
|
|
@@ -38,3 +44,12 @@ Essentials below. Full procedural set (~17 rules) → load **`anti-sycophancy-di
|
|
|
38
44
|
Style enforcement (formatter / linter / post-change gate) lives in the **stack toolchain** — see each adapter’s **Stack notes**.
|
|
39
45
|
|
|
40
46
|
> Stack-specific lint gates, examples, and toolchain — in the preset adapter **Stack notes** section.
|
|
47
|
+
|
|
48
|
+
## Stack notes
|
|
49
|
+
|
|
50
|
+
- **No UI layer in this preset** — ignore shared-core bullets about design system / UI packages / CSS tokens; apply public-API and boy-scout rules to Java packages/ports instead.
|
|
51
|
+
- Public API between packages: exported types in module API or explicit ports — avoid deep imports of another feature's internals.
|
|
52
|
+
- Prefer checked/unchecked exceptions with clear translation at adapter edges; do not leak persistence exceptions upward.
|
|
53
|
+
- Interfaces belong at **ports** (consumer side), not on every class; prefer composition over inheritance.
|
|
54
|
+
- Post-change gate: **`post-change-test.mdc`** + **`java-tooling.mdc`** (not yarn lint / xcodebuild / Playwright).
|
|
55
|
+
- Style/static analysis: use **repository/CI** formatter and checks — do not invent a parallel Checkstyle/SpotBugs bible in rules.
|
|
@@ -38,3 +38,12 @@ Procedure details live in skill `code-review`. Required shape:
|
|
|
38
38
|
- Rank by severity: **`blocker` | `important` | `nit`** (list blocker → nit).
|
|
39
39
|
- Vague («looks risky») is not a finding — cite evidence or ask for surrounding file context.
|
|
40
40
|
- End with a verdict on its own line: **`Safe to merge | needs changes | reject`**.
|
|
41
|
+
|
|
42
|
+
## Stack notes
|
|
43
|
+
|
|
44
|
+
- Hexagonal boundaries: `architecture-boundaries`, `domain-layer`, ports vs adapters; Spring/JPA only at edges.
|
|
45
|
+
- HTTP DTO validation/mapping and persistence entity isolation: `api-http`, `persistence-adapters`.
|
|
46
|
+
- Composition root (`configuration/`, `*Application.java`) has no business logic.
|
|
47
|
+
- Tests: `tests-unit` (JUnit 5), `tests-integration` (Testcontainers); post-change: `post-change-test` / `java-tooling`.
|
|
48
|
+
- Security: secrets/PII/`security-java`; Spring Security config stays out of domain.
|
|
49
|
+
- Never require Playwright, XCUITest, `lint:js`, or `xcodebuild` for Java MRs.
|
|
@@ -97,3 +97,9 @@ Do not introduce a second stem (`refactoring-smells` / `design-patterns-for-agen
|
|
|
97
97
|
- Ubiquitous language: `feature-delivery-workflow` (lineage).
|
|
98
98
|
- MR checklist (smells in scope; pattern name only if repo uses it): `code-review-mr`.
|
|
99
99
|
- Token / twin policy for authors: `preset-token-budget`, `preset-twin-sync` (meta, not consumer always-on).
|
|
100
|
+
|
|
101
|
+
## Stack notes
|
|
102
|
+
|
|
103
|
+
- Strategy via small interfaces at **ports**; adapters (Spring/JPA/HTTP) implement, domain stays free of frameworks.
|
|
104
|
+
- Suggest Facade at package public API; avoid Singleton in favor of composition root / `@Configuration` wiring.
|
|
105
|
+
- Prefer records / immutable VOs for Strategy inputs when the repo already uses them — do not invent patterns mid-module.
|
|
@@ -84,3 +84,9 @@ Policy is stack-class-specific — see adapter **Stack notes**. If a Figma **plu
|
|
|
84
84
|
- Treating overlay absence as blocked (except user-required SoT)
|
|
85
85
|
- Tracker/admin write tools without an explicit ask
|
|
86
86
|
- Calling overlay MCP “just in case” on unrelated tasks
|
|
87
|
+
|
|
88
|
+
## Stack notes
|
|
89
|
+
|
|
90
|
+
- Shipped MCP is Context7 only. Do **not** require Storybook, Playwright, Chrome DevTools, or Figma as delivery gates.
|
|
91
|
+
- Observability and ticket overlays still apply when present.
|
|
92
|
+
- `init` **merges** `mcpServers`: preset keys update; extra local servers are kept.
|
|
@@ -9,7 +9,7 @@ Rules for **preset authors** (`packages/ai-rules/presets/**`). Not always-on in
|
|
|
9
9
|
| Layer | Where | What to put |
|
|
10
10
|
|-------|-------|-------------|
|
|
11
11
|
| **Core** | `presets/_shared/core/**` | Stack-agnostic prose + checklists; no frontmatter; no paths `app/**`, `Features/**`, Playwright, xcodebuild |
|
|
12
|
-
| **Stack** | `presets/{cursor\|claude\|mavis\|opencode}/<stack>/` | Domain/tooling, stack always-on
|
|
12
|
+
| **Stack** | `presets/{cursor\|claude\|mavis\|opencode}/<stack>/` | Domain/tooling, stack always-on set (3–5), stack examples in **Stack notes** |
|
|
13
13
|
| **Platform** | Cursor `.mdc` / Claude `.md` / Mavis `.md` / OpenCode `.md` | Frontmatter (`alwaysApply`/`globs` vs `paths:` vs OpenCode `mode`/`permission`), platform-only (`BUGBOT.md`, `CLAUDE.md`) |
|
|
14
14
|
|
|
15
15
|
## Where to put a new rule
|
|
@@ -12,7 +12,7 @@ Checklist for PRs that touch `packages/ai-rules/presets/**` (and dogfood `.curso
|
|
|
12
12
|
- [ ] **Mavis derive:** mapped `cursor/<stack>/` change → `mavis/<stack>/` + `adapter-map.json` **same PR** when the stack is in `releasedStacks` (run `generate-mavis.mjs --stack <stack>` + `check-mavis-adapter-map.mjs`; see `preset-twin-sync` § Mavis derivation)
|
|
13
13
|
- [ ] **OpenCode derive:** mapped `cursor/<stack>/` change → `opencode/<stack>/` + `adapter-map.json` **same PR** when the stack is in `releasedStacks` (run `generate-opencode.mjs --stack <stack>` + `check-opencode-adapter-map.mjs`; see `preset-twin-sync` § OpenCode derivation)
|
|
14
14
|
- [ ] **Mapping:** `claude/<stack>/rules/README.md` mapping table is current
|
|
15
|
-
- [ ] **Token budget:** Cursor `alwaysApply`
|
|
15
|
+
- [ ] **Token budget:** Cursor `alwaysApply` and Claude session-start both **3–5** (extra slots reserved for `ai-local-overlay`); body sum ≤200 (stretch ≤170); meta rules not always-on
|
|
16
16
|
- [ ] **Local overlay coverage:** every installable stack ships `ai-local-overlay.mdc` (Cursor) and `ai-local-overlay.md` (Claude) with `MANDATORY` + acknowledgement format + `docs/LOCAL-OVERLAY.md` pointer; Claude twin listed in `claude/<stack>/rules/README.md` mapping table. Run `packages/ai-rules/scripts/check-local-overlay.sh`.
|
|
17
17
|
- [ ] **Leakage:** no foreign stack agent stems / handoff strings (`preset-no-cross-stack-leakage`)
|
|
18
18
|
- [ ] **Hook-only lifecycle:** `status.json` / `metrics.json` writes happen only inside `hooks/`; agents read but never rewrite lifecycle fields. Run `packages/ai-rules/scripts/check-hook-only-lifecycle.sh`.
|
|
@@ -8,19 +8,19 @@ Invariants for rule loading in an **installed** preset (consumer app).
|
|
|
8
8
|
|
|
9
9
|
| Platform | Always-on | Cap |
|
|
10
10
|
|----------|-----------|-----|
|
|
11
|
-
| Cursor | `alwaysApply: true` |
|
|
12
|
-
| Claude | rules **without** `paths:` | **
|
|
13
|
-
| Mavis | `adapter-map` rules with `loadMode: root-entry` |
|
|
14
|
-
| OpenCode | `adapter-map` rules with `loadMode: root-entry` |
|
|
11
|
+
| Cursor | `alwaysApply: true` | **3–5** |
|
|
12
|
+
| Claude | rules **without** `paths:` | **3–5** |
|
|
13
|
+
| Mavis | `adapter-map` rules with `loadMode: root-entry` | **3–5** |
|
|
14
|
+
| OpenCode | `adapter-map` rules with `loadMode: root-entry` | **3–5** |
|
|
15
15
|
|
|
16
|
-
**
|
|
16
|
+
Caps are **aligned** across platforms: minimum **3** (base invariants), maximum **5**. Slots beyond the base invariants are reserved for `ai-local-overlay` (consumer-owned `.ai.local/` rules). If you do not need local overlay, demote that rule to `globs: ["**/.ai.local/**"]` / Claude `paths:`, or a non-root load mode on Mavis / OpenCode.
|
|
17
17
|
|
|
18
|
-
**Claude Option A (README exclusion):** when counting Claude rules without `paths:` / session-start, **exclude `**/README.md`** (topic indexes are not session-start rules).
|
|
18
|
+
**Claude Option A (README exclusion):** when counting Claude rules without `paths:` / session-start, **exclude `**/README.md`** (topic indexes are not session-start rules). Body budget sums only the intended session-start rules (≤5).
|
|
19
19
|
|
|
20
20
|
Session-start body budget:
|
|
21
|
-
- Claude
|
|
22
|
-
- Cursor
|
|
23
|
-
- Mavis / OpenCode: ≤
|
|
21
|
+
- Claude session-start: ≤200 lines total (stretch ≤170).
|
|
22
|
+
- Cursor always-on: ≤200 lines total (stretch ≤170).
|
|
23
|
+
- Mavis / OpenCode: ≤5 root-entry rule files; combined root `AGENTS.md` + platform entry ≤200 nonempty lines. Do not dump the full rule catalog into `AGENTS.md`.
|
|
24
24
|
|
|
25
25
|
## Meta / author rules
|
|
26
26
|
|
|
@@ -36,4 +36,4 @@ Orchestrator, feature-delivery, code-review, post-change gates, domain globs —
|
|
|
36
36
|
|
|
37
37
|
## Verifier
|
|
38
38
|
|
|
39
|
-
build-verifier **FAIL** if Cursor `alwaysApply` count
|
|
39
|
+
build-verifier **FAIL** if Cursor `alwaysApply` count or Claude session-start count is outside **3–5** (Claude count **excludes `**/README.md`**), or if a `preset-*` meta rule is marked always-on.
|
|
@@ -110,3 +110,9 @@ Block handoff via `open_questions` until fixed:
|
|
|
110
110
|
- Skill `spec-authoring` — procedural checklist
|
|
111
111
|
- Skill `spec-discovery` — opt-in research-before-spec (not default)
|
|
112
112
|
- Optional consumer script `scripts/check-product-specs.sh` (ships in the npm package; WARN default; `--strict` FAIL). Bash checks INDEX links, required frontmatter keys, and body headings — it does **not** evaluate `frontmatter-v1.schema.json`
|
|
113
|
+
|
|
114
|
+
## Stack notes
|
|
115
|
+
|
|
116
|
+
- Author via skill `spec-authoring`; prefer `type: feature`; `ui`/`store` usually `[]`.
|
|
117
|
+
- **Forbidden:** web UI / Playwright path recipes.
|
|
118
|
+
- Requestable — not always-on / session-start.
|
|
@@ -54,3 +54,9 @@ Same-changeset INDEX updates, frontmatter v1, required body headings, templates,
|
|
|
54
54
|
- Skill `spec-discovery` — opt-in research-before-spec (author mode only; not default consume).
|
|
55
55
|
- `reference-features` — code structure mirror (how to layout files), not product behavior.
|
|
56
56
|
- Consumer `.ai/context/**` when present — review/domain glossary; cross-link, do not replace.
|
|
57
|
+
|
|
58
|
+
## Stack notes
|
|
59
|
+
|
|
60
|
+
- `routes`: HTTP paths. `ui` / `store`: usually `[]` (or handler labels). `e2e`: integration/contract test paths.
|
|
61
|
+
- **Forbidden:** requiring `app/src/ui`, Playwright paths, or Next lint recipes.
|
|
62
|
+
- Requestable / `docs/specs/**` globs — not always-on / session-start.
|
|
@@ -24,3 +24,23 @@ If **three** fix attempts fail, or the same symptom returns after two supposed f
|
|
|
24
24
|
- Broad refactor during a bugfix.
|
|
25
25
|
- Fix only where the error surfaces if invalid data originates elsewhere.
|
|
26
26
|
- Claim `fixApplied: true` without re-running the failing check (see `quality/verification-before-completion.md`).
|
|
27
|
+
|
|
28
|
+
## Stack notes
|
|
29
|
+
|
|
30
|
+
### Stack process
|
|
31
|
+
|
|
32
|
+
1. Capture failing `mvn test` / `./gradlew test` / logs / stack traces.
|
|
33
|
+
2. Hypothesize layer (domain vs adapter vs wiring).
|
|
34
|
+
3. Minimal fix + regression test when appropriate.
|
|
35
|
+
4. Document in `debug-report.md`.
|
|
36
|
+
|
|
37
|
+
### MCP usage
|
|
38
|
+
|
|
39
|
+
Load requestable rule `mcp-usage` when verifying third-party library APIs (Context7) or when a local overlay MCP is present and the task fits. Discover tools at runtime; do not invent schemas. Overlay absence is not a blocker unless the user required that MCP as source of truth.
|
|
40
|
+
|
|
41
|
+
If a Sentry/Datadog (or similar) MCP is ready and the task is a production error, event, or trace, use it. Do not invent telemetry.
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
### Design guidance
|
|
45
|
+
|
|
46
|
+
- Load `design-guidance` (rule stem) when assessing structure, smells, or pattern fit.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"platform": "mavis",
|
|
4
4
|
"stack": "mcp-ts",
|
|
5
5
|
"semanticSource": "cursor/mcp-ts",
|
|
6
|
-
"sourceRevision": "
|
|
6
|
+
"sourceRevision": "8d8d5d2737c689451c222cee97747f78dc10cf47ed25126cb0d51fdf73667550",
|
|
7
7
|
"entries": [
|
|
8
8
|
{
|
|
9
9
|
"source": "AGENTS.md",
|
|
@@ -25,7 +25,7 @@ From `packages/ai-rules/`:
|
|
|
25
25
|
yarn check:preset-structure
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
Hard gates: twin-map (stacks include **mcp-ts**), token-budget (alwaysApply/session-start
|
|
28
|
+
Hard gates: twin-map (stacks include **mcp-ts**), token-budget (alwaysApply / session-start 3–5), leakage (`MCP_TS_FORBIDDEN_IN_CHAIN`, `MCP_TS_FORBIDDEN_AGENT_STEMS`, chain forks mcp-ts≠next≠ios-swift≠go≠java≠php-hexagonal≠php-laravel), shared-core drift (`AI_RULES_DRIFT_FAIL=1` via `check:preset-structure`).
|
|
29
29
|
|
|
30
30
|
Document PASS/FAIL in `validation-report.md`. Soft leakage output:
|
|
31
31
|
|
|
@@ -4,7 +4,7 @@ Routes intent **`spec-gen`** (or bootstrap) → **task-analyst** in **author mod
|
|
|
4
4
|
|
|
5
5
|
## What to do
|
|
6
6
|
|
|
7
|
-
1. Extract description from arguments after
|
|
7
|
+
1. Extract description from arguments after `/spec-start` (domain, page/feature ids, sources).
|
|
8
8
|
2. Generate a **slug** (kebab-case, ≤48 chars), e.g. `spec-<domain>-<id>`.
|
|
9
9
|
3. Ensure `.ai.local/team/tasks/<slug>/` exists (Write artifacts; not Shell mkdir).
|
|
10
10
|
4. Write `.ai.local/team/active-task.json` → `{ "slug": "<slug>" }`.
|
|
@@ -16,7 +16,7 @@ Routes intent **`spec-gen`** (or bootstrap) → **task-analyst** in **author mod
|
|
|
16
16
|
|
|
17
17
|
- Show created/updated spec paths and INDEX diff.
|
|
18
18
|
- Ask user to approve drafts (`status: draft` → promote) or send edits.
|
|
19
|
-
- Continue: continue
|
|
19
|
+
- Continue: `/task-continue <slug>` only after approval when implementation follows; otherwise stop after docs.
|
|
20
20
|
|
|
21
21
|
## Notes
|
|
22
22
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Task — unified entry point (router + pipeline)
|
|
2
2
|
|
|
3
|
-
Main command for task intake. Parent agent = orchestrator (`agent-team-orchestrator.md`). Intake for work requests without
|
|
3
|
+
Main command for task intake. Parent agent = orchestrator (`agent-team-orchestrator.md`). Intake for work requests without `/task` — `agent-team-intake.md`.
|
|
4
4
|
|
|
5
5
|
## Arguments
|
|
6
6
|
|
|
7
|
-
Everything after
|
|
7
|
+
Everything after `/task` is the task description in natural language.
|
|
8
8
|
|
|
9
9
|
Examples:
|
|
10
10
|
|
|
@@ -22,13 +22,13 @@ Examples:
|
|
|
22
22
|
1. **Slug** — kebab-case from the description (≤48 characters). Create `.ai.local/team/tasks/<slug>/` via **Write** (e.g. placeholder `pipeline.json` or empty marker) — runtime/hook owns `status.json` — **not** via Shell `mkdir` (sandbox → `Operation not permitted`).
|
|
23
23
|
2. **Router** — invoke subagent **task-router** with the task description and slug path.
|
|
24
24
|
3. **Plan** — show the user the table from `pipeline.json`: intent, steps, skipped, humanGates.
|
|
25
|
-
4. **Intent retro** — if `intent === "retro"`, run
|
|
25
|
+
4. **Intent retro** — if `intent === "retro"`, run `/technical-retro` and **stop**.
|
|
26
26
|
5. **Start** — after router:
|
|
27
27
|
- confirm `pipeline.json` and `active-task.json`;
|
|
28
28
|
- **do not** write lifecycle fields in `status.json` / `metrics.json` yourself — orchestration runtime/hook owns them (see **agent-artifact-contracts**). If `status.json` is missing, only minimal bootstrap is allowed (`slug`, `intent`, `pipelineIndex: 0`, `currentAgent: steps[0]`, `state: in_progress`) — **do not** increment `pipelineIndex` manually;
|
|
29
29
|
- invoke subagent for `pipeline.steps[0].agent` (slug, artifact paths, scope).
|
|
30
30
|
6. **After each agent** — wait for hook handoff / reconciliation terminal receipt → `status.state`; do not start the next step until `status.json` reflects handoff (or until there is a `followup_message` from the hook).
|
|
31
|
-
7. **Human gate** — if after the current step there is a gate in `humanGates` (`after:<agent>`), after the agent finishes **stop** and ask for continue
|
|
31
|
+
7. **Human gate** — if after the current step there is a gate in `humanGates` (`after:<agent>`), after the agent finishes **stop** and ask for `/task-continue <slug>`.
|
|
32
32
|
|
|
33
33
|
## Do not
|
|
34
34
|
|
|
@@ -38,10 +38,10 @@ Examples:
|
|
|
38
38
|
|
|
39
39
|
## If slug is taken
|
|
40
40
|
|
|
41
|
-
- `awaitingHumanGate` / `state: awaiting_approval` → offer artifact review or continue
|
|
41
|
+
- `awaitingHumanGate` / `state: awaiting_approval` → offer artifact review or `/task-continue <slug>`.
|
|
42
42
|
- `in_progress` → ask: continue or new slug.
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
## Metrics
|
|
46
46
|
|
|
47
|
-
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
|
|
47
|
+
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.
|
|
@@ -44,7 +44,10 @@ try {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
const slug = active.slug;
|
|
47
|
-
|
|
47
|
+
// Reject non-kebab / traversal slugs: the runtime writes status.json and
|
|
48
|
+
// metrics.json under tasks/<slug>, so an unchecked slug could escape the tree.
|
|
49
|
+
const SLUG_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
50
|
+
if (typeof slug !== 'string' || slug.length > 48 || !SLUG_RE.test(slug)) {
|
|
48
51
|
process.stdout.write('{}');
|
|
49
52
|
process.exit(0);
|
|
50
53
|
}
|
|
@@ -71,6 +74,9 @@ function waitForMetricsLock() {
|
|
|
71
74
|
// and never blocked on the lock file, so two concurrent subagentStop events
|
|
72
75
|
// could both acquire the lock and corrupt metrics.json. Retry EEXIST with a
|
|
73
76
|
// 10 ms sleep up to 200 attempts (2 s ceiling). On any other error, throw.
|
|
77
|
+
// A lock left behind by a killed process is reclaimed once its mtime is older
|
|
78
|
+
// than STALE_LOCK_MS, so one crash cannot brick the task forever.
|
|
79
|
+
const STALE_LOCK_MS = 30000;
|
|
74
80
|
for (let attempt = 0; attempt < 200; attempt += 1) {
|
|
75
81
|
try {
|
|
76
82
|
const fd = fs.openSync(METRICS_LOCK, 'wx');
|
|
@@ -78,6 +84,13 @@ function waitForMetricsLock() {
|
|
|
78
84
|
return;
|
|
79
85
|
} catch (error) {
|
|
80
86
|
if (!error || error.code !== 'EEXIST') throw error;
|
|
87
|
+
try {
|
|
88
|
+
const lockStat = fs.statSync(METRICS_LOCK);
|
|
89
|
+
if (Date.now() - lockStat.mtimeMs > STALE_LOCK_MS) {
|
|
90
|
+
fs.unlinkSync(METRICS_LOCK);
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
} catch {}
|
|
81
94
|
const until = Date.now() + 10;
|
|
82
95
|
while (Date.now() < until) { /* 10 ms busy-wait */ }
|
|
83
96
|
}
|
|
@@ -435,7 +448,10 @@ function legacyFlow() {
|
|
|
435
448
|
|
|
436
449
|
|
|
437
450
|
if (hookInput.action === 'end_human_gate') {
|
|
438
|
-
|
|
451
|
+
// Only advance when a gate was actually open. A duplicate or retried
|
|
452
|
+
// end_human_gate must be a no-op, not a silent pipeline skip.
|
|
453
|
+
const gateWasOpen = Boolean(status.activeHumanGateEventId) || status.awaitingHumanGate === true;
|
|
454
|
+
status.awaitingHumanGate = false;
|
|
439
455
|
// A2 (retro §8): pin a single runId per pipeline so subsequent events don't
|
|
440
456
|
// fragment the metrics ledger across multiple runId sequences. Prefer
|
|
441
457
|
// metrics.json.task.runId when metrics already exist, then status.metricsRunId,
|
|
@@ -462,7 +478,7 @@ if (hookInput.action === 'end_human_gate') {
|
|
|
462
478
|
});
|
|
463
479
|
delete status.activeHumanGateEventId;
|
|
464
480
|
}
|
|
465
|
-
if (hookInput.activateNext && fs.existsSync(pipelinePath)) {
|
|
481
|
+
if (gateWasOpen && hookInput.activateNext && fs.existsSync(pipelinePath)) {
|
|
466
482
|
let resumePipeline = null;
|
|
467
483
|
try { resumePipeline = JSON.parse(fs.readFileSync(pipelinePath, 'utf8')); } catch {}
|
|
468
484
|
if (resumePipeline) {
|
|
@@ -484,6 +500,19 @@ if (hookInput.action === 'end_human_gate') {
|
|
|
484
500
|
else out(handoffForAgent(resumeAgents[0], resumeNext.step.scope, resumeNext.step));
|
|
485
501
|
process.exit(0);
|
|
486
502
|
}
|
|
503
|
+
// Gate on the final step: no executable step remains. Complete the
|
|
504
|
+
// pipeline instead of leaving it in_progress forever.
|
|
505
|
+
status.state = 'completed';
|
|
506
|
+
completeTaskMetrics();
|
|
507
|
+
writeStatus({
|
|
508
|
+
pipelineIndex: resumeSteps.length,
|
|
509
|
+
phase: 'done',
|
|
510
|
+
state: 'completed',
|
|
511
|
+
currentAgent: null,
|
|
512
|
+
awaitingHumanGate: false,
|
|
513
|
+
});
|
|
514
|
+
out(`Pipeline complete for "${slug}". Run /technical-retro ${slug}.`);
|
|
515
|
+
process.exit(0);
|
|
487
516
|
}
|
|
488
517
|
}
|
|
489
518
|
// A2 (retro §8): if gate closes the final human gate of the pipeline
|
|
@@ -9,3 +9,8 @@ When the user message looks like a **work request** (implement, add, fix, refact
|
|
|
9
9
|
3. Pure questions (“how does X work”, “explain”) — prefer agent **`codebase-analyzer`** (explain-as-is); trivial one-liners may be answered inline. Do not open `/task`.
|
|
10
10
|
|
|
11
11
|
Exceptions: user explicitly says “no pipeline”, “just do it”, or continues an active slug.
|
|
12
|
+
|
|
13
|
+
## Stack notes
|
|
14
|
+
|
|
15
|
+
- Scope: TypeScript MCP server modules (`src/tools|resources|prompts`, `src/index.ts`) — not Next `app/src`, iOS `Features/`, Go `cmd/`/`internal/**`, or Playwright/XCUITest UI flows.
|
|
16
|
+
- **Phase 1 override:** no `codebase-analyzer` agent. For explain-as-is ("how does X work"), answer inline or load requestable MCP rules (`mcp-server-boundaries`, `mcp-tool-design`) — do **not** invoke a missing subagent.
|
|
@@ -21,3 +21,7 @@ Procedural rules for code generation and review. Load when writing or changing c
|
|
|
21
21
|
15. **Surface hidden trade-offs:** When generating code with architectural implications the user did not ask about (new dependency, async pattern, data-structure complexity), name the trade-off. Do not bury it.
|
|
22
22
|
16. **Match verification to risk:** Trivial → syntax/type check. Logic → manual trace. Concurrency/state → written scenario. Skipping verification proportional to risk is the failure mode.
|
|
23
23
|
17. **Honest status reporting:** When asked "is X done?", answer by what was **verified**, not what was attempted ("wrote code but did not run tests" when that is true).
|
|
24
|
+
|
|
25
|
+
## Stack notes
|
|
26
|
+
|
|
27
|
+
- **Phase 1:** load for `feature-developer` and parent review flows only. `debugger` / `ci-investigator` are Phase-2 reserved — ignore those agent names in the shared prose above until they ship.
|
|
@@ -14,6 +14,12 @@
|
|
|
14
14
|
- **CUPID:** Composable; Unix philosophy (one responsibility); Predictable; Idiomatic (repo); Domain-based.
|
|
15
15
|
- **Composition over inheritance;** Law of Demeter — no `a.b.c.d` chains; via public API / facade.
|
|
16
16
|
|
|
17
|
+
# Over-abstraction guardrails
|
|
18
|
+
|
|
19
|
+
- **No unnecessary constants:** do not hoist a one-off literal, string, or boolean into a named constant. Inline it, or use an existing token/enum when the value is meaningful and reused. Named constants are for shared, semantic, or repeated values.
|
|
20
|
+
- **No invented utilities:** do not add a `utils`/helper for a single call site or a thin pass-through wrapper. Inline it or extend the existing helper; a new shared utility is justified only after the Rule of Three.
|
|
21
|
+
- **Decompose over conditionals:** a unit (function, component, hook) that accumulates several branches (`if` / ternary / `switch`) should be split into smaller units with one reason to change instead of piling up conditions.
|
|
22
|
+
|
|
17
23
|
# Refactoring during changes
|
|
18
24
|
|
|
19
25
|
- Light refactor is OK if it reduces duplication, improves readability, and does not break public contracts.
|
|
@@ -38,3 +44,12 @@ Essentials below. Full procedural set (~17 rules) → load **`anti-sycophancy-di
|
|
|
38
44
|
Style enforcement (formatter / linter / post-change gate) lives in the **stack toolchain** — see each adapter’s **Stack notes**.
|
|
39
45
|
|
|
40
46
|
> Stack-specific lint gates, examples, and toolchain — in the preset adapter **Stack notes** section.
|
|
47
|
+
|
|
48
|
+
## Stack notes
|
|
49
|
+
|
|
50
|
+
- **No UI layer in this preset** — ignore shared-core bullets about design system / UI packages / CSS tokens; apply public-API and boy-scout rules to MCP registration modules and handlers.
|
|
51
|
+
- Public surface: tool/resource/prompt names + JSON Schema-compatible contracts — avoid deep imports across unrelated modules.
|
|
52
|
+
- Prefer Zod for authoring validation; MCP-facing schemas are protocol JSON Schema (SDK-supported conversion) — never pass raw Zod objects as the wire contract without verification.
|
|
53
|
+
- Unverifiable SDK usage → `// VERIFY: @modelcontextprotocol/sdk @ <version>`.
|
|
54
|
+
- Post-change gate: **`post-change-test`** + **`mcp-ts-tooling`** (repository-discovered typecheck/test — not Next lint, not Go tools, not xcodebuild).
|
|
55
|
+
- Style: project ESLint/Prettier/tsc when configured — authoritative style gate; do not duplicate formatter recipes in prose.
|
|
@@ -38,3 +38,9 @@ Procedure details live in skill `code-review`. Required shape:
|
|
|
38
38
|
- Rank by severity: **`blocker` | `important` | `nit`** (list blocker → nit).
|
|
39
39
|
- Vague («looks risky») is not a finding — cite evidence or ask for surrounding file context.
|
|
40
40
|
- End with a verdict on its own line: **`Safe to merge | needs changes | reject`**.
|
|
41
|
+
|
|
42
|
+
## Stack notes
|
|
43
|
+
|
|
44
|
+
- Check MCP boundaries: registration vs handler vs capability; schema/contract stability; no secret leakage.
|
|
45
|
+
- Ban Playwright/XCUITest/Next-app path requirements in review comments for this stack.
|
|
46
|
+
- **Phase 1:** no `code-reviewer` agent — parent (or `/task` review-only) applies skill `code-review` and writes `review.md`. Pipeline step name `code-reviewer` is Phase 2.
|
|
@@ -97,3 +97,8 @@ Do not introduce a second stem (`refactoring-smells` / `design-patterns-for-agen
|
|
|
97
97
|
- Ubiquitous language: `feature-delivery-workflow` (lineage).
|
|
98
98
|
- MR checklist (smells in scope; pattern name only if repo uses it): `code-review-mr`.
|
|
99
99
|
- Token / twin policy for authors: `preset-token-budget`, `preset-twin-sync` (meta, not consumer always-on).
|
|
100
|
+
|
|
101
|
+
## Stack notes
|
|
102
|
+
|
|
103
|
+
- Apply smells to MCP registration modules, handlers, and schema duplication — not UI components.
|
|
104
|
+
- Prefer extract-handler / extract-schema over introducing hexagonal layers the repo does not use.
|
|
@@ -84,3 +84,10 @@ Policy is stack-class-specific — see adapter **Stack notes**. If a Figma **plu
|
|
|
84
84
|
- Treating overlay absence as blocked (except user-required SoT)
|
|
85
85
|
- Tracker/admin write tools without an explicit ask
|
|
86
86
|
- Calling overlay MCP “just in case” on unrelated tasks
|
|
87
|
+
|
|
88
|
+
## Stack notes
|
|
89
|
+
|
|
90
|
+
- Shipped MCP is Context7 only. Do **not** require Storybook, Playwright, Chrome DevTools, or Figma as delivery gates.
|
|
91
|
+
- Observability and ticket overlays still apply when present.
|
|
92
|
+
- `init` **merges** `mcpServers`: preset keys update; extra local servers are kept.
|
|
93
|
+
- Do not add a server-under-development to shipped consumer `mcp.json`.
|
|
@@ -9,7 +9,7 @@ Rules for **preset authors** (`packages/ai-rules/presets/**`). Not always-on in
|
|
|
9
9
|
| Layer | Where | What to put |
|
|
10
10
|
|-------|-------|-------------|
|
|
11
11
|
| **Core** | `presets/_shared/core/**` | Stack-agnostic prose + checklists; no frontmatter; no paths `app/**`, `Features/**`, Playwright, xcodebuild |
|
|
12
|
-
| **Stack** | `presets/{cursor\|claude\|mavis\|opencode}/<stack>/` | Domain/tooling, stack always-on
|
|
12
|
+
| **Stack** | `presets/{cursor\|claude\|mavis\|opencode}/<stack>/` | Domain/tooling, stack always-on set (3–5), stack examples in **Stack notes** |
|
|
13
13
|
| **Platform** | Cursor `.mdc` / Claude `.md` / Mavis `.md` / OpenCode `.md` | Frontmatter (`alwaysApply`/`globs` vs `paths:` vs OpenCode `mode`/`permission`), platform-only (`BUGBOT.md`, `CLAUDE.md`) |
|
|
14
14
|
|
|
15
15
|
## Where to put a new rule
|
|
@@ -12,7 +12,7 @@ Checklist for PRs that touch `packages/ai-rules/presets/**` (and dogfood `.curso
|
|
|
12
12
|
- [ ] **Mavis derive:** mapped `cursor/<stack>/` change → `mavis/<stack>/` + `adapter-map.json` **same PR** when the stack is in `releasedStacks` (run `generate-mavis.mjs --stack <stack>` + `check-mavis-adapter-map.mjs`; see `preset-twin-sync` § Mavis derivation)
|
|
13
13
|
- [ ] **OpenCode derive:** mapped `cursor/<stack>/` change → `opencode/<stack>/` + `adapter-map.json` **same PR** when the stack is in `releasedStacks` (run `generate-opencode.mjs --stack <stack>` + `check-opencode-adapter-map.mjs`; see `preset-twin-sync` § OpenCode derivation)
|
|
14
14
|
- [ ] **Mapping:** `claude/<stack>/rules/README.md` mapping table is current
|
|
15
|
-
- [ ] **Token budget:** Cursor `alwaysApply`
|
|
15
|
+
- [ ] **Token budget:** Cursor `alwaysApply` and Claude session-start both **3–5** (extra slots reserved for `ai-local-overlay`); body sum ≤200 (stretch ≤170); meta rules not always-on
|
|
16
16
|
- [ ] **Local overlay coverage:** every installable stack ships `ai-local-overlay.mdc` (Cursor) and `ai-local-overlay.md` (Claude) with `MANDATORY` + acknowledgement format + `docs/LOCAL-OVERLAY.md` pointer; Claude twin listed in `claude/<stack>/rules/README.md` mapping table. Run `packages/ai-rules/scripts/check-local-overlay.sh`.
|
|
17
17
|
- [ ] **Leakage:** no foreign stack agent stems / handoff strings (`preset-no-cross-stack-leakage`)
|
|
18
18
|
- [ ] **Hook-only lifecycle:** `status.json` / `metrics.json` writes happen only inside `hooks/`; agents read but never rewrite lifecycle fields. Run `packages/ai-rules/scripts/check-hook-only-lifecycle.sh`.
|
|
@@ -8,19 +8,19 @@ Invariants for rule loading in an **installed** preset (consumer app).
|
|
|
8
8
|
|
|
9
9
|
| Platform | Always-on | Cap |
|
|
10
10
|
|----------|-----------|-----|
|
|
11
|
-
| Cursor | `alwaysApply: true` |
|
|
12
|
-
| Claude | rules **without** `paths:` | **
|
|
13
|
-
| Mavis | `adapter-map` rules with `loadMode: root-entry` |
|
|
14
|
-
| OpenCode | `adapter-map` rules with `loadMode: root-entry` |
|
|
11
|
+
| Cursor | `alwaysApply: true` | **3–5** |
|
|
12
|
+
| Claude | rules **without** `paths:` | **3–5** |
|
|
13
|
+
| Mavis | `adapter-map` rules with `loadMode: root-entry` | **3–5** |
|
|
14
|
+
| OpenCode | `adapter-map` rules with `loadMode: root-entry` | **3–5** |
|
|
15
15
|
|
|
16
|
-
**
|
|
16
|
+
Caps are **aligned** across platforms: minimum **3** (base invariants), maximum **5**. Slots beyond the base invariants are reserved for `ai-local-overlay` (consumer-owned `.ai.local/` rules). If you do not need local overlay, demote that rule to `globs: ["**/.ai.local/**"]` / Claude `paths:`, or a non-root load mode on Mavis / OpenCode.
|
|
17
17
|
|
|
18
|
-
**Claude Option A (README exclusion):** when counting Claude rules without `paths:` / session-start, **exclude `**/README.md`** (topic indexes are not session-start rules).
|
|
18
|
+
**Claude Option A (README exclusion):** when counting Claude rules without `paths:` / session-start, **exclude `**/README.md`** (topic indexes are not session-start rules). Body budget sums only the intended session-start rules (≤5).
|
|
19
19
|
|
|
20
20
|
Session-start body budget:
|
|
21
|
-
- Claude
|
|
22
|
-
- Cursor
|
|
23
|
-
- Mavis / OpenCode: ≤
|
|
21
|
+
- Claude session-start: ≤200 lines total (stretch ≤170).
|
|
22
|
+
- Cursor always-on: ≤200 lines total (stretch ≤170).
|
|
23
|
+
- Mavis / OpenCode: ≤5 root-entry rule files; combined root `AGENTS.md` + platform entry ≤200 nonempty lines. Do not dump the full rule catalog into `AGENTS.md`.
|
|
24
24
|
|
|
25
25
|
## Meta / author rules
|
|
26
26
|
|
|
@@ -36,4 +36,4 @@ Orchestrator, feature-delivery, code-review, post-change gates, domain globs —
|
|
|
36
36
|
|
|
37
37
|
## Verifier
|
|
38
38
|
|
|
39
|
-
build-verifier **FAIL** if Cursor `alwaysApply` count
|
|
39
|
+
build-verifier **FAIL** if Cursor `alwaysApply` count or Claude session-start count is outside **3–5** (Claude count **excludes `**/README.md`**), or if a `preset-*` meta rule is marked always-on.
|
|
@@ -110,3 +110,9 @@ Block handoff via `open_questions` until fixed:
|
|
|
110
110
|
- Skill `spec-authoring` — procedural checklist
|
|
111
111
|
- Skill `spec-discovery` — opt-in research-before-spec (not default)
|
|
112
112
|
- Optional consumer script `scripts/check-product-specs.sh` (ships in the npm package; WARN default; `--strict` FAIL). Bash checks INDEX links, required frontmatter keys, and body headings — it does **not** evaluate `frontmatter-v1.schema.json`
|
|
113
|
+
|
|
114
|
+
## Stack notes
|
|
115
|
+
|
|
116
|
+
- Author via skill `spec-authoring` + **task-analyst only** (no tech-writer on this stack).
|
|
117
|
+
- `routes` = tool names; `ui`/`store` = `[]`; prefer `type: feature`.
|
|
118
|
+
- Requestable — not always-on / session-start.
|