@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.
Files changed (363) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +6 -2
  3. package/bin/cli.js +32 -8
  4. package/bin/mavis-install.js +441 -0
  5. package/package.json +9 -2
  6. package/presets/_shared/core/agent-team/agent-artifact-contracts.md +2 -0
  7. package/presets/_shared/core/meta/preset-pr-checklist.md +1 -0
  8. package/presets/_shared/core/meta/preset-twin-sync.md +17 -1
  9. package/presets/claude/android-kotlin/agents/build-verifier.md +2 -0
  10. package/presets/claude/android-kotlin/agents/code-reviewer.md +2 -0
  11. package/presets/claude/android-kotlin/agents/debugger.md +1 -0
  12. package/presets/claude/android-kotlin/agents/feature-developer.md +3 -0
  13. package/presets/claude/android-kotlin/agents/qa-tester.md +2 -0
  14. package/presets/claude/android-kotlin/agents/task-router.md +4 -0
  15. package/presets/claude/android-kotlin/hooks/chain-team-phases.sh +51 -11
  16. package/presets/claude/android-kotlin/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  17. package/presets/claude/android-kotlin/rules/tooling-and-review/preset-twin-sync.md +17 -1
  18. package/presets/claude/go/agents/build-verifier.md +4 -0
  19. package/presets/claude/go/agents/code-reviewer.md +4 -0
  20. package/presets/claude/go/agents/debugger.md +4 -0
  21. package/presets/claude/go/agents/feature-developer.md +5 -0
  22. package/presets/claude/go/agents/qa-tester.md +4 -0
  23. package/presets/claude/go/agents/task-router.md +4 -0
  24. package/presets/claude/go/hooks/chain-team-phases.sh +51 -11
  25. package/presets/claude/go/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  26. package/presets/claude/go/rules/tooling-and-review/preset-twin-sync.md +17 -1
  27. package/presets/claude/ios-swift/agents/build-verifier.md +2 -0
  28. package/presets/claude/ios-swift/agents/code-reviewer.md +2 -0
  29. package/presets/claude/ios-swift/agents/debugger.md +1 -0
  30. package/presets/claude/ios-swift/agents/feature-developer.md +3 -0
  31. package/presets/claude/ios-swift/agents/qa-tester.md +2 -0
  32. package/presets/claude/ios-swift/agents/task-router.md +4 -0
  33. package/presets/claude/ios-swift/hooks/chain-team-phases.sh +51 -11
  34. package/presets/claude/ios-swift/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  35. package/presets/claude/ios-swift/rules/tooling-and-review/preset-twin-sync.md +17 -1
  36. package/presets/claude/java/agents/build-verifier.md +4 -0
  37. package/presets/claude/java/agents/code-reviewer.md +4 -0
  38. package/presets/claude/java/agents/debugger.md +4 -0
  39. package/presets/claude/java/agents/feature-developer.md +5 -0
  40. package/presets/claude/java/agents/qa-tester.md +4 -0
  41. package/presets/claude/java/agents/task-router.md +4 -0
  42. package/presets/claude/java/hooks/chain-team-phases.sh +51 -11
  43. package/presets/claude/java/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  44. package/presets/claude/java/rules/tooling-and-review/preset-twin-sync.md +17 -1
  45. package/presets/claude/mcp-ts/agents/build-verifier.md +4 -0
  46. package/presets/claude/mcp-ts/agents/feature-developer.md +5 -0
  47. package/presets/claude/mcp-ts/agents/task-router.md +1 -1
  48. package/presets/claude/mcp-ts/hooks/chain-team-phases.sh +51 -11
  49. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  50. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-twin-sync.md +17 -1
  51. package/presets/claude/next/agents/build-verifier.md +2 -0
  52. package/presets/claude/next/agents/code-reviewer.md +2 -0
  53. package/presets/claude/next/agents/debugger.md +4 -0
  54. package/presets/claude/next/agents/feature-developer.md +3 -0
  55. package/presets/claude/next/agents/qa-tester.md +4 -0
  56. package/presets/claude/next/agents/unit-test-generator.md +1 -1
  57. package/presets/claude/next/agents/unit-test-planner.md +1 -1
  58. package/presets/claude/next/hooks/chain-team-phases.sh +51 -11
  59. package/presets/claude/next/rules/api-and-data/http-client.md +1 -1
  60. package/presets/claude/next/rules/architecture/reference-features.md +1 -1
  61. package/presets/claude/next/rules/testing/README.md +1 -1
  62. package/presets/claude/next/rules/testing/tests-e2e-structure.md +2 -0
  63. package/presets/claude/next/rules/testing/tests-unit.md +3 -5
  64. package/presets/claude/next/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  65. package/presets/claude/next/rules/tooling-and-review/preset-twin-sync.md +17 -1
  66. package/presets/claude/next/rules/ui-and-accessibility/react-ui.md +1 -1
  67. package/presets/claude/next/skills/playwright-e2e/SKILL.md +5 -3
  68. package/presets/claude/next/skills/unit-testing/SKILL.md +6 -4
  69. package/presets/claude/nuxt/agents/build-verifier.md +2 -0
  70. package/presets/claude/nuxt/agents/code-reviewer.md +2 -0
  71. package/presets/claude/nuxt/agents/debugger.md +4 -0
  72. package/presets/claude/nuxt/agents/feature-developer.md +3 -0
  73. package/presets/claude/nuxt/agents/qa-tester.md +4 -0
  74. package/presets/claude/nuxt/hooks/chain-team-phases.sh +51 -11
  75. package/presets/claude/nuxt/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  76. package/presets/claude/nuxt/rules/tooling-and-review/preset-twin-sync.md +17 -1
  77. package/presets/claude/php-hexagonal/agents/build-verifier.md +4 -0
  78. package/presets/claude/php-hexagonal/agents/code-reviewer.md +4 -0
  79. package/presets/claude/php-hexagonal/agents/debugger.md +4 -0
  80. package/presets/claude/php-hexagonal/agents/feature-developer.md +5 -0
  81. package/presets/claude/php-hexagonal/agents/qa-tester.md +4 -0
  82. package/presets/claude/php-hexagonal/agents/task-router.md +4 -0
  83. package/presets/claude/php-hexagonal/hooks/chain-team-phases.sh +51 -11
  84. package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  85. package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-twin-sync.md +17 -1
  86. package/presets/claude/php-laravel/agents/build-verifier.md +4 -0
  87. package/presets/claude/php-laravel/agents/code-reviewer.md +4 -0
  88. package/presets/claude/php-laravel/agents/debugger.md +4 -0
  89. package/presets/claude/php-laravel/agents/feature-developer.md +5 -0
  90. package/presets/claude/php-laravel/agents/qa-tester.md +4 -0
  91. package/presets/claude/php-laravel/agents/task-router.md +1 -0
  92. package/presets/claude/php-laravel/hooks/chain-team-phases.sh +51 -11
  93. package/presets/claude/php-laravel/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  94. package/presets/claude/php-laravel/rules/tooling-and-review/preset-twin-sync.md +17 -1
  95. package/presets/claude/svelte/agents/build-verifier.md +2 -0
  96. package/presets/claude/svelte/agents/code-reviewer.md +2 -0
  97. package/presets/claude/svelte/agents/debugger.md +4 -0
  98. package/presets/claude/svelte/agents/feature-developer.md +3 -0
  99. package/presets/claude/svelte/agents/qa-tester.md +4 -0
  100. package/presets/claude/svelte/hooks/chain-team-phases.sh +51 -11
  101. package/presets/claude/svelte/rules/tooling-and-review/preset-pr-checklist.md +1 -0
  102. package/presets/claude/svelte/rules/tooling-and-review/preset-twin-sync.md +17 -1
  103. package/presets/cursor/android-kotlin/agents/build-verifier.md +2 -0
  104. package/presets/cursor/android-kotlin/agents/code-reviewer.md +2 -0
  105. package/presets/cursor/android-kotlin/agents/debugger.md +1 -0
  106. package/presets/cursor/android-kotlin/agents/feature-developer.md +3 -0
  107. package/presets/cursor/android-kotlin/agents/qa-tester.md +2 -0
  108. package/presets/cursor/android-kotlin/agents/task-router.md +4 -0
  109. package/presets/cursor/android-kotlin/hooks/chain-team-phases.sh +51 -11
  110. package/presets/cursor/android-kotlin/rules/preset-pr-checklist.mdc +1 -0
  111. package/presets/cursor/android-kotlin/rules/preset-twin-sync.mdc +17 -1
  112. package/presets/cursor/go/agents/build-verifier.md +4 -0
  113. package/presets/cursor/go/agents/code-reviewer.md +4 -0
  114. package/presets/cursor/go/agents/debugger.md +4 -0
  115. package/presets/cursor/go/agents/feature-developer.md +5 -0
  116. package/presets/cursor/go/agents/qa-tester.md +4 -0
  117. package/presets/cursor/go/agents/task-router.md +4 -0
  118. package/presets/cursor/go/hooks/chain-team-phases.sh +51 -11
  119. package/presets/cursor/go/rules/preset-pr-checklist.mdc +1 -0
  120. package/presets/cursor/go/rules/preset-twin-sync.mdc +17 -1
  121. package/presets/cursor/ios-swift/agents/build-verifier.md +2 -0
  122. package/presets/cursor/ios-swift/agents/code-reviewer.md +2 -0
  123. package/presets/cursor/ios-swift/agents/debugger.md +1 -0
  124. package/presets/cursor/ios-swift/agents/feature-developer.md +3 -0
  125. package/presets/cursor/ios-swift/agents/qa-tester.md +2 -0
  126. package/presets/cursor/ios-swift/agents/task-router.md +4 -0
  127. package/presets/cursor/ios-swift/hooks/chain-team-phases.sh +51 -11
  128. package/presets/cursor/ios-swift/rules/preset-pr-checklist.mdc +1 -0
  129. package/presets/cursor/ios-swift/rules/preset-twin-sync.mdc +17 -1
  130. package/presets/cursor/java/agents/build-verifier.md +4 -0
  131. package/presets/cursor/java/agents/code-reviewer.md +4 -0
  132. package/presets/cursor/java/agents/debugger.md +4 -0
  133. package/presets/cursor/java/agents/feature-developer.md +5 -0
  134. package/presets/cursor/java/agents/qa-tester.md +4 -0
  135. package/presets/cursor/java/agents/task-router.md +4 -0
  136. package/presets/cursor/java/hooks/chain-team-phases.sh +51 -11
  137. package/presets/cursor/java/rules/preset-pr-checklist.mdc +1 -0
  138. package/presets/cursor/java/rules/preset-twin-sync.mdc +17 -1
  139. package/presets/cursor/mcp-ts/agents/build-verifier.md +4 -0
  140. package/presets/cursor/mcp-ts/agents/feature-developer.md +5 -0
  141. package/presets/cursor/mcp-ts/agents/task-router.md +1 -1
  142. package/presets/cursor/mcp-ts/hooks/chain-team-phases.sh +51 -11
  143. package/presets/cursor/mcp-ts/rules/preset-pr-checklist.mdc +1 -0
  144. package/presets/cursor/mcp-ts/rules/preset-twin-sync.mdc +17 -1
  145. package/presets/cursor/next/agents/build-verifier.md +2 -0
  146. package/presets/cursor/next/agents/code-reviewer.md +2 -0
  147. package/presets/cursor/next/agents/debugger.md +4 -0
  148. package/presets/cursor/next/agents/feature-developer.md +3 -0
  149. package/presets/cursor/next/agents/qa-tester.md +4 -0
  150. package/presets/cursor/next/agents/unit-test-generator.md +1 -1
  151. package/presets/cursor/next/agents/unit-test-planner.md +1 -1
  152. package/presets/cursor/next/hooks/chain-team-phases.sh +51 -11
  153. package/presets/cursor/next/rules/http-client.mdc +1 -1
  154. package/presets/cursor/next/rules/preset-pr-checklist.mdc +1 -0
  155. package/presets/cursor/next/rules/preset-twin-sync.mdc +17 -1
  156. package/presets/cursor/next/rules/react-ui.mdc +1 -1
  157. package/presets/cursor/next/rules/reference-features.mdc +1 -1
  158. package/presets/cursor/next/rules/tests-e2e-structure.mdc +2 -0
  159. package/presets/cursor/next/rules/tests-unit.mdc +3 -5
  160. package/presets/cursor/next/skills/playwright-e2e/SKILL.md +5 -3
  161. package/presets/cursor/next/skills/unit-testing/SKILL.md +6 -4
  162. package/presets/cursor/nuxt/agents/build-verifier.md +2 -0
  163. package/presets/cursor/nuxt/agents/code-reviewer.md +2 -0
  164. package/presets/cursor/nuxt/agents/debugger.md +4 -0
  165. package/presets/cursor/nuxt/agents/feature-developer.md +3 -0
  166. package/presets/cursor/nuxt/agents/qa-tester.md +4 -0
  167. package/presets/cursor/nuxt/hooks/chain-team-phases.sh +51 -11
  168. package/presets/cursor/nuxt/rules/preset-pr-checklist.mdc +1 -0
  169. package/presets/cursor/nuxt/rules/preset-twin-sync.mdc +17 -1
  170. package/presets/cursor/php-hexagonal/agents/build-verifier.md +4 -0
  171. package/presets/cursor/php-hexagonal/agents/code-reviewer.md +4 -0
  172. package/presets/cursor/php-hexagonal/agents/debugger.md +4 -0
  173. package/presets/cursor/php-hexagonal/agents/feature-developer.md +5 -0
  174. package/presets/cursor/php-hexagonal/agents/qa-tester.md +4 -0
  175. package/presets/cursor/php-hexagonal/agents/task-router.md +4 -0
  176. package/presets/cursor/php-hexagonal/hooks/chain-team-phases.sh +51 -11
  177. package/presets/cursor/php-hexagonal/rules/preset-pr-checklist.mdc +1 -0
  178. package/presets/cursor/php-hexagonal/rules/preset-twin-sync.mdc +17 -1
  179. package/presets/cursor/php-laravel/agents/build-verifier.md +4 -0
  180. package/presets/cursor/php-laravel/agents/code-reviewer.md +4 -0
  181. package/presets/cursor/php-laravel/agents/debugger.md +4 -0
  182. package/presets/cursor/php-laravel/agents/feature-developer.md +5 -0
  183. package/presets/cursor/php-laravel/agents/qa-tester.md +4 -0
  184. package/presets/cursor/php-laravel/agents/task-router.md +1 -0
  185. package/presets/cursor/php-laravel/hooks/chain-team-phases.sh +51 -11
  186. package/presets/cursor/php-laravel/rules/preset-pr-checklist.mdc +1 -0
  187. package/presets/cursor/php-laravel/rules/preset-twin-sync.mdc +17 -1
  188. package/presets/cursor/svelte/agents/build-verifier.md +2 -0
  189. package/presets/cursor/svelte/agents/code-reviewer.md +2 -0
  190. package/presets/cursor/svelte/agents/debugger.md +4 -0
  191. package/presets/cursor/svelte/agents/feature-developer.md +3 -0
  192. package/presets/cursor/svelte/agents/qa-tester.md +4 -0
  193. package/presets/cursor/svelte/hooks/chain-team-phases.sh +51 -11
  194. package/presets/cursor/svelte/rules/preset-pr-checklist.mdc +1 -0
  195. package/presets/cursor/svelte/rules/preset-twin-sync.mdc +17 -1
  196. package/presets/mavis/README.md +60 -0
  197. package/presets/mavis/next/MAVIS.md +67 -0
  198. package/presets/mavis/next/MCP.md +36 -0
  199. package/presets/mavis/next/README.md +15 -0
  200. package/presets/mavis/next/REPO_AGENTS.md +94 -0
  201. package/presets/mavis/next/adapter-map.json +959 -0
  202. package/presets/mavis/next/agents/README.md +206 -0
  203. package/presets/mavis/next/agents/accessibility-reviewer.md +61 -0
  204. package/presets/mavis/next/agents/api-contract-reviewer.md +57 -0
  205. package/presets/mavis/next/agents/build-verifier.md +110 -0
  206. package/presets/mavis/next/agents/ci-investigator.md +63 -0
  207. package/presets/mavis/next/agents/code-reviewer.md +61 -0
  208. package/presets/mavis/next/agents/codebase-analyzer.md +21 -0
  209. package/presets/mavis/next/agents/debugger.md +80 -0
  210. package/presets/mavis/next/agents/feature-developer.md +101 -0
  211. package/presets/mavis/next/agents/migration-specialist.md +67 -0
  212. package/presets/mavis/next/agents/mockup-reviewer.md +53 -0
  213. package/presets/mavis/next/agents/openspec-author.md +157 -0
  214. package/presets/mavis/next/agents/performance-auditor.md +68 -0
  215. package/presets/mavis/next/agents/playwright-test-generator.md +28 -0
  216. package/presets/mavis/next/agents/playwright-test-healer.md +28 -0
  217. package/presets/mavis/next/agents/playwright-test-planner.md +21 -0
  218. package/presets/mavis/next/agents/qa-tester.md +52 -0
  219. package/presets/mavis/next/agents/security-reviewer.md +54 -0
  220. package/presets/mavis/next/agents/solution-architect.md +68 -0
  221. package/presets/mavis/next/agents/task-analyst.md +166 -0
  222. package/presets/mavis/next/agents/task-router.md +178 -0
  223. package/presets/mavis/next/agents/tech-writer.md +57 -0
  224. package/presets/mavis/next/agents/unit-test-generator.md +31 -0
  225. package/presets/mavis/next/agents/unit-test-healer.md +32 -0
  226. package/presets/mavis/next/agents/unit-test-planner.md +54 -0
  227. package/presets/mavis/next/commands/README.md +49 -0
  228. package/presets/mavis/next/commands/spec-start.md +24 -0
  229. package/presets/mavis/next/commands/task-continue.md +50 -0
  230. package/presets/mavis/next/commands/task.md +50 -0
  231. package/presets/mavis/next/commands/technical-retro.md +80 -0
  232. package/presets/mavis/next/hooks/README.md +22 -0
  233. package/presets/mavis/next/hooks/chain-team-phases.sh +845 -0
  234. package/presets/mavis/next/mcp.json +19 -0
  235. package/presets/mavis/next/rules/README.md +16 -0
  236. package/presets/mavis/next/rules/agent-team-intake.md +11 -0
  237. package/presets/mavis/next/rules/agent-team-orchestrator.md +210 -0
  238. package/presets/mavis/next/rules/ai-local-overlay.md +37 -0
  239. package/presets/mavis/next/rules/anti-sycophancy-discipline.md +23 -0
  240. package/presets/mavis/next/rules/api-services.md +72 -0
  241. package/presets/mavis/next/rules/architecture-boundaries-ui.md +9 -0
  242. package/presets/mavis/next/rules/architecture-boundaries.md +86 -0
  243. package/presets/mavis/next/rules/arrow-functions.md +25 -0
  244. package/presets/mavis/next/rules/code-quality-and-refactoring.md +40 -0
  245. package/presets/mavis/next/rules/code-review-mr.md +40 -0
  246. package/presets/mavis/next/rules/css-property-order-stylelint.md +5 -0
  247. package/presets/mavis/next/rules/design-guidance.md +99 -0
  248. package/presets/mavis/next/rules/feature-delivery-workflow.md +49 -0
  249. package/presets/mavis/next/rules/http-client.md +55 -0
  250. package/presets/mavis/next/rules/layer-barrel-exports.md +68 -0
  251. package/presets/mavis/next/rules/mcp-usage.md +86 -0
  252. package/presets/mavis/next/rules/mockup-review.md +107 -0
  253. package/presets/mavis/next/rules/navigation-router-stack.md +56 -0
  254. package/presets/mavis/next/rules/navigation-router-ui.md +10 -0
  255. package/presets/mavis/next/rules/next-app-core.md +29 -0
  256. package/presets/mavis/next/rules/next-app-router.md +44 -0
  257. package/presets/mavis/next/rules/no-props-spread.md +56 -0
  258. package/presets/mavis/next/rules/no-type-assertion-as-import-export.md +51 -0
  259. package/presets/mavis/next/rules/package-manager.md +11 -0
  260. package/presets/mavis/next/rules/playwright-agents.md +67 -0
  261. package/presets/mavis/next/rules/post-change-lint.md +35 -0
  262. package/presets/mavis/next/rules/preset-layering.md +27 -0
  263. package/presets/mavis/next/rules/preset-no-cross-stack-leakage.md +90 -0
  264. package/presets/mavis/next/rules/preset-pr-checklist.md +35 -0
  265. package/presets/mavis/next/rules/preset-token-budget.md +36 -0
  266. package/presets/mavis/next/rules/preset-twin-sync.md +65 -0
  267. package/presets/mavis/next/rules/product-specs-authoring.md +112 -0
  268. package/presets/mavis/next/rules/product-specs.md +56 -0
  269. package/presets/mavis/next/rules/public-imports.md +50 -0
  270. package/presets/mavis/next/rules/react-a11y-coding.md +31 -0
  271. package/presets/mavis/next/rules/react-next-anti-hallucination.md +60 -0
  272. package/presets/mavis/next/rules/react-ui.md +105 -0
  273. package/presets/mavis/next/rules/reference-features.md +45 -0
  274. package/presets/mavis/next/rules/security-next.md +45 -0
  275. package/presets/mavis/next/rules/store-rtk.md +78 -0
  276. package/presets/mavis/next/rules/technical-retro.md +11 -0
  277. package/presets/mavis/next/rules/tests-e2e-structure.md +72 -0
  278. package/presets/mavis/next/rules/tests-unit.md +72 -0
  279. package/presets/mavis/next/rules/types-jsdoc.md +43 -0
  280. package/presets/mavis/next/rules/ux-design.md +99 -0
  281. package/presets/mavis/next/skills/README.md +21 -0
  282. package/presets/mavis/next/skills/ci-investigation/SKILL.md +39 -0
  283. package/presets/mavis/next/skills/code-review/SKILL.md +39 -0
  284. package/presets/mavis/next/skills/debug-investigation/SKILL.md +26 -0
  285. package/presets/mavis/next/skills/feature-delivery/SKILL.md +34 -0
  286. package/presets/mavis/next/skills/mockup-review/SKILL.md +24 -0
  287. package/presets/mavis/next/skills/playwright-e2e/SKILL.md +28 -0
  288. package/presets/mavis/next/skills/react-performance/SKILL.md +39 -0
  289. package/presets/mavis/next/skills/spec-authoring/SKILL.md +21 -0
  290. package/presets/mavis/next/skills/spec-discovery/SKILL.md +53 -0
  291. package/presets/mavis/next/skills/technical-retro/SKILL.md +49 -0
  292. package/presets/mavis/next/skills/unit-testing/SKILL.md +29 -0
  293. package/presets/mavis/next/skills/ux-design/SKILL.md +31 -0
  294. package/presets/mavis/next/skills/write-adr/SKILL.md +36 -0
  295. package/presets/mavis/next/team/README.md +148 -0
  296. package/presets/mavis/next/team/conventions.md +21 -0
  297. package/presets/mavis/next/team/fixtures/artifact-manifest.example.json +79 -0
  298. package/presets/mavis/next/team/fixtures/bugfix-standard.json +25 -0
  299. package/presets/mavis/next/team/fixtures/feature-full.json +29 -0
  300. package/presets/mavis/next/team/fixtures/feature-light.json +27 -0
  301. package/presets/mavis/next/team/fixtures/feature-with-figma-url.json +17 -0
  302. package/presets/mavis/next/team/fixtures/feature-with-ux-no-figma.json +17 -0
  303. package/presets/mavis/next/team/fixtures/memlog.example.md +9 -0
  304. package/presets/mavis/next/team/fixtures/metrics-scenarios/tasks/human-gate/metrics.json +69 -0
  305. package/presets/mavis/next/team/fixtures/metrics-scenarios/tasks/missing-ledger/status.json +5 -0
  306. package/presets/mavis/next/team/fixtures/metrics-scenarios/tasks/parallel-receipts/metrics.json +79 -0
  307. package/presets/mavis/next/team/fixtures/metrics-scenarios/tasks/serial-retry/metrics.json +124 -0
  308. package/presets/mavis/next/team/fixtures/metrics-scenarios/tasks/validation-failed/metrics.json +124 -0
  309. package/presets/mavis/next/team/fixtures/metrics.example.json +54 -0
  310. package/presets/mavis/next/team/fixtures/mockup-review-fail-embedded-status.json +8 -0
  311. package/presets/mavis/next/team/fixtures/mockup-review-standalone.json +14 -0
  312. package/presets/mavis/next/team/fixtures/ux-design-standalone.json +15 -0
  313. package/presets/mavis/next/team/tasks/.gitkeep +0 -0
  314. package/presets/mavis/platform-contract.json +131 -0
  315. package/scripts/capture-cli-golden.mjs +44 -0
  316. package/scripts/check-chain-hook-coverage.sh +1 -0
  317. package/scripts/check-mavis-adapter-map.mjs +294 -0
  318. package/scripts/check-mavis-local-overlay.mjs +56 -0
  319. package/scripts/check-mavis-platform-contract.mjs +388 -0
  320. package/scripts/check-mavis-token-budget.mjs +48 -0
  321. package/scripts/check-preset-leakage.sh +35 -3
  322. package/scripts/check-preset-structure.sh +73 -0
  323. package/scripts/check-preset-token-budget.sh +100 -0
  324. package/scripts/check-shared-core-drift.sh +18 -0
  325. package/scripts/check-task-router-intents.sh +154 -0
  326. package/scripts/fixtures/cli-golden/claude/next.json +130 -0
  327. package/scripts/fixtures/cli-golden/cursor/next.json +132 -0
  328. package/scripts/fixtures/cli-golden/mavis/next.json +125 -0
  329. package/scripts/fixtures/mavis-adapter-map/invalid-unmapped/cursor/AGENTS.md +1 -0
  330. package/scripts/fixtures/mavis-adapter-map/invalid-unmapped/cursor/rules/extra.mdc +1 -0
  331. package/scripts/fixtures/mavis-adapter-map/invalid-unmapped/cursor/rules/sample.mdc +2 -0
  332. package/scripts/fixtures/mavis-adapter-map/invalid-unmapped/mavis/MAVIS.md +1 -0
  333. package/scripts/fixtures/mavis-adapter-map/invalid-unmapped/mavis/adapter-map.json +26 -0
  334. package/scripts/fixtures/mavis-adapter-map/invalid-unmapped/mavis/rules/sample.md +2 -0
  335. package/scripts/fixtures/mavis-adapter-map/valid/cursor/AGENTS.md +1 -0
  336. package/scripts/fixtures/mavis-adapter-map/valid/cursor/rules/sample.mdc +2 -0
  337. package/scripts/fixtures/mavis-adapter-map/valid/mavis/MAVIS.md +1 -0
  338. package/scripts/fixtures/mavis-adapter-map/valid/mavis/adapter-map.json +26 -0
  339. package/scripts/fixtures/mavis-adapter-map/valid/mavis/rules/sample.md +2 -0
  340. package/scripts/fixtures/mavis-platform-contract/invalid-minimax-destination.json +131 -0
  341. package/scripts/fixtures/mavis-platform-contract/invalid-missing-capability.json +126 -0
  342. package/scripts/fixtures/mavis-platform-contract/invalid-released-unknown-stack.json +133 -0
  343. package/scripts/fixtures/mavis-platform-contract/invalid-unknown-native-path.json +131 -0
  344. package/scripts/fixtures/mavis-platform-contract/invalid-version-pin.json +132 -0
  345. package/scripts/fixtures/mavis-platform-contract/valid.json +131 -0
  346. package/scripts/fixtures/mavis-probe/AGENTS.md +6 -0
  347. package/scripts/fixtures/mavis-probe/agents/probe-agent.md +6 -0
  348. package/scripts/fixtures/mavis-probe/fake-mcode.mjs +98 -0
  349. package/scripts/fixtures/mavis-probe/output.schema.json +28 -0
  350. package/scripts/fixtures/mavis-probe/rules/probe.md +5 -0
  351. package/scripts/fixtures/mavis-probe/skills/probe/SKILL.md +11 -0
  352. package/scripts/generate-mavis-next.mjs +704 -0
  353. package/scripts/lib/cli-golden.mjs +50 -0
  354. package/scripts/lib/discover-hooks.mjs +72 -0
  355. package/scripts/probe-mavis-capabilities.mjs +480 -0
  356. package/scripts/test-agent-task-metrics-hooks.mjs +120 -16
  357. package/scripts/test-chain-team-phases-coverage.mjs +110 -8
  358. package/scripts/test-cli-init-clean.mjs +256 -0
  359. package/scripts/test-cli-mcp-merge.mjs +23 -0
  360. package/scripts/test-mavis-context-budget.mjs +55 -0
  361. package/scripts/test-mavis-orchestration.mjs +649 -0
  362. package/scripts/test-probe-mavis-capabilities.mjs +205 -0
  363. 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
+ }