@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
|
@@ -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
|
}
|
|
@@ -491,7 +504,10 @@ function legacyFlow() {
|
|
|
491
504
|
|
|
492
505
|
|
|
493
506
|
if (hookInput.action === 'end_human_gate') {
|
|
494
|
-
|
|
507
|
+
// Only advance when a gate was actually open. A duplicate or retried
|
|
508
|
+
// end_human_gate must be a no-op, not a silent pipeline skip.
|
|
509
|
+
const gateWasOpen = Boolean(status.activeHumanGateEventId) || status.awaitingHumanGate === true;
|
|
510
|
+
status.awaitingHumanGate = false;
|
|
495
511
|
// A2 (retro §8): pin a single runId per pipeline so subsequent events don't
|
|
496
512
|
// fragment the metrics ledger across multiple runId sequences. Prefer
|
|
497
513
|
// metrics.json.task.runId when metrics already exist, then status.metricsRunId,
|
|
@@ -518,7 +534,7 @@ if (hookInput.action === 'end_human_gate') {
|
|
|
518
534
|
});
|
|
519
535
|
delete status.activeHumanGateEventId;
|
|
520
536
|
}
|
|
521
|
-
if (hookInput.activateNext && fs.existsSync(pipelinePath)) {
|
|
537
|
+
if (gateWasOpen && hookInput.activateNext && fs.existsSync(pipelinePath)) {
|
|
522
538
|
let resumePipeline = null;
|
|
523
539
|
try { resumePipeline = JSON.parse(fs.readFileSync(pipelinePath, 'utf8')); } catch {}
|
|
524
540
|
if (resumePipeline) {
|
|
@@ -540,6 +556,19 @@ if (hookInput.action === 'end_human_gate') {
|
|
|
540
556
|
else out(handoffForAgent(resumeAgents[0], resumeNext.step.scope, resumeNext.step));
|
|
541
557
|
process.exit(0);
|
|
542
558
|
}
|
|
559
|
+
// Gate on the final step: no executable step remains. Complete the
|
|
560
|
+
// pipeline instead of leaving it in_progress forever.
|
|
561
|
+
status.state = 'completed';
|
|
562
|
+
completeTaskMetrics();
|
|
563
|
+
writeStatus({
|
|
564
|
+
pipelineIndex: resumeSteps.length,
|
|
565
|
+
phase: 'done',
|
|
566
|
+
state: 'completed',
|
|
567
|
+
currentAgent: null,
|
|
568
|
+
awaitingHumanGate: false,
|
|
569
|
+
});
|
|
570
|
+
out(`Pipeline complete for "${slug}". Run /technical-retro ${slug}.`);
|
|
571
|
+
process.exit(0);
|
|
543
572
|
}
|
|
544
573
|
}
|
|
545
574
|
// A2 (retro §8): if gate closes the final human gate of the pipeline
|
|
@@ -8,11 +8,13 @@ Optional scripts under `hooks/examples/`. **Not** referenced from default `hooks
|
|
|
8
8
|
| `format-edited.example.sh` | Stack formatter / linter on edited files |
|
|
9
9
|
| `test-on-save.example.sh` | Scoped tests for the stack |
|
|
10
10
|
|
|
11
|
-
## Wiring (
|
|
11
|
+
## Wiring (Claude Code)
|
|
12
|
+
|
|
13
|
+
Claude Code has no preset `hooks.json`; hooks are registered in `.claude/settings.json` and fire on events such as `PreToolUse`, `PostToolUse`, and `Stop`.
|
|
12
14
|
|
|
13
15
|
1. Copy an example into `hooks/` (drop `.example` suffix), e.g. `cp hooks/examples/secret-guard.example.sh hooks/secret-guard.sh`.
|
|
14
16
|
2. `chmod +x hooks/secret-guard.sh`.
|
|
15
|
-
3.
|
|
16
|
-
4. Keep cookbook scripts **out** of the default preset
|
|
17
|
+
3. Register the command in `.claude/settings.json` (see Claude Code hooks docs for event/matcher syntax).
|
|
18
|
+
4. Keep cookbook scripts **out** of the default preset when contributing back upstream.
|
|
17
19
|
|
|
18
20
|
Stack: **go** — recipes must stay stack-safe (no cross-stack lint/test commands).
|
|
@@ -12,7 +12,7 @@ Claude topic `.md` files are **derived** from Cursor SoT `presets/cursor/php-lar
|
|
|
12
12
|
|
|
13
13
|
## Loading budget
|
|
14
14
|
|
|
15
|
-
- **Session-start (no `paths:`):**
|
|
15
|
+
- **Session-start (no `paths:`):** 3–5 — `laravel-app-core`, `boundaries`, `code-quality`
|
|
16
16
|
- All others — with `paths:`
|
|
17
17
|
- **Twin depth:** domain rules target ≥15 body lines; thin aliases: `agent-team-intake`, `technical-retro`, `domain-layer`; see Cursor `presets/cursor/php-laravel/rules/README.md` Catalog
|
|
18
18
|
|
|
@@ -18,6 +18,12 @@ description: Code quality and light refactoring for Laravel backends
|
|
|
18
18
|
- **CUPID:** Composable; Unix philosophy (one responsibility); Predictable; Idiomatic (repo); Domain-based.
|
|
19
19
|
- **Composition over inheritance;** Law of Demeter — no `a.b.c.d` chains; via public API / facade.
|
|
20
20
|
|
|
21
|
+
# Over-abstraction guardrails
|
|
22
|
+
|
|
23
|
+
- **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.
|
|
24
|
+
- **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.
|
|
25
|
+
- **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.
|
|
26
|
+
|
|
21
27
|
# Refactoring during changes
|
|
22
28
|
|
|
23
29
|
- Light refactor is OK if it reduces duplication, improves readability, and does not break public contracts.
|
|
@@ -16,7 +16,7 @@ Rules for **preset authors** (`packages/ai-rules/presets/**`). Not always-on in
|
|
|
16
16
|
| Layer | Where | What to put |
|
|
17
17
|
|-------|-------|-------------|
|
|
18
18
|
| **Core** | `presets/_shared/core/**` | Stack-agnostic prose + checklists; no frontmatter; no paths `app/**`, `Features/**`, Playwright, xcodebuild |
|
|
19
|
-
| **Stack** | `presets/{cursor\|claude\|mavis\|opencode}/<stack>/` | Domain/tooling, stack always-on
|
|
19
|
+
| **Stack** | `presets/{cursor\|claude\|mavis\|opencode}/<stack>/` | Domain/tooling, stack always-on set (3–5), stack examples in **Stack notes** |
|
|
20
20
|
| **Platform** | Cursor `.mdc` / Claude `.md` / Mavis `.md` / OpenCode `.md` | Frontmatter (`alwaysApply`/`globs` vs `paths:` vs OpenCode `mode`/`permission`), platform-only (`BUGBOT.md`, `CLAUDE.md`) |
|
|
21
21
|
|
|
22
22
|
## Where to put a new rule
|
|
@@ -19,7 +19,7 @@ Checklist for PRs that touch `packages/ai-rules/presets/**` (and dogfood `.curso
|
|
|
19
19
|
- [ ] **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)
|
|
20
20
|
- [ ] **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)
|
|
21
21
|
- [ ] **Mapping:** `claude/<stack>/rules/README.md` mapping table is current
|
|
22
|
-
- [ ] **Token budget:** Cursor `alwaysApply`
|
|
22
|
+
- [ ] **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
|
|
23
23
|
- [ ] **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`.
|
|
24
24
|
- [ ] **Leakage:** no foreign stack agent stems / handoff strings (`preset-no-cross-stack-leakage`)
|
|
25
25
|
- [ ] **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`.
|
|
@@ -15,19 +15,19 @@ Invariants for rule loading in an **installed** preset (consumer app).
|
|
|
15
15
|
|
|
16
16
|
| Platform | Always-on | Cap |
|
|
17
17
|
|----------|-----------|-----|
|
|
18
|
-
| Cursor | `alwaysApply: true` |
|
|
19
|
-
| Claude | rules **without** `paths:` | **
|
|
20
|
-
| Mavis | `adapter-map` rules with `loadMode: root-entry` |
|
|
21
|
-
| OpenCode | `adapter-map` rules with `loadMode: root-entry` |
|
|
18
|
+
| Cursor | `alwaysApply: true` | **3–5** |
|
|
19
|
+
| Claude | rules **without** `paths:` | **3–5** |
|
|
20
|
+
| Mavis | `adapter-map` rules with `loadMode: root-entry` | **3–5** |
|
|
21
|
+
| OpenCode | `adapter-map` rules with `loadMode: root-entry` | **3–5** |
|
|
22
22
|
|
|
23
|
-
**
|
|
23
|
+
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.
|
|
24
24
|
|
|
25
|
-
**Claude Option A (README exclusion):** when counting Claude rules without `paths:` / session-start, **exclude `**/README.md`** (topic indexes are not session-start rules).
|
|
25
|
+
**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).
|
|
26
26
|
|
|
27
27
|
Session-start body budget:
|
|
28
|
-
- Claude
|
|
29
|
-
- Cursor
|
|
30
|
-
- Mavis / OpenCode: ≤
|
|
28
|
+
- Claude session-start: ≤200 lines total (stretch ≤170).
|
|
29
|
+
- Cursor always-on: ≤200 lines total (stretch ≤170).
|
|
30
|
+
- 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`.
|
|
31
31
|
|
|
32
32
|
## Meta / author rules
|
|
33
33
|
|
|
@@ -43,4 +43,4 @@ Orchestrator, feature-delivery, code-review, post-change gates, domain globs —
|
|
|
43
43
|
|
|
44
44
|
## Verifier
|
|
45
45
|
|
|
46
|
-
build-verifier **FAIL** if Cursor `alwaysApply` count
|
|
46
|
+
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.
|
|
@@ -37,12 +37,12 @@ When validating **preset packaging** changes (paths under `packages/ai-rules/pre
|
|
|
37
37
|
|
|
38
38
|
### FAIL (all stacks)
|
|
39
39
|
|
|
40
|
-
1. **Token budget:** Cursor `alwaysApply: true` count
|
|
40
|
+
1. **Token budget:** Cursor `alwaysApply: true` count 3–5; Claude rules without `paths:` 3–5 (**exclude `**/README.md`** — Option A). Meta `preset-*` rules must **not** be session-start (must have `paths:`).
|
|
41
41
|
2. **Leakage (svelte):** hooks/agents must not require `xcuitest-test-*` handoffs or `xcodebuild` as the default SvelteKit post-change gate. See `tooling-and-review/preset-no-cross-stack-leakage.md`.
|
|
42
42
|
3. **Mapping / README:** `rules/README.md` must include a Cursor→Claude mapping table; document core→stack mapping when `_shared` consumers exist.
|
|
43
43
|
4. **shared-core consumers:** if `_shared/core/**` changed, every file with matching `<!-- shared-core: … -->` in this PR must be updated (or intentional fork documented).
|
|
44
44
|
5. **Twin presence:** Cursor rule change without Claude twin same PR → **FAIL** (next, nuxt, svelte, ios-swift, go, java, mcp-ts, php-hexagonal, and php-laravel). Domain twin body ≥15 lines; thin aliases may be shorter.
|
|
45
|
-
6. **Session-start body budget:** sum body lines of the
|
|
45
|
+
6. **Session-start body budget:** sum body lines of the intended session-start rules ≤ **200** (stretch ≤170); do **not** include `**/README.md` — record in validation-report; FAIL if grossly over.
|
|
46
46
|
7. **Embed drift (hard in `check:preset-structure`):** run `packages/ai-rules/scripts/check-shared-core-drift.sh` with `AI_RULES_DRIFT_FAIL=1` (bundled by the structure orchestrator). Lineage stems excluded from body equality.
|
|
47
47
|
8. **Dogfood (monorepo soft):** prefer `packages/ai-rules/scripts/sync-dogfood-cursor.sh`; mass dogfood deletion without migration doc → risk / FAIL for maintainers.
|
|
48
48
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: task
|
|
3
|
-
description: Route a natural-language task through the agent-team pipeline: task-router, pipeline.json, and the first planned specialist.
|
|
3
|
+
description: "Route a natural-language task through the agent-team pipeline: task-router, pipeline.json, and the first planned specialist."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Task — single entry point (router + pipeline)
|
|
@@ -42,7 +42,10 @@ try {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
const slug = active.slug;
|
|
45
|
-
|
|
45
|
+
// Reject non-kebab / traversal slugs: the runtime writes status.json and
|
|
46
|
+
// metrics.json under tasks/<slug>, so an unchecked slug could escape the tree.
|
|
47
|
+
const SLUG_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
48
|
+
if (typeof slug !== 'string' || slug.length > 48 || !SLUG_RE.test(slug)) {
|
|
46
49
|
process.stdout.write('{}');
|
|
47
50
|
process.exit(0);
|
|
48
51
|
}
|
|
@@ -69,6 +72,9 @@ function waitForMetricsLock() {
|
|
|
69
72
|
// and never blocked on the lock file, so two concurrent subagentStop events
|
|
70
73
|
// could both acquire the lock and corrupt metrics.json. Retry EEXIST with a
|
|
71
74
|
// 10 ms sleep up to 200 attempts (2 s ceiling). On any other error, throw.
|
|
75
|
+
// A lock left behind by a killed process is reclaimed once its mtime is older
|
|
76
|
+
// than STALE_LOCK_MS, so one crash cannot brick the task forever.
|
|
77
|
+
const STALE_LOCK_MS = 30000;
|
|
72
78
|
for (let attempt = 0; attempt < 200; attempt += 1) {
|
|
73
79
|
try {
|
|
74
80
|
const fd = fs.openSync(METRICS_LOCK, 'wx');
|
|
@@ -76,6 +82,13 @@ function waitForMetricsLock() {
|
|
|
76
82
|
return;
|
|
77
83
|
} catch (error) {
|
|
78
84
|
if (!error || error.code !== 'EEXIST') throw error;
|
|
85
|
+
try {
|
|
86
|
+
const lockStat = fs.statSync(METRICS_LOCK);
|
|
87
|
+
if (Date.now() - lockStat.mtimeMs > STALE_LOCK_MS) {
|
|
88
|
+
fs.unlinkSync(METRICS_LOCK);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
} catch {}
|
|
79
92
|
const until = Date.now() + 10;
|
|
80
93
|
while (Date.now() < until) { /* 10 ms busy-wait */ }
|
|
81
94
|
}
|
|
@@ -493,7 +506,10 @@ function legacyFlow() {
|
|
|
493
506
|
|
|
494
507
|
|
|
495
508
|
if (hookInput.action === 'end_human_gate') {
|
|
496
|
-
|
|
509
|
+
// Only advance when a gate was actually open. A duplicate or retried
|
|
510
|
+
// end_human_gate must be a no-op, not a silent pipeline skip.
|
|
511
|
+
const gateWasOpen = Boolean(status.activeHumanGateEventId) || status.awaitingHumanGate === true;
|
|
512
|
+
status.awaitingHumanGate = false;
|
|
497
513
|
// A2 (retro §8): pin a single runId per pipeline so subsequent events don't
|
|
498
514
|
// fragment the metrics ledger across multiple runId sequences. Prefer
|
|
499
515
|
// metrics.json.task.runId when metrics already exist, then status.metricsRunId,
|
|
@@ -520,7 +536,7 @@ if (hookInput.action === 'end_human_gate') {
|
|
|
520
536
|
});
|
|
521
537
|
delete status.activeHumanGateEventId;
|
|
522
538
|
}
|
|
523
|
-
if (hookInput.activateNext && fs.existsSync(pipelinePath)) {
|
|
539
|
+
if (gateWasOpen && hookInput.activateNext && fs.existsSync(pipelinePath)) {
|
|
524
540
|
let resumePipeline = null;
|
|
525
541
|
try { resumePipeline = JSON.parse(fs.readFileSync(pipelinePath, 'utf8')); } catch {}
|
|
526
542
|
if (resumePipeline) {
|
|
@@ -542,6 +558,19 @@ if (hookInput.action === 'end_human_gate') {
|
|
|
542
558
|
else out(handoffForAgent(resumeAgents[0], resumeNext.step.scope, resumeNext.step));
|
|
543
559
|
process.exit(0);
|
|
544
560
|
}
|
|
561
|
+
// Gate on the final step: no executable step remains. Complete the
|
|
562
|
+
// pipeline instead of leaving it in_progress forever.
|
|
563
|
+
status.state = 'completed';
|
|
564
|
+
completeTaskMetrics();
|
|
565
|
+
writeStatus({
|
|
566
|
+
pipelineIndex: resumeSteps.length,
|
|
567
|
+
phase: 'done',
|
|
568
|
+
state: 'completed',
|
|
569
|
+
currentAgent: null,
|
|
570
|
+
awaitingHumanGate: false,
|
|
571
|
+
});
|
|
572
|
+
out(`Pipeline complete for "${slug}". Run /technical-retro ${slug}.`);
|
|
573
|
+
process.exit(0);
|
|
545
574
|
}
|
|
546
575
|
}
|
|
547
576
|
// A2 (retro §8): if gate closes the final human gate of the pipeline
|
|
@@ -8,11 +8,13 @@ Optional scripts under `hooks/examples/`. **Not** referenced from default `hooks
|
|
|
8
8
|
| `format-edited.example.sh` | Stack formatter / linter on edited files |
|
|
9
9
|
| `test-on-save.example.sh` | Scoped tests for the stack |
|
|
10
10
|
|
|
11
|
-
## Wiring (
|
|
11
|
+
## Wiring (Claude Code)
|
|
12
|
+
|
|
13
|
+
Claude Code has no preset `hooks.json`; hooks are registered in `.claude/settings.json` and fire on events such as `PreToolUse`, `PostToolUse`, and `Stop`.
|
|
12
14
|
|
|
13
15
|
1. Copy an example into `hooks/` (drop `.example` suffix), e.g. `cp hooks/examples/secret-guard.example.sh hooks/secret-guard.sh`.
|
|
14
16
|
2. `chmod +x hooks/secret-guard.sh`.
|
|
15
|
-
3.
|
|
16
|
-
4. Keep cookbook scripts **out** of the default preset
|
|
17
|
+
3. Register the command in `.claude/settings.json` (see Claude Code hooks docs for event/matcher syntax).
|
|
18
|
+
4. Keep cookbook scripts **out** of the default preset when contributing back upstream.
|
|
17
19
|
|
|
18
20
|
Stack: **svelte** — recipes must stay stack-safe (no cross-stack lint/test commands).
|
|
@@ -14,7 +14,7 @@ In Claude Code all `.md` under `rules/` are **discovered recursively**. Bodies a
|
|
|
14
14
|
|
|
15
15
|
## Loading strategy
|
|
16
16
|
|
|
17
|
-
- **Session start (no `paths:`):**
|
|
17
|
+
- **Session start (no `paths:`):** 3–5 — `svelte-app-core`, `package-manager`, `code-quality`
|
|
18
18
|
- **On-demand (`paths:` or via commands):** `post-change-lint`, `security-sveltekit`, architecture, UI, tests, `svelte-sveltekit-anti-hallucination`, **preset-*** meta, …
|
|
19
19
|
- **Skills:** `feature-delivery`, `svelte-performance`, `code-review`, …
|
|
20
20
|
|
|
@@ -16,7 +16,7 @@ paths:
|
|
|
16
16
|
|
|
17
17
|
Before implementing, find a feature of the same type and **mirror its structure**; do not invent a new file organization.
|
|
18
18
|
|
|
19
|
-
Taxonomy / shared core: [`presets/_shared/README.md`](../../../../_shared/README.md) · [Preset contribution guide](
|
|
19
|
+
Taxonomy / shared core: [`presets/_shared/README.md`](../../../../_shared/README.md) · [Preset contribution guide](../../../../../docs/PRESET-CONTRIBUTION.md).
|
|
20
20
|
|
|
21
21
|
## Reference table
|
|
22
22
|
|
|
@@ -18,6 +18,12 @@ description: Maintain and improve code quality and architecture
|
|
|
18
18
|
- **CUPID:** Composable; Unix philosophy (one responsibility); Predictable; Idiomatic (repo); Domain-based.
|
|
19
19
|
- **Composition over inheritance;** Law of Demeter — no `a.b.c.d` chains; via public API / facade.
|
|
20
20
|
|
|
21
|
+
# Over-abstraction guardrails
|
|
22
|
+
|
|
23
|
+
- **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.
|
|
24
|
+
- **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.
|
|
25
|
+
- **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.
|
|
26
|
+
|
|
21
27
|
# Refactoring during changes
|
|
22
28
|
|
|
23
29
|
- Light refactor is OK if it reduces duplication, improves readability, and does not break public contracts.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Preset authoring: Core → Stack → Platform layering. Use when editing packages/ai-rules/presets/**.
|
|
2
|
+
description: "Preset authoring: Core → Stack → Platform layering. Use when editing packages/ai-rules/presets/**."
|
|
3
3
|
paths:
|
|
4
4
|
- packages/ai-rules/presets/**/*
|
|
5
5
|
- .cursor/rules/**/*
|
|
@@ -17,7 +17,7 @@ Rules for **preset authors** (`packages/ai-rules/presets/**`). Not always-on in
|
|
|
17
17
|
| Layer | Where | What to put |
|
|
18
18
|
|-------|-------|-------------|
|
|
19
19
|
| **Core** | `presets/_shared/core/**` | Stack-agnostic prose + checklists; no frontmatter; no paths `app/**`, `Features/**`, Playwright, xcodebuild |
|
|
20
|
-
| **Stack** | `presets/{cursor\|claude\|mavis\|opencode}/<stack>/` | Domain/tooling, stack always-on
|
|
20
|
+
| **Stack** | `presets/{cursor\|claude\|mavis\|opencode}/<stack>/` | Domain/tooling, stack always-on set (3–5), stack examples in **Stack notes** |
|
|
21
21
|
| **Platform** | Cursor `.mdc` / Claude `.md` / Mavis `.md` / OpenCode `.md` | Frontmatter (`alwaysApply`/`globs` vs `paths:` vs OpenCode `mode`/`permission`), platform-only (`BUGBOT.md`, `CLAUDE.md`) |
|
|
22
22
|
|
|
23
23
|
## Where to put a new rule
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Preset authoring: PR checklist for twin sync, budget, leakage, README. Use on preset PRs.
|
|
2
|
+
description: "Preset authoring: PR checklist for twin sync, budget, leakage, README. Use on preset PRs."
|
|
3
3
|
paths:
|
|
4
4
|
- packages/ai-rules/presets/**/*
|
|
5
5
|
- .cursor/rules/**/*
|
|
@@ -20,7 +20,7 @@ Checklist for PRs that touch `packages/ai-rules/presets/**` (and dogfood `.curso
|
|
|
20
20
|
- [ ] **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)
|
|
21
21
|
- [ ] **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)
|
|
22
22
|
- [ ] **Mapping:** `claude/<stack>/rules/README.md` mapping table is current
|
|
23
|
-
- [ ] **Token budget:** Cursor `alwaysApply`
|
|
23
|
+
- [ ] **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
|
|
24
24
|
- [ ] **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`.
|
|
25
25
|
- [ ] **Leakage:** no foreign stack agent stems / handoff strings (`preset-no-cross-stack-leakage`)
|
|
26
26
|
- [ ] **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`.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Preset authoring: ≤3 always-on / session-start; meta rules never alwaysApply.
|
|
2
|
+
description: "Preset authoring: ≤3 always-on / session-start; meta rules never alwaysApply."
|
|
3
3
|
paths:
|
|
4
4
|
- packages/ai-rules/presets/**/*
|
|
5
5
|
- .cursor/rules/**/*
|
|
@@ -16,19 +16,19 @@ Invariants for rule loading in an **installed** preset (consumer app).
|
|
|
16
16
|
|
|
17
17
|
| Platform | Always-on | Cap |
|
|
18
18
|
|----------|-----------|-----|
|
|
19
|
-
| Cursor | `alwaysApply: true` |
|
|
20
|
-
| Claude | rules **without** `paths:` | **
|
|
21
|
-
| Mavis | `adapter-map` rules with `loadMode: root-entry` |
|
|
22
|
-
| OpenCode | `adapter-map` rules with `loadMode: root-entry` |
|
|
19
|
+
| Cursor | `alwaysApply: true` | **3–5** |
|
|
20
|
+
| Claude | rules **without** `paths:` | **3–5** |
|
|
21
|
+
| Mavis | `adapter-map` rules with `loadMode: root-entry` | **3–5** |
|
|
22
|
+
| OpenCode | `adapter-map` rules with `loadMode: root-entry` | **3–5** |
|
|
23
23
|
|
|
24
|
-
**
|
|
24
|
+
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.
|
|
25
25
|
|
|
26
|
-
**Claude Option A (README exclusion):** when counting Claude rules without `paths:` / session-start, **exclude `**/README.md`** (topic indexes are not session-start rules).
|
|
26
|
+
**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).
|
|
27
27
|
|
|
28
28
|
Session-start body budget:
|
|
29
|
-
- Claude
|
|
30
|
-
- Cursor
|
|
31
|
-
- Mavis / OpenCode: ≤
|
|
29
|
+
- Claude session-start: ≤200 lines total (stretch ≤170).
|
|
30
|
+
- Cursor always-on: ≤200 lines total (stretch ≤170).
|
|
31
|
+
- 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`.
|
|
32
32
|
|
|
33
33
|
## Meta / author rules
|
|
34
34
|
|
|
@@ -44,4 +44,4 @@ Orchestrator, feature-delivery, code-review, post-change gates, domain globs —
|
|
|
44
44
|
|
|
45
45
|
## Verifier
|
|
46
46
|
|
|
47
|
-
build-verifier **FAIL** if Cursor `alwaysApply` count
|
|
47
|
+
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.
|
|
@@ -16,6 +16,13 @@ paths:
|
|
|
16
16
|
- A11y: `svelte-a11y-coding`.
|
|
17
17
|
- UI boundaries: `architecture-boundaries-ui` — no DTO in markup; map in `src/lib/api/**`.
|
|
18
18
|
|
|
19
|
+
# Conditional rendering
|
|
20
|
+
|
|
21
|
+
- Prefer **decomposition over conditionals**: markup with several `{#if}` / `{:else if}` / `{:else}` branches should become a thin parent that renders child components, not one growing block.
|
|
22
|
+
- Keep the condition in the parent; children receive resolved props.
|
|
23
|
+
- No nested ternaries in markup. For loading / empty / error, use dedicated `EmptyState` / `ErrorState` components or snippets.
|
|
24
|
+
- A `variant` / `mode` prop that renders two unrelated layouts is **two** components, not one.
|
|
25
|
+
|
|
19
26
|
## Incorrect
|
|
20
27
|
|
|
21
28
|
```svelte
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"task": {
|
|
4
|
+
"runId": "human-gate-run",
|
|
5
|
+
"slug": "human-gate",
|
|
6
|
+
"preset": "ai-rules",
|
|
7
|
+
"stack": "svelte",
|
|
8
|
+
"platform": "cursor",
|
|
9
|
+
"intent": "feature",
|
|
10
|
+
"profile": "full"
|
|
11
|
+
},
|
|
12
|
+
"events": [
|
|
13
|
+
{
|
|
14
|
+
"eventId": "human-gate-run:task",
|
|
15
|
+
"type": "task_started",
|
|
16
|
+
"at": "2026-07-31T17:00:00.000Z",
|
|
17
|
+
"source": "router",
|
|
18
|
+
"attributionConfidence": "high"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"eventId": "human-gate-run:gate:1",
|
|
22
|
+
"type": "human_gate_started",
|
|
23
|
+
"at": "2026-07-31T17:01:00.000Z",
|
|
24
|
+
"source": "hook",
|
|
25
|
+
"attributionConfidence": "high"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"eventId": "human-gate-run:gate:end",
|
|
29
|
+
"type": "human_gate_ended",
|
|
30
|
+
"at": "2026-07-31T17:11:00.000Z",
|
|
31
|
+
"gateStartedEventId": "human-gate-run:gate:1",
|
|
32
|
+
"source": "command",
|
|
33
|
+
"attributionConfidence": "high"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"eventId": "human-gate-run:1:feature-developer:1:start",
|
|
37
|
+
"type": "attempt_started",
|
|
38
|
+
"at": "2026-07-31T17:11:00.000Z",
|
|
39
|
+
"attemptId": "human-gate-run:step-1:feature-developer:attempt-1",
|
|
40
|
+
"stepIndex": 1,
|
|
41
|
+
"stepLabel": null,
|
|
42
|
+
"agent": "feature-developer",
|
|
43
|
+
"role": "implementation",
|
|
44
|
+
"attempt": 1,
|
|
45
|
+
"parallelGroupId": null,
|
|
46
|
+
"source": "hook",
|
|
47
|
+
"attributionConfidence": "high"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"eventId": "human-gate-run:1:feature-developer:1:finish",
|
|
51
|
+
"type": "attempt_finished",
|
|
52
|
+
"at": "2026-07-31T17:12:00.000Z",
|
|
53
|
+
"attemptId": "human-gate-run:step-1:feature-developer:attempt-1",
|
|
54
|
+
"outcome": "completed",
|
|
55
|
+
"durationMs": 60000,
|
|
56
|
+
"retryAfterFix": null,
|
|
57
|
+
"source": "hook",
|
|
58
|
+
"attributionConfidence": "high"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"eventId": "human-gate-run:done",
|
|
62
|
+
"type": "task_completed",
|
|
63
|
+
"at": "2026-07-31T17:12:00.000Z",
|
|
64
|
+
"outcome": "completed",
|
|
65
|
+
"source": "hook",
|
|
66
|
+
"attributionConfidence": "high"
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
}
|