@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
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Frontmatter validity gate (dependency-free heuristic).
|
|
4
|
+
*
|
|
5
|
+
* Flags the YAML failure modes that shipped silently before: unquoted scalars
|
|
6
|
+
* containing `: ` / ` #`, and unquoted list items starting with a YAML-special
|
|
7
|
+
* character (`*`, `&`, `!`, `{`, `[`, `|`, `>`, `@`, `%`, backtick). Also flags
|
|
8
|
+
* tab indentation. Exit 1 on any finding.
|
|
9
|
+
*
|
|
10
|
+
* Full YAML parsing is intentionally avoided: the published package has zero
|
|
11
|
+
* runtime dependencies and the structure workflow does not install dev deps.
|
|
12
|
+
*/
|
|
13
|
+
import fs from 'node:fs';
|
|
14
|
+
import path from 'node:path';
|
|
15
|
+
import { fileURLToPath } from 'node:url';
|
|
16
|
+
|
|
17
|
+
const scriptDirectory = path.dirname(fileURLToPath(import.meta.url));
|
|
18
|
+
const packageDirectory = path.resolve(scriptDirectory, '..');
|
|
19
|
+
const presetsRoot = path.join(packageDirectory, 'presets');
|
|
20
|
+
|
|
21
|
+
const SCALAR_KEYS = /^([A-Za-z0-9_-]+):[ \t]*(.*)$/;
|
|
22
|
+
const LIST_ITEM = /^([ \t]*-[ \t]+)(.*)$/;
|
|
23
|
+
const SAFE_SCALAR = /^(['"]).*\1$|^(true|false|null|~)$|^-?\d+(\.\d+)?$|^[|>][-+]?$|^\[\]$|^\{\}$/;
|
|
24
|
+
const SPECIAL_LEAD = /^[*&!%@`]/;
|
|
25
|
+
|
|
26
|
+
const problems = [];
|
|
27
|
+
|
|
28
|
+
function checkLine(file, lineNumber, line) {
|
|
29
|
+
if (/^\t|^[ \t]*\t/.test(line)) {
|
|
30
|
+
problems.push(`${file}:${lineNumber}: tab indentation is not valid YAML`);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const kv = line.match(SCALAR_KEYS);
|
|
34
|
+
if (kv && kv[2] !== '' && !SAFE_SCALAR.test(kv[2])) {
|
|
35
|
+
const value = kv[2];
|
|
36
|
+
if (/: /.test(value) || /:[ \t]*$/.test(value) || /\s#/.test(value) || SPECIAL_LEAD.test(value)) {
|
|
37
|
+
problems.push(
|
|
38
|
+
`${file}:${lineNumber}: unquoted YAML value needs quoting: ${line.trim()}`,
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const item = line.match(LIST_ITEM);
|
|
44
|
+
if (item && !SAFE_SCALAR.test(item[2]) && SPECIAL_LEAD.test(item[2])) {
|
|
45
|
+
problems.push(`${file}:${lineNumber}: unquoted YAML list item needs quoting: ${line.trim()}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function walk(dir) {
|
|
50
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
51
|
+
const full = path.join(dir, entry.name);
|
|
52
|
+
if (entry.isDirectory()) {
|
|
53
|
+
walk(full);
|
|
54
|
+
} else if (/\.(md|mdc)$/.test(entry.name)) {
|
|
55
|
+
const text = fs.readFileSync(full, 'utf8');
|
|
56
|
+
if (!text.startsWith('---\n')) {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
const end = text.indexOf('\n---\n', 4);
|
|
60
|
+
if (end < 0) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const frontmatter = text.slice(4, end);
|
|
64
|
+
const rel = path.relative(packageDirectory, full);
|
|
65
|
+
frontmatter.split('\n').forEach((line, index) => checkLine(rel, index + 2, line));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
walk(presetsRoot);
|
|
71
|
+
|
|
72
|
+
if (problems.length > 0) {
|
|
73
|
+
console.error(`Frontmatter check: ${problems.length} problem(s)`);
|
|
74
|
+
for (const problem of problems.slice(0, 50)) {
|
|
75
|
+
console.error(` ${problem}`);
|
|
76
|
+
}
|
|
77
|
+
if (problems.length > 50) {
|
|
78
|
+
console.error(` ... and ${problems.length - 50} more`);
|
|
79
|
+
}
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
console.log('Frontmatter check: OK');
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Generated-tree drift gate.
|
|
4
|
+
*
|
|
5
|
+
* Regenerates `presets/mavis/<stack>` and `presets/opencode/<stack>` from the
|
|
6
|
+
* Cursor sources into a temp root and byte-compares them with the committed
|
|
7
|
+
* trees. Catches two classes of drift that the adapter-map checks cannot:
|
|
8
|
+
* - hand-edits to a generated file;
|
|
9
|
+
* - generator logic changes that were not followed by a regeneration.
|
|
10
|
+
*
|
|
11
|
+
* Exit 1 on any drift; prints the offending paths.
|
|
12
|
+
*/
|
|
13
|
+
import crypto from 'node:crypto';
|
|
14
|
+
import fs from 'node:fs';
|
|
15
|
+
import os from 'node:os';
|
|
16
|
+
import path from 'node:path';
|
|
17
|
+
import { fileURLToPath } from 'node:url';
|
|
18
|
+
import { generateMavisStack } from './lib/generate-mavis-adapter.mjs';
|
|
19
|
+
import { generateOpencodeStack } from './lib/generate-opencode-adapter.mjs';
|
|
20
|
+
import { loadReleasedStacks } from './lib/generate-adapter-common.mjs';
|
|
21
|
+
|
|
22
|
+
const scriptDirectory = path.dirname(fileURLToPath(import.meta.url));
|
|
23
|
+
const packageDirectory = path.resolve(scriptDirectory, '..');
|
|
24
|
+
const presetsRoot = path.join(packageDirectory, 'presets');
|
|
25
|
+
|
|
26
|
+
function walkRelative(root) {
|
|
27
|
+
const out = [];
|
|
28
|
+
const visit = (dir) => {
|
|
29
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
30
|
+
const full = path.join(dir, entry.name);
|
|
31
|
+
if (entry.isDirectory()) {
|
|
32
|
+
visit(full);
|
|
33
|
+
} else if (entry.isFile()) {
|
|
34
|
+
out.push(path.relative(root, full).split(path.sep).join('/'));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
if (fs.existsSync(root)) {
|
|
39
|
+
visit(root);
|
|
40
|
+
}
|
|
41
|
+
return out.sort();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function sha256File(filePath) {
|
|
45
|
+
return crypto.createHash('sha256').update(fs.readFileSync(filePath)).digest('hex');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function compareTrees(expectedRoot, actualRoot, label, drift) {
|
|
49
|
+
const expected = walkRelative(expectedRoot);
|
|
50
|
+
const actual = walkRelative(actualRoot);
|
|
51
|
+
const expectedSet = new Set(expected);
|
|
52
|
+
const actualSet = new Set(actual);
|
|
53
|
+
for (const rel of expected) {
|
|
54
|
+
if (!actualSet.has(rel)) {
|
|
55
|
+
drift.push(`${label}: committed file missing from generator output: ${rel}`);
|
|
56
|
+
} else if (sha256File(path.join(expectedRoot, rel)) !== sha256File(path.join(actualRoot, rel))) {
|
|
57
|
+
drift.push(`${label}: content drift in ${rel}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
for (const rel of actual) {
|
|
61
|
+
if (!expectedSet.has(rel)) {
|
|
62
|
+
drift.push(`${label}: generator output has an uncommitted file: ${rel}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'ai-rules-generated-drift-'));
|
|
68
|
+
const drift = [];
|
|
69
|
+
try {
|
|
70
|
+
fs.mkdirSync(path.join(tempRoot, 'presets'), { recursive: true });
|
|
71
|
+
fs.cpSync(path.join(presetsRoot, 'cursor'), path.join(tempRoot, 'presets', 'cursor'), {
|
|
72
|
+
recursive: true,
|
|
73
|
+
});
|
|
74
|
+
fs.cpSync(path.join(presetsRoot, '_shared'), path.join(tempRoot, 'presets', '_shared'), {
|
|
75
|
+
recursive: true,
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
for (const [platform, generate] of [
|
|
79
|
+
['mavis', generateMavisStack],
|
|
80
|
+
['opencode', generateOpencodeStack],
|
|
81
|
+
]) {
|
|
82
|
+
const stacks = loadReleasedStacks(presetsRoot, platform);
|
|
83
|
+
for (const stack of stacks) {
|
|
84
|
+
generate(stack, { root: tempRoot });
|
|
85
|
+
compareTrees(
|
|
86
|
+
path.join(presetsRoot, platform, stack),
|
|
87
|
+
path.join(tempRoot, 'presets', platform, stack),
|
|
88
|
+
`${platform}/${stack}`,
|
|
89
|
+
drift,
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
} finally {
|
|
94
|
+
fs.rmSync(tempRoot, { recursive: true, force: true });
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (drift.length > 0) {
|
|
98
|
+
console.error(`Generated-tree drift detected (${drift.length} issue(s)):`);
|
|
99
|
+
for (const line of drift) {
|
|
100
|
+
console.error(` ${line}`);
|
|
101
|
+
}
|
|
102
|
+
console.error('Run: node scripts/generate-mavis.mjs --stack <stack> and generate-opencode.mjs --stack <stack>');
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
console.log('Generated-tree drift check: OK (mavis + opencode match generator output)');
|
|
@@ -10,7 +10,7 @@ import { loadReleasedMavisStacks } from './lib/discover-hooks.mjs';
|
|
|
10
10
|
|
|
11
11
|
const scriptDirectory = path.dirname(fileURLToPath(import.meta.url));
|
|
12
12
|
const presetsRoot = path.join(scriptDirectory, '..', 'presets');
|
|
13
|
-
const ROOT_ENTRY_CAP =
|
|
13
|
+
const ROOT_ENTRY_CAP = 5;
|
|
14
14
|
|
|
15
15
|
const stacks = loadReleasedMavisStacks(presetsRoot);
|
|
16
16
|
if (stacks.length === 0) {
|
|
@@ -10,7 +10,7 @@ import { loadReleasedOpencodeStacks } from './lib/discover-hooks.mjs';
|
|
|
10
10
|
|
|
11
11
|
const scriptDirectory = path.dirname(fileURLToPath(import.meta.url));
|
|
12
12
|
const presetsRoot = path.join(scriptDirectory, '..', 'presets');
|
|
13
|
-
const ROOT_ENTRY_CAP =
|
|
13
|
+
const ROOT_ENTRY_CAP = 5;
|
|
14
14
|
|
|
15
15
|
const stacks = loadReleasedOpencodeStacks(presetsRoot);
|
|
16
16
|
if (stacks.length === 0) {
|
|
@@ -47,6 +47,15 @@ else
|
|
|
47
47
|
fi
|
|
48
48
|
echo
|
|
49
49
|
|
|
50
|
+
echo ">>> generated-drift"
|
|
51
|
+
if node "$SCRIPT_DIR/check-generated-drift.mjs"; then
|
|
52
|
+
echo "<<< generated-drift: OK"
|
|
53
|
+
else
|
|
54
|
+
echo "<<< generated-drift: FAIL"
|
|
55
|
+
status=1
|
|
56
|
+
fi
|
|
57
|
+
echo
|
|
58
|
+
|
|
50
59
|
echo ">>> opencode-token-budget"
|
|
51
60
|
if node "$SCRIPT_DIR/check-opencode-token-budget.mjs"; then
|
|
52
61
|
echo "<<< opencode-token-budget: OK"
|
|
@@ -138,6 +147,24 @@ run_gate "chain-hook-coverage" "$SCRIPT_DIR/check-chain-hook-coverage.sh"
|
|
|
138
147
|
run_gate "task-router-intents" "$SCRIPT_DIR/check-task-router-intents.sh"
|
|
139
148
|
run_gate "i18n" "$SCRIPT_DIR/check-preset-i18n.sh" AI_RULES_I18N_FAIL=1 AI_RULES_I18N_SOFT=0
|
|
140
149
|
|
|
150
|
+
echo ">>> frontmatter"
|
|
151
|
+
if node "$SCRIPT_DIR/check-frontmatter.mjs"; then
|
|
152
|
+
echo "<<< frontmatter: OK"
|
|
153
|
+
else
|
|
154
|
+
echo "<<< frontmatter: FAIL"
|
|
155
|
+
status=1
|
|
156
|
+
fi
|
|
157
|
+
echo
|
|
158
|
+
|
|
159
|
+
echo ">>> probe-mavis-capabilities"
|
|
160
|
+
if node "$SCRIPT_DIR/test-probe-mavis-capabilities.mjs"; then
|
|
161
|
+
echo "<<< probe-mavis-capabilities: OK"
|
|
162
|
+
else
|
|
163
|
+
echo "<<< probe-mavis-capabilities: FAIL"
|
|
164
|
+
status=1
|
|
165
|
+
fi
|
|
166
|
+
echo
|
|
167
|
+
|
|
141
168
|
echo ">>> cli-mcp-merge"
|
|
142
169
|
if node "$SCRIPT_DIR/test-cli-mcp-merge.mjs"; then
|
|
143
170
|
echo "<<< cli-mcp-merge: OK"
|
|
@@ -16,8 +16,10 @@ from pathlib import Path
|
|
|
16
16
|
|
|
17
17
|
presets = Path(os.environ["AI_RULES_PRESETS_ROOT"])
|
|
18
18
|
STACKS = ("next", "nuxt", "svelte", "ios-swift", "android-kotlin", "go", "java", "mcp-ts", "php-hexagonal", "php-laravel")
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
MIN_ALWAYS_ON = 3 # base invariants every stack must keep session-start
|
|
20
|
+
MAX_ALWAYS_ON = 5 # aligned cap for Cursor / Claude / Mavis / OpenCode always-on rules
|
|
21
|
+
BODY_CAP = 200 # session-start body-sum cap (Cursor and Claude)
|
|
22
|
+
BODY_CAP_STRETCH = 170 # informational stretch target
|
|
21
23
|
# Slim-companion rules (UI-edit bundle, slim app-cores, slim tooling) may be
|
|
22
24
|
# shorter than 15 lines **if and only if** their stem is in the allow-list and
|
|
23
25
|
# body is <= MIN_SLIM_BODY_LINES. A slim rule whose body grows past this cap
|
|
@@ -134,7 +136,7 @@ failed = 0
|
|
|
134
136
|
|
|
135
137
|
print("Preset token / session-start budget (Option A)")
|
|
136
138
|
print(f"Presets: {presets}")
|
|
137
|
-
print(f"
|
|
139
|
+
print(f"Always-on count: {MIN_ALWAYS_ON}..{MAX_ALWAYS_ON}; body cap: {BODY_CAP} (stretch {BODY_CAP_STRETCH})")
|
|
138
140
|
print()
|
|
139
141
|
|
|
140
142
|
for stack in STACKS:
|
|
@@ -151,14 +153,13 @@ for stack in STACKS:
|
|
|
151
153
|
print(f"FAIL: meta preset-* must not be alwaysApply: {p.name}")
|
|
152
154
|
failed += 1
|
|
153
155
|
|
|
154
|
-
if len(always)
|
|
155
|
-
print(f"FAIL: Cursor alwaysApply count is {len(always)}, expected
|
|
156
|
+
if not (MIN_ALWAYS_ON <= len(always) <= MAX_ALWAYS_ON):
|
|
157
|
+
print(f"FAIL: Cursor alwaysApply count is {len(always)}, expected {MIN_ALWAYS_ON}..{MAX_ALWAYS_ON}")
|
|
156
158
|
failed += 1
|
|
157
|
-
elif len(always)
|
|
158
|
-
#
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
print(f"FAIL: Cursor alwaysApply=4 but no ai-local-overlay.mdc; the 4th slot is reserved for the local overlay rule")
|
|
159
|
+
elif len(always) > 3:
|
|
160
|
+
# Slots beyond the base invariants are reserved for ai-local-overlay.
|
|
161
|
+
if not any(p.stem == "ai-local-overlay" for p in always):
|
|
162
|
+
print(f"FAIL: Cursor alwaysApply={len(always)} but no ai-local-overlay.mdc; extra slots are reserved for the local overlay rule")
|
|
162
163
|
failed += 1
|
|
163
164
|
|
|
164
165
|
# --- Claude no-paths (excl README) ---
|
|
@@ -171,19 +172,17 @@ for stack in STACKS:
|
|
|
171
172
|
print(f"FAIL: meta preset-* must not be session-start: {rel}")
|
|
172
173
|
failed += 1
|
|
173
174
|
|
|
174
|
-
if len(session)
|
|
175
|
+
if not (MIN_ALWAYS_ON <= len(session) <= MAX_ALWAYS_ON):
|
|
175
176
|
print(
|
|
176
177
|
f"FAIL: Claude session-start count is {len(session)}, "
|
|
177
|
-
"expected
|
|
178
|
+
f"expected {MIN_ALWAYS_ON}..{MAX_ALWAYS_ON} (Option A excludes **/README.md)"
|
|
178
179
|
)
|
|
179
180
|
failed += 1
|
|
180
181
|
|
|
181
182
|
# --- Body sum of intended session-start set (Cursor alwaysApply + Claude session) ---
|
|
182
|
-
# Cursor
|
|
183
|
+
# Cursor and Claude allow 3..5 always-on rules; extra slots reserved for ai-local-overlay.
|
|
183
184
|
for label, files in (("Cursor", always), ("Claude", session)):
|
|
184
|
-
if
|
|
185
|
-
continue
|
|
186
|
-
if label == "Claude" and len(files) != 3:
|
|
185
|
+
if not (MIN_ALWAYS_ON <= len(files) <= MAX_ALWAYS_ON):
|
|
187
186
|
continue
|
|
188
187
|
total = 0
|
|
189
188
|
for path in files:
|
|
@@ -193,7 +192,7 @@ for stack in STACKS:
|
|
|
193
192
|
total += n
|
|
194
193
|
name = path.name if label == "Cursor" else path.relative_to(claude_rules).as_posix()
|
|
195
194
|
print(f" {label} body lines {name}: {n}")
|
|
196
|
-
cap =
|
|
195
|
+
cap = BODY_CAP
|
|
197
196
|
print(f" {label} session-start body sum: {total} (cap {cap}, files={len(files)})")
|
|
198
197
|
if total > cap:
|
|
199
198
|
print(
|
|
@@ -80,15 +80,20 @@ def consumers(stem: str) -> list[Path]:
|
|
|
80
80
|
out.append(path)
|
|
81
81
|
except OSError:
|
|
82
82
|
continue
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
# Generated platform trees are driven by their own contracts. Scan every
|
|
84
|
+
# released stack for both mavis and opencode so a core change that is not
|
|
85
|
+
# regenerated cannot slip through unnoticed.
|
|
86
|
+
for platform in ("mavis", "opencode"):
|
|
87
|
+
contract_path = presets / platform / "platform-contract.json"
|
|
88
|
+
if not contract_path.is_file():
|
|
89
|
+
continue
|
|
85
90
|
try:
|
|
86
91
|
contract = json.loads(contract_path.read_text(encoding="utf-8"))
|
|
87
92
|
for stack in contract.get("releasedStacks") or []:
|
|
88
|
-
|
|
89
|
-
if not
|
|
93
|
+
platform_base = presets / platform / stack
|
|
94
|
+
if not platform_base.is_dir():
|
|
90
95
|
continue
|
|
91
|
-
for path in
|
|
96
|
+
for path in platform_base.rglob("*"):
|
|
92
97
|
if path.suffix not in {".md", ".mdc"}:
|
|
93
98
|
continue
|
|
94
99
|
try:
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Prefer invoking the hook directly from /task-continue (see command Metrics section).
|
|
5
5
|
*
|
|
6
6
|
* Usage:
|
|
7
|
-
* node close-agent-task-human-gate.mjs [--cwd <repo>] [--platform cursor|claude|mavis|opencode] [--slug <slug>]
|
|
7
|
+
* node close-agent-task-human-gate.mjs [--cwd <repo>] [--platform cursor|claude|mavis|opencode] [--slug <slug>] [--no-activate-next]
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import { execFileSync } from 'node:child_process';
|
|
@@ -14,7 +14,7 @@ import path from 'node:path';
|
|
|
14
14
|
const PLATFORMS = new Set(['cursor', 'claude', 'mavis', 'opencode']);
|
|
15
15
|
|
|
16
16
|
function parseArgs(argv) {
|
|
17
|
-
const options = { cwd: process.cwd(), platform: 'cursor', slug: null };
|
|
17
|
+
const options = { cwd: process.cwd(), platform: 'cursor', slug: null, activateNext: true };
|
|
18
18
|
function nextValue(flag, i) {
|
|
19
19
|
const next = argv[i + 1];
|
|
20
20
|
if (next === undefined || next.startsWith('-')) {
|
|
@@ -35,7 +35,9 @@ function parseArgs(argv) {
|
|
|
35
35
|
options.slug = nextValue(arg, i);
|
|
36
36
|
i += 1;
|
|
37
37
|
} else if (arg === '--activate-next') {
|
|
38
|
-
|
|
38
|
+
options.activateNext = true;
|
|
39
|
+
} else if (arg === '--no-activate-next') {
|
|
40
|
+
options.activateNext = false;
|
|
39
41
|
} else if (arg === '--team-root') {
|
|
40
42
|
const teamRoot = path.resolve(nextValue(arg, i));
|
|
41
43
|
options.cwd = path.resolve(teamRoot, '..', '..');
|
|
@@ -76,7 +78,7 @@ if (options.slug) {
|
|
|
76
78
|
const payload = JSON.stringify({
|
|
77
79
|
status: 'completed',
|
|
78
80
|
action: 'end_human_gate',
|
|
79
|
-
activateNext:
|
|
81
|
+
activateNext: options.activateNext,
|
|
80
82
|
});
|
|
81
83
|
|
|
82
84
|
const output = execFileSync('bash', [hookPath], {
|
|
@@ -12,6 +12,12 @@
|
|
|
12
12
|
".ai.local/team/fixtures/feature-with-figma-url.json": "8aec2ac11ba552bc9135721678af58c73ca5a74b3038c5f4dc878b1080ade9be",
|
|
13
13
|
".ai.local/team/fixtures/feature-with-ux-no-figma.json": "526c103a26c83afef60ebadd289735b6dfea14c8191acd9780fc72e72da2ff45",
|
|
14
14
|
".ai.local/team/fixtures/memlog.example.md": "53d281ddd383e0337b038a0dc6dd4e14f84743066a1a99bf45fc2e7064cce222",
|
|
15
|
+
".ai.local/team/fixtures/metrics-scenarios/tasks/human-gate/metrics.json": "6642b2ae310cdb89eb80fce7bb01d69a428c9ca8072651af7397f4f19eb0a724",
|
|
16
|
+
".ai.local/team/fixtures/metrics-scenarios/tasks/missing-ledger/status.json": "c27b87afa3c82d7d0d4b0e8385b8ebb245e17c10e3fe00f94938141f5843e9d7",
|
|
17
|
+
".ai.local/team/fixtures/metrics-scenarios/tasks/parallel-receipts/metrics.json": "66294d7fb22a50eca3cc98692c27bd740959dc361245dc8d382e2086a4d847ca",
|
|
18
|
+
".ai.local/team/fixtures/metrics-scenarios/tasks/serial-retry/metrics.json": "8bcf7904c072927212a24aa9036019a8bf84a8e92f17275ace86001ad7896ca6",
|
|
19
|
+
".ai.local/team/fixtures/metrics-scenarios/tasks/validation-failed/metrics.json": "f0ad432a4f73a6ef7ced550c20e662726025b46776f349693cbc3cd547bc5112",
|
|
20
|
+
".ai.local/team/fixtures/metrics.example.json": "ec056907da840e11477afabd1401aef30773af833617d2f68b3f1db825f62d0a",
|
|
15
21
|
".ai.local/team/fixtures/mockup-review-fail-embedded-status.json": "2e1f3ff8e5e3668f20f2b0e329f26b884c79e426dd6b5952c0896bd4f0c7f9a4",
|
|
16
22
|
".ai.local/team/fixtures/mockup-review-standalone.json": "edda49b1298e94f9a33496317e9f6ccbbb047659e044e05ba35669bfe800eda6",
|
|
17
23
|
".ai.local/team/fixtures/ux-design-standalone.json": "528aeb9db4c310d1b5e3eacae0ad39a4fd1dd49c04154b064e7027981488a07a",
|
|
@@ -21,7 +27,7 @@
|
|
|
21
27
|
".claude/agents/README.md": "98fd8018a96eb924977217f81eb9cf966e88dee151b60af2c7c94ae2a8b32730",
|
|
22
28
|
".claude/agents/accessibility-reviewer.md": "2dfe18461dde7517fc2c1ea9c74f13985b4b3c041737795c5dafa0f13eb7d252",
|
|
23
29
|
".claude/agents/api-contract-reviewer.md": "4def3aa919c617f5da68ae082f9fe914bad849c76af76b8b10eecb1ff3b13804",
|
|
24
|
-
".claude/agents/build-verifier.md": "
|
|
30
|
+
".claude/agents/build-verifier.md": "c8e03d50d9cbcfc9facc5df83f3b1307b16785fa6e389803bc424c98e1ab9b0b",
|
|
25
31
|
".claude/agents/ci-investigator.md": "3707b479fa868cee38c7514244610397e6e668dc5f038159d960df321b2dca95",
|
|
26
32
|
".claude/agents/code-reviewer.md": "b7f334ea4d83a1d06c4e923fd74e026f840e3124e5b7e748535b09bc69288697",
|
|
27
33
|
".claude/agents/codebase-analyzer.md": "cae5586fd9a5fc0ea12a7578c5a9f5a4c72229b1e5c4f1eeb9ff9b6b243becf0",
|
|
@@ -46,59 +52,59 @@
|
|
|
46
52
|
".claude/commands/README.md": "30574717de5deb51a4f5bbe8da7373e560403cc4710acaf0c730d27dd1cf964f",
|
|
47
53
|
".claude/commands/spec-start.md": "4c6ca849ea2d8835a9cc0902a4e39749510db1021fbc0b1a623a46c9644afbf1",
|
|
48
54
|
".claude/commands/task-continue.md": "8c2bec3c204c25910e8fc349c571778275905380e90d8bd02c0092c83ecfe6f6",
|
|
49
|
-
".claude/commands/task.md": "
|
|
55
|
+
".claude/commands/task.md": "4db4b9245e7d5d0d56fb06d86196502aa8fa6487c747c2c103d09da27b02941e",
|
|
50
56
|
".claude/commands/technical-retro.md": "6195206cc687645fadcbe011306f6c62f1d082508c9182d880e5e4485d17214c",
|
|
51
57
|
".claude/hooks/README.md": "2d76085d8319a9c6cf579800fba52288bd43e29d2434df31a28d34d2a4a6a61d",
|
|
52
|
-
".claude/hooks/chain-team-phases.sh": "
|
|
53
|
-
".claude/hooks/examples/README.md": "
|
|
58
|
+
".claude/hooks/chain-team-phases.sh": "ab0f689747f3f79b6cbb598c0d2b8cba8a694322f9902d7d853be6862565f5fc",
|
|
59
|
+
".claude/hooks/examples/README.md": "e287392fe719476053a1998d35fe08924be58f065e9d2bfdab7727a050ba7efe",
|
|
54
60
|
".claude/hooks/examples/format-edited.example.sh": "fd4df1d6c2a5673f963febd4f3f21ec8c42899645bdc53144d713c66b2affc76",
|
|
55
61
|
".claude/hooks/examples/secret-guard.example.sh": "51cbc95c3a1b64dfc5b19901932b4e3a047ade9332451282f254bf5f8d45a58f",
|
|
56
62
|
".claude/hooks/examples/test-on-save.example.sh": "ae185e383811e2f8f89ae5f631993705c06fc8cf7216cf8f0862a5b55c64ca2a",
|
|
57
63
|
".claude/hooks/guard-shell-command.sh": "d1eae59b78aac8155668528ceb87abaf54624466a60f7d2df8716c25aad3fe96",
|
|
58
|
-
".claude/rules/README.md": "
|
|
64
|
+
".claude/rules/README.md": "f047c1fb6cd7ffbeee5cd8e7dd958db41a404c275c50a16e1b02ce6b5754caf4",
|
|
59
65
|
".claude/rules/anti-hallucination/react-next-anti-hallucination.md": "021d22a4178aad43b8ba8b332cc677dbe8130a0cf673407acbb34d47c5367d32",
|
|
60
66
|
".claude/rules/api-and-data/README.md": "1caace24921f00d60a58bea551988abd15c32f13a2711ae799ce1e689b838de2",
|
|
61
|
-
".claude/rules/api-and-data/api-services.md": "
|
|
67
|
+
".claude/rules/api-and-data/api-services.md": "30b50d49c4281c4e0f9169d453c285f7dfc828d9991520e0c204101b5b634cb9",
|
|
62
68
|
".claude/rules/api-and-data/http-client.md": "437a97b8b533b6df8ae29d346f68a86e49fa0a66fe7ad3bec4b3874403ea6c09",
|
|
63
|
-
".claude/rules/api-and-data/store-rtk.md": "
|
|
69
|
+
".claude/rules/api-and-data/store-rtk.md": "a60d51e97639bcf4d6908bc0d8631fdceb3b343e2b79391a5446c33b3e345ed7",
|
|
64
70
|
".claude/rules/architecture/README.md": "289158e67b7048545c69efdb4d5e03cc721dbf23d66e0cfe5830093d281d2326",
|
|
65
71
|
".claude/rules/architecture/architecture-boundaries-ui.md": "fefaf65f6893d087064a14602bdac7a13f8ca7dafec5af286ecc7d0ec4e332ba",
|
|
66
72
|
".claude/rules/architecture/architecture-boundaries.md": "05214891d47a286761390afb7109a6d7c10d715f84aca2d0df98960075b78b57",
|
|
67
|
-
".claude/rules/architecture/feature-delivery-workflow.md": "
|
|
73
|
+
".claude/rules/architecture/feature-delivery-workflow.md": "553aad442b2fb97e0dbdc8a465cf6e565ae6acf37c18fb77e386a1ba8575010b",
|
|
68
74
|
".claude/rules/architecture/layer-barrel-exports.md": "c0339a15b5c161bde70107b9dbbd02817d603dcd00d84b43cdd72528c63b4c22",
|
|
69
75
|
".claude/rules/architecture/product-specs-authoring.md": "2266a429713741e0653204df04516bbd5c2f95da146d7c813c7a84bb7fcd9bfe",
|
|
70
76
|
".claude/rules/architecture/product-specs.md": "83ca98fd58c32504eef5745f986b82a6a5ddae202a3d357891e9f0f8233caab9",
|
|
71
77
|
".claude/rules/architecture/public-imports.md": "da67712b2bb2462967d0869555fb145063fd7ecce53e4b0a08ffc7e53ffac6f3",
|
|
72
|
-
".claude/rules/architecture/reference-features.md": "
|
|
78
|
+
".claude/rules/architecture/reference-features.md": "be494597fcb93e43ab91c1ec1ae7d1c0ecbb9624bd0ca0725af512dbffa0d495",
|
|
73
79
|
".claude/rules/stack/README.md": "8dda2a6cacc3346300ea445bcb87d157c898fabdc820ca202667b915f9088de2",
|
|
74
80
|
".claude/rules/stack/arrow-functions.md": "4e382cc791c2d057431830baccff4f7043c4a39424370fe2fa0c57c62a646ea4",
|
|
75
81
|
".claude/rules/stack/navigation-router-ui.md": "8cabe15ed92ae9574c152dd1c001f4771ac1e1d287b0d2f2b12b7f84ddd5fa73",
|
|
76
82
|
".claude/rules/stack/navigation-router.md": "67e2198e7100fe96764acf47810839f8c169b118a2da71ecc172f1569a2571d6",
|
|
77
|
-
".claude/rules/stack/next-app-core.md": "
|
|
83
|
+
".claude/rules/stack/next-app-core.md": "c87b3b2d73f9510d7b2c1c8892854f950c46e68a284edc492125c781000028cb",
|
|
78
84
|
".claude/rules/stack/next-app-router.md": "bb5b0a77fdd17f6643cdf825732e985fa41beea410fe5d6060bc259e507c4446",
|
|
79
85
|
".claude/rules/stack/no-type-assertion.md": "6fb33fa61bceea2fad7cde3361d82c9655b6fd84d43d863033d039b78e6af210",
|
|
80
86
|
".claude/rules/stack/types-jsdoc.md": "1c9b63c5c2230ef7dc8fbb224cecb7b0a99d2235ae17f720b5a92fcd0291ffc5",
|
|
81
87
|
".claude/rules/testing/README.md": "0018e4e37f60352fafac64cad74209aedf88e9129d9bbbd3016a6cb36efe7e0a",
|
|
82
88
|
".claude/rules/testing/playwright-agents.md": "c1d5ce31222bd2dc4ccebea2be79180fe1632a69eedaca1cbf37604b7e783219",
|
|
83
89
|
".claude/rules/testing/tests-e2e-structure.md": "bf0833d342a0c856e89f67c6a2f78e29499b56f00c4d145df53f9e9b1803e253",
|
|
84
|
-
".claude/rules/testing/tests-unit.md": "
|
|
90
|
+
".claude/rules/testing/tests-unit.md": "40001c22345b6423149db0d80bd573bc7c09b120177544091f3a29808d60eac9",
|
|
85
91
|
".claude/rules/tooling-and-review/README.md": "27a956fa7fa68c58cd17a9b598580b06cb2241aadef29e3b647a31ab418d99ec",
|
|
86
92
|
".claude/rules/tooling-and-review/agent-team-intake.md": "e05a5879d587a9c4774e9e36cfcadca5664eedaabe02051745fb6c87a6143e42",
|
|
87
93
|
".claude/rules/tooling-and-review/agent-team-orchestrator.md": "810afc6e3d3a97b652af215bbc03433727b87c063d79613e3588e1d955d192d6",
|
|
88
94
|
".claude/rules/tooling-and-review/ai-local-overlay.md": "2b8373351357a6df002e714302c130c6e79dd90c5a9cc852e45271f09b7d2726",
|
|
89
95
|
".claude/rules/tooling-and-review/anti-sycophancy-discipline.md": "6d359631dde6dbe6588397aa1108752cfdad9764d90d6d9da31606a463b72226",
|
|
90
|
-
".claude/rules/tooling-and-review/code-quality.md": "
|
|
96
|
+
".claude/rules/tooling-and-review/code-quality.md": "fc764e9fbf7101475fc709a4610d09758a3a959f2fe82d3d1a487f2c8556c1b4",
|
|
91
97
|
".claude/rules/tooling-and-review/code-review-mr.md": "30b31277be1f6df878712d79cb54bc157edb97640e3bc7e77c0121273821ab03",
|
|
92
98
|
".claude/rules/tooling-and-review/design-guidance.md": "6eb8a48f9d9f69896c047c9418577e47eda6d2ad6bf18b3dff761c6de675f7d3",
|
|
93
99
|
".claude/rules/tooling-and-review/mcp-usage.md": "37cafc7c5271f3d846223e1f82eef5f8a85b88e6f1ff00603d39849e154033e2",
|
|
94
100
|
".claude/rules/tooling-and-review/mockup-review.md": "a8305658ed3db90154ad9ce612785c4704b8d54fe65abb8f7ab69c9af23b826e",
|
|
95
101
|
".claude/rules/tooling-and-review/package-manager.md": "1e80459ac986a61eee45a6d0aef67177aa449279784848397c32ac0511b0c208",
|
|
96
102
|
".claude/rules/tooling-and-review/post-change-lint.md": "ea16a0311ef354c101efc697e738d852742f74f60f49f421b776ccf0e19ad53c",
|
|
97
|
-
".claude/rules/tooling-and-review/preset-layering.md": "
|
|
98
|
-
".claude/rules/tooling-and-review/preset-no-cross-stack-leakage.md": "
|
|
99
|
-
".claude/rules/tooling-and-review/preset-pr-checklist.md": "
|
|
100
|
-
".claude/rules/tooling-and-review/preset-token-budget.md": "
|
|
101
|
-
".claude/rules/tooling-and-review/preset-twin-sync.md": "
|
|
103
|
+
".claude/rules/tooling-and-review/preset-layering.md": "006b9ea97f55d039debc16847ac9b0bfae6b26b56f44e812081ddd65760289ca",
|
|
104
|
+
".claude/rules/tooling-and-review/preset-no-cross-stack-leakage.md": "01e045b7f6f5a472581804499ec97dc4296264da90e3a6e3a25807501a300dad",
|
|
105
|
+
".claude/rules/tooling-and-review/preset-pr-checklist.md": "d89e936da90b0f5a8ee23292a5f78946dc10fb53ae55f9aad20d6674d378fa40",
|
|
106
|
+
".claude/rules/tooling-and-review/preset-token-budget.md": "bc22059a066d3ba21d8813f5e50d5cc9eef3a28860372d122d31b50977438e18",
|
|
107
|
+
".claude/rules/tooling-and-review/preset-twin-sync.md": "bdd98171bc8218fdd84834aa8051e8c899f87bb1063f9a5fd539af1154cb618f",
|
|
102
108
|
".claude/rules/tooling-and-review/security-next.md": "3e5c733925a0040928a9fbb7d841e69a471a03c5cb02d2fa986b81d29d7e31ca",
|
|
103
109
|
".claude/rules/tooling-and-review/technical-retro.md": "45e059219204712dbaaeda860b553eb557a539ff164e425ff4181da43c86f24a",
|
|
104
110
|
".claude/rules/tooling-and-review/ux-design.md": "df354f533cb2c3593758a68d2e276d9fa89f9ae15d408fb94b49040a3545be6c",
|
|
@@ -106,7 +112,7 @@
|
|
|
106
112
|
".claude/rules/ui-and-accessibility/css-property-order.md": "1f3ed3e5891adb0114e203e26a4ad86c12d0bfeeadb7d425104e92fd5bf20dc1",
|
|
107
113
|
".claude/rules/ui-and-accessibility/no-props-spread.md": "60aa9ca9c94db981bcceb05a090734e540644febfa88f4e40089f5d16a8a5d7f",
|
|
108
114
|
".claude/rules/ui-and-accessibility/react-a11y-coding.md": "8709f43c13f7071b2cd645c29b171de218551c3895479901efa1a817585b245d",
|
|
109
|
-
".claude/rules/ui-and-accessibility/react-ui.md": "
|
|
115
|
+
".claude/rules/ui-and-accessibility/react-ui.md": "06233a81f4eb4d6686f5a5ced351ddde43aed2cf753d6a6be072e6507b71572f",
|
|
110
116
|
".claude/skills/README.md": "1aeac616a5270d0ce6be132a3dff3e0bbca1371191503f0ecf3eeeeea5b4e9f3",
|
|
111
117
|
".claude/skills/ci-investigation/SKILL.md": "b13ed9de0716671b7d192dc2ba7fec139466a933b52f25c075623dcdef38b399",
|
|
112
118
|
".claude/skills/code-review/SKILL.md": "068f995e00e4baa4baf02098cef865fd837f3dad33a5c063b778aa84b0878b02",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
".cursor/agents/README.md": "40fd5a5e52f360eb0bc5d0a9496a1f1bd4404c28b73fe3d22f5478e7373322f1",
|
|
29
29
|
".cursor/agents/accessibility-reviewer.md": "0dae0c489cc167423cf00bb82a657ce6ff31365b1ad101541477c8cd3302e5a1",
|
|
30
30
|
".cursor/agents/api-contract-reviewer.md": "e4ecd88b323bd8b30d41d81940ad002e049cbed9eeb6fa3bb6ee4d5dc35554b5",
|
|
31
|
-
".cursor/agents/build-verifier.md": "
|
|
31
|
+
".cursor/agents/build-verifier.md": "8e04cae24302300e71896ea88c5139b17f3a93e217325ee0a36fdcb248c04d2b",
|
|
32
32
|
".cursor/agents/ci-investigator.md": "b7a50388e700db2e21c49e584d8cb84a0df9674a82a5edcb6da6f45d373af1d9",
|
|
33
33
|
".cursor/agents/code-reviewer.md": "b88c397e90911cbefe6cef41221b488ab383e5a616397a51231dcf5b7bb7c410",
|
|
34
34
|
".cursor/agents/codebase-analyzer.md": "cae5586fd9a5fc0ea12a7578c5a9f5a4c72229b1e5c4f1eeb9ff9b6b243becf0",
|
|
@@ -53,61 +53,61 @@
|
|
|
53
53
|
".cursor/commands/README.md": "18b409819457cc1e92aad1f964862eaf0ffdc69a6f46bbe2f95763d5c302292d",
|
|
54
54
|
".cursor/commands/spec-start.md": "4c6ca849ea2d8835a9cc0902a4e39749510db1021fbc0b1a623a46c9644afbf1",
|
|
55
55
|
".cursor/commands/task-continue.md": "88b936600cc42f3b76dc85e4baf9a075ee45b9ed07d71a4cf007400f024b4725",
|
|
56
|
-
".cursor/commands/task.md": "
|
|
56
|
+
".cursor/commands/task.md": "b1308b3d5e129347548800eaba23b6e70447efcdb1f3c0d2579d0305386e41c1",
|
|
57
57
|
".cursor/commands/technical-retro.md": "fc23e7bb1eebf8e7b4cae9ecd49471c65f419bcb7e969a91aac8f289182c3559",
|
|
58
58
|
".cursor/hooks.json": "fbe392afb84951ed9e30739fdcfddd18b5b7f68a8e129e874497e85dbd80e252",
|
|
59
59
|
".cursor/hooks/README.md": "29c0925184215b45f2edddb42f44749ca0192257ef5e653cc8961b1b8fb5d129",
|
|
60
|
-
".cursor/hooks/chain-team-phases.sh": "
|
|
60
|
+
".cursor/hooks/chain-team-phases.sh": "21d9e5d987550651aa3c1119e01edb4f3209b6af056de4932d29d5ac1e550425",
|
|
61
61
|
".cursor/hooks/examples/README.md": "337b1f81fb3add28f6fd24a0433f5578077b031d649bd5200996eb44f9e43e22",
|
|
62
62
|
".cursor/hooks/examples/format-edited.example.sh": "fd4df1d6c2a5673f963febd4f3f21ec8c42899645bdc53144d713c66b2affc76",
|
|
63
63
|
".cursor/hooks/examples/secret-guard.example.sh": "51cbc95c3a1b64dfc5b19901932b4e3a047ade9332451282f254bf5f8d45a58f",
|
|
64
64
|
".cursor/hooks/examples/test-on-save.example.sh": "ae185e383811e2f8f89ae5f631993705c06fc8cf7216cf8f0862a5b55c64ca2a",
|
|
65
65
|
".cursor/hooks/guard-shell-command.sh": "1ff08e0a65f128134019713ea32af7a5c1cdf2f9b6279f1908b9e5109c55dee1",
|
|
66
66
|
".cursor/mcp.json": "1c395aec4abe8dc63e1c14e49295210f6bf54536344a5479b3eb1429678f7814",
|
|
67
|
-
".cursor/rules/README.md": "
|
|
67
|
+
".cursor/rules/README.md": "fe61278824f31610dd5e562b6c2f74047c22774ca54b3b97fa387bc152ea6fb7",
|
|
68
68
|
".cursor/rules/agent-team-intake.mdc": "7d8925e60ffecb4ae0c95236f013b750e4fbe14782a4de4729db71c5667fa958",
|
|
69
69
|
".cursor/rules/agent-team-orchestrator.mdc": "6e844187855f4180435b9bf45649571da1a330ea3ce09af24671910ed1e12b5b",
|
|
70
70
|
".cursor/rules/ai-local-overlay.mdc": "8f1baeaa4a35f1efc77316a7a04c0b612d88ae380b3b7e61bc561b8dfd4396d2",
|
|
71
71
|
".cursor/rules/anti-sycophancy-discipline.mdc": "20c9dc8da47240f3f5b6a1c355d0bd83265cf7f1e080a6025b824d1b7ac2d36d",
|
|
72
|
-
".cursor/rules/api-services.mdc": "
|
|
72
|
+
".cursor/rules/api-services.mdc": "f500016a6129fcb765e9653e3775c36a41c2c4da6b25a90e83dbb2d413b53807",
|
|
73
73
|
".cursor/rules/architecture-boundaries-ui.mdc": "8697315b586b4d9e993fb5895617cf23943ad3b4a87f592a975df3c3f31f5bb8",
|
|
74
74
|
".cursor/rules/architecture-boundaries.mdc": "7361d9691140737af5c59a616f8efc894dd8cf8eca4175fbded1fb7dc24a0f62",
|
|
75
75
|
".cursor/rules/arrow-functions.mdc": "39ab6897e54c6f10cefc67829b64619ec12d6a1a7ac2d40aca9358efe4a428a1",
|
|
76
|
-
".cursor/rules/code-quality-and-refactoring.mdc": "
|
|
76
|
+
".cursor/rules/code-quality-and-refactoring.mdc": "09783c96a2cc954525000629724876cd0f5402d229d420f695a1837e8eb3695e",
|
|
77
77
|
".cursor/rules/code-review-mr.mdc": "bc99aab8bfe17600f691a77aba318910b711d76042a410dc00253938e5c9a4ff",
|
|
78
78
|
".cursor/rules/css-property-order-stylelint.mdc": "7369961a5d1a05603c69a5e1de607dc2cb7b579711d981385433fe0913deb132",
|
|
79
79
|
".cursor/rules/design-guidance.mdc": "143ea1da195a5298375b9b48ac82d12b639fc2af1ac90c31423e6c6d3a97fddd",
|
|
80
|
-
".cursor/rules/feature-delivery-workflow.mdc": "
|
|
80
|
+
".cursor/rules/feature-delivery-workflow.mdc": "3cb98b9ae92a0a3a8a694e7eaeed1635bc95395a7deca8762f77846f54c0722f",
|
|
81
81
|
".cursor/rules/http-client.mdc": "2aaa3d6c04d1b086d77e3db6ae3d29d3c22382357d9b83a2e7fdb9fe1f1f6bf2",
|
|
82
82
|
".cursor/rules/layer-barrel-exports.mdc": "410446639d437e36e46819fcb27db6d0ec417f7eb356eacd3157964a6616fd17",
|
|
83
83
|
".cursor/rules/mcp-usage.mdc": "9cbbb65de906b67b8c5502168209ddd74e58b4fcd2309d2d491e13e9361b93fd",
|
|
84
84
|
".cursor/rules/mockup-review.mdc": "a3a80df557862e87826ca52bb29312cba15036729155bf7a90dd11feda96dad9",
|
|
85
85
|
".cursor/rules/navigation-router-stack.mdc": "2fdc0a40a266f6737a25d4a9012ef1d534fc3c26851a5740d29e6eeac138e726",
|
|
86
86
|
".cursor/rules/navigation-router-ui.mdc": "82b1a6f6f42bdc36cf7670f25306ae723d49f29746c3960751a2e8021079098b",
|
|
87
|
-
".cursor/rules/next-app-core.mdc": "
|
|
87
|
+
".cursor/rules/next-app-core.mdc": "76a505ee2659fb891415640bf3197ffc8185612b6df626b7b97f3c5213ecadf2",
|
|
88
88
|
".cursor/rules/next-app-router.mdc": "a89943202e2e97f2975b4701e4fbd0de1312df6d26ad463b3cc627305a3f48fc",
|
|
89
89
|
".cursor/rules/no-props-spread.mdc": "673b47cc40a6a1b3f30236cb89deb79430d225205545e20d7afb8ad8ce62aae9",
|
|
90
90
|
".cursor/rules/no-type-assertion-as-import-export.mdc": "78a7625b80353c8d52ca537e3c33d78f72c426b93748c7b988f6afe8706f0315",
|
|
91
91
|
".cursor/rules/package-manager.mdc": "ff639e2957f359d60adbc8daf2fbdecf9d7be0b6b9664860697a50b1eb855aab",
|
|
92
92
|
".cursor/rules/playwright-agents.mdc": "088c4aaf50c5d6fa1846ec73f32878ec51f795bf3eafb0daccdb6355e56e7e65",
|
|
93
93
|
".cursor/rules/post-change-lint.mdc": "2f9398a6ae81636d7a401e5fc38bb300579e10d29df9a375a3ed592dfb028529",
|
|
94
|
-
".cursor/rules/preset-layering.mdc": "
|
|
95
|
-
".cursor/rules/preset-no-cross-stack-leakage.mdc": "
|
|
96
|
-
".cursor/rules/preset-pr-checklist.mdc": "
|
|
97
|
-
".cursor/rules/preset-token-budget.mdc": "
|
|
98
|
-
".cursor/rules/preset-twin-sync.mdc": "
|
|
94
|
+
".cursor/rules/preset-layering.mdc": "13f3c7781219c18766b5fdc73aafa31769a85843f2d0ba4e175b2091baf1bcb1",
|
|
95
|
+
".cursor/rules/preset-no-cross-stack-leakage.mdc": "fe9a63a1c63b329d9954bcbf8f60e5786ae77cc937c31e106adbaba7404e4f1e",
|
|
96
|
+
".cursor/rules/preset-pr-checklist.mdc": "b41059caf4764301a3a4626f6c20440a724a70641118da8c205adc2cdf7ced14",
|
|
97
|
+
".cursor/rules/preset-token-budget.mdc": "65eb11910cc2c31b1be2d568417af33f556d88df322dab4e9a028933af5dc482",
|
|
98
|
+
".cursor/rules/preset-twin-sync.mdc": "336b018e2ff10dbe31ffe2354c22fbd87d330d43cf7359e5a8a1d5a9c53772aa",
|
|
99
99
|
".cursor/rules/product-specs-authoring.mdc": "590bbfe9f1d3c6b9acd363cd9658f9bb509702071410ef753a49d9a0a90122d2",
|
|
100
100
|
".cursor/rules/product-specs.mdc": "6f0e09b2f6c1b9ed63e23c50c9e2a4a481e7b102f821d1c94a0077bd2cf606ff",
|
|
101
101
|
".cursor/rules/public-imports.mdc": "efa02180236610417b5f08b63e4d4babc982bc9c6aa81fa464e0be948109fe26",
|
|
102
102
|
".cursor/rules/react-a11y-coding.mdc": "05d36f721f42b3effacc9a436701c5dcec5ec8889bf0a2662a4a307e5c27fe8a",
|
|
103
103
|
".cursor/rules/react-next-anti-hallucination.mdc": "357808c678eed984c185e5574fae889fdb89c499d353d069540e113493493466",
|
|
104
|
-
".cursor/rules/react-ui.mdc": "
|
|
105
|
-
".cursor/rules/reference-features.mdc": "
|
|
104
|
+
".cursor/rules/react-ui.mdc": "a0874c78782d7de08096cd6291b698fc57d188fa11103ad7dbeac589d45be69c",
|
|
105
|
+
".cursor/rules/reference-features.mdc": "383991f5b32e19bb33d8631459406b91302382e57ca0fa06ff58339be561e9c9",
|
|
106
106
|
".cursor/rules/security-next.mdc": "284a483f997732ca7946dde7632544bc472682c47e26e86621ae1981e91ce8b0",
|
|
107
|
-
".cursor/rules/store-rtk.mdc": "
|
|
107
|
+
".cursor/rules/store-rtk.mdc": "b8cee115b3f561161425014cd83fc825a6e050852d34843f158cd7255ee2165b",
|
|
108
108
|
".cursor/rules/technical-retro.mdc": "ebe50f727b88c81494183941da90f79a6ef22ddf166095cd9d9fb42f1a62998b",
|
|
109
109
|
".cursor/rules/tests-e2e-structure.mdc": "61d8e86c5c861dc00f73052927ab9141c70154e03b53ce4c9fb4c222ff682898",
|
|
110
|
-
".cursor/rules/tests-unit.mdc": "
|
|
110
|
+
".cursor/rules/tests-unit.mdc": "c3f5a0d62ff63204bfe65fc27157768695ec53b66b473ee91e08cd98d81d8799",
|
|
111
111
|
".cursor/rules/types-jsdoc.mdc": "8993a3cde232e0761272c2e24cbc632bdc4f99ecabb7c4edcd0467856fd55b80",
|
|
112
112
|
".cursor/rules/ux-design.mdc": "7952757d40b6b579d7ec150d8b5a178042c44d0bc1afbee16bb4aaff35208122",
|
|
113
113
|
".cursor/skills/README.md": "0e425013d80d1ca813dd39c66783bed915c21f1aa13f4e53508183db9b86a221",
|