@bonesofspring/ai-rules 0.2.21 → 0.2.23
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 +8 -0
- package/README.md +6 -2
- package/bin/cli.js +32 -8
- package/bin/mavis-install.js +441 -0
- package/package.json +9 -2
- package/presets/_shared/core/agent-team/agent-artifact-contracts.md +2 -0
- package/presets/_shared/core/meta/preset-pr-checklist.md +1 -0
- package/presets/_shared/core/meta/preset-twin-sync.md +17 -1
- package/presets/claude/android-kotlin/agents/build-verifier.md +2 -0
- package/presets/claude/android-kotlin/agents/code-reviewer.md +2 -0
- package/presets/claude/android-kotlin/agents/debugger.md +1 -0
- package/presets/claude/android-kotlin/agents/feature-developer.md +3 -0
- package/presets/claude/android-kotlin/agents/qa-tester.md +2 -0
- package/presets/claude/android-kotlin/agents/task-router.md +4 -0
- package/presets/claude/android-kotlin/hooks/chain-team-phases.sh +51 -11
- package/presets/claude/android-kotlin/rules/tooling-and-review/preset-pr-checklist.md +1 -0
- package/presets/claude/android-kotlin/rules/tooling-and-review/preset-twin-sync.md +17 -1
- package/presets/claude/go/agents/build-verifier.md +4 -0
- package/presets/claude/go/agents/code-reviewer.md +4 -0
- package/presets/claude/go/agents/debugger.md +4 -0
- package/presets/claude/go/agents/feature-developer.md +5 -0
- package/presets/claude/go/agents/qa-tester.md +4 -0
- package/presets/claude/go/agents/task-router.md +4 -0
- package/presets/claude/go/hooks/chain-team-phases.sh +51 -11
- package/presets/claude/go/rules/tooling-and-review/preset-pr-checklist.md +1 -0
- package/presets/claude/go/rules/tooling-and-review/preset-twin-sync.md +17 -1
- package/presets/claude/ios-swift/agents/build-verifier.md +2 -0
- package/presets/claude/ios-swift/agents/code-reviewer.md +2 -0
- package/presets/claude/ios-swift/agents/debugger.md +1 -0
- package/presets/claude/ios-swift/agents/feature-developer.md +3 -0
- package/presets/claude/ios-swift/agents/qa-tester.md +2 -0
- package/presets/claude/ios-swift/agents/task-router.md +4 -0
- package/presets/claude/ios-swift/hooks/chain-team-phases.sh +51 -11
- package/presets/claude/ios-swift/rules/tooling-and-review/preset-pr-checklist.md +1 -0
- package/presets/claude/ios-swift/rules/tooling-and-review/preset-twin-sync.md +17 -1
- package/presets/claude/java/agents/build-verifier.md +4 -0
- package/presets/claude/java/agents/code-reviewer.md +4 -0
- package/presets/claude/java/agents/debugger.md +4 -0
- package/presets/claude/java/agents/feature-developer.md +5 -0
- package/presets/claude/java/agents/qa-tester.md +4 -0
- package/presets/claude/java/agents/task-router.md +4 -0
- package/presets/claude/java/hooks/chain-team-phases.sh +51 -11
- package/presets/claude/java/rules/tooling-and-review/preset-pr-checklist.md +1 -0
- package/presets/claude/java/rules/tooling-and-review/preset-twin-sync.md +17 -1
- package/presets/claude/mcp-ts/agents/build-verifier.md +4 -0
- package/presets/claude/mcp-ts/agents/feature-developer.md +5 -0
- package/presets/claude/mcp-ts/agents/task-router.md +1 -1
- package/presets/claude/mcp-ts/hooks/chain-team-phases.sh +51 -11
- package/presets/claude/mcp-ts/rules/tooling-and-review/preset-pr-checklist.md +1 -0
- package/presets/claude/mcp-ts/rules/tooling-and-review/preset-twin-sync.md +17 -1
- package/presets/claude/next/agents/build-verifier.md +2 -0
- package/presets/claude/next/agents/code-reviewer.md +2 -0
- package/presets/claude/next/agents/debugger.md +4 -0
- package/presets/claude/next/agents/feature-developer.md +3 -0
- package/presets/claude/next/agents/qa-tester.md +4 -0
- package/presets/claude/next/agents/unit-test-generator.md +1 -1
- package/presets/claude/next/agents/unit-test-planner.md +1 -1
- package/presets/claude/next/hooks/chain-team-phases.sh +51 -11
- package/presets/claude/next/rules/api-and-data/http-client.md +1 -1
- package/presets/claude/next/rules/architecture/reference-features.md +1 -1
- package/presets/claude/next/rules/testing/README.md +1 -1
- package/presets/claude/next/rules/testing/tests-e2e-structure.md +2 -0
- package/presets/claude/next/rules/testing/tests-unit.md +3 -5
- package/presets/claude/next/rules/tooling-and-review/preset-pr-checklist.md +1 -0
- package/presets/claude/next/rules/tooling-and-review/preset-twin-sync.md +17 -1
- package/presets/claude/next/rules/ui-and-accessibility/react-ui.md +1 -1
- package/presets/claude/next/skills/playwright-e2e/SKILL.md +5 -3
- package/presets/claude/next/skills/unit-testing/SKILL.md +6 -4
- package/presets/claude/nuxt/agents/build-verifier.md +2 -0
- package/presets/claude/nuxt/agents/code-reviewer.md +2 -0
- package/presets/claude/nuxt/agents/debugger.md +4 -0
- package/presets/claude/nuxt/agents/feature-developer.md +3 -0
- package/presets/claude/nuxt/agents/qa-tester.md +4 -0
- package/presets/claude/nuxt/hooks/chain-team-phases.sh +51 -11
- package/presets/claude/nuxt/rules/tooling-and-review/preset-pr-checklist.md +1 -0
- package/presets/claude/nuxt/rules/tooling-and-review/preset-twin-sync.md +17 -1
- package/presets/claude/php-hexagonal/agents/build-verifier.md +4 -0
- package/presets/claude/php-hexagonal/agents/code-reviewer.md +4 -0
- package/presets/claude/php-hexagonal/agents/debugger.md +4 -0
- package/presets/claude/php-hexagonal/agents/feature-developer.md +5 -0
- package/presets/claude/php-hexagonal/agents/qa-tester.md +4 -0
- package/presets/claude/php-hexagonal/agents/task-router.md +4 -0
- package/presets/claude/php-hexagonal/hooks/chain-team-phases.sh +51 -11
- package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-pr-checklist.md +1 -0
- package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-twin-sync.md +17 -1
- package/presets/claude/php-laravel/agents/build-verifier.md +4 -0
- package/presets/claude/php-laravel/agents/code-reviewer.md +4 -0
- package/presets/claude/php-laravel/agents/debugger.md +4 -0
- package/presets/claude/php-laravel/agents/feature-developer.md +5 -0
- package/presets/claude/php-laravel/agents/qa-tester.md +4 -0
- package/presets/claude/php-laravel/agents/task-router.md +1 -0
- package/presets/claude/php-laravel/hooks/chain-team-phases.sh +51 -11
- package/presets/claude/php-laravel/rules/tooling-and-review/preset-pr-checklist.md +1 -0
- package/presets/claude/php-laravel/rules/tooling-and-review/preset-twin-sync.md +17 -1
- package/presets/claude/svelte/agents/build-verifier.md +2 -0
- package/presets/claude/svelte/agents/code-reviewer.md +2 -0
- package/presets/claude/svelte/agents/debugger.md +4 -0
- package/presets/claude/svelte/agents/feature-developer.md +3 -0
- package/presets/claude/svelte/agents/qa-tester.md +4 -0
- package/presets/claude/svelte/hooks/chain-team-phases.sh +51 -11
- package/presets/claude/svelte/rules/tooling-and-review/preset-pr-checklist.md +1 -0
- package/presets/claude/svelte/rules/tooling-and-review/preset-twin-sync.md +17 -1
- package/presets/cursor/android-kotlin/agents/build-verifier.md +2 -0
- package/presets/cursor/android-kotlin/agents/code-reviewer.md +2 -0
- package/presets/cursor/android-kotlin/agents/debugger.md +1 -0
- package/presets/cursor/android-kotlin/agents/feature-developer.md +3 -0
- package/presets/cursor/android-kotlin/agents/qa-tester.md +2 -0
- package/presets/cursor/android-kotlin/agents/task-router.md +4 -0
- package/presets/cursor/android-kotlin/hooks/chain-team-phases.sh +51 -11
- package/presets/cursor/android-kotlin/rules/preset-pr-checklist.mdc +1 -0
- package/presets/cursor/android-kotlin/rules/preset-twin-sync.mdc +17 -1
- package/presets/cursor/go/agents/build-verifier.md +4 -0
- package/presets/cursor/go/agents/code-reviewer.md +4 -0
- package/presets/cursor/go/agents/debugger.md +4 -0
- package/presets/cursor/go/agents/feature-developer.md +5 -0
- package/presets/cursor/go/agents/qa-tester.md +4 -0
- package/presets/cursor/go/agents/task-router.md +4 -0
- package/presets/cursor/go/hooks/chain-team-phases.sh +51 -11
- package/presets/cursor/go/rules/preset-pr-checklist.mdc +1 -0
- package/presets/cursor/go/rules/preset-twin-sync.mdc +17 -1
- package/presets/cursor/ios-swift/agents/build-verifier.md +2 -0
- package/presets/cursor/ios-swift/agents/code-reviewer.md +2 -0
- package/presets/cursor/ios-swift/agents/debugger.md +1 -0
- package/presets/cursor/ios-swift/agents/feature-developer.md +3 -0
- package/presets/cursor/ios-swift/agents/qa-tester.md +2 -0
- package/presets/cursor/ios-swift/agents/task-router.md +4 -0
- package/presets/cursor/ios-swift/hooks/chain-team-phases.sh +51 -11
- package/presets/cursor/ios-swift/rules/preset-pr-checklist.mdc +1 -0
- package/presets/cursor/ios-swift/rules/preset-twin-sync.mdc +17 -1
- package/presets/cursor/java/agents/build-verifier.md +4 -0
- package/presets/cursor/java/agents/code-reviewer.md +4 -0
- package/presets/cursor/java/agents/debugger.md +4 -0
- package/presets/cursor/java/agents/feature-developer.md +5 -0
- package/presets/cursor/java/agents/qa-tester.md +4 -0
- package/presets/cursor/java/agents/task-router.md +4 -0
- package/presets/cursor/java/hooks/chain-team-phases.sh +51 -11
- package/presets/cursor/java/rules/preset-pr-checklist.mdc +1 -0
- package/presets/cursor/java/rules/preset-twin-sync.mdc +17 -1
- package/presets/cursor/mcp-ts/agents/build-verifier.md +4 -0
- package/presets/cursor/mcp-ts/agents/feature-developer.md +5 -0
- package/presets/cursor/mcp-ts/agents/task-router.md +1 -1
- package/presets/cursor/mcp-ts/hooks/chain-team-phases.sh +51 -11
- package/presets/cursor/mcp-ts/rules/preset-pr-checklist.mdc +1 -0
- package/presets/cursor/mcp-ts/rules/preset-twin-sync.mdc +17 -1
- package/presets/cursor/next/agents/build-verifier.md +2 -0
- package/presets/cursor/next/agents/code-reviewer.md +2 -0
- package/presets/cursor/next/agents/debugger.md +4 -0
- package/presets/cursor/next/agents/feature-developer.md +3 -0
- package/presets/cursor/next/agents/qa-tester.md +4 -0
- package/presets/cursor/next/agents/unit-test-generator.md +1 -1
- package/presets/cursor/next/agents/unit-test-planner.md +1 -1
- package/presets/cursor/next/hooks/chain-team-phases.sh +51 -11
- package/presets/cursor/next/rules/http-client.mdc +1 -1
- package/presets/cursor/next/rules/preset-pr-checklist.mdc +1 -0
- package/presets/cursor/next/rules/preset-twin-sync.mdc +17 -1
- package/presets/cursor/next/rules/react-ui.mdc +1 -1
- package/presets/cursor/next/rules/reference-features.mdc +1 -1
- package/presets/cursor/next/rules/tests-e2e-structure.mdc +2 -0
- package/presets/cursor/next/rules/tests-unit.mdc +3 -5
- package/presets/cursor/next/skills/playwright-e2e/SKILL.md +5 -3
- package/presets/cursor/next/skills/unit-testing/SKILL.md +6 -4
- package/presets/cursor/nuxt/agents/build-verifier.md +2 -0
- package/presets/cursor/nuxt/agents/code-reviewer.md +2 -0
- package/presets/cursor/nuxt/agents/debugger.md +4 -0
- package/presets/cursor/nuxt/agents/feature-developer.md +3 -0
- package/presets/cursor/nuxt/agents/qa-tester.md +4 -0
- package/presets/cursor/nuxt/hooks/chain-team-phases.sh +51 -11
- package/presets/cursor/nuxt/rules/preset-pr-checklist.mdc +1 -0
- package/presets/cursor/nuxt/rules/preset-twin-sync.mdc +17 -1
- package/presets/cursor/php-hexagonal/agents/build-verifier.md +4 -0
- package/presets/cursor/php-hexagonal/agents/code-reviewer.md +4 -0
- package/presets/cursor/php-hexagonal/agents/debugger.md +4 -0
- package/presets/cursor/php-hexagonal/agents/feature-developer.md +5 -0
- package/presets/cursor/php-hexagonal/agents/qa-tester.md +4 -0
- package/presets/cursor/php-hexagonal/agents/task-router.md +4 -0
- package/presets/cursor/php-hexagonal/hooks/chain-team-phases.sh +51 -11
- package/presets/cursor/php-hexagonal/rules/preset-pr-checklist.mdc +1 -0
- package/presets/cursor/php-hexagonal/rules/preset-twin-sync.mdc +17 -1
- package/presets/cursor/php-laravel/agents/build-verifier.md +4 -0
- package/presets/cursor/php-laravel/agents/code-reviewer.md +4 -0
- package/presets/cursor/php-laravel/agents/debugger.md +4 -0
- package/presets/cursor/php-laravel/agents/feature-developer.md +5 -0
- package/presets/cursor/php-laravel/agents/qa-tester.md +4 -0
- package/presets/cursor/php-laravel/agents/task-router.md +1 -0
- package/presets/cursor/php-laravel/hooks/chain-team-phases.sh +51 -11
- package/presets/cursor/php-laravel/rules/preset-pr-checklist.mdc +1 -0
- package/presets/cursor/php-laravel/rules/preset-twin-sync.mdc +17 -1
- package/presets/cursor/svelte/agents/build-verifier.md +2 -0
- package/presets/cursor/svelte/agents/code-reviewer.md +2 -0
- package/presets/cursor/svelte/agents/debugger.md +4 -0
- package/presets/cursor/svelte/agents/feature-developer.md +3 -0
- package/presets/cursor/svelte/agents/qa-tester.md +4 -0
- package/presets/cursor/svelte/hooks/chain-team-phases.sh +51 -11
- package/presets/cursor/svelte/rules/preset-pr-checklist.mdc +1 -0
- package/presets/cursor/svelte/rules/preset-twin-sync.mdc +17 -1
- package/presets/mavis/README.md +60 -0
- package/presets/mavis/next/MAVIS.md +67 -0
- package/presets/mavis/next/MCP.md +36 -0
- package/presets/mavis/next/README.md +15 -0
- package/presets/mavis/next/REPO_AGENTS.md +94 -0
- package/presets/mavis/next/adapter-map.json +959 -0
- package/presets/mavis/next/agents/README.md +206 -0
- package/presets/mavis/next/agents/accessibility-reviewer.md +61 -0
- package/presets/mavis/next/agents/api-contract-reviewer.md +57 -0
- package/presets/mavis/next/agents/build-verifier.md +110 -0
- package/presets/mavis/next/agents/ci-investigator.md +63 -0
- package/presets/mavis/next/agents/code-reviewer.md +61 -0
- package/presets/mavis/next/agents/codebase-analyzer.md +21 -0
- package/presets/mavis/next/agents/debugger.md +80 -0
- package/presets/mavis/next/agents/feature-developer.md +101 -0
- package/presets/mavis/next/agents/migration-specialist.md +67 -0
- package/presets/mavis/next/agents/mockup-reviewer.md +53 -0
- package/presets/mavis/next/agents/openspec-author.md +157 -0
- package/presets/mavis/next/agents/performance-auditor.md +68 -0
- package/presets/mavis/next/agents/playwright-test-generator.md +28 -0
- package/presets/mavis/next/agents/playwright-test-healer.md +28 -0
- package/presets/mavis/next/agents/playwright-test-planner.md +21 -0
- package/presets/mavis/next/agents/qa-tester.md +52 -0
- package/presets/mavis/next/agents/security-reviewer.md +54 -0
- package/presets/mavis/next/agents/solution-architect.md +68 -0
- package/presets/mavis/next/agents/task-analyst.md +166 -0
- package/presets/mavis/next/agents/task-router.md +178 -0
- package/presets/mavis/next/agents/tech-writer.md +57 -0
- package/presets/mavis/next/agents/unit-test-generator.md +31 -0
- package/presets/mavis/next/agents/unit-test-healer.md +32 -0
- package/presets/mavis/next/agents/unit-test-planner.md +54 -0
- package/presets/mavis/next/commands/README.md +49 -0
- package/presets/mavis/next/commands/spec-start.md +24 -0
- package/presets/mavis/next/commands/task-continue.md +50 -0
- package/presets/mavis/next/commands/task.md +50 -0
- package/presets/mavis/next/commands/technical-retro.md +80 -0
- package/presets/mavis/next/hooks/README.md +22 -0
- package/presets/mavis/next/hooks/chain-team-phases.sh +845 -0
- package/presets/mavis/next/mcp.json +19 -0
- package/presets/mavis/next/rules/README.md +16 -0
- package/presets/mavis/next/rules/agent-team-intake.md +11 -0
- package/presets/mavis/next/rules/agent-team-orchestrator.md +210 -0
- package/presets/mavis/next/rules/ai-local-overlay.md +37 -0
- package/presets/mavis/next/rules/anti-sycophancy-discipline.md +23 -0
- package/presets/mavis/next/rules/api-services.md +72 -0
- package/presets/mavis/next/rules/architecture-boundaries-ui.md +9 -0
- package/presets/mavis/next/rules/architecture-boundaries.md +86 -0
- package/presets/mavis/next/rules/arrow-functions.md +25 -0
- package/presets/mavis/next/rules/code-quality-and-refactoring.md +40 -0
- package/presets/mavis/next/rules/code-review-mr.md +40 -0
- package/presets/mavis/next/rules/css-property-order-stylelint.md +5 -0
- package/presets/mavis/next/rules/design-guidance.md +99 -0
- package/presets/mavis/next/rules/feature-delivery-workflow.md +49 -0
- package/presets/mavis/next/rules/http-client.md +55 -0
- package/presets/mavis/next/rules/layer-barrel-exports.md +68 -0
- package/presets/mavis/next/rules/mcp-usage.md +86 -0
- package/presets/mavis/next/rules/mockup-review.md +107 -0
- package/presets/mavis/next/rules/navigation-router-stack.md +56 -0
- package/presets/mavis/next/rules/navigation-router-ui.md +10 -0
- package/presets/mavis/next/rules/next-app-core.md +29 -0
- package/presets/mavis/next/rules/next-app-router.md +44 -0
- package/presets/mavis/next/rules/no-props-spread.md +56 -0
- package/presets/mavis/next/rules/no-type-assertion-as-import-export.md +51 -0
- package/presets/mavis/next/rules/package-manager.md +11 -0
- package/presets/mavis/next/rules/playwright-agents.md +67 -0
- package/presets/mavis/next/rules/post-change-lint.md +35 -0
- package/presets/mavis/next/rules/preset-layering.md +27 -0
- package/presets/mavis/next/rules/preset-no-cross-stack-leakage.md +90 -0
- package/presets/mavis/next/rules/preset-pr-checklist.md +35 -0
- package/presets/mavis/next/rules/preset-token-budget.md +36 -0
- package/presets/mavis/next/rules/preset-twin-sync.md +65 -0
- package/presets/mavis/next/rules/product-specs-authoring.md +112 -0
- package/presets/mavis/next/rules/product-specs.md +56 -0
- package/presets/mavis/next/rules/public-imports.md +50 -0
- package/presets/mavis/next/rules/react-a11y-coding.md +31 -0
- package/presets/mavis/next/rules/react-next-anti-hallucination.md +60 -0
- package/presets/mavis/next/rules/react-ui.md +105 -0
- package/presets/mavis/next/rules/reference-features.md +45 -0
- package/presets/mavis/next/rules/security-next.md +45 -0
- package/presets/mavis/next/rules/store-rtk.md +78 -0
- package/presets/mavis/next/rules/technical-retro.md +11 -0
- package/presets/mavis/next/rules/tests-e2e-structure.md +72 -0
- package/presets/mavis/next/rules/tests-unit.md +72 -0
- package/presets/mavis/next/rules/types-jsdoc.md +43 -0
- package/presets/mavis/next/rules/ux-design.md +99 -0
- package/presets/mavis/next/skills/README.md +21 -0
- package/presets/mavis/next/skills/ci-investigation/SKILL.md +39 -0
- package/presets/mavis/next/skills/code-review/SKILL.md +39 -0
- package/presets/mavis/next/skills/debug-investigation/SKILL.md +26 -0
- package/presets/mavis/next/skills/feature-delivery/SKILL.md +34 -0
- package/presets/mavis/next/skills/mockup-review/SKILL.md +24 -0
- package/presets/mavis/next/skills/playwright-e2e/SKILL.md +28 -0
- package/presets/mavis/next/skills/react-performance/SKILL.md +39 -0
- package/presets/mavis/next/skills/spec-authoring/SKILL.md +21 -0
- package/presets/mavis/next/skills/spec-discovery/SKILL.md +53 -0
- package/presets/mavis/next/skills/technical-retro/SKILL.md +49 -0
- package/presets/mavis/next/skills/unit-testing/SKILL.md +29 -0
- package/presets/mavis/next/skills/ux-design/SKILL.md +31 -0
- package/presets/mavis/next/skills/write-adr/SKILL.md +36 -0
- package/presets/mavis/next/team/README.md +148 -0
- package/presets/mavis/next/team/conventions.md +21 -0
- package/presets/mavis/next/team/fixtures/artifact-manifest.example.json +79 -0
- package/presets/mavis/next/team/fixtures/bugfix-standard.json +25 -0
- package/presets/mavis/next/team/fixtures/feature-full.json +29 -0
- package/presets/mavis/next/team/fixtures/feature-light.json +27 -0
- package/presets/mavis/next/team/fixtures/feature-with-figma-url.json +17 -0
- package/presets/mavis/next/team/fixtures/feature-with-ux-no-figma.json +17 -0
- package/presets/mavis/next/team/fixtures/memlog.example.md +9 -0
- package/presets/mavis/next/team/fixtures/metrics-scenarios/tasks/human-gate/metrics.json +69 -0
- package/presets/mavis/next/team/fixtures/metrics-scenarios/tasks/missing-ledger/status.json +5 -0
- package/presets/mavis/next/team/fixtures/metrics-scenarios/tasks/parallel-receipts/metrics.json +79 -0
- package/presets/mavis/next/team/fixtures/metrics-scenarios/tasks/serial-retry/metrics.json +124 -0
- package/presets/mavis/next/team/fixtures/metrics-scenarios/tasks/validation-failed/metrics.json +124 -0
- package/presets/mavis/next/team/fixtures/metrics.example.json +54 -0
- package/presets/mavis/next/team/fixtures/mockup-review-fail-embedded-status.json +8 -0
- package/presets/mavis/next/team/fixtures/mockup-review-standalone.json +14 -0
- package/presets/mavis/next/team/fixtures/ux-design-standalone.json +15 -0
- package/presets/mavis/next/team/tasks/.gitkeep +0 -0
- package/presets/mavis/platform-contract.json +131 -0
- package/scripts/capture-cli-golden.mjs +44 -0
- package/scripts/check-chain-hook-coverage.sh +1 -0
- package/scripts/check-mavis-adapter-map.mjs +294 -0
- package/scripts/check-mavis-local-overlay.mjs +56 -0
- package/scripts/check-mavis-platform-contract.mjs +388 -0
- package/scripts/check-mavis-token-budget.mjs +48 -0
- package/scripts/check-preset-leakage.sh +35 -3
- package/scripts/check-preset-structure.sh +73 -0
- package/scripts/check-preset-token-budget.sh +100 -0
- package/scripts/check-shared-core-drift.sh +18 -0
- package/scripts/check-task-router-intents.sh +154 -0
- package/scripts/fixtures/cli-golden/claude/next.json +130 -0
- package/scripts/fixtures/cli-golden/cursor/next.json +132 -0
- package/scripts/fixtures/cli-golden/mavis/next.json +125 -0
- package/scripts/fixtures/mavis-adapter-map/invalid-unmapped/cursor/AGENTS.md +1 -0
- package/scripts/fixtures/mavis-adapter-map/invalid-unmapped/cursor/rules/extra.mdc +1 -0
- package/scripts/fixtures/mavis-adapter-map/invalid-unmapped/cursor/rules/sample.mdc +2 -0
- package/scripts/fixtures/mavis-adapter-map/invalid-unmapped/mavis/MAVIS.md +1 -0
- package/scripts/fixtures/mavis-adapter-map/invalid-unmapped/mavis/adapter-map.json +26 -0
- package/scripts/fixtures/mavis-adapter-map/invalid-unmapped/mavis/rules/sample.md +2 -0
- package/scripts/fixtures/mavis-adapter-map/valid/cursor/AGENTS.md +1 -0
- package/scripts/fixtures/mavis-adapter-map/valid/cursor/rules/sample.mdc +2 -0
- package/scripts/fixtures/mavis-adapter-map/valid/mavis/MAVIS.md +1 -0
- package/scripts/fixtures/mavis-adapter-map/valid/mavis/adapter-map.json +26 -0
- package/scripts/fixtures/mavis-adapter-map/valid/mavis/rules/sample.md +2 -0
- package/scripts/fixtures/mavis-platform-contract/invalid-minimax-destination.json +131 -0
- package/scripts/fixtures/mavis-platform-contract/invalid-missing-capability.json +126 -0
- package/scripts/fixtures/mavis-platform-contract/invalid-released-unknown-stack.json +133 -0
- package/scripts/fixtures/mavis-platform-contract/invalid-unknown-native-path.json +131 -0
- package/scripts/fixtures/mavis-platform-contract/invalid-version-pin.json +132 -0
- package/scripts/fixtures/mavis-platform-contract/valid.json +131 -0
- package/scripts/fixtures/mavis-probe/AGENTS.md +6 -0
- package/scripts/fixtures/mavis-probe/agents/probe-agent.md +6 -0
- package/scripts/fixtures/mavis-probe/fake-mcode.mjs +98 -0
- package/scripts/fixtures/mavis-probe/output.schema.json +28 -0
- package/scripts/fixtures/mavis-probe/rules/probe.md +5 -0
- package/scripts/fixtures/mavis-probe/skills/probe/SKILL.md +11 -0
- package/scripts/generate-mavis-next.mjs +704 -0
- package/scripts/lib/cli-golden.mjs +50 -0
- package/scripts/lib/discover-hooks.mjs +72 -0
- package/scripts/probe-mavis-capabilities.mjs +480 -0
- package/scripts/test-agent-task-metrics-hooks.mjs +120 -16
- package/scripts/test-chain-team-phases-coverage.mjs +110 -8
- package/scripts/test-cli-init-clean.mjs +256 -0
- package/scripts/test-cli-mcp-merge.mjs +23 -0
- package/scripts/test-mavis-context-budget.mjs +55 -0
- package/scripts/test-mavis-orchestration.mjs +649 -0
- package/scripts/test-probe-mavis-capabilities.mjs +205 -0
- package/scripts/test-task-router-intents-fixtures.mjs +109 -0
|
@@ -18,6 +18,69 @@ 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
19
|
BODY_CAP = 140 # applied to 3-rule trios (Claude session-start, Cursor trio when len==3)
|
|
20
20
|
BODY_CAP_CURSOR_4 = 170 # Cursor now allows 4 always-on (next-app-core, package-manager, code-quality, ai-local-overlay)
|
|
21
|
+
# Slim-companion rules (UI-edit bundle, slim app-cores, slim tooling) may be
|
|
22
|
+
# shorter than 15 lines **if and only if** their stem is in the allow-list and
|
|
23
|
+
# body is <= MIN_SLIM_BODY_LINES. A slim rule whose body grows past this cap
|
|
24
|
+
# without being promoted to a domain rule FAILs the check. Reference:
|
|
25
|
+
# presets/_shared/core/meta/preset-twin-sync.md "Twin depth" section.
|
|
26
|
+
# Cursor and Claude share stems by convention; the list is stem-only and
|
|
27
|
+
# applied per platform.
|
|
28
|
+
SLIM_COMPANION_ALLOWLIST = frozenset({
|
|
29
|
+
"agent-team-intake",
|
|
30
|
+
"agent-team-orchestrator",
|
|
31
|
+
"ai-local-overlay",
|
|
32
|
+
"api-grpc",
|
|
33
|
+
"architecture-boundaries-ui",
|
|
34
|
+
"css-property-order-stylelint",
|
|
35
|
+
"design-guidance",
|
|
36
|
+
"domain-layer",
|
|
37
|
+
"e2e",
|
|
38
|
+
"feature-delivery-workflow",
|
|
39
|
+
"http-client",
|
|
40
|
+
"integration",
|
|
41
|
+
"ios-app-core",
|
|
42
|
+
"mcp-usage",
|
|
43
|
+
"messaging-adapters",
|
|
44
|
+
"mockup-review",
|
|
45
|
+
"module-public-api",
|
|
46
|
+
"navigation-coordinators",
|
|
47
|
+
"navigation-router-stack",
|
|
48
|
+
"navigation",
|
|
49
|
+
"navigation-router-ui",
|
|
50
|
+
"next-app-router",
|
|
51
|
+
"no-props-spread",
|
|
52
|
+
"no-type-assertion-as-import-export",
|
|
53
|
+
"no-v-bind-spread",
|
|
54
|
+
"package-manager",
|
|
55
|
+
"persistence",
|
|
56
|
+
"persistence-data",
|
|
57
|
+
"playwright-agents",
|
|
58
|
+
"post-change-build",
|
|
59
|
+
"post-change-lint",
|
|
60
|
+
"post-change-test",
|
|
61
|
+
"preset-layering",
|
|
62
|
+
"preset-no-cross-stack-leakage",
|
|
63
|
+
"preset-pr-checklist",
|
|
64
|
+
"preset-token-budget",
|
|
65
|
+
"preset-twin-sync",
|
|
66
|
+
"react-a11y-coding",
|
|
67
|
+
"script-setup-conventions",
|
|
68
|
+
"security-android",
|
|
69
|
+
"security-go",
|
|
70
|
+
"security-ios",
|
|
71
|
+
"security-next",
|
|
72
|
+
"security-php",
|
|
73
|
+
"state-and-viewmodels",
|
|
74
|
+
"technical-retro",
|
|
75
|
+
"tests-e2e",
|
|
76
|
+
"tests-integration",
|
|
77
|
+
"tests-unit",
|
|
78
|
+
"unit",
|
|
79
|
+
"ux-design",
|
|
80
|
+
"vue-a11y-coding",
|
|
81
|
+
"xcode-tooling",
|
|
82
|
+
})
|
|
83
|
+
MIN_SLIM_BODY_LINES = 5
|
|
21
84
|
MARKER_LINE_RE = re.compile(r"^<!--\s*shared-core:\s*[^>]+?\s*-->\s*$")
|
|
22
85
|
ALWAYS_APPLY_RE = re.compile(r"(?m)^alwaysApply:\s*true\s*$")
|
|
23
86
|
PATHS_RE = re.compile(r"(?m)^paths:\s*")
|
|
@@ -138,6 +201,43 @@ for stack in STACKS:
|
|
|
138
201
|
)
|
|
139
202
|
failed += 1
|
|
140
203
|
|
|
204
|
+
# --- Slim-companion enforcement (per stack, both platforms) ---
|
|
205
|
+
# All .mdc (Cursor) / .md (Claude) rules under the stack's rules/ directory
|
|
206
|
+
# are scanned. A rule whose body is > MIN_SLIM_BODY_LINES AND whose stem
|
|
207
|
+
# is NOT in SLIM_COMPANION_ALLOWLIST must be promoted to a domain rule
|
|
208
|
+
# (>=15 body lines per preset-twin-sync.md "Twin depth"). FAIL otherwise.
|
|
209
|
+
slim_violations: list[str] = []
|
|
210
|
+
for rules_dir in (cursor_rules, claude_rules):
|
|
211
|
+
if not rules_dir.exists():
|
|
212
|
+
continue
|
|
213
|
+
pattern = "*.mdc" if rules_dir is cursor_rules else "*.md"
|
|
214
|
+
for rule_path in sorted(rules_dir.rglob(pattern)):
|
|
215
|
+
if rule_path.name == "README.md":
|
|
216
|
+
continue
|
|
217
|
+
text = rule_path.read_text(encoding="utf-8")
|
|
218
|
+
_, body = strip_frontmatter(text)
|
|
219
|
+
n = body_nonempty_lines(body)
|
|
220
|
+
if n <= MIN_SLIM_BODY_LINES:
|
|
221
|
+
continue
|
|
222
|
+
# Skip rules explicitly in the slim-companion allow-list (they are
|
|
223
|
+
# allowed to be short pointers regardless of body length).
|
|
224
|
+
if rule_path.stem in SLIM_COMPANION_ALLOWLIST:
|
|
225
|
+
continue
|
|
226
|
+
# Domain rules (>=15 lines) are fine; we only flag the 6..14 line
|
|
227
|
+
# "slim-but-not-allowed" bucket.
|
|
228
|
+
if n >= 15:
|
|
229
|
+
continue
|
|
230
|
+
slim_violations.append(
|
|
231
|
+
f"{rule_path.relative_to(presets).as_posix()} ({n} lines, slim but not in allow-list)"
|
|
232
|
+
)
|
|
233
|
+
if slim_violations:
|
|
234
|
+
print(f" Slim-companion allow-list violations ({len(slim_violations)}):")
|
|
235
|
+
for v in slim_violations[:10]:
|
|
236
|
+
print(f" FAIL: {v}")
|
|
237
|
+
if len(slim_violations) > 10:
|
|
238
|
+
print(f" ... and {len(slim_violations) - 10} more")
|
|
239
|
+
failed += len(slim_violations)
|
|
240
|
+
|
|
141
241
|
print()
|
|
142
242
|
|
|
143
243
|
if failed:
|
|
@@ -80,6 +80,24 @@ def consumers(stem: str) -> list[Path]:
|
|
|
80
80
|
out.append(path)
|
|
81
81
|
except OSError:
|
|
82
82
|
continue
|
|
83
|
+
contract_path = presets / "mavis" / "platform-contract.json"
|
|
84
|
+
if contract_path.is_file():
|
|
85
|
+
try:
|
|
86
|
+
contract = json.loads(contract_path.read_text(encoding="utf-8"))
|
|
87
|
+
for stack in contract.get("releasedStacks") or []:
|
|
88
|
+
mavis_base = presets / "mavis" / stack
|
|
89
|
+
if not mavis_base.is_dir():
|
|
90
|
+
continue
|
|
91
|
+
for path in mavis_base.rglob("*"):
|
|
92
|
+
if path.suffix not in {".md", ".mdc"}:
|
|
93
|
+
continue
|
|
94
|
+
try:
|
|
95
|
+
if needle in path.read_text(encoding="utf-8"):
|
|
96
|
+
out.append(path)
|
|
97
|
+
except OSError:
|
|
98
|
+
continue
|
|
99
|
+
except (json.JSONDecodeError, OSError):
|
|
100
|
+
pass
|
|
83
101
|
return out
|
|
84
102
|
|
|
85
103
|
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Cross-check `task-router.md` intent rows against `agents/*.md` `name:` frontmatter.
|
|
3
|
+
#
|
|
4
|
+
# Two-sided verification:
|
|
5
|
+
# 1. Every agent file (frontmatter `name:` other than `task-router` itself) must
|
|
6
|
+
# be referenced somewhere in the stack's `task-router.md` so the router knows
|
|
7
|
+
# how to invoke it. Missing mention ⇒ FAIL (the agent will silently never
|
|
8
|
+
# receive a handoff).
|
|
9
|
+
# 2. Every agent stem referenced in `task-router.md` (in the `Default steps`
|
|
10
|
+
# column, the `Model tiers` table, or other inline mentions) must have a
|
|
11
|
+
# corresponding `agents/<stem>.md` file. Missing agent ⇒ FAIL (the router
|
|
12
|
+
# emits an intent that no agent can satisfy).
|
|
13
|
+
#
|
|
14
|
+
# The check is per `(platform, stack)` pair and runs all 20 ships (cursor + claude
|
|
15
|
+
# × 10 stacks). Exits non-zero on any FAIL.
|
|
16
|
+
#
|
|
17
|
+
# Stack-specific exemptions:
|
|
18
|
+
# - mcp-ts does not ship `playwright-test-*`, `xcuitest-test-*`, `unit-test-*`
|
|
19
|
+
# in the standard mix; intent rows that reference those agents are flagged
|
|
20
|
+
# only on stacks that ship the corresponding `agents/<stem>.md` file.
|
|
21
|
+
# - Stack leakage (positive agent stems on the wrong stack) is enforced in
|
|
22
|
+
# `check-preset-leakage.sh`; this check covers task-router sync only.
|
|
23
|
+
set -euo pipefail
|
|
24
|
+
|
|
25
|
+
ROOT="$(cd "$(dirname "$0")/../../.." && pwd)"
|
|
26
|
+
# Allow callers (notably the fixture test) to redirect the presets root via
|
|
27
|
+
# the env var. Default to the real repo path.
|
|
28
|
+
export AI_RULES_PRESETS_ROOT="${AI_RULES_PRESETS_ROOT:-$ROOT/packages/ai-rules/presets}"
|
|
29
|
+
|
|
30
|
+
python3 <<'PY'
|
|
31
|
+
from __future__ import annotations
|
|
32
|
+
|
|
33
|
+
import json
|
|
34
|
+
import os
|
|
35
|
+
import re
|
|
36
|
+
import sys
|
|
37
|
+
from pathlib import Path
|
|
38
|
+
|
|
39
|
+
presets = Path(os.environ["AI_RULES_PRESETS_ROOT"])
|
|
40
|
+
PLATFORMS = ("cursor", "claude", "mavis")
|
|
41
|
+
STACKS = ("next", "nuxt", "svelte", "ios-swift", "android-kotlin", "go", "java", "mcp-ts", "php-hexagonal", "php-laravel")
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def released_mavis_stacks() -> list[str]:
|
|
45
|
+
contract = presets / "mavis" / "platform-contract.json"
|
|
46
|
+
if not contract.is_file():
|
|
47
|
+
return []
|
|
48
|
+
try:
|
|
49
|
+
data = json.loads(contract.read_text(encoding="utf-8"))
|
|
50
|
+
return list(data.get("releasedStacks") or [])
|
|
51
|
+
except json.JSONDecodeError:
|
|
52
|
+
return []
|
|
53
|
+
|
|
54
|
+
# Agents that are shipped for orchestration purposes but do not need to appear
|
|
55
|
+
# in task-router.md intent rows (router-only / analyzer-only / orchestrator-only).
|
|
56
|
+
ROUTER_EXEMPT_FROM_INTENT = frozenset({
|
|
57
|
+
"task-router", # this file
|
|
58
|
+
"codebase-analyzer", # ad-hoc explain-as-is agent
|
|
59
|
+
"agent-team-intake", # one-off intake, not a pipeline target
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
# Agent-stem regex: kebab-case, lowercase, may include digits and dots (x.y).
|
|
63
|
+
# Two patterns: (a) hyphen/dot-bounded names like `feature-developer`, `unit.test`,
|
|
64
|
+
# (b) single-word agents that are present in `shipped_names`. Both feed the
|
|
65
|
+
# `agent_like` filter.
|
|
66
|
+
AGENT_NAME_RE = re.compile(r"\b([a-z][a-z0-9]*(?:[-.][a-z0-9]+)+)\b")
|
|
67
|
+
SINGLE_WORD_AGENT_RE = re.compile(r"\b([a-z][a-z0-9]+)\b")
|
|
68
|
+
FRONTMATTER_NAME_RE = re.compile(r"^name:\s*([a-z][a-z0-9]*(?:[-.][a-z0-9]+)+)\s*$", re.MULTILINE)
|
|
69
|
+
|
|
70
|
+
failures: list[str] = []
|
|
71
|
+
checks = 0
|
|
72
|
+
|
|
73
|
+
for platform in PLATFORMS:
|
|
74
|
+
stacks = STACKS if platform != "mavis" else released_mavis_stacks()
|
|
75
|
+
for stack in stacks:
|
|
76
|
+
agents_dir = presets / platform / stack / "agents"
|
|
77
|
+
if not agents_dir.is_dir():
|
|
78
|
+
continue
|
|
79
|
+
task_router = agents_dir / "task-router.md"
|
|
80
|
+
if not task_router.is_file():
|
|
81
|
+
failures.append(f"{platform}/{stack}: missing task-router.md")
|
|
82
|
+
continue
|
|
83
|
+
|
|
84
|
+
# 1) All agent `name:` frontmatter in this stack's agents dir.
|
|
85
|
+
shipped_names: set[str] = set()
|
|
86
|
+
for path in sorted(agents_dir.glob("*.md")):
|
|
87
|
+
text = path.read_text(encoding="utf-8")
|
|
88
|
+
m = FRONTMATTER_NAME_RE.search(text)
|
|
89
|
+
if m:
|
|
90
|
+
shipped_names.add(m.group(1))
|
|
91
|
+
# Also pick up the file stem as a fallback (in case frontmatter is missing).
|
|
92
|
+
if path.stem not in shipped_names and path.stem != "README":
|
|
93
|
+
shipped_names.add(path.stem)
|
|
94
|
+
|
|
95
|
+
# 2) All agent stems referenced in task-router.md (anywhere in body).
|
|
96
|
+
router_text = task_router.read_text(encoding="utf-8")
|
|
97
|
+
# Restrict to body (drop YAML frontmatter).
|
|
98
|
+
body = router_text
|
|
99
|
+
if router_text.startswith("---\n"):
|
|
100
|
+
end = router_text.find("\n---\n", 4)
|
|
101
|
+
if end >= 0:
|
|
102
|
+
body = router_text[end + 5 :]
|
|
103
|
+
referenced_in_router: set[str] = set(AGENT_NAME_RE.findall(body))
|
|
104
|
+
# Single-word tokens that match a shipped agent (e.g. `debugger`,
|
|
105
|
+
# `codebase-analyzer`, `ci-investigator`) are valid router mentions even
|
|
106
|
+
# without a hyphen/dot boundary.
|
|
107
|
+
for token in SINGLE_WORD_AGENT_RE.findall(body):
|
|
108
|
+
if token in shipped_names:
|
|
109
|
+
referenced_in_router.add(token)
|
|
110
|
+
agent_like: set[str] = referenced_in_router - ROUTER_EXEMPT_FROM_INTENT
|
|
111
|
+
|
|
112
|
+
# Subset of shipped agents that are not router-exempt AND not referenced.
|
|
113
|
+
shipped_pipeline_agents = shipped_names - ROUTER_EXEMPT_FROM_INTENT
|
|
114
|
+
# 1-sided check (FAIL when shipped but not mentioned).
|
|
115
|
+
not_referenced = sorted(shipped_pipeline_agents - agent_like)
|
|
116
|
+
for name in not_referenced:
|
|
117
|
+
checks += 1
|
|
118
|
+
# The README is not an agent.
|
|
119
|
+
if name == "README":
|
|
120
|
+
continue
|
|
121
|
+
# Skip agents only used as commands or skills (e.g. technical-retro,
|
|
122
|
+
# agent-team-intake when still present). These are explicitly
|
|
123
|
+
# exempt — but we already filter ROUTER_EXEMPT_FROM_INTENT, so any
|
|
124
|
+
# remaining mismatch is a real gap.
|
|
125
|
+
failures.append(
|
|
126
|
+
f"{platform}/{stack}: ships agent '{name}.md' but task-router.md does not mention '{name}'"
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
# 2-sided check (FAIL when mentioned in router but not shipped).
|
|
130
|
+
not_shipped = sorted(agent_like - shipped_names)
|
|
131
|
+
for name in not_shipped:
|
|
132
|
+
checks += 1
|
|
133
|
+
# Allow mentions of common stacks/tools that aren't agents (filter).
|
|
134
|
+
# Common false positives: branch names, mixed-case strings, etc.
|
|
135
|
+
# The regex already constrains to lowercase kebab/dot; further filter
|
|
136
|
+
# by requiring the suffix to look like an agent suffix.
|
|
137
|
+
if name in {"feature-developer", "build-verifier", "code-reviewer"}:
|
|
138
|
+
# These should be shipped; surface as FAIL.
|
|
139
|
+
failures.append(
|
|
140
|
+
f"{platform}/{stack}: task-router.md references '{name}' but agents/{name}.md is missing"
|
|
141
|
+
)
|
|
142
|
+
# Otherwise ignore (likely prose token or matcher noise).
|
|
143
|
+
|
|
144
|
+
if failures:
|
|
145
|
+
print(f"FAIL: task-router vs agents drift ({len(failures)} issue(s) / {checks} checks):")
|
|
146
|
+
for f in failures[:30]:
|
|
147
|
+
print(f" - {f}")
|
|
148
|
+
if len(failures) > 30:
|
|
149
|
+
print(f" ... and {len(failures) - 30} more")
|
|
150
|
+
sys.exit(1)
|
|
151
|
+
|
|
152
|
+
print(f"OK: task-router.md intent rows match agents/*.md ({checks} checks across {len(PLATFORMS) * len(STACKS)} (platform, stack) pairs)")
|
|
153
|
+
sys.exit(0)
|
|
154
|
+
PY
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"tool": "claude",
|
|
4
|
+
"preset": "next",
|
|
5
|
+
"files": {
|
|
6
|
+
".claude/CLAUDE.md": "78ffc0009705747ce0c07362d0c4259472cc011fe1667faf801da453204a444b",
|
|
7
|
+
".claude/MCP.md": "a40a7f9cd8a11a031a5fb3f2e4ccdb6cb2186461600146765d3255990e6133d0",
|
|
8
|
+
".claude/agents/README.md": "10e8eac494611ad037fc2be118ed6f2e4ae3fca77a8f82171f5c0d3ae7f37249",
|
|
9
|
+
".claude/agents/accessibility-reviewer.md": "87030cc8a0c4ed7224b784655002c2efe0629ca39253dfa20379a64ad942c332",
|
|
10
|
+
".claude/agents/api-contract-reviewer.md": "930374aea3b8aae083ceceac7efc74034b231ed2337608f4b19afa563becb1c4",
|
|
11
|
+
".claude/agents/build-verifier.md": "f132292fdab6751df833eed5719c3fa35d223131d0c82b934174b3a5d05a51ed",
|
|
12
|
+
".claude/agents/ci-investigator.md": "ea6b26e97498edd5696514bcea543bf88f47a1c123664a45dd6d3563f28ece8c",
|
|
13
|
+
".claude/agents/code-reviewer.md": "3bb4d752922b33ab741a5032d778c0e5d26f065fb4e8f67af9e31d9487f53366",
|
|
14
|
+
".claude/agents/codebase-analyzer.md": "cae5586fd9a5fc0ea12a7578c5a9f5a4c72229b1e5c4f1eeb9ff9b6b243becf0",
|
|
15
|
+
".claude/agents/debugger.md": "37848ae158132898d195749e35e6dbc2efe8b13adc4673f336706c0395d864c1",
|
|
16
|
+
".claude/agents/feature-developer.md": "8ce49c81785e6f6b29303dae55de8e30e4edd55f14501f6e8f570de9bfe8e1a2",
|
|
17
|
+
".claude/agents/migration-specialist.md": "8d951d4efe13a673fb95a06f065939c6a7d0d9535b7bdca616fda5b416e67930",
|
|
18
|
+
".claude/agents/mockup-reviewer.md": "eca45c653aaf44ce5363a43a510a8f9587d3c451e63a9ddf72b12e7d21e43bed",
|
|
19
|
+
".claude/agents/openspec-author.md": "a0166a4e292e53dde8e0aa8a1970e0030fdb43fa4e7e7c3010dc0f96fc18d724",
|
|
20
|
+
".claude/agents/performance-auditor.md": "c849819ceb157aacd83c8ffdfbd83f10b0b0cdd004feb6b716cf16bfc846421c",
|
|
21
|
+
".claude/agents/playwright-test-generator.md": "dd06c7ed43ebdde73f0c7c30ff4fde82a66f93f519d03a30a7384067efcdfab5",
|
|
22
|
+
".claude/agents/playwright-test-healer.md": "3db0eca9b388d5bbee1b8f884bd7e296ae5c8078122463a6fae10fd0445447f1",
|
|
23
|
+
".claude/agents/playwright-test-planner.md": "50760360548a943c36d1cf3f18b66e083b0a09e1244acbc4e319e80f139a8250",
|
|
24
|
+
".claude/agents/qa-tester.md": "031eb903d7dfd842f263f63817483af2f37079242bb6ae89f54398fef2d8023f",
|
|
25
|
+
".claude/agents/security-reviewer.md": "2eb87b289083a393f6a69527af11393631c8cba2b0d601666b06b660e6be91bd",
|
|
26
|
+
".claude/agents/solution-architect.md": "660c9a610e5a83417f3fa4953b7776bfccfe6eaf16c1e46386c7e420f3a3aaa3",
|
|
27
|
+
".claude/agents/task-analyst.md": "359a9f9ce4ae20d72d160eec3ae4787eb19702830ff434efe390519374d6c362",
|
|
28
|
+
".claude/agents/task-router.md": "409764b6a67424d02255fda6b5d5a5c693203f015be916e5ead589c692e2ec46",
|
|
29
|
+
".claude/agents/tech-writer.md": "f01af5569f4e73cf331539c67e7fb142f91ec099b86e3daad5af5b588eaf36ea",
|
|
30
|
+
".claude/agents/unit-test-generator.md": "08472db05d1615d79a3d51abd980d5d6c252c65cfeef3f09956727537ae87a11",
|
|
31
|
+
".claude/agents/unit-test-healer.md": "11ab2b89de31acd98115da94aaa515c163409f0e9118bdb37718f8906218d79f",
|
|
32
|
+
".claude/agents/unit-test-planner.md": "c86dbe763e2020f5bbcd9c566655389df7ff3aa9dfacd44096752a2e39bee920",
|
|
33
|
+
".claude/commands/README.md": "bb295e65506b38c6f714f70216fca5825b9b2476c16d55d0b8139d5814e65682",
|
|
34
|
+
".claude/commands/spec-start.md": "40102dda4a19e37a97666eee90454b71e9fa89740a9e70b93e5ad8da49896c59",
|
|
35
|
+
".claude/commands/task-continue.md": "a1082320020fd7b6336a8377dbe7cbcb1099f5c449e0365c0eb0424259284dee",
|
|
36
|
+
".claude/commands/task.md": "1ec4421d426cdba5dd17e9fe8b43949f1070fe3691d944338a75d9e9e5073159",
|
|
37
|
+
".claude/commands/technical-retro.md": "6195206cc687645fadcbe011306f6c62f1d082508c9182d880e5e4485d17214c",
|
|
38
|
+
".claude/hooks/README.md": "34bd123b0f4773a6a86b79b9e5ea7c53d81d920ad6ee2867c79fe4ba21f9f284",
|
|
39
|
+
".claude/hooks/chain-team-phases.sh": "eb5c0de5d481231bbe60f76711b45e114c37128b36b769284fe849186045dc9f",
|
|
40
|
+
".claude/hooks/examples/README.md": "337b1f81fb3add28f6fd24a0433f5578077b031d649bd5200996eb44f9e43e22",
|
|
41
|
+
".claude/hooks/examples/format-edited.example.sh": "fd4df1d6c2a5673f963febd4f3f21ec8c42899645bdc53144d713c66b2affc76",
|
|
42
|
+
".claude/hooks/examples/secret-guard.example.sh": "51cbc95c3a1b64dfc5b19901932b4e3a047ade9332451282f254bf5f8d45a58f",
|
|
43
|
+
".claude/hooks/examples/test-on-save.example.sh": "ae185e383811e2f8f89ae5f631993705c06fc8cf7216cf8f0862a5b55c64ca2a",
|
|
44
|
+
".claude/hooks/guard-shell-command.sh": "d1eae59b78aac8155668528ceb87abaf54624466a60f7d2df8716c25aad3fe96",
|
|
45
|
+
".claude/rules/README.md": "4e9da22700a5b941a91aaa2c2398a68e34f9ad66485089fc9fe68455ee9b564e",
|
|
46
|
+
".claude/rules/anti-hallucination/react-next-anti-hallucination.md": "021d22a4178aad43b8ba8b332cc677dbe8130a0cf673407acbb34d47c5367d32",
|
|
47
|
+
".claude/rules/api-and-data/README.md": "1caace24921f00d60a58bea551988abd15c32f13a2711ae799ce1e689b838de2",
|
|
48
|
+
".claude/rules/api-and-data/api-services.md": "a55d55680543256adafac7b86b323e75e03b1f2a72fd97b97f4b918da77fa497",
|
|
49
|
+
".claude/rules/api-and-data/http-client.md": "437a97b8b533b6df8ae29d346f68a86e49fa0a66fe7ad3bec4b3874403ea6c09",
|
|
50
|
+
".claude/rules/api-and-data/store-rtk.md": "392cc33c5ffec0301ee5e27ce75a8002194a01e91b71564aeade65fe73e35c76",
|
|
51
|
+
".claude/rules/architecture/README.md": "289158e67b7048545c69efdb4d5e03cc721dbf23d66e0cfe5830093d281d2326",
|
|
52
|
+
".claude/rules/architecture/architecture-boundaries-ui.md": "fefaf65f6893d087064a14602bdac7a13f8ca7dafec5af286ecc7d0ec4e332ba",
|
|
53
|
+
".claude/rules/architecture/architecture-boundaries.md": "05214891d47a286761390afb7109a6d7c10d715f84aca2d0df98960075b78b57",
|
|
54
|
+
".claude/rules/architecture/feature-delivery-workflow.md": "d664c6aa288170187b6b18bef5210ed2d75ce18ba9c7de9f35a16917d1c1a3c0",
|
|
55
|
+
".claude/rules/architecture/layer-barrel-exports.md": "c0339a15b5c161bde70107b9dbbd02817d603dcd00d84b43cdd72528c63b4c22",
|
|
56
|
+
".claude/rules/architecture/product-specs-authoring.md": "2266a429713741e0653204df04516bbd5c2f95da146d7c813c7a84bb7fcd9bfe",
|
|
57
|
+
".claude/rules/architecture/product-specs.md": "83ca98fd58c32504eef5745f986b82a6a5ddae202a3d357891e9f0f8233caab9",
|
|
58
|
+
".claude/rules/architecture/public-imports.md": "da67712b2bb2462967d0869555fb145063fd7ecce53e4b0a08ffc7e53ffac6f3",
|
|
59
|
+
".claude/rules/architecture/reference-features.md": "92c31f368ea05a324940c623caf2cc6305ed02550f3effde6f9a1b3b31f0a68a",
|
|
60
|
+
".claude/rules/stack/README.md": "8dda2a6cacc3346300ea445bcb87d157c898fabdc820ca202667b915f9088de2",
|
|
61
|
+
".claude/rules/stack/arrow-functions.md": "4e382cc791c2d057431830baccff4f7043c4a39424370fe2fa0c57c62a646ea4",
|
|
62
|
+
".claude/rules/stack/navigation-router-ui.md": "8cabe15ed92ae9574c152dd1c001f4771ac1e1d287b0d2f2b12b7f84ddd5fa73",
|
|
63
|
+
".claude/rules/stack/navigation-router.md": "67e2198e7100fe96764acf47810839f8c169b118a2da71ecc172f1569a2571d6",
|
|
64
|
+
".claude/rules/stack/next-app-core.md": "f6742178b1de0be258826375ba93874a3180160df36977fca1b37762b5a25e00",
|
|
65
|
+
".claude/rules/stack/next-app-router.md": "bb5b0a77fdd17f6643cdf825732e985fa41beea410fe5d6060bc259e507c4446",
|
|
66
|
+
".claude/rules/stack/no-type-assertion.md": "6fb33fa61bceea2fad7cde3361d82c9655b6fd84d43d863033d039b78e6af210",
|
|
67
|
+
".claude/rules/stack/types-jsdoc.md": "1c9b63c5c2230ef7dc8fbb224cecb7b0a99d2235ae17f720b5a92fcd0291ffc5",
|
|
68
|
+
".claude/rules/testing/README.md": "0018e4e37f60352fafac64cad74209aedf88e9129d9bbbd3016a6cb36efe7e0a",
|
|
69
|
+
".claude/rules/testing/playwright-agents.md": "c1d5ce31222bd2dc4ccebea2be79180fe1632a69eedaca1cbf37604b7e783219",
|
|
70
|
+
".claude/rules/testing/tests-e2e-structure.md": "bf0833d342a0c856e89f67c6a2f78e29499b56f00c4d145df53f9e9b1803e253",
|
|
71
|
+
".claude/rules/testing/tests-unit.md": "a123d75a6c6f128b01f55e801f596c4b875d4f0841662e4d39a62dbf51846e7d",
|
|
72
|
+
".claude/rules/tooling-and-review/README.md": "27a956fa7fa68c58cd17a9b598580b06cb2241aadef29e3b647a31ab418d99ec",
|
|
73
|
+
".claude/rules/tooling-and-review/agent-team-intake.md": "4880f2d91c221c5be3d75650973403402a4705d9bd66178e3ca4b163a3704ebc",
|
|
74
|
+
".claude/rules/tooling-and-review/agent-team-orchestrator.md": "95d7f915a03d6317f32d0de77879aee2b41db71c629c4baf18f36ad6316d7fe9",
|
|
75
|
+
".claude/rules/tooling-and-review/ai-local-overlay.md": "2b4c7db3c68a2645c96d35e682a6e6f61ecabca97cc009128af825724bbfe2fb",
|
|
76
|
+
".claude/rules/tooling-and-review/anti-sycophancy-discipline.md": "6d359631dde6dbe6588397aa1108752cfdad9764d90d6d9da31606a463b72226",
|
|
77
|
+
".claude/rules/tooling-and-review/code-quality.md": "9aee7805102788d8a9d21504127f2fe94209d98abd1c880719097a42fb70bf94",
|
|
78
|
+
".claude/rules/tooling-and-review/code-review-mr.md": "2e2353585d9ce54b799463031e17fc7cf8d81b6dc1670e385d8f6065c53ce862",
|
|
79
|
+
".claude/rules/tooling-and-review/design-guidance.md": "6eb8a48f9d9f69896c047c9418577e47eda6d2ad6bf18b3dff761c6de675f7d3",
|
|
80
|
+
".claude/rules/tooling-and-review/mcp-usage.md": "37cafc7c5271f3d846223e1f82eef5f8a85b88e6f1ff00603d39849e154033e2",
|
|
81
|
+
".claude/rules/tooling-and-review/mockup-review.md": "6ace9a2be32595c2307bdb2d1c6b9952d3fa37e3ca8bb7b2398d86110fec7a8c",
|
|
82
|
+
".claude/rules/tooling-and-review/package-manager.md": "1e80459ac986a61eee45a6d0aef67177aa449279784848397c32ac0511b0c208",
|
|
83
|
+
".claude/rules/tooling-and-review/post-change-lint.md": "9fc3151e022866f7a14ca5bbfaa4b2889f7ea049cfde545633ba5daaf319398e",
|
|
84
|
+
".claude/rules/tooling-and-review/preset-layering.md": "f759db43eeb6e0d60f202bf8d039e876f9ef5e30d1d8347a72a27f359223c164",
|
|
85
|
+
".claude/rules/tooling-and-review/preset-no-cross-stack-leakage.md": "fd096345109e52f1f648d69c192b77d75da50f919bd5ca6c0f00170654657506",
|
|
86
|
+
".claude/rules/tooling-and-review/preset-pr-checklist.md": "eb8b58e17d9524c4606ee3484dbed575504b1ff1ed52abeb877557312ef7a43d",
|
|
87
|
+
".claude/rules/tooling-and-review/preset-token-budget.md": "1814407172ed4a88420406df13ca66af176a5a0c6282e37382d7ec0045506e13",
|
|
88
|
+
".claude/rules/tooling-and-review/preset-twin-sync.md": "f9c97f5027c87cdf7e52d309746c7efc1b5c55551c5844bbcb4d581f1e8cac22",
|
|
89
|
+
".claude/rules/tooling-and-review/security-next.md": "3e5c733925a0040928a9fbb7d841e69a471a03c5cb02d2fa986b81d29d7e31ca",
|
|
90
|
+
".claude/rules/tooling-and-review/technical-retro.md": "afed167d7f9dc26b25ce47368998df665cc779550b101041ab3ee5bcdd81a96b",
|
|
91
|
+
".claude/rules/tooling-and-review/ux-design.md": "732e9f290155ac5255bde9bf3fe6430ca1b1fd9c0ccbf5ea4467a3ccc22f12b5",
|
|
92
|
+
".claude/rules/ui-and-accessibility/README.md": "a3f6fed71b29b82c107014461f7546c341fea7f2c46a39e99181816b57e979d2",
|
|
93
|
+
".claude/rules/ui-and-accessibility/css-property-order.md": "1f3ed3e5891adb0114e203e26a4ad86c12d0bfeeadb7d425104e92fd5bf20dc1",
|
|
94
|
+
".claude/rules/ui-and-accessibility/no-props-spread.md": "60aa9ca9c94db981bcceb05a090734e540644febfa88f4e40089f5d16a8a5d7f",
|
|
95
|
+
".claude/rules/ui-and-accessibility/react-a11y-coding.md": "8709f43c13f7071b2cd645c29b171de218551c3895479901efa1a817585b245d",
|
|
96
|
+
".claude/rules/ui-and-accessibility/react-ui.md": "b5e3c8875f0fd9b8325f4bc9a10fad75bda56bf87c8be7a7993f4e593c055d07",
|
|
97
|
+
".claude/skills/README.md": "1aeac616a5270d0ce6be132a3dff3e0bbca1371191503f0ecf3eeeeea5b4e9f3",
|
|
98
|
+
".claude/skills/ci-investigation/SKILL.md": "b13ed9de0716671b7d192dc2ba7fec139466a933b52f25c075623dcdef38b399",
|
|
99
|
+
".claude/skills/code-review/SKILL.md": "5da3983387e9854ed8ae57de02ae9d115443c0448c2ce7723c50d590cc9cccfc",
|
|
100
|
+
".claude/skills/debug-investigation/SKILL.md": "bf3deed2871089de2bafd0164781f1baa6aa3a2853244278fcbaeefe0db04205",
|
|
101
|
+
".claude/skills/feature-delivery/SKILL.md": "0d73925b4670eb7c81fa870e85c9c058e5416dfce53b9ebcde8b421ab36498eb",
|
|
102
|
+
".claude/skills/mockup-review/SKILL.md": "44eca5265ca666948cb507fb92872105675bab21e93a4ecc2e42607c1e4e43ea",
|
|
103
|
+
".claude/skills/playwright-e2e/SKILL.md": "df1ef0a4febcd7939757d8ffdffa4f347aa09e4fb030a84be2d89cd80701ffe8",
|
|
104
|
+
".claude/skills/react-performance/SKILL.md": "aaca660b87207e73cdaac123d523bf4cd57a4b2b8156431b11c1bd0bcdae6224",
|
|
105
|
+
".claude/skills/spec-authoring/SKILL.md": "37fcaf06088daee07de6b620a522143823d831579aa9c824bc1d7040f1d25e9d",
|
|
106
|
+
".claude/skills/spec-discovery/SKILL.md": "ee58903bf84dac5f78d2cd2d38a62cc73c1dc4c39b2f8a14c5a63e842b6c002d",
|
|
107
|
+
".claude/skills/technical-retro/SKILL.md": "a8a013b9e65522aa66e5d51651ac19ea007c962241a9c1204f9f1ee4196bcbcf",
|
|
108
|
+
".claude/skills/unit-testing/SKILL.md": "218e5410726832dd67ef72cb12afeb74dfc4e9624eb36099479c78eded185a59",
|
|
109
|
+
".claude/skills/ux-design/SKILL.md": "19108cc47ea203d0e4ac7e99282cf750224a963febf85a406bd420ded344032d",
|
|
110
|
+
".claude/skills/write-adr/SKILL.md": "40eab263a26ad3b367ff7bd406f55a568164a1a7ba8c22c69e2212e833f0cb68",
|
|
111
|
+
".claude/team/README.md": "af484580de898bbfa5a486be23ead58d165bc8d758c97be24a0bce669bf3ba27",
|
|
112
|
+
".claude/team/conventions.md": "af977857ae0b3f10ccc36236f350eb8dccbec409530abf51a53de81a150a0442",
|
|
113
|
+
".claude/team/fixtures/artifact-manifest.example.json": "bf4d0f00838f957643646b8407b4cec12aff3dec45893c1e776f44f3de08fb42",
|
|
114
|
+
".claude/team/fixtures/bugfix-standard.json": "209cc0cc1844befee4bdbec9dcee27337dd7019f9f459dfcb8996db291fcae81",
|
|
115
|
+
".claude/team/fixtures/feature-full.json": "1110b152cdcb5508e8ce4179aa2e760f7f7c66569ba081d6bdf0a49a0a449470",
|
|
116
|
+
".claude/team/fixtures/feature-light.json": "618ac9da9527d688ec7dac849eafb869ae342ec890d0e7c73c1e57c0f8fb5a1b",
|
|
117
|
+
".claude/team/fixtures/feature-with-figma-url.json": "8aec2ac11ba552bc9135721678af58c73ca5a74b3038c5f4dc878b1080ade9be",
|
|
118
|
+
".claude/team/fixtures/feature-with-ux-no-figma.json": "526c103a26c83afef60ebadd289735b6dfea14c8191acd9780fc72e72da2ff45",
|
|
119
|
+
".claude/team/fixtures/memlog.example.md": "53d281ddd383e0337b038a0dc6dd4e14f84743066a1a99bf45fc2e7064cce222",
|
|
120
|
+
".claude/team/fixtures/mockup-review-fail-embedded-status.json": "2e1f3ff8e5e3668f20f2b0e329f26b884c79e426dd6b5952c0896bd4f0c7f9a4",
|
|
121
|
+
".claude/team/fixtures/mockup-review-standalone.json": "edda49b1298e94f9a33496317e9f6ccbbb047659e044e05ba35669bfe800eda6",
|
|
122
|
+
".claude/team/fixtures/ux-design-standalone.json": "528aeb9db4c310d1b5e3eacae0ad39a4fd1dd49c04154b064e7027981488a07a",
|
|
123
|
+
".claude/team/tasks/.gitkeep": "aca85ed348a49b11d68188be6ab245b521e5a706bbe0fbca1a28abfdc7155893",
|
|
124
|
+
".mcp.json": "f68a14db68a491a982975a3e6cc985057072a68eebdcedf33d8ac2a4a3b284ca",
|
|
125
|
+
"AGENTS.md": "faa7f59b3ab5f5fd85174045edba9e0e7382d8e2afe1086f7713993d70c958ea",
|
|
126
|
+
"docs/specs/INDEX.md": "cab59f2093e6aaa376246a56d53e4268cb59070a6b10e87a94895192c35f422d",
|
|
127
|
+
"docs/specs/_templates/feature.md": "83c47b90334c555fb5144749837e2ddfe1cae5bb89031f885ba98671075d59e7",
|
|
128
|
+
"docs/specs/_templates/page.md": "a668c584e28edd52afaf3f9f8f898a75e43cb82fa12822c7a016033441e12e54"
|
|
129
|
+
}
|
|
130
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"tool": "cursor",
|
|
4
|
+
"preset": "next",
|
|
5
|
+
"files": {
|
|
6
|
+
".cursor/AGENTS.md": "a974df24d3a59d45877e94303198350357140175abca99958eff6b950385b002",
|
|
7
|
+
".cursor/BUGBOT.md": "c87b463c1bf4d41d503c4889bd6a58ba992bb48347574623d1bf2d62f4e1a8c6",
|
|
8
|
+
".cursor/MCP.md": "023b2546a2535556a0c3cd91f65e6f2f45a33feede237d0c1120e041e84b88ea",
|
|
9
|
+
".cursor/agents/README.md": "73b159dd8708f6b6e6bb16f3f85246fb2cc4d517ba6eafd757d2f48b137f6ac0",
|
|
10
|
+
".cursor/agents/accessibility-reviewer.md": "bdcd98ba07edc5dc8556030b16b6d4c88a55af8ada600559ac453ad0962f7845",
|
|
11
|
+
".cursor/agents/api-contract-reviewer.md": "51ce103a07db0ab786ebed5423fa2be0e448e94d8f17b59faf47d3ecaebdf08f",
|
|
12
|
+
".cursor/agents/build-verifier.md": "c9d235bcf200f34db41729edd9a1d4855b27a4f6096c27905169395395ba5d4e",
|
|
13
|
+
".cursor/agents/ci-investigator.md": "7db8c393877b8ede733d814de82c3d4cc96438705dd0fbeed9188193e02d7129",
|
|
14
|
+
".cursor/agents/code-reviewer.md": "a1dfb4badd5e03292fde5ce4c004a9b4977b92a562833a3c068a0ef528c52ca7",
|
|
15
|
+
".cursor/agents/codebase-analyzer.md": "cae5586fd9a5fc0ea12a7578c5a9f5a4c72229b1e5c4f1eeb9ff9b6b243becf0",
|
|
16
|
+
".cursor/agents/debugger.md": "4c3c058dbf0e723e98ffa9d384a3b14e95b69fbe546712c9534962a5a60485a2",
|
|
17
|
+
".cursor/agents/feature-developer.md": "c69767afb76c19c30556b142bff4cc31afc125d647a7ab0d2b084ac460317309",
|
|
18
|
+
".cursor/agents/migration-specialist.md": "f850255b55ed3d4a9e923a4108f4cb4fa359cc0d85f92fc9ba8fa5c2379eb10f",
|
|
19
|
+
".cursor/agents/mockup-reviewer.md": "6a68811a37ddf8e10cbf019a5d171bf4bb7a9c1f35ed1b04ba7c5b68c10f0975",
|
|
20
|
+
".cursor/agents/openspec-author.md": "8b5cb3dc6eb836e9c02a708b3ac84dc59c4447553ea48268e9d8e63d3caa75ce",
|
|
21
|
+
".cursor/agents/performance-auditor.md": "9e45e7df1450519730f175dd79f102193a4f1d5a6b52f488f0ac91a880b5760d",
|
|
22
|
+
".cursor/agents/playwright-test-generator.md": "9f81266d272bee838118c3c3c1b9304d876a7738434461b01723d0e587682712",
|
|
23
|
+
".cursor/agents/playwright-test-healer.md": "91d479ebf127bdcc41da1af4f8fcaf3b122f6836bc3556b206f0047291013cb0",
|
|
24
|
+
".cursor/agents/playwright-test-planner.md": "d61a3bccda9f48b2bace932760662fb3e3ff06995fb2f135574d2bda92c9528c",
|
|
25
|
+
".cursor/agents/qa-tester.md": "d4c717be6dafdfef8ecd9f0b52409c2f68a3b1caca8f7b2383e3f89358497b71",
|
|
26
|
+
".cursor/agents/security-reviewer.md": "bc1ad0448324d6a55e466ff1ddb0bc71b2c4d8e7402ae3a07ebb14741ee96621",
|
|
27
|
+
".cursor/agents/solution-architect.md": "1e6e6809ace801c738bb229ea498789fadce1570f637af68697468f4d2974789",
|
|
28
|
+
".cursor/agents/task-analyst.md": "456bd2a5ef6d31dad518622f848baeb0ca1333e2f0f03bcc1499ad41ac3aa4dc",
|
|
29
|
+
".cursor/agents/task-router.md": "c514557ed9448073a6fce42d64ff82c23e943f054215ac4dd5e8fde243305de2",
|
|
30
|
+
".cursor/agents/tech-writer.md": "832052b12559ba51f650f8d3fb742b3574e1aa6ca162756f8d30c300db62cbd9",
|
|
31
|
+
".cursor/agents/unit-test-generator.md": "320161ee480bc5a22492ed7cef564bea62e538072baccdebc6d507ec08fe06bd",
|
|
32
|
+
".cursor/agents/unit-test-healer.md": "d49e7f2a546eb2c6b155e50fe4a1fc8796f599954bc76846a7fe193c84a1fcdb",
|
|
33
|
+
".cursor/agents/unit-test-planner.md": "38cd7b41b1889dd9e98e04e8a732290ddfdaf7988404c387f9e4f73d993b8a24",
|
|
34
|
+
".cursor/commands/README.md": "0322ed8b2d259a52294552ceb25093894cfbbb3efd7e0259c5588869addb61e9",
|
|
35
|
+
".cursor/commands/spec-start.md": "908d3e91f91bb169657f610f62ea777c6aabb928ec4c10ff65e630f34f7ad63c",
|
|
36
|
+
".cursor/commands/task-continue.md": "cba9b0c6ca3329ab15759e1b03cbcb0e32f05f478ffa40a392e5f61e14f7197d",
|
|
37
|
+
".cursor/commands/task.md": "a84a382000a045defccd8fc94f7abdc88c0747b5a5b8541f5914aa03a0368190",
|
|
38
|
+
".cursor/commands/technical-retro.md": "1cf7c350c744b8895117039d9c7a286173dd58cacf9606e3cc0cbefa103a3bbe",
|
|
39
|
+
".cursor/hooks.json": "fbe392afb84951ed9e30739fdcfddd18b5b7f68a8e129e874497e85dbd80e252",
|
|
40
|
+
".cursor/hooks/README.md": "7168133cff3c8baad6fb80e97fbe9d92bd0daa8a619e8f6833b4a9557cd31255",
|
|
41
|
+
".cursor/hooks/chain-team-phases.sh": "9ff8aa68c6f5b2e8047e8352736b3debc28a2f8fd78600fc5292cf09d34ccdc6",
|
|
42
|
+
".cursor/hooks/examples/README.md": "337b1f81fb3add28f6fd24a0433f5578077b031d649bd5200996eb44f9e43e22",
|
|
43
|
+
".cursor/hooks/examples/format-edited.example.sh": "fd4df1d6c2a5673f963febd4f3f21ec8c42899645bdc53144d713c66b2affc76",
|
|
44
|
+
".cursor/hooks/examples/secret-guard.example.sh": "51cbc95c3a1b64dfc5b19901932b4e3a047ade9332451282f254bf5f8d45a58f",
|
|
45
|
+
".cursor/hooks/examples/test-on-save.example.sh": "ae185e383811e2f8f89ae5f631993705c06fc8cf7216cf8f0862a5b55c64ca2a",
|
|
46
|
+
".cursor/hooks/guard-shell-command.sh": "1ff08e0a65f128134019713ea32af7a5c1cdf2f9b6279f1908b9e5109c55dee1",
|
|
47
|
+
".cursor/mcp.json": "1c395aec4abe8dc63e1c14e49295210f6bf54536344a5479b3eb1429678f7814",
|
|
48
|
+
".cursor/rules/README.md": "6aaaabd87ecb0ee398ac02ee39a5d6ca610c48bb437650cf127d9a6a0a13bf45",
|
|
49
|
+
".cursor/rules/agent-team-intake.mdc": "7d8925e60ffecb4ae0c95236f013b750e4fbe14782a4de4729db71c5667fa958",
|
|
50
|
+
".cursor/rules/agent-team-orchestrator.mdc": "cc3f67a610a08c858e94430b7a101425a926d15af7d75940b45383c04370f17f",
|
|
51
|
+
".cursor/rules/ai-local-overlay.mdc": "29dcb6ec804ecdf04ba8bfc7a97f6fa32d54ea2c8a5543385f8e0197faa202dc",
|
|
52
|
+
".cursor/rules/anti-sycophancy-discipline.mdc": "20c9dc8da47240f3f5b6a1c355d0bd83265cf7f1e080a6025b824d1b7ac2d36d",
|
|
53
|
+
".cursor/rules/api-services.mdc": "22214ec8a30bdc04d8099b7e97daf7baa0b772eb401ce95750faf10f19dd8770",
|
|
54
|
+
".cursor/rules/architecture-boundaries-ui.mdc": "8697315b586b4d9e993fb5895617cf23943ad3b4a87f592a975df3c3f31f5bb8",
|
|
55
|
+
".cursor/rules/architecture-boundaries.mdc": "7361d9691140737af5c59a616f8efc894dd8cf8eca4175fbded1fb7dc24a0f62",
|
|
56
|
+
".cursor/rules/arrow-functions.mdc": "39ab6897e54c6f10cefc67829b64619ec12d6a1a7ac2d40aca9358efe4a428a1",
|
|
57
|
+
".cursor/rules/code-quality-and-refactoring.mdc": "82786a44f3d31244327c6f69502bf7468e15052b77968b9f0d9e929353d6092b",
|
|
58
|
+
".cursor/rules/code-review-mr.mdc": "bc99aab8bfe17600f691a77aba318910b711d76042a410dc00253938e5c9a4ff",
|
|
59
|
+
".cursor/rules/css-property-order-stylelint.mdc": "7369961a5d1a05603c69a5e1de607dc2cb7b579711d981385433fe0913deb132",
|
|
60
|
+
".cursor/rules/design-guidance.mdc": "143ea1da195a5298375b9b48ac82d12b639fc2af1ac90c31423e6c6d3a97fddd",
|
|
61
|
+
".cursor/rules/feature-delivery-workflow.mdc": "a81b6e8b86aa707223d5306403903131f38fe1c51c09bfba00cf0d0c558225f1",
|
|
62
|
+
".cursor/rules/http-client.mdc": "2aaa3d6c04d1b086d77e3db6ae3d29d3c22382357d9b83a2e7fdb9fe1f1f6bf2",
|
|
63
|
+
".cursor/rules/layer-barrel-exports.mdc": "410446639d437e36e46819fcb27db6d0ec417f7eb356eacd3157964a6616fd17",
|
|
64
|
+
".cursor/rules/mcp-usage.mdc": "9cbbb65de906b67b8c5502168209ddd74e58b4fcd2309d2d491e13e9361b93fd",
|
|
65
|
+
".cursor/rules/mockup-review.mdc": "a3a80df557862e87826ca52bb29312cba15036729155bf7a90dd11feda96dad9",
|
|
66
|
+
".cursor/rules/navigation-router-stack.mdc": "2fdc0a40a266f6737a25d4a9012ef1d534fc3c26851a5740d29e6eeac138e726",
|
|
67
|
+
".cursor/rules/navigation-router-ui.mdc": "82b1a6f6f42bdc36cf7670f25306ae723d49f29746c3960751a2e8021079098b",
|
|
68
|
+
".cursor/rules/next-app-core.mdc": "d33e3f26bd393d8dd7e274d73e03b6bf346a55a7cb9e09af7408889464881782",
|
|
69
|
+
".cursor/rules/next-app-router.mdc": "a89943202e2e97f2975b4701e4fbd0de1312df6d26ad463b3cc627305a3f48fc",
|
|
70
|
+
".cursor/rules/no-props-spread.mdc": "673b47cc40a6a1b3f30236cb89deb79430d225205545e20d7afb8ad8ce62aae9",
|
|
71
|
+
".cursor/rules/no-type-assertion-as-import-export.mdc": "78a7625b80353c8d52ca537e3c33d78f72c426b93748c7b988f6afe8706f0315",
|
|
72
|
+
".cursor/rules/package-manager.mdc": "ff639e2957f359d60adbc8daf2fbdecf9d7be0b6b9664860697a50b1eb855aab",
|
|
73
|
+
".cursor/rules/playwright-agents.mdc": "088c4aaf50c5d6fa1846ec73f32878ec51f795bf3eafb0daccdb6355e56e7e65",
|
|
74
|
+
".cursor/rules/post-change-lint.mdc": "2f9398a6ae81636d7a401e5fc38bb300579e10d29df9a375a3ed592dfb028529",
|
|
75
|
+
".cursor/rules/preset-layering.mdc": "6a193863d9cd02598282e4697aac077fec7839dbf24fc56d5eab3064e2eb79d0",
|
|
76
|
+
".cursor/rules/preset-no-cross-stack-leakage.mdc": "b7301230d4d07abd38f7be3f592b5d5385968d4a401050cdbb9a0e9898cb911c",
|
|
77
|
+
".cursor/rules/preset-pr-checklist.mdc": "c77157ee16a83a4b156a27487da3ae98351fbd8198eda1f6e8605439a5f7bd9b",
|
|
78
|
+
".cursor/rules/preset-token-budget.mdc": "845755627c744d33ae0e6790d1d57b8605cbc56fee68d371cb6f20cd2573ed86",
|
|
79
|
+
".cursor/rules/preset-twin-sync.mdc": "a731e0337de8c3a59749755883a0488e60b45d8e3d9bfabae5f9659c35f0eda1",
|
|
80
|
+
".cursor/rules/product-specs-authoring.mdc": "590bbfe9f1d3c6b9acd363cd9658f9bb509702071410ef753a49d9a0a90122d2",
|
|
81
|
+
".cursor/rules/product-specs.mdc": "6f0e09b2f6c1b9ed63e23c50c9e2a4a481e7b102f821d1c94a0077bd2cf606ff",
|
|
82
|
+
".cursor/rules/public-imports.mdc": "efa02180236610417b5f08b63e4d4babc982bc9c6aa81fa464e0be948109fe26",
|
|
83
|
+
".cursor/rules/react-a11y-coding.mdc": "05d36f721f42b3effacc9a436701c5dcec5ec8889bf0a2662a4a307e5c27fe8a",
|
|
84
|
+
".cursor/rules/react-next-anti-hallucination.mdc": "357808c678eed984c185e5574fae889fdb89c499d353d069540e113493493466",
|
|
85
|
+
".cursor/rules/react-ui.mdc": "1462aba0a51ba502e5eaba34491a06beab72e2e4f366e72c18590cb52189ec01",
|
|
86
|
+
".cursor/rules/reference-features.mdc": "dbda83f470e59034893984bcd6723aa6bfeacfff59528a01483e9ac0b58f3c8a",
|
|
87
|
+
".cursor/rules/security-next.mdc": "284a483f997732ca7946dde7632544bc472682c47e26e86621ae1981e91ce8b0",
|
|
88
|
+
".cursor/rules/store-rtk.mdc": "02a79f96fcc93aa2602ba1e4bd5af207f4349a913d7aeb1d432ae0b7a8a356f7",
|
|
89
|
+
".cursor/rules/technical-retro.mdc": "ebe50f727b88c81494183941da90f79a6ef22ddf166095cd9d9fb42f1a62998b",
|
|
90
|
+
".cursor/rules/tests-e2e-structure.mdc": "61d8e86c5c861dc00f73052927ab9141c70154e03b53ce4c9fb4c222ff682898",
|
|
91
|
+
".cursor/rules/tests-unit.mdc": "8c9b08db8074e9596dc40e1774e183b07bc501caf6f483c840ca60ed8319f919",
|
|
92
|
+
".cursor/rules/types-jsdoc.mdc": "8993a3cde232e0761272c2e24cbc632bdc4f99ecabb7c4edcd0467856fd55b80",
|
|
93
|
+
".cursor/rules/ux-design.mdc": "7952757d40b6b579d7ec150d8b5a178042c44d0bc1afbee16bb4aaff35208122",
|
|
94
|
+
".cursor/skills/README.md": "9d5128920e0712c2c9782d9161aa5351f38675072543fa44f47f6c5219807c79",
|
|
95
|
+
".cursor/skills/ci-investigation/SKILL.md": "b13ed9de0716671b7d192dc2ba7fec139466a933b52f25c075623dcdef38b399",
|
|
96
|
+
".cursor/skills/code-review/SKILL.md": "739436e7e035aa9ece5e0ae55ee0537665a0944697f6eaac4a8e4de2a761d40a",
|
|
97
|
+
".cursor/skills/debug-investigation/SKILL.md": "47d91a0f9cb0f4eeff2677de9d64ecb8277cf3784f34a2c47e58c312d253d5f1",
|
|
98
|
+
".cursor/skills/feature-delivery/SKILL.md": "f2abea2e2ca8f9e1cebebfa0296ea6a2ef734f105d80dd252351a346b1f95e03",
|
|
99
|
+
".cursor/skills/mockup-review/SKILL.md": "939f48d26e028d4ef3602d7949555aa2f9466e27eac43fca705d0a8c2848a2c3",
|
|
100
|
+
".cursor/skills/playwright-e2e/SKILL.md": "df1ef0a4febcd7939757d8ffdffa4f347aa09e4fb030a84be2d89cd80701ffe8",
|
|
101
|
+
".cursor/skills/react-performance/SKILL.md": "aaca660b87207e73cdaac123d523bf4cd57a4b2b8156431b11c1bd0bcdae6224",
|
|
102
|
+
".cursor/skills/spec-authoring/SKILL.md": "37fcaf06088daee07de6b620a522143823d831579aa9c824bc1d7040f1d25e9d",
|
|
103
|
+
".cursor/skills/spec-discovery/SKILL.md": "3d576ff0b50d1e82e464b765502c92e2f4a17fd3c55dae66e9efb9f0eb8f8af8",
|
|
104
|
+
".cursor/skills/technical-retro/SKILL.md": "bc80fe638f35103b91d4234f8a4a844aa1e2cf95a5ccf77abb394d0cf063d78a",
|
|
105
|
+
".cursor/skills/unit-testing/SKILL.md": "c5907a90bd2cb0860700232e8e7b2a116f6d190d17d0aed44bb7bc587218e2d6",
|
|
106
|
+
".cursor/skills/ux-design/SKILL.md": "abfefc90a7c1c78b5631a0acfe1a5abf97db7a4e8d9396632c0f2ec351049069",
|
|
107
|
+
".cursor/skills/write-adr/SKILL.md": "40eab263a26ad3b367ff7bd406f55a568164a1a7ba8c22c69e2212e833f0cb68",
|
|
108
|
+
".cursor/team/README.md": "351447954377d7231b94fb6249ac3c060d5eb3d432f200a4754e26e07db8d2a0",
|
|
109
|
+
".cursor/team/conventions.md": "af977857ae0b3f10ccc36236f350eb8dccbec409530abf51a53de81a150a0442",
|
|
110
|
+
".cursor/team/fixtures/artifact-manifest.example.json": "bf4d0f00838f957643646b8407b4cec12aff3dec45893c1e776f44f3de08fb42",
|
|
111
|
+
".cursor/team/fixtures/bugfix-standard.json": "209cc0cc1844befee4bdbec9dcee27337dd7019f9f459dfcb8996db291fcae81",
|
|
112
|
+
".cursor/team/fixtures/feature-full.json": "59a54f330227ff7738b25b459ee937323546b63e300f915cd4b9d6e8a870d964",
|
|
113
|
+
".cursor/team/fixtures/feature-light.json": "618ac9da9527d688ec7dac849eafb869ae342ec890d0e7c73c1e57c0f8fb5a1b",
|
|
114
|
+
".cursor/team/fixtures/feature-with-figma-url.json": "8aec2ac11ba552bc9135721678af58c73ca5a74b3038c5f4dc878b1080ade9be",
|
|
115
|
+
".cursor/team/fixtures/feature-with-ux-no-figma.json": "526c103a26c83afef60ebadd289735b6dfea14c8191acd9780fc72e72da2ff45",
|
|
116
|
+
".cursor/team/fixtures/memlog.example.md": "53d281ddd383e0337b038a0dc6dd4e14f84743066a1a99bf45fc2e7064cce222",
|
|
117
|
+
".cursor/team/fixtures/metrics-scenarios/tasks/human-gate/metrics.json": "6642b2ae310cdb89eb80fce7bb01d69a428c9ca8072651af7397f4f19eb0a724",
|
|
118
|
+
".cursor/team/fixtures/metrics-scenarios/tasks/missing-ledger/status.json": "c27b87afa3c82d7d0d4b0e8385b8ebb245e17c10e3fe00f94938141f5843e9d7",
|
|
119
|
+
".cursor/team/fixtures/metrics-scenarios/tasks/parallel-receipts/metrics.json": "66294d7fb22a50eca3cc98692c27bd740959dc361245dc8d382e2086a4d847ca",
|
|
120
|
+
".cursor/team/fixtures/metrics-scenarios/tasks/serial-retry/metrics.json": "8bcf7904c072927212a24aa9036019a8bf84a8e92f17275ace86001ad7896ca6",
|
|
121
|
+
".cursor/team/fixtures/metrics-scenarios/tasks/validation-failed/metrics.json": "f0ad432a4f73a6ef7ced550c20e662726025b46776f349693cbc3cd547bc5112",
|
|
122
|
+
".cursor/team/fixtures/metrics.example.json": "ec056907da840e11477afabd1401aef30773af833617d2f68b3f1db825f62d0a",
|
|
123
|
+
".cursor/team/fixtures/mockup-review-fail-embedded-status.json": "2e1f3ff8e5e3668f20f2b0e329f26b884c79e426dd6b5952c0896bd4f0c7f9a4",
|
|
124
|
+
".cursor/team/fixtures/mockup-review-standalone.json": "edda49b1298e94f9a33496317e9f6ccbbb047659e044e05ba35669bfe800eda6",
|
|
125
|
+
".cursor/team/fixtures/ux-design-standalone.json": "528aeb9db4c310d1b5e3eacae0ad39a4fd1dd49c04154b064e7027981488a07a",
|
|
126
|
+
".cursor/team/tasks/.gitkeep": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
|
127
|
+
"AGENTS.md": "59acefbf75e74132a8391531797b3c81e0ea6f9592dea7aed637fdcbf7f74a39",
|
|
128
|
+
"docs/specs/INDEX.md": "cab59f2093e6aaa376246a56d53e4268cb59070a6b10e87a94895192c35f422d",
|
|
129
|
+
"docs/specs/_templates/feature.md": "83c47b90334c555fb5144749837e2ddfe1cae5bb89031f885ba98671075d59e7",
|
|
130
|
+
"docs/specs/_templates/page.md": "a668c584e28edd52afaf3f9f8f898a75e43cb82fa12822c7a016033441e12e54"
|
|
131
|
+
}
|
|
132
|
+
}
|