@bonesofspring/ai-rules 0.2.13 → 0.2.15

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 (908) hide show
  1. package/CHANGELOG.md +36 -1
  2. package/README.md +6 -2
  3. package/bin/cli.js +4 -0
  4. package/package.json +2 -1
  5. package/presets/_shared/README.md +1 -1
  6. package/presets/_shared/core/agent-team/agent-team-intake.md +2 -2
  7. package/presets/_shared/core/agent-team/agent-team-orchestrator.md +4 -4
  8. package/presets/_shared/core/architecture/feature-delivery-workflow.md +27 -27
  9. package/presets/_shared/core/architecture/reference-features.template.md +23 -23
  10. package/presets/_shared/core/meta/preset-layering.md +12 -12
  11. package/presets/_shared/core/meta/preset-no-cross-stack-leakage.md +16 -2
  12. package/presets/_shared/core/meta/preset-pr-checklist.md +6 -6
  13. package/presets/_shared/core/meta/preset-token-budget.md +3 -3
  14. package/presets/_shared/core/meta/preset-twin-sync.md +4 -0
  15. package/presets/_shared/core/quality/code-quality-and-refactoring.md +19 -19
  16. package/presets/_shared/core/quality/design-guidance.md +54 -54
  17. package/presets/_shared/core/review/code-review-mr.md +4 -4
  18. package/presets/_shared/core/review/technical-retro.md +3 -3
  19. package/presets/claude/go/MCP.md +7 -7
  20. package/presets/claude/go/README.md +3 -3
  21. package/presets/claude/go/agents/README.md +2 -2
  22. package/presets/claude/go/agents/build-verifier.md +1 -1
  23. package/presets/claude/go/agents/task-router.md +13 -13
  24. package/presets/claude/go/commands/README.md +8 -8
  25. package/presets/claude/go/commands/feature-continue.md +21 -21
  26. package/presets/claude/go/commands/feature-start.md +16 -16
  27. package/presets/claude/go/commands/task-continue.md +14 -14
  28. package/presets/claude/go/commands/task.md +32 -32
  29. package/presets/claude/go/commands/technical-retro.md +38 -38
  30. package/presets/claude/go/rules/architecture/boundaries.md +10 -10
  31. package/presets/claude/go/rules/stack/README.md +1 -1
  32. package/presets/claude/go/rules/stack/go-app-core.md +11 -11
  33. package/presets/claude/go/rules/tooling-and-review/README.md +1 -1
  34. package/presets/claude/go/rules/tooling-and-review/agent-team-intake.md +2 -2
  35. package/presets/claude/go/rules/tooling-and-review/agent-team-orchestrator.md +4 -4
  36. package/presets/claude/go/rules/tooling-and-review/code-quality.md +21 -20
  37. package/presets/claude/go/rules/tooling-and-review/code-review.md +4 -4
  38. package/presets/claude/go/rules/tooling-and-review/design-guidance.md +54 -54
  39. package/presets/claude/go/rules/tooling-and-review/post-change-test.md +1 -1
  40. package/presets/claude/go/rules/tooling-and-review/preset-layering.md +12 -12
  41. package/presets/claude/go/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -2
  42. package/presets/claude/go/rules/tooling-and-review/preset-pr-checklist.md +6 -6
  43. package/presets/claude/go/rules/tooling-and-review/preset-token-budget.md +3 -3
  44. package/presets/claude/go/rules/tooling-and-review/preset-twin-sync.md +4 -0
  45. package/presets/claude/go/rules/tooling-and-review/technical-retro.md +3 -3
  46. package/presets/claude/go/team/README.md +1 -1
  47. package/presets/claude/ios-swift/CLAUDE.md +16 -16
  48. package/presets/claude/ios-swift/MCP.md +10 -8
  49. package/presets/claude/ios-swift/README.md +8 -8
  50. package/presets/claude/ios-swift/agents/README.md +11 -11
  51. package/presets/claude/ios-swift/agents/build-verifier.md +2 -2
  52. package/presets/claude/ios-swift/agents/feature-developer.md +1 -1
  53. package/presets/claude/ios-swift/agents/task-analyst.md +1 -1
  54. package/presets/claude/ios-swift/agents/task-router.md +18 -18
  55. package/presets/claude/ios-swift/commands/README.md +48 -10
  56. package/presets/claude/ios-swift/commands/feature-continue.md +9 -41
  57. package/presets/claude/ios-swift/commands/feature-start.md +19 -16
  58. package/presets/claude/ios-swift/commands/task-continue.md +14 -14
  59. package/presets/claude/ios-swift/commands/task.md +33 -33
  60. package/presets/claude/ios-swift/commands/technical-retro.md +61 -38
  61. package/presets/claude/ios-swift/rules/README.md +7 -7
  62. package/presets/claude/ios-swift/rules/api-and-data/README.md +1 -1
  63. package/presets/claude/ios-swift/rules/api-and-data/networking.md +31 -31
  64. package/presets/claude/ios-swift/rules/api-and-data/persistence.md +13 -13
  65. package/presets/claude/ios-swift/rules/architecture/README.md +1 -1
  66. package/presets/claude/ios-swift/rules/architecture/boundaries.md +20 -20
  67. package/presets/claude/ios-swift/rules/architecture/feature-delivery.md +31 -30
  68. package/presets/claude/ios-swift/rules/architecture/module-public-api.md +11 -11
  69. package/presets/claude/ios-swift/rules/architecture/reference-features.md +25 -22
  70. package/presets/claude/ios-swift/rules/stack/README.md +1 -1
  71. package/presets/claude/ios-swift/rules/stack/ios-app-core.md +10 -10
  72. package/presets/claude/ios-swift/rules/stack/swift-conventions.md +17 -17
  73. package/presets/claude/ios-swift/rules/testing/README.md +1 -1
  74. package/presets/claude/ios-swift/rules/testing/ui.md +27 -27
  75. package/presets/claude/ios-swift/rules/testing/unit.md +25 -25
  76. package/presets/claude/ios-swift/rules/tooling-and-review/README.md +5 -2
  77. package/presets/claude/ios-swift/rules/tooling-and-review/agent-team-intake.md +2 -2
  78. package/presets/claude/ios-swift/rules/tooling-and-review/agent-team-orchestrator.md +51 -21
  79. package/presets/claude/ios-swift/rules/tooling-and-review/code-quality.md +25 -24
  80. package/presets/claude/ios-swift/rules/tooling-and-review/code-review.md +40 -39
  81. package/presets/claude/ios-swift/rules/tooling-and-review/design-guidance.md +54 -54
  82. package/presets/claude/ios-swift/rules/tooling-and-review/post-change-build.md +18 -18
  83. package/presets/claude/ios-swift/rules/tooling-and-review/preset-layering.md +12 -12
  84. package/presets/claude/ios-swift/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -2
  85. package/presets/claude/ios-swift/rules/tooling-and-review/preset-pr-checklist.md +6 -6
  86. package/presets/claude/ios-swift/rules/tooling-and-review/preset-token-budget.md +3 -3
  87. package/presets/claude/ios-swift/rules/tooling-and-review/preset-twin-sync.md +4 -0
  88. package/presets/claude/ios-swift/rules/tooling-and-review/security-ios.md +14 -14
  89. package/presets/claude/ios-swift/rules/tooling-and-review/technical-retro.md +4 -4
  90. package/presets/claude/ios-swift/rules/tooling-and-review/xcode-tooling.md +11 -11
  91. package/presets/claude/ios-swift/rules/ui-and-accessibility/README.md +1 -1
  92. package/presets/claude/ios-swift/rules/ui-and-accessibility/navigation.md +13 -13
  93. package/presets/claude/ios-swift/rules/ui-and-accessibility/swiftui.md +39 -39
  94. package/presets/claude/ios-swift/rules/ui-and-accessibility/viewmodels.md +24 -24
  95. package/presets/claude/ios-swift/skills/README.md +3 -3
  96. package/presets/claude/ios-swift/team/README.md +6 -2
  97. package/presets/claude/java/MCP.md +5 -5
  98. package/presets/claude/java/agents/README.md +2 -2
  99. package/presets/claude/java/agents/build-verifier.md +1 -1
  100. package/presets/claude/java/agents/task-router.md +13 -13
  101. package/presets/claude/java/commands/README.md +8 -8
  102. package/presets/claude/java/commands/feature-continue.md +21 -21
  103. package/presets/claude/java/commands/feature-start.md +16 -16
  104. package/presets/claude/java/commands/task-continue.md +14 -14
  105. package/presets/claude/java/commands/task.md +32 -32
  106. package/presets/claude/java/commands/technical-retro.md +38 -38
  107. package/presets/claude/java/rules/architecture/boundaries.md +10 -10
  108. package/presets/claude/java/rules/stack/README.md +1 -1
  109. package/presets/claude/java/rules/stack/java-app-core.md +9 -9
  110. package/presets/claude/java/rules/tooling-and-review/README.md +1 -1
  111. package/presets/claude/java/rules/tooling-and-review/agent-team-intake.md +2 -2
  112. package/presets/claude/java/rules/tooling-and-review/agent-team-orchestrator.md +4 -4
  113. package/presets/claude/java/rules/tooling-and-review/code-quality.md +21 -20
  114. package/presets/claude/java/rules/tooling-and-review/code-review.md +5 -4
  115. package/presets/claude/java/rules/tooling-and-review/design-guidance.md +55 -54
  116. package/presets/claude/java/rules/tooling-and-review/post-change-test.md +1 -1
  117. package/presets/claude/java/rules/tooling-and-review/preset-layering.md +12 -12
  118. package/presets/claude/java/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -2
  119. package/presets/claude/java/rules/tooling-and-review/preset-pr-checklist.md +6 -6
  120. package/presets/claude/java/rules/tooling-and-review/preset-token-budget.md +3 -3
  121. package/presets/claude/java/rules/tooling-and-review/preset-twin-sync.md +4 -0
  122. package/presets/claude/java/rules/tooling-and-review/technical-retro.md +3 -3
  123. package/presets/claude/java/team/README.md +1 -1
  124. package/presets/claude/mcp-ts/MCP.md +5 -5
  125. package/presets/claude/mcp-ts/agents/build-verifier.md +1 -1
  126. package/presets/claude/mcp-ts/agents/task-router.md +7 -7
  127. package/presets/claude/mcp-ts/commands/README.md +1 -1
  128. package/presets/claude/mcp-ts/commands/feature-continue.md +8 -8
  129. package/presets/claude/mcp-ts/commands/feature-start.md +17 -17
  130. package/presets/claude/mcp-ts/commands/task-continue.md +14 -14
  131. package/presets/claude/mcp-ts/commands/task.md +32 -32
  132. package/presets/claude/mcp-ts/commands/technical-retro.md +54 -54
  133. package/presets/claude/mcp-ts/rules/architecture/mcp-server-boundaries.md +2 -2
  134. package/presets/claude/mcp-ts/rules/stack/mcp-ts-app-core.md +9 -9
  135. package/presets/claude/mcp-ts/rules/tooling-and-review/agent-team-intake.md +3 -3
  136. package/presets/claude/mcp-ts/rules/tooling-and-review/agent-team-orchestrator.md +4 -4
  137. package/presets/claude/mcp-ts/rules/tooling-and-review/code-quality.md +21 -20
  138. package/presets/claude/mcp-ts/rules/tooling-and-review/code-review.md +5 -4
  139. package/presets/claude/mcp-ts/rules/tooling-and-review/design-guidance.md +55 -54
  140. package/presets/claude/mcp-ts/rules/tooling-and-review/post-change-test.md +1 -1
  141. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-layering.md +12 -12
  142. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -2
  143. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-pr-checklist.md +6 -6
  144. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-token-budget.md +3 -3
  145. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-twin-sync.md +4 -0
  146. package/presets/claude/mcp-ts/rules/tooling-and-review/technical-retro.md +3 -3
  147. package/presets/claude/next/CLAUDE.md +17 -17
  148. package/presets/claude/next/MCP.md +8 -8
  149. package/presets/claude/next/README.md +16 -16
  150. package/presets/claude/next/agents/README.md +19 -19
  151. package/presets/claude/next/agents/build-verifier.md +3 -3
  152. package/presets/claude/next/agents/feature-developer.md +1 -1
  153. package/presets/claude/next/agents/task-analyst.md +1 -1
  154. package/presets/claude/next/agents/task-router.md +16 -16
  155. package/presets/claude/next/commands/README.md +9 -9
  156. package/presets/claude/next/commands/feature-continue.md +21 -21
  157. package/presets/claude/next/commands/feature-start.md +16 -16
  158. package/presets/claude/next/commands/task-continue.md +14 -14
  159. package/presets/claude/next/commands/task.md +33 -33
  160. package/presets/claude/next/commands/technical-retro.md +38 -38
  161. package/presets/claude/next/rules/README.md +12 -12
  162. package/presets/claude/next/rules/api-and-data/README.md +6 -6
  163. package/presets/claude/next/rules/api-and-data/api-services.md +42 -42
  164. package/presets/claude/next/rules/api-and-data/http-client.md +22 -21
  165. package/presets/claude/next/rules/api-and-data/store-rtk.md +60 -60
  166. package/presets/claude/next/rules/architecture/README.md +8 -8
  167. package/presets/claude/next/rules/architecture/architecture-boundaries-ui.md +6 -6
  168. package/presets/claude/next/rules/architecture/architecture-boundaries.md +44 -44
  169. package/presets/claude/next/rules/architecture/feature-delivery-workflow.md +39 -39
  170. package/presets/claude/next/rules/architecture/layer-barrel-exports.md +30 -29
  171. package/presets/claude/next/rules/architecture/public-imports.md +13 -13
  172. package/presets/claude/next/rules/architecture/reference-features.md +16 -16
  173. package/presets/claude/next/rules/stack/README.md +9 -9
  174. package/presets/claude/next/rules/stack/arrow-functions.md +7 -7
  175. package/presets/claude/next/rules/stack/navigation-router-ui.md +6 -6
  176. package/presets/claude/next/rules/stack/navigation-router.md +37 -37
  177. package/presets/claude/next/rules/stack/next-app-core.md +17 -17
  178. package/presets/claude/next/rules/stack/next-app-router.md +17 -17
  179. package/presets/claude/next/rules/stack/no-type-assertion.md +28 -28
  180. package/presets/claude/next/rules/stack/types-jsdoc.md +31 -20
  181. package/presets/claude/next/rules/testing/README.md +5 -5
  182. package/presets/claude/next/rules/testing/playwright-agents.md +1 -1
  183. package/presets/claude/next/rules/testing/tests-e2e-structure.md +48 -47
  184. package/presets/claude/next/rules/testing/tests-unit.md +50 -51
  185. package/presets/claude/next/rules/tooling-and-review/README.md +9 -9
  186. package/presets/claude/next/rules/tooling-and-review/agent-team-intake.md +2 -2
  187. package/presets/claude/next/rules/tooling-and-review/agent-team-orchestrator.md +4 -4
  188. package/presets/claude/next/rules/tooling-and-review/code-quality.md +25 -24
  189. package/presets/claude/next/rules/tooling-and-review/code-review-mr.md +4 -4
  190. package/presets/claude/next/rules/tooling-and-review/design-guidance.md +54 -54
  191. package/presets/claude/next/rules/tooling-and-review/package-manager.md +7 -7
  192. package/presets/claude/next/rules/tooling-and-review/post-change-lint.md +22 -22
  193. package/presets/claude/next/rules/tooling-and-review/preset-layering.md +12 -12
  194. package/presets/claude/next/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -2
  195. package/presets/claude/next/rules/tooling-and-review/preset-pr-checklist.md +6 -6
  196. package/presets/claude/next/rules/tooling-and-review/preset-token-budget.md +3 -3
  197. package/presets/claude/next/rules/tooling-and-review/preset-twin-sync.md +4 -0
  198. package/presets/claude/next/rules/tooling-and-review/technical-retro.md +4 -4
  199. package/presets/claude/next/rules/ui-and-accessibility/README.md +7 -7
  200. package/presets/claude/next/rules/ui-and-accessibility/css-property-order.md +3 -3
  201. package/presets/claude/next/rules/ui-and-accessibility/no-props-spread.md +18 -18
  202. package/presets/claude/next/rules/ui-and-accessibility/react-a11y-coding.md +20 -20
  203. package/presets/claude/next/rules/ui-and-accessibility/react-ui.md +63 -63
  204. package/presets/claude/next/skills/README.md +4 -4
  205. package/presets/claude/next/skills/feature-delivery/SKILL.md +1 -1
  206. package/presets/claude/next/team/README.md +2 -2
  207. package/presets/claude/nuxt/CLAUDE.md +39 -0
  208. package/presets/claude/nuxt/MCP.md +16 -0
  209. package/presets/claude/nuxt/README.md +39 -0
  210. package/presets/claude/nuxt/REPO_AGENTS.md +49 -0
  211. package/presets/claude/nuxt/agents/README.md +206 -0
  212. package/presets/claude/nuxt/agents/accessibility-reviewer.md +59 -0
  213. package/presets/claude/nuxt/agents/api-contract-reviewer.md +63 -0
  214. package/presets/claude/nuxt/agents/build-verifier.md +89 -0
  215. package/presets/claude/nuxt/agents/ci-investigator.md +60 -0
  216. package/presets/claude/nuxt/agents/code-reviewer.md +62 -0
  217. package/presets/claude/nuxt/agents/codebase-analyzer.md +28 -0
  218. package/presets/claude/nuxt/agents/debugger.md +65 -0
  219. package/presets/claude/nuxt/agents/feature-developer.md +59 -0
  220. package/presets/claude/nuxt/agents/migration-specialist.md +67 -0
  221. package/presets/claude/nuxt/agents/performance-auditor.md +66 -0
  222. package/presets/claude/nuxt/agents/playwright-test-generator.md +75 -0
  223. package/presets/claude/nuxt/agents/playwright-test-healer.md +61 -0
  224. package/presets/claude/nuxt/agents/playwright-test-planner.md +67 -0
  225. package/presets/claude/nuxt/agents/qa-tester.md +54 -0
  226. package/presets/claude/nuxt/agents/security-reviewer.md +60 -0
  227. package/presets/claude/nuxt/agents/solution-architect.md +68 -0
  228. package/presets/claude/nuxt/agents/task-analyst.md +109 -0
  229. package/presets/claude/nuxt/agents/task-router.md +140 -0
  230. package/presets/claude/nuxt/agents/tech-writer.md +54 -0
  231. package/presets/claude/nuxt/agents/unit-test-generator.md +37 -0
  232. package/presets/claude/nuxt/agents/unit-test-healer.md +38 -0
  233. package/presets/claude/nuxt/agents/unit-test-planner.md +60 -0
  234. package/presets/claude/nuxt/commands/README.md +51 -0
  235. package/presets/claude/nuxt/commands/feature-continue.md +19 -0
  236. package/presets/claude/nuxt/commands/feature-start.md +33 -0
  237. package/presets/claude/nuxt/commands/task-continue.md +50 -0
  238. package/presets/claude/nuxt/commands/task.md +56 -0
  239. package/presets/claude/nuxt/commands/technical-retro.md +85 -0
  240. package/presets/claude/nuxt/hooks/README.md +14 -0
  241. package/presets/claude/nuxt/hooks/chain-team-phases.sh +723 -0
  242. package/presets/claude/nuxt/hooks/examples/README.md +18 -0
  243. package/presets/claude/nuxt/hooks/examples/format-edited.example.sh +11 -0
  244. package/presets/claude/nuxt/hooks/examples/secret-guard.example.sh +10 -0
  245. package/presets/claude/nuxt/hooks/examples/test-on-save.example.sh +8 -0
  246. package/presets/claude/nuxt/hooks/guard-shell-command.sh +77 -0
  247. package/presets/claude/nuxt/mcp.json +20 -0
  248. package/presets/claude/nuxt/rules/README.md +90 -0
  249. package/presets/claude/nuxt/rules/anti-hallucination/vue-nuxt-anti-hallucination.md +72 -0
  250. package/presets/claude/nuxt/rules/api-and-data/README.md +9 -0
  251. package/presets/claude/nuxt/rules/api-and-data/api-services.md +77 -0
  252. package/presets/claude/nuxt/rules/api-and-data/http-client.md +16 -0
  253. package/presets/claude/nuxt/rules/api-and-data/store-pinia.md +68 -0
  254. package/presets/claude/nuxt/rules/architecture/README.md +12 -0
  255. package/presets/claude/nuxt/rules/architecture/architecture-boundaries-ui.md +16 -0
  256. package/presets/claude/nuxt/rules/architecture/architecture-boundaries.md +99 -0
  257. package/presets/claude/nuxt/rules/architecture/feature-delivery-workflow.md +89 -0
  258. package/presets/claude/nuxt/rules/architecture/layer-barrel-exports.md +72 -0
  259. package/presets/claude/nuxt/rules/architecture/public-imports.md +61 -0
  260. package/presets/claude/nuxt/rules/architecture/reference-features.md +50 -0
  261. package/presets/claude/nuxt/rules/stack/README.md +12 -0
  262. package/presets/claude/nuxt/rules/stack/navigation-router-ui.md +14 -0
  263. package/presets/claude/nuxt/rules/stack/navigation-router.md +59 -0
  264. package/presets/claude/nuxt/rules/stack/no-type-assertion.md +62 -0
  265. package/presets/claude/nuxt/rules/stack/nuxt-app-core.md +44 -0
  266. package/presets/claude/nuxt/rules/stack/nuxt-pages-routing.md +39 -0
  267. package/presets/claude/nuxt/rules/stack/script-setup-conventions.md +12 -0
  268. package/presets/claude/nuxt/rules/stack/types-jsdoc.md +41 -0
  269. package/presets/claude/nuxt/rules/testing/README.md +11 -0
  270. package/presets/claude/nuxt/rules/testing/playwright-agents.md +78 -0
  271. package/presets/claude/nuxt/rules/testing/tests-e2e-structure.md +49 -0
  272. package/presets/claude/nuxt/rules/testing/tests-unit.md +75 -0
  273. package/presets/claude/nuxt/rules/tooling-and-review/README.md +15 -0
  274. package/presets/claude/nuxt/rules/tooling-and-review/agent-team-intake.md +16 -0
  275. package/presets/claude/nuxt/rules/tooling-and-review/agent-team-orchestrator.md +192 -0
  276. package/presets/claude/nuxt/rules/tooling-and-review/anti-sycophancy-discipline.md +34 -0
  277. package/presets/claude/nuxt/rules/tooling-and-review/code-quality.md +51 -0
  278. package/presets/claude/nuxt/rules/tooling-and-review/code-review-mr.md +64 -0
  279. package/presets/claude/nuxt/rules/tooling-and-review/design-guidance.md +115 -0
  280. package/presets/claude/nuxt/rules/tooling-and-review/package-manager.md +17 -0
  281. package/presets/claude/nuxt/rules/tooling-and-review/post-change-lint.md +44 -0
  282. package/presets/claude/nuxt/rules/tooling-and-review/preset-layering.md +32 -0
  283. package/presets/claude/nuxt/rules/tooling-and-review/preset-no-cross-stack-leakage.md +79 -0
  284. package/presets/claude/nuxt/rules/tooling-and-review/preset-pr-checklist.md +35 -0
  285. package/presets/claude/nuxt/rules/tooling-and-review/preset-token-budget.md +38 -0
  286. package/presets/claude/nuxt/rules/tooling-and-review/preset-twin-sync.md +50 -0
  287. package/presets/claude/nuxt/rules/tooling-and-review/security-nuxt.md +37 -0
  288. package/presets/claude/nuxt/rules/tooling-and-review/technical-retro.md +16 -0
  289. package/presets/claude/nuxt/rules/ui-and-accessibility/README.md +12 -0
  290. package/presets/claude/nuxt/rules/ui-and-accessibility/css-property-order.md +11 -0
  291. package/presets/claude/nuxt/rules/ui-and-accessibility/no-v-bind-spread.md +12 -0
  292. package/presets/claude/nuxt/rules/ui-and-accessibility/vue-a11y-coding.md +16 -0
  293. package/presets/claude/nuxt/rules/ui-and-accessibility/vue-ui.md +35 -0
  294. package/presets/claude/nuxt/skills/README.md +17 -0
  295. package/presets/claude/nuxt/skills/ci-investigation/SKILL.md +36 -0
  296. package/presets/claude/nuxt/skills/code-review/SKILL.md +38 -0
  297. package/presets/claude/nuxt/skills/debug-investigation/SKILL.md +32 -0
  298. package/presets/claude/nuxt/skills/feature-delivery/SKILL.md +34 -0
  299. package/presets/claude/nuxt/skills/playwright-e2e/SKILL.md +37 -0
  300. package/presets/claude/nuxt/skills/technical-retro/SKILL.md +54 -0
  301. package/presets/claude/nuxt/skills/unit-testing/SKILL.md +32 -0
  302. package/presets/claude/nuxt/skills/vue-performance/SKILL.md +53 -0
  303. package/presets/claude/nuxt/skills/write-adr/SKILL.md +41 -0
  304. package/presets/claude/nuxt/team/README.md +140 -0
  305. package/presets/claude/nuxt/team/conventions.md +21 -0
  306. package/presets/claude/nuxt/team/fixtures/artifact-manifest.example.json +61 -0
  307. package/presets/claude/nuxt/team/fixtures/bugfix-standard.json +25 -0
  308. package/presets/claude/nuxt/team/fixtures/feature-full.json +28 -0
  309. package/presets/claude/nuxt/team/fixtures/feature-light.json +27 -0
  310. package/presets/claude/nuxt/team/tasks/.gitkeep +1 -0
  311. package/presets/claude/php-hexagonal/MCP.md +7 -7
  312. package/presets/claude/php-hexagonal/agents/README.md +3 -3
  313. package/presets/claude/php-hexagonal/agents/build-verifier.md +1 -1
  314. package/presets/claude/php-hexagonal/agents/task-router.md +12 -12
  315. package/presets/claude/php-hexagonal/commands/README.md +9 -9
  316. package/presets/claude/php-hexagonal/commands/feature-continue.md +21 -21
  317. package/presets/claude/php-hexagonal/commands/feature-start.md +16 -16
  318. package/presets/claude/php-hexagonal/commands/task-continue.md +14 -14
  319. package/presets/claude/php-hexagonal/commands/task.md +32 -32
  320. package/presets/claude/php-hexagonal/commands/technical-retro.md +38 -38
  321. package/presets/claude/php-hexagonal/rules/architecture/boundaries.md +11 -10
  322. package/presets/claude/php-hexagonal/rules/stack/README.md +1 -1
  323. package/presets/claude/php-hexagonal/rules/stack/php-app-core.md +11 -10
  324. package/presets/claude/php-hexagonal/rules/tooling-and-review/README.md +1 -1
  325. package/presets/claude/php-hexagonal/rules/tooling-and-review/agent-team-intake.md +2 -2
  326. package/presets/claude/php-hexagonal/rules/tooling-and-review/agent-team-orchestrator.md +4 -4
  327. package/presets/claude/php-hexagonal/rules/tooling-and-review/code-quality.md +21 -21
  328. package/presets/claude/php-hexagonal/rules/tooling-and-review/code-review.md +4 -4
  329. package/presets/claude/php-hexagonal/rules/tooling-and-review/design-guidance.md +54 -54
  330. package/presets/claude/php-hexagonal/rules/tooling-and-review/post-change-test.md +1 -1
  331. package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-layering.md +12 -12
  332. package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -2
  333. package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-pr-checklist.md +6 -6
  334. package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-token-budget.md +3 -3
  335. package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-twin-sync.md +4 -0
  336. package/presets/claude/php-hexagonal/rules/tooling-and-review/technical-retro.md +3 -3
  337. package/presets/claude/php-hexagonal/team/README.md +1 -1
  338. package/presets/claude/php-laravel/agents/README.md +3 -3
  339. package/presets/claude/php-laravel/agents/build-verifier.md +1 -1
  340. package/presets/claude/php-laravel/agents/task-router.md +14 -14
  341. package/presets/claude/php-laravel/commands/README.md +9 -9
  342. package/presets/claude/php-laravel/commands/feature-continue.md +21 -21
  343. package/presets/claude/php-laravel/commands/feature-start.md +16 -16
  344. package/presets/claude/php-laravel/commands/task-continue.md +14 -14
  345. package/presets/claude/php-laravel/commands/task.md +32 -32
  346. package/presets/claude/php-laravel/commands/technical-retro.md +38 -38
  347. package/presets/claude/php-laravel/rules/api-and-data/events-listeners.md +1 -1
  348. package/presets/claude/php-laravel/rules/architecture/boundaries.md +11 -11
  349. package/presets/claude/php-laravel/rules/stack/laravel-app-core.md +8 -8
  350. package/presets/claude/php-laravel/rules/tooling-and-review/agent-team-intake.md +3 -2
  351. package/presets/claude/php-laravel/rules/tooling-and-review/agent-team-orchestrator.md +4 -4
  352. package/presets/claude/php-laravel/rules/tooling-and-review/code-quality.md +21 -20
  353. package/presets/claude/php-laravel/rules/tooling-and-review/code-review.md +4 -5
  354. package/presets/claude/php-laravel/rules/tooling-and-review/design-guidance.md +54 -54
  355. package/presets/claude/php-laravel/rules/tooling-and-review/post-change-test.md +1 -1
  356. package/presets/claude/php-laravel/rules/tooling-and-review/preset-layering.md +13 -12
  357. package/presets/claude/php-laravel/rules/tooling-and-review/preset-no-cross-stack-leakage.md +17 -2
  358. package/presets/claude/php-laravel/rules/tooling-and-review/preset-pr-checklist.md +7 -6
  359. package/presets/claude/php-laravel/rules/tooling-and-review/preset-token-budget.md +4 -3
  360. package/presets/claude/php-laravel/rules/tooling-and-review/preset-twin-sync.md +5 -0
  361. package/presets/claude/php-laravel/rules/tooling-and-review/technical-retro.md +4 -3
  362. package/presets/claude/php-laravel/team/README.md +1 -1
  363. package/presets/claude/svelte/CLAUDE.md +39 -0
  364. package/presets/claude/svelte/MCP.md +16 -0
  365. package/presets/claude/svelte/README.md +13 -0
  366. package/presets/claude/svelte/REPO_AGENTS.md +49 -0
  367. package/presets/claude/svelte/agents/README.md +206 -0
  368. package/presets/claude/svelte/agents/accessibility-reviewer.md +59 -0
  369. package/presets/claude/svelte/agents/api-contract-reviewer.md +63 -0
  370. package/presets/claude/svelte/agents/build-verifier.md +89 -0
  371. package/presets/claude/svelte/agents/ci-investigator.md +60 -0
  372. package/presets/claude/svelte/agents/code-reviewer.md +62 -0
  373. package/presets/claude/svelte/agents/codebase-analyzer.md +28 -0
  374. package/presets/claude/svelte/agents/debugger.md +65 -0
  375. package/presets/claude/svelte/agents/feature-developer.md +59 -0
  376. package/presets/claude/svelte/agents/migration-specialist.md +67 -0
  377. package/presets/claude/svelte/agents/performance-auditor.md +66 -0
  378. package/presets/claude/svelte/agents/playwright-test-generator.md +75 -0
  379. package/presets/claude/svelte/agents/playwright-test-healer.md +61 -0
  380. package/presets/claude/svelte/agents/playwright-test-planner.md +67 -0
  381. package/presets/claude/svelte/agents/qa-tester.md +54 -0
  382. package/presets/claude/svelte/agents/security-reviewer.md +60 -0
  383. package/presets/claude/svelte/agents/solution-architect.md +68 -0
  384. package/presets/claude/svelte/agents/task-analyst.md +109 -0
  385. package/presets/claude/svelte/agents/task-router.md +141 -0
  386. package/presets/claude/svelte/agents/tech-writer.md +54 -0
  387. package/presets/claude/svelte/agents/unit-test-generator.md +37 -0
  388. package/presets/claude/svelte/agents/unit-test-healer.md +38 -0
  389. package/presets/claude/svelte/agents/unit-test-planner.md +60 -0
  390. package/presets/claude/svelte/commands/README.md +51 -0
  391. package/presets/claude/svelte/commands/feature-continue.md +19 -0
  392. package/presets/claude/svelte/commands/feature-start.md +33 -0
  393. package/presets/claude/svelte/commands/task-continue.md +50 -0
  394. package/presets/claude/svelte/commands/task.md +56 -0
  395. package/presets/claude/svelte/commands/technical-retro.md +85 -0
  396. package/presets/claude/svelte/hooks/README.md +14 -0
  397. package/presets/claude/svelte/hooks/chain-team-phases.sh +723 -0
  398. package/presets/claude/svelte/hooks/examples/README.md +18 -0
  399. package/presets/claude/svelte/hooks/examples/format-edited.example.sh +13 -0
  400. package/presets/claude/svelte/hooks/examples/secret-guard.example.sh +10 -0
  401. package/presets/claude/svelte/hooks/examples/test-on-save.example.sh +14 -0
  402. package/presets/claude/svelte/hooks/guard-shell-command.sh +77 -0
  403. package/presets/claude/svelte/mcp.json +20 -0
  404. package/presets/claude/svelte/rules/README.md +90 -0
  405. package/presets/claude/svelte/rules/anti-hallucination/svelte-sveltekit-anti-hallucination.md +71 -0
  406. package/presets/claude/svelte/rules/api-and-data/README.md +9 -0
  407. package/presets/claude/svelte/rules/api-and-data/api-services.md +45 -0
  408. package/presets/claude/svelte/rules/api-and-data/http-client.md +17 -0
  409. package/presets/claude/svelte/rules/api-and-data/store-svelte.md +67 -0
  410. package/presets/claude/svelte/rules/architecture/README.md +12 -0
  411. package/presets/claude/svelte/rules/architecture/architecture-boundaries-ui.md +16 -0
  412. package/presets/claude/svelte/rules/architecture/architecture-boundaries.md +65 -0
  413. package/presets/claude/svelte/rules/architecture/feature-delivery-workflow.md +61 -0
  414. package/presets/claude/svelte/rules/architecture/layer-barrel-exports.md +73 -0
  415. package/presets/claude/svelte/rules/architecture/public-imports.md +43 -0
  416. package/presets/claude/svelte/rules/architecture/reference-features.md +50 -0
  417. package/presets/claude/svelte/rules/stack/README.md +12 -0
  418. package/presets/claude/svelte/rules/stack/navigation-router-ui.md +26 -0
  419. package/presets/claude/svelte/rules/stack/navigation-router.md +41 -0
  420. package/presets/claude/svelte/rules/stack/no-type-assertion.md +59 -0
  421. package/presets/claude/svelte/rules/stack/svelte-app-core.md +44 -0
  422. package/presets/claude/svelte/rules/stack/svelte-script-conventions.md +33 -0
  423. package/presets/claude/svelte/rules/stack/sveltekit-routing.md +40 -0
  424. package/presets/claude/svelte/rules/stack/types-jsdoc.md +42 -0
  425. package/presets/claude/svelte/rules/testing/README.md +11 -0
  426. package/presets/claude/svelte/rules/testing/playwright-agents.md +80 -0
  427. package/presets/claude/svelte/rules/testing/tests-e2e-structure.md +50 -0
  428. package/presets/claude/svelte/rules/testing/tests-unit.md +40 -0
  429. package/presets/claude/svelte/rules/tooling-and-review/README.md +15 -0
  430. package/presets/claude/svelte/rules/tooling-and-review/agent-team-intake.md +17 -0
  431. package/presets/claude/svelte/rules/tooling-and-review/agent-team-orchestrator.md +193 -0
  432. package/presets/claude/svelte/rules/tooling-and-review/anti-sycophancy-discipline.md +29 -0
  433. package/presets/claude/svelte/rules/tooling-and-review/code-quality.md +51 -0
  434. package/presets/claude/svelte/rules/tooling-and-review/code-review-mr.md +64 -0
  435. package/presets/claude/svelte/rules/tooling-and-review/design-guidance.md +110 -0
  436. package/presets/claude/svelte/rules/tooling-and-review/package-manager.md +17 -0
  437. package/presets/claude/svelte/rules/tooling-and-review/post-change-lint.md +44 -0
  438. package/presets/claude/svelte/rules/tooling-and-review/preset-layering.md +35 -0
  439. package/presets/claude/svelte/rules/tooling-and-review/preset-no-cross-stack-leakage.md +82 -0
  440. package/presets/claude/svelte/rules/tooling-and-review/preset-pr-checklist.md +38 -0
  441. package/presets/claude/svelte/rules/tooling-and-review/preset-token-budget.md +40 -0
  442. package/presets/claude/svelte/rules/tooling-and-review/preset-twin-sync.md +53 -0
  443. package/presets/claude/svelte/rules/tooling-and-review/security-sveltekit.md +41 -0
  444. package/presets/claude/svelte/rules/tooling-and-review/technical-retro.md +17 -0
  445. package/presets/claude/svelte/rules/ui-and-accessibility/README.md +12 -0
  446. package/presets/claude/svelte/rules/ui-and-accessibility/css-property-order.md +12 -0
  447. package/presets/claude/svelte/rules/ui-and-accessibility/no-rest-props-spread.md +32 -0
  448. package/presets/claude/svelte/rules/ui-and-accessibility/svelte-a11y-coding.md +28 -0
  449. package/presets/claude/svelte/rules/ui-and-accessibility/svelte-ui.md +38 -0
  450. package/presets/claude/svelte/skills/README.md +17 -0
  451. package/presets/claude/svelte/skills/ci-investigation/SKILL.md +36 -0
  452. package/presets/claude/svelte/skills/code-review/SKILL.md +38 -0
  453. package/presets/claude/svelte/skills/debug-investigation/SKILL.md +32 -0
  454. package/presets/claude/svelte/skills/feature-delivery/SKILL.md +34 -0
  455. package/presets/claude/svelte/skills/playwright-e2e/SKILL.md +37 -0
  456. package/presets/claude/svelte/skills/svelte-performance/SKILL.md +52 -0
  457. package/presets/claude/svelte/skills/technical-retro/SKILL.md +54 -0
  458. package/presets/claude/svelte/skills/unit-testing/SKILL.md +32 -0
  459. package/presets/claude/svelte/skills/write-adr/SKILL.md +41 -0
  460. package/presets/claude/svelte/team/README.md +140 -0
  461. package/presets/claude/svelte/team/conventions.md +21 -0
  462. package/presets/claude/svelte/team/fixtures/artifact-manifest.example.json +61 -0
  463. package/presets/claude/svelte/team/fixtures/bugfix-standard.json +25 -0
  464. package/presets/claude/svelte/team/fixtures/feature-full.json +28 -0
  465. package/presets/claude/svelte/team/fixtures/feature-light.json +27 -0
  466. package/presets/claude/svelte/team/tasks/.gitkeep +1 -0
  467. package/presets/cursor/go/AGENTS.md +10 -10
  468. package/presets/cursor/go/MCP.md +7 -7
  469. package/presets/cursor/go/README.md +4 -4
  470. package/presets/cursor/go/agents/README.md +3 -3
  471. package/presets/cursor/go/agents/build-verifier.md +1 -1
  472. package/presets/cursor/go/agents/task-router.md +13 -13
  473. package/presets/cursor/go/commands/README.md +23 -23
  474. package/presets/cursor/go/commands/feature-continue.md +8 -8
  475. package/presets/cursor/go/commands/feature-start.md +17 -17
  476. package/presets/cursor/go/commands/task-continue.md +14 -14
  477. package/presets/cursor/go/commands/task.md +32 -32
  478. package/presets/cursor/go/commands/technical-retro.md +49 -49
  479. package/presets/cursor/go/rules/README.md +3 -3
  480. package/presets/cursor/go/rules/agent-team-intake.mdc +2 -2
  481. package/presets/cursor/go/rules/agent-team-orchestrator.mdc +4 -4
  482. package/presets/cursor/go/rules/architecture-boundaries.mdc +10 -10
  483. package/presets/cursor/go/rules/code-quality-and-refactoring.mdc +21 -20
  484. package/presets/cursor/go/rules/code-review-mr.mdc +4 -4
  485. package/presets/cursor/go/rules/design-guidance.mdc +54 -54
  486. package/presets/cursor/go/rules/go-app-core.mdc +11 -11
  487. package/presets/cursor/go/rules/post-change-test.mdc +1 -1
  488. package/presets/cursor/go/rules/preset-layering.mdc +12 -12
  489. package/presets/cursor/go/rules/preset-no-cross-stack-leakage.mdc +16 -2
  490. package/presets/cursor/go/rules/preset-pr-checklist.mdc +6 -6
  491. package/presets/cursor/go/rules/preset-token-budget.mdc +3 -3
  492. package/presets/cursor/go/rules/preset-twin-sync.mdc +4 -0
  493. package/presets/cursor/go/rules/technical-retro.mdc +3 -3
  494. package/presets/cursor/go/team/README.md +1 -1
  495. package/presets/cursor/ios-swift/AGENTS.md +20 -20
  496. package/presets/cursor/ios-swift/MCP.md +8 -8
  497. package/presets/cursor/ios-swift/README.md +9 -9
  498. package/presets/cursor/ios-swift/agents/README.md +7 -7
  499. package/presets/cursor/ios-swift/agents/build-verifier.md +2 -2
  500. package/presets/cursor/ios-swift/agents/feature-developer.md +1 -1
  501. package/presets/cursor/ios-swift/agents/task-analyst.md +1 -1
  502. package/presets/cursor/ios-swift/agents/task-router.md +16 -16
  503. package/presets/cursor/ios-swift/commands/README.md +23 -23
  504. package/presets/cursor/ios-swift/commands/feature-continue.md +8 -8
  505. package/presets/cursor/ios-swift/commands/feature-start.md +17 -17
  506. package/presets/cursor/ios-swift/commands/task-continue.md +14 -14
  507. package/presets/cursor/ios-swift/commands/task.md +33 -33
  508. package/presets/cursor/ios-swift/commands/technical-retro.md +50 -50
  509. package/presets/cursor/ios-swift/rules/README.md +23 -23
  510. package/presets/cursor/ios-swift/rules/agent-team-intake.mdc +2 -2
  511. package/presets/cursor/ios-swift/rules/agent-team-orchestrator.mdc +2 -2
  512. package/presets/cursor/ios-swift/rules/architecture-boundaries.mdc +20 -20
  513. package/presets/cursor/ios-swift/rules/code-quality-and-refactoring.mdc +25 -24
  514. package/presets/cursor/ios-swift/rules/code-review-mr.mdc +40 -40
  515. package/presets/cursor/ios-swift/rules/design-guidance.mdc +54 -54
  516. package/presets/cursor/ios-swift/rules/feature-delivery-workflow.mdc +30 -30
  517. package/presets/cursor/ios-swift/rules/ios-app-core.mdc +10 -10
  518. package/presets/cursor/ios-swift/rules/module-public-api.mdc +11 -11
  519. package/presets/cursor/ios-swift/rules/navigation-coordinators.mdc +13 -13
  520. package/presets/cursor/ios-swift/rules/networking-services.mdc +31 -31
  521. package/presets/cursor/ios-swift/rules/persistence-data.mdc +13 -13
  522. package/presets/cursor/ios-swift/rules/post-change-build.mdc +18 -18
  523. package/presets/cursor/ios-swift/rules/preset-layering.mdc +12 -12
  524. package/presets/cursor/ios-swift/rules/preset-no-cross-stack-leakage.mdc +16 -2
  525. package/presets/cursor/ios-swift/rules/preset-pr-checklist.mdc +6 -6
  526. package/presets/cursor/ios-swift/rules/preset-token-budget.mdc +3 -3
  527. package/presets/cursor/ios-swift/rules/preset-twin-sync.mdc +4 -0
  528. package/presets/cursor/ios-swift/rules/reference-features.mdc +22 -22
  529. package/presets/cursor/ios-swift/rules/security-ios.mdc +14 -14
  530. package/presets/cursor/ios-swift/rules/state-and-viewmodels.mdc +24 -24
  531. package/presets/cursor/ios-swift/rules/swift-conventions.mdc +17 -17
  532. package/presets/cursor/ios-swift/rules/swiftui-ui.mdc +39 -39
  533. package/presets/cursor/ios-swift/rules/technical-retro.mdc +4 -4
  534. package/presets/cursor/ios-swift/rules/tests-ui.mdc +27 -26
  535. package/presets/cursor/ios-swift/rules/tests-unit.mdc +25 -25
  536. package/presets/cursor/ios-swift/rules/xcode-tooling.mdc +11 -11
  537. package/presets/cursor/ios-swift/skills/README.md +3 -3
  538. package/presets/cursor/ios-swift/team/README.md +1 -1
  539. package/presets/cursor/java/AGENTS.md +10 -10
  540. package/presets/cursor/java/MCP.md +6 -6
  541. package/presets/cursor/java/agents/README.md +3 -3
  542. package/presets/cursor/java/agents/build-verifier.md +1 -1
  543. package/presets/cursor/java/agents/task-router.md +13 -13
  544. package/presets/cursor/java/commands/README.md +23 -23
  545. package/presets/cursor/java/commands/feature-continue.md +8 -8
  546. package/presets/cursor/java/commands/feature-start.md +17 -17
  547. package/presets/cursor/java/commands/task-continue.md +14 -14
  548. package/presets/cursor/java/commands/task.md +32 -32
  549. package/presets/cursor/java/commands/technical-retro.md +49 -49
  550. package/presets/cursor/java/rules/README.md +2 -2
  551. package/presets/cursor/java/rules/agent-team-intake.mdc +2 -2
  552. package/presets/cursor/java/rules/agent-team-orchestrator.mdc +4 -4
  553. package/presets/cursor/java/rules/architecture-boundaries.mdc +10 -10
  554. package/presets/cursor/java/rules/code-quality-and-refactoring.mdc +21 -20
  555. package/presets/cursor/java/rules/code-review-mr.mdc +4 -4
  556. package/presets/cursor/java/rules/design-guidance.mdc +54 -54
  557. package/presets/cursor/java/rules/java-app-core.mdc +9 -9
  558. package/presets/cursor/java/rules/post-change-test.mdc +1 -1
  559. package/presets/cursor/java/rules/preset-layering.mdc +12 -12
  560. package/presets/cursor/java/rules/preset-no-cross-stack-leakage.mdc +16 -2
  561. package/presets/cursor/java/rules/preset-pr-checklist.mdc +6 -6
  562. package/presets/cursor/java/rules/preset-token-budget.mdc +3 -3
  563. package/presets/cursor/java/rules/preset-twin-sync.mdc +4 -0
  564. package/presets/cursor/java/rules/technical-retro.mdc +3 -3
  565. package/presets/cursor/java/team/README.md +1 -1
  566. package/presets/cursor/mcp-ts/AGENTS.md +6 -6
  567. package/presets/cursor/mcp-ts/MCP.md +5 -5
  568. package/presets/cursor/mcp-ts/agents/build-verifier.md +1 -1
  569. package/presets/cursor/mcp-ts/agents/task-router.md +7 -7
  570. package/presets/cursor/mcp-ts/commands/README.md +1 -1
  571. package/presets/cursor/mcp-ts/commands/feature-continue.md +8 -8
  572. package/presets/cursor/mcp-ts/commands/feature-start.md +17 -17
  573. package/presets/cursor/mcp-ts/commands/task-continue.md +14 -14
  574. package/presets/cursor/mcp-ts/commands/task.md +32 -32
  575. package/presets/cursor/mcp-ts/commands/technical-retro.md +50 -50
  576. package/presets/cursor/mcp-ts/rules/README.md +1 -1
  577. package/presets/cursor/mcp-ts/rules/agent-team-intake.mdc +3 -3
  578. package/presets/cursor/mcp-ts/rules/agent-team-orchestrator.mdc +4 -4
  579. package/presets/cursor/mcp-ts/rules/code-quality-and-refactoring.mdc +21 -20
  580. package/presets/cursor/mcp-ts/rules/code-review-mr.mdc +5 -4
  581. package/presets/cursor/mcp-ts/rules/design-guidance.mdc +55 -54
  582. package/presets/cursor/mcp-ts/rules/mcp-server-boundaries.mdc +2 -2
  583. package/presets/cursor/mcp-ts/rules/mcp-ts-app-core.mdc +9 -9
  584. package/presets/cursor/mcp-ts/rules/post-change-test.mdc +1 -1
  585. package/presets/cursor/mcp-ts/rules/preset-layering.mdc +12 -12
  586. package/presets/cursor/mcp-ts/rules/preset-no-cross-stack-leakage.mdc +16 -2
  587. package/presets/cursor/mcp-ts/rules/preset-pr-checklist.mdc +6 -6
  588. package/presets/cursor/mcp-ts/rules/preset-token-budget.mdc +3 -3
  589. package/presets/cursor/mcp-ts/rules/preset-twin-sync.mdc +4 -0
  590. package/presets/cursor/mcp-ts/rules/technical-retro.mdc +3 -3
  591. package/presets/cursor/next/AGENTS.md +15 -15
  592. package/presets/cursor/next/MCP.md +9 -9
  593. package/presets/cursor/next/README.md +9 -9
  594. package/presets/cursor/next/agents/README.md +22 -22
  595. package/presets/cursor/next/agents/build-verifier.md +3 -3
  596. package/presets/cursor/next/agents/feature-developer.md +1 -1
  597. package/presets/cursor/next/agents/task-analyst.md +1 -1
  598. package/presets/cursor/next/agents/task-router.md +16 -16
  599. package/presets/cursor/next/commands/README.md +22 -22
  600. package/presets/cursor/next/commands/feature-continue.md +8 -8
  601. package/presets/cursor/next/commands/feature-start.md +17 -17
  602. package/presets/cursor/next/commands/task-continue.md +14 -14
  603. package/presets/cursor/next/commands/task.md +33 -33
  604. package/presets/cursor/next/commands/technical-retro.md +49 -49
  605. package/presets/cursor/next/rules/README.md +52 -52
  606. package/presets/cursor/next/rules/agent-team-intake.mdc +2 -2
  607. package/presets/cursor/next/rules/agent-team-orchestrator.mdc +4 -4
  608. package/presets/cursor/next/rules/api-services.mdc +43 -43
  609. package/presets/cursor/next/rules/architecture-boundaries-ui.mdc +7 -7
  610. package/presets/cursor/next/rules/architecture-boundaries.mdc +45 -45
  611. package/presets/cursor/next/rules/arrow-functions.mdc +8 -8
  612. package/presets/cursor/next/rules/code-quality-and-refactoring.mdc +25 -24
  613. package/presets/cursor/next/rules/code-review-mr.mdc +5 -5
  614. package/presets/cursor/next/rules/css-property-order-stylelint.mdc +4 -4
  615. package/presets/cursor/next/rules/design-guidance.mdc +54 -54
  616. package/presets/cursor/next/rules/feature-delivery-workflow.mdc +43 -43
  617. package/presets/cursor/next/rules/http-client.mdc +23 -22
  618. package/presets/cursor/next/rules/layer-barrel-exports.mdc +31 -30
  619. package/presets/cursor/next/rules/navigation-router-stack.mdc +37 -37
  620. package/presets/cursor/next/rules/navigation-router-ui.mdc +7 -7
  621. package/presets/cursor/next/rules/next-app-core.mdc +16 -16
  622. package/presets/cursor/next/rules/next-app-router.mdc +17 -17
  623. package/presets/cursor/next/rules/no-props-spread.mdc +20 -20
  624. package/presets/cursor/next/rules/no-type-assertion-as-import-export.mdc +29 -29
  625. package/presets/cursor/next/rules/package-manager.mdc +8 -8
  626. package/presets/cursor/next/rules/post-change-lint.mdc +22 -22
  627. package/presets/cursor/next/rules/preset-layering.mdc +12 -12
  628. package/presets/cursor/next/rules/preset-no-cross-stack-leakage.mdc +16 -2
  629. package/presets/cursor/next/rules/preset-pr-checklist.mdc +6 -6
  630. package/presets/cursor/next/rules/preset-token-budget.mdc +3 -3
  631. package/presets/cursor/next/rules/preset-twin-sync.mdc +4 -0
  632. package/presets/cursor/next/rules/public-imports.mdc +14 -14
  633. package/presets/cursor/next/rules/react-a11y-coding.mdc +21 -21
  634. package/presets/cursor/next/rules/react-ui.mdc +66 -66
  635. package/presets/cursor/next/rules/reference-features.mdc +17 -17
  636. package/presets/cursor/next/rules/store-rtk.mdc +60 -60
  637. package/presets/cursor/next/rules/technical-retro.mdc +4 -4
  638. package/presets/cursor/next/rules/tests-e2e-structure.mdc +46 -46
  639. package/presets/cursor/next/rules/tests-unit.mdc +51 -52
  640. package/presets/cursor/next/rules/types-jsdoc.mdc +29 -22
  641. package/presets/cursor/next/skills/feature-delivery/SKILL.md +1 -1
  642. package/presets/cursor/next/team/README.md +2 -2
  643. package/presets/cursor/nuxt/AGENTS.md +39 -0
  644. package/presets/cursor/nuxt/BUGBOT.md +14 -0
  645. package/presets/cursor/nuxt/MCP.md +16 -0
  646. package/presets/cursor/nuxt/README.md +47 -0
  647. package/presets/cursor/nuxt/REPO_AGENTS.md +49 -0
  648. package/presets/cursor/nuxt/agents/README.md +206 -0
  649. package/presets/cursor/nuxt/agents/accessibility-reviewer.md +60 -0
  650. package/presets/cursor/nuxt/agents/api-contract-reviewer.md +64 -0
  651. package/presets/cursor/nuxt/agents/build-verifier.md +90 -0
  652. package/presets/cursor/nuxt/agents/ci-investigator.md +61 -0
  653. package/presets/cursor/nuxt/agents/code-reviewer.md +63 -0
  654. package/presets/cursor/nuxt/agents/codebase-analyzer.md +28 -0
  655. package/presets/cursor/nuxt/agents/debugger.md +66 -0
  656. package/presets/cursor/nuxt/agents/feature-developer.md +60 -0
  657. package/presets/cursor/nuxt/agents/migration-specialist.md +68 -0
  658. package/presets/cursor/nuxt/agents/performance-auditor.md +67 -0
  659. package/presets/cursor/nuxt/agents/playwright-test-generator.md +27 -0
  660. package/presets/cursor/nuxt/agents/playwright-test-healer.md +27 -0
  661. package/presets/cursor/nuxt/agents/playwright-test-planner.md +28 -0
  662. package/presets/cursor/nuxt/agents/qa-tester.md +55 -0
  663. package/presets/cursor/nuxt/agents/security-reviewer.md +61 -0
  664. package/presets/cursor/nuxt/agents/solution-architect.md +69 -0
  665. package/presets/cursor/nuxt/agents/task-analyst.md +110 -0
  666. package/presets/cursor/nuxt/agents/task-router.md +141 -0
  667. package/presets/cursor/nuxt/agents/tech-writer.md +55 -0
  668. package/presets/cursor/nuxt/agents/unit-test-generator.md +38 -0
  669. package/presets/cursor/nuxt/agents/unit-test-healer.md +39 -0
  670. package/presets/cursor/nuxt/agents/unit-test-planner.md +61 -0
  671. package/presets/cursor/nuxt/commands/README.md +51 -0
  672. package/presets/cursor/nuxt/commands/feature-continue.md +19 -0
  673. package/presets/cursor/nuxt/commands/feature-start.md +33 -0
  674. package/presets/cursor/nuxt/commands/task-continue.md +50 -0
  675. package/presets/cursor/nuxt/commands/task.md +56 -0
  676. package/presets/cursor/nuxt/commands/technical-retro.md +85 -0
  677. package/presets/cursor/nuxt/hooks/README.md +12 -0
  678. package/presets/cursor/nuxt/hooks/chain-team-phases.sh +727 -0
  679. package/presets/cursor/nuxt/hooks/examples/README.md +18 -0
  680. package/presets/cursor/nuxt/hooks/examples/format-edited.example.sh +11 -0
  681. package/presets/cursor/nuxt/hooks/examples/secret-guard.example.sh +10 -0
  682. package/presets/cursor/nuxt/hooks/examples/test-on-save.example.sh +8 -0
  683. package/presets/cursor/nuxt/hooks/guard-shell-command.sh +77 -0
  684. package/presets/cursor/nuxt/hooks.json +17 -0
  685. package/presets/cursor/nuxt/mcp.json +19 -0
  686. package/presets/cursor/nuxt/rules/README.md +108 -0
  687. package/presets/cursor/nuxt/rules/agent-team-intake.mdc +16 -0
  688. package/presets/cursor/nuxt/rules/agent-team-orchestrator.mdc +192 -0
  689. package/presets/cursor/nuxt/rules/anti-sycophancy-discipline.mdc +30 -0
  690. package/presets/cursor/nuxt/rules/api-services.mdc +79 -0
  691. package/presets/cursor/nuxt/rules/architecture-boundaries-ui.mdc +15 -0
  692. package/presets/cursor/nuxt/rules/architecture-boundaries.mdc +97 -0
  693. package/presets/cursor/nuxt/rules/code-quality-and-refactoring.mdc +52 -0
  694. package/presets/cursor/nuxt/rules/code-review-mr.mdc +58 -0
  695. package/presets/cursor/nuxt/rules/css-property-order-stylelint.mdc +12 -0
  696. package/presets/cursor/nuxt/rules/design-guidance.mdc +111 -0
  697. package/presets/cursor/nuxt/rules/feature-delivery-workflow.mdc +83 -0
  698. package/presets/cursor/nuxt/rules/http-client.mdc +15 -0
  699. package/presets/cursor/nuxt/rules/layer-barrel-exports.mdc +74 -0
  700. package/presets/cursor/nuxt/rules/navigation-router-stack.mdc +61 -0
  701. package/presets/cursor/nuxt/rules/navigation-router-ui.mdc +16 -0
  702. package/presets/cursor/nuxt/rules/no-type-assertion-as-import-export.mdc +60 -0
  703. package/presets/cursor/nuxt/rules/no-v-bind-spread.mdc +13 -0
  704. package/presets/cursor/nuxt/rules/nuxt-app-core.mdc +45 -0
  705. package/presets/cursor/nuxt/rules/nuxt-pages-routing.mdc +37 -0
  706. package/presets/cursor/nuxt/rules/package-manager.mdc +18 -0
  707. package/presets/cursor/nuxt/rules/playwright-agents.mdc +80 -0
  708. package/presets/cursor/nuxt/rules/post-change-lint.mdc +42 -0
  709. package/presets/cursor/nuxt/rules/preset-layering.mdc +36 -0
  710. package/presets/cursor/nuxt/rules/preset-no-cross-stack-leakage.mdc +83 -0
  711. package/presets/cursor/nuxt/rules/preset-pr-checklist.mdc +39 -0
  712. package/presets/cursor/nuxt/rules/preset-token-budget.mdc +41 -0
  713. package/presets/cursor/nuxt/rules/preset-twin-sync.mdc +54 -0
  714. package/presets/cursor/nuxt/rules/public-imports.mdc +62 -0
  715. package/presets/cursor/nuxt/rules/reference-features.mdc +49 -0
  716. package/presets/cursor/nuxt/rules/script-setup-conventions.mdc +13 -0
  717. package/presets/cursor/nuxt/rules/security-nuxt.mdc +34 -0
  718. package/presets/cursor/nuxt/rules/store-pinia.mdc +68 -0
  719. package/presets/cursor/nuxt/rules/technical-retro.mdc +16 -0
  720. package/presets/cursor/nuxt/rules/tests-e2e-structure.mdc +50 -0
  721. package/presets/cursor/nuxt/rules/tests-unit.mdc +77 -0
  722. package/presets/cursor/nuxt/rules/types-jsdoc.mdc +42 -0
  723. package/presets/cursor/nuxt/rules/vue-a11y-coding.mdc +15 -0
  724. package/presets/cursor/nuxt/rules/vue-nuxt-anti-hallucination.mdc +68 -0
  725. package/presets/cursor/nuxt/rules/vue-ui.mdc +33 -0
  726. package/presets/cursor/nuxt/skills/README.md +17 -0
  727. package/presets/cursor/nuxt/skills/ci-investigation/SKILL.md +36 -0
  728. package/presets/cursor/nuxt/skills/code-review/SKILL.md +38 -0
  729. package/presets/cursor/nuxt/skills/debug-investigation/SKILL.md +32 -0
  730. package/presets/cursor/nuxt/skills/feature-delivery/SKILL.md +34 -0
  731. package/presets/cursor/nuxt/skills/playwright-e2e/SKILL.md +37 -0
  732. package/presets/cursor/nuxt/skills/technical-retro/SKILL.md +54 -0
  733. package/presets/cursor/nuxt/skills/unit-testing/SKILL.md +32 -0
  734. package/presets/cursor/nuxt/skills/vue-performance/SKILL.md +53 -0
  735. package/presets/cursor/nuxt/skills/write-adr/SKILL.md +41 -0
  736. package/presets/cursor/nuxt/team/README.md +140 -0
  737. package/presets/cursor/nuxt/team/conventions.md +21 -0
  738. package/presets/cursor/nuxt/team/fixtures/artifact-manifest.example.json +61 -0
  739. package/presets/cursor/nuxt/team/fixtures/bugfix-standard.json +25 -0
  740. package/presets/cursor/nuxt/team/fixtures/feature-full.json +28 -0
  741. package/presets/cursor/nuxt/team/fixtures/feature-light.json +27 -0
  742. package/presets/cursor/nuxt/team/fixtures/metrics-scenarios/tasks/human-gate/metrics.json +69 -0
  743. package/presets/cursor/nuxt/team/fixtures/metrics-scenarios/tasks/missing-ledger/status.json +5 -0
  744. package/presets/cursor/nuxt/team/fixtures/metrics-scenarios/tasks/parallel-receipts/metrics.json +79 -0
  745. package/presets/cursor/nuxt/team/fixtures/metrics-scenarios/tasks/serial-retry/metrics.json +124 -0
  746. package/presets/cursor/nuxt/team/fixtures/metrics-scenarios/tasks/validation-failed/metrics.json +124 -0
  747. package/presets/cursor/nuxt/team/fixtures/metrics.example.json +54 -0
  748. package/presets/cursor/nuxt/team/tasks/.gitkeep +0 -0
  749. package/presets/cursor/php-hexagonal/AGENTS.md +11 -11
  750. package/presets/cursor/php-hexagonal/MCP.md +7 -7
  751. package/presets/cursor/php-hexagonal/agents/README.md +4 -4
  752. package/presets/cursor/php-hexagonal/agents/build-verifier.md +1 -1
  753. package/presets/cursor/php-hexagonal/agents/task-router.md +12 -12
  754. package/presets/cursor/php-hexagonal/commands/README.md +25 -25
  755. package/presets/cursor/php-hexagonal/commands/feature-continue.md +8 -8
  756. package/presets/cursor/php-hexagonal/commands/feature-start.md +17 -17
  757. package/presets/cursor/php-hexagonal/commands/task-continue.md +14 -14
  758. package/presets/cursor/php-hexagonal/commands/task.md +32 -32
  759. package/presets/cursor/php-hexagonal/commands/technical-retro.md +49 -49
  760. package/presets/cursor/php-hexagonal/rules/README.md +2 -2
  761. package/presets/cursor/php-hexagonal/rules/agent-team-intake.mdc +2 -2
  762. package/presets/cursor/php-hexagonal/rules/agent-team-orchestrator.mdc +4 -4
  763. package/presets/cursor/php-hexagonal/rules/architecture-boundaries.mdc +10 -10
  764. package/presets/cursor/php-hexagonal/rules/code-quality-and-refactoring.mdc +20 -20
  765. package/presets/cursor/php-hexagonal/rules/code-review-mr.mdc +4 -4
  766. package/presets/cursor/php-hexagonal/rules/design-guidance.mdc +54 -54
  767. package/presets/cursor/php-hexagonal/rules/php-app-core.mdc +10 -10
  768. package/presets/cursor/php-hexagonal/rules/post-change-test.mdc +1 -1
  769. package/presets/cursor/php-hexagonal/rules/preset-layering.mdc +12 -12
  770. package/presets/cursor/php-hexagonal/rules/preset-no-cross-stack-leakage.mdc +16 -2
  771. package/presets/cursor/php-hexagonal/rules/preset-pr-checklist.mdc +6 -6
  772. package/presets/cursor/php-hexagonal/rules/preset-token-budget.mdc +3 -3
  773. package/presets/cursor/php-hexagonal/rules/preset-twin-sync.mdc +4 -0
  774. package/presets/cursor/php-hexagonal/rules/technical-retro.mdc +3 -3
  775. package/presets/cursor/php-hexagonal/team/README.md +1 -1
  776. package/presets/cursor/php-laravel/AGENTS.md +10 -10
  777. package/presets/cursor/php-laravel/agents/README.md +4 -4
  778. package/presets/cursor/php-laravel/agents/build-verifier.md +1 -1
  779. package/presets/cursor/php-laravel/agents/task-router.md +14 -14
  780. package/presets/cursor/php-laravel/commands/README.md +25 -25
  781. package/presets/cursor/php-laravel/commands/feature-continue.md +8 -8
  782. package/presets/cursor/php-laravel/commands/feature-start.md +17 -17
  783. package/presets/cursor/php-laravel/commands/task-continue.md +14 -14
  784. package/presets/cursor/php-laravel/commands/task.md +32 -32
  785. package/presets/cursor/php-laravel/commands/technical-retro.md +50 -50
  786. package/presets/cursor/php-laravel/rules/README.md +2 -2
  787. package/presets/cursor/php-laravel/rules/agent-team-intake.mdc +2 -2
  788. package/presets/cursor/php-laravel/rules/agent-team-orchestrator.mdc +4 -4
  789. package/presets/cursor/php-laravel/rules/architecture-boundaries.mdc +11 -11
  790. package/presets/cursor/php-laravel/rules/code-quality-and-refactoring.mdc +20 -20
  791. package/presets/cursor/php-laravel/rules/code-review-mr.mdc +4 -5
  792. package/presets/cursor/php-laravel/rules/design-guidance.mdc +54 -54
  793. package/presets/cursor/php-laravel/rules/events-listeners.mdc +1 -1
  794. package/presets/cursor/php-laravel/rules/laravel-app-core.mdc +8 -8
  795. package/presets/cursor/php-laravel/rules/post-change-test.mdc +1 -1
  796. package/presets/cursor/php-laravel/rules/preset-layering.mdc +12 -12
  797. package/presets/cursor/php-laravel/rules/preset-no-cross-stack-leakage.mdc +16 -2
  798. package/presets/cursor/php-laravel/rules/preset-pr-checklist.mdc +6 -6
  799. package/presets/cursor/php-laravel/rules/preset-token-budget.mdc +3 -3
  800. package/presets/cursor/php-laravel/rules/preset-twin-sync.mdc +4 -0
  801. package/presets/cursor/php-laravel/rules/technical-retro.mdc +3 -3
  802. package/presets/cursor/php-laravel/team/README.md +1 -1
  803. package/presets/cursor/svelte/AGENTS.md +39 -0
  804. package/presets/cursor/svelte/BUGBOT.md +14 -0
  805. package/presets/cursor/svelte/MCP.md +16 -0
  806. package/presets/cursor/svelte/README.md +47 -0
  807. package/presets/cursor/svelte/REPO_AGENTS.md +49 -0
  808. package/presets/cursor/svelte/agents/README.md +206 -0
  809. package/presets/cursor/svelte/agents/accessibility-reviewer.md +60 -0
  810. package/presets/cursor/svelte/agents/api-contract-reviewer.md +64 -0
  811. package/presets/cursor/svelte/agents/build-verifier.md +90 -0
  812. package/presets/cursor/svelte/agents/ci-investigator.md +61 -0
  813. package/presets/cursor/svelte/agents/code-reviewer.md +63 -0
  814. package/presets/cursor/svelte/agents/codebase-analyzer.md +28 -0
  815. package/presets/cursor/svelte/agents/debugger.md +66 -0
  816. package/presets/cursor/svelte/agents/feature-developer.md +60 -0
  817. package/presets/cursor/svelte/agents/migration-specialist.md +68 -0
  818. package/presets/cursor/svelte/agents/performance-auditor.md +67 -0
  819. package/presets/cursor/svelte/agents/playwright-test-generator.md +27 -0
  820. package/presets/cursor/svelte/agents/playwright-test-healer.md +27 -0
  821. package/presets/cursor/svelte/agents/playwright-test-planner.md +28 -0
  822. package/presets/cursor/svelte/agents/qa-tester.md +55 -0
  823. package/presets/cursor/svelte/agents/security-reviewer.md +61 -0
  824. package/presets/cursor/svelte/agents/solution-architect.md +69 -0
  825. package/presets/cursor/svelte/agents/task-analyst.md +110 -0
  826. package/presets/cursor/svelte/agents/task-router.md +141 -0
  827. package/presets/cursor/svelte/agents/tech-writer.md +55 -0
  828. package/presets/cursor/svelte/agents/unit-test-generator.md +38 -0
  829. package/presets/cursor/svelte/agents/unit-test-healer.md +39 -0
  830. package/presets/cursor/svelte/agents/unit-test-planner.md +61 -0
  831. package/presets/cursor/svelte/commands/README.md +51 -0
  832. package/presets/cursor/svelte/commands/feature-continue.md +19 -0
  833. package/presets/cursor/svelte/commands/feature-start.md +33 -0
  834. package/presets/cursor/svelte/commands/task-continue.md +50 -0
  835. package/presets/cursor/svelte/commands/task.md +56 -0
  836. package/presets/cursor/svelte/commands/technical-retro.md +85 -0
  837. package/presets/cursor/svelte/hooks/README.md +12 -0
  838. package/presets/cursor/svelte/hooks/chain-team-phases.sh +727 -0
  839. package/presets/cursor/svelte/hooks/examples/README.md +18 -0
  840. package/presets/cursor/svelte/hooks/examples/format-edited.example.sh +13 -0
  841. package/presets/cursor/svelte/hooks/examples/secret-guard.example.sh +10 -0
  842. package/presets/cursor/svelte/hooks/examples/test-on-save.example.sh +14 -0
  843. package/presets/cursor/svelte/hooks/guard-shell-command.sh +77 -0
  844. package/presets/cursor/svelte/hooks.json +17 -0
  845. package/presets/cursor/svelte/mcp.json +19 -0
  846. package/presets/cursor/svelte/rules/README.md +86 -0
  847. package/presets/cursor/svelte/rules/agent-team-intake.mdc +16 -0
  848. package/presets/cursor/svelte/rules/agent-team-orchestrator.mdc +192 -0
  849. package/presets/cursor/svelte/rules/anti-sycophancy-discipline.mdc +30 -0
  850. package/presets/cursor/svelte/rules/api-services.mdc +46 -0
  851. package/presets/cursor/svelte/rules/architecture-boundaries-ui.mdc +15 -0
  852. package/presets/cursor/svelte/rules/architecture-boundaries.mdc +61 -0
  853. package/presets/cursor/svelte/rules/code-quality-and-refactoring.mdc +52 -0
  854. package/presets/cursor/svelte/rules/code-review-mr.mdc +58 -0
  855. package/presets/cursor/svelte/rules/css-property-order-stylelint.mdc +12 -0
  856. package/presets/cursor/svelte/rules/design-guidance.mdc +111 -0
  857. package/presets/cursor/svelte/rules/feature-delivery-workflow.mdc +55 -0
  858. package/presets/cursor/svelte/rules/http-client.mdc +16 -0
  859. package/presets/cursor/svelte/rules/layer-barrel-exports.mdc +74 -0
  860. package/presets/cursor/svelte/rules/navigation-router-stack.mdc +40 -0
  861. package/presets/cursor/svelte/rules/navigation-router-ui.mdc +25 -0
  862. package/presets/cursor/svelte/rules/no-rest-props-spread.mdc +32 -0
  863. package/presets/cursor/svelte/rules/no-type-assertion-as-import-export.mdc +60 -0
  864. package/presets/cursor/svelte/rules/package-manager.mdc +18 -0
  865. package/presets/cursor/svelte/rules/playwright-agents.mdc +80 -0
  866. package/presets/cursor/svelte/rules/post-change-lint.mdc +42 -0
  867. package/presets/cursor/svelte/rules/preset-layering.mdc +36 -0
  868. package/presets/cursor/svelte/rules/preset-no-cross-stack-leakage.mdc +83 -0
  869. package/presets/cursor/svelte/rules/preset-pr-checklist.mdc +39 -0
  870. package/presets/cursor/svelte/rules/preset-token-budget.mdc +41 -0
  871. package/presets/cursor/svelte/rules/preset-twin-sync.mdc +54 -0
  872. package/presets/cursor/svelte/rules/public-imports.mdc +45 -0
  873. package/presets/cursor/svelte/rules/reference-features.mdc +51 -0
  874. package/presets/cursor/svelte/rules/security-sveltekit.mdc +38 -0
  875. package/presets/cursor/svelte/rules/store-svelte.mdc +66 -0
  876. package/presets/cursor/svelte/rules/svelte-a11y-coding.mdc +27 -0
  877. package/presets/cursor/svelte/rules/svelte-app-core.mdc +45 -0
  878. package/presets/cursor/svelte/rules/svelte-script-conventions.mdc +33 -0
  879. package/presets/cursor/svelte/rules/svelte-sveltekit-anti-hallucination.mdc +69 -0
  880. package/presets/cursor/svelte/rules/svelte-ui.mdc +37 -0
  881. package/presets/cursor/svelte/rules/sveltekit-routing.mdc +39 -0
  882. package/presets/cursor/svelte/rules/technical-retro.mdc +16 -0
  883. package/presets/cursor/svelte/rules/tests-e2e-structure.mdc +50 -0
  884. package/presets/cursor/svelte/rules/tests-unit.mdc +42 -0
  885. package/presets/cursor/svelte/rules/types-jsdoc.mdc +42 -0
  886. package/presets/cursor/svelte/skills/README.md +17 -0
  887. package/presets/cursor/svelte/skills/ci-investigation/SKILL.md +36 -0
  888. package/presets/cursor/svelte/skills/code-review/SKILL.md +38 -0
  889. package/presets/cursor/svelte/skills/debug-investigation/SKILL.md +32 -0
  890. package/presets/cursor/svelte/skills/feature-delivery/SKILL.md +34 -0
  891. package/presets/cursor/svelte/skills/playwright-e2e/SKILL.md +37 -0
  892. package/presets/cursor/svelte/skills/svelte-performance/SKILL.md +52 -0
  893. package/presets/cursor/svelte/skills/technical-retro/SKILL.md +54 -0
  894. package/presets/cursor/svelte/skills/unit-testing/SKILL.md +32 -0
  895. package/presets/cursor/svelte/skills/write-adr/SKILL.md +41 -0
  896. package/presets/cursor/svelte/team/README.md +140 -0
  897. package/presets/cursor/svelte/team/conventions.md +21 -0
  898. package/presets/cursor/svelte/team/fixtures/artifact-manifest.example.json +61 -0
  899. package/presets/cursor/svelte/team/fixtures/bugfix-standard.json +25 -0
  900. package/presets/cursor/svelte/team/fixtures/feature-full.json +28 -0
  901. package/presets/cursor/svelte/team/fixtures/feature-light.json +27 -0
  902. package/presets/cursor/svelte/team/fixtures/metrics-scenarios/tasks/human-gate/metrics.json +69 -0
  903. package/presets/cursor/svelte/team/fixtures/metrics-scenarios/tasks/missing-ledger/status.json +5 -0
  904. package/presets/cursor/svelte/team/fixtures/metrics-scenarios/tasks/parallel-receipts/metrics.json +79 -0
  905. package/presets/cursor/svelte/team/fixtures/metrics-scenarios/tasks/serial-retry/metrics.json +124 -0
  906. package/presets/cursor/svelte/team/fixtures/metrics-scenarios/tasks/validation-failed/metrics.json +124 -0
  907. package/presets/cursor/svelte/team/fixtures/metrics.example.json +54 -0
  908. package/presets/cursor/svelte/team/tasks/.gitkeep +0 -0
@@ -0,0 +1,727 @@
1
+ #!/usr/bin/env bash
2
+ # Chains agent team steps from pipeline.json after subagentStop.
3
+ # Falls back to legacy phase-based flow when pipeline.json is absent.
4
+
5
+ set -euo pipefail
6
+
7
+ input=$(cat)
8
+
9
+ INPUT="$input" node <<'NODE'
10
+ const fs = require('fs');
11
+ const path = require('path');
12
+
13
+ const TEAM_ROOT = path.join(process.cwd(), '.cursor', 'team');
14
+
15
+ const inputRaw = process.env.INPUT || '';
16
+ let hookInput;
17
+ try {
18
+ hookInput = JSON.parse(inputRaw);
19
+ } catch {
20
+ process.stdout.write('{}');
21
+ process.exit(0);
22
+ }
23
+
24
+ if (hookInput.status !== 'completed') {
25
+ process.stdout.write('{}');
26
+ process.exit(0);
27
+ }
28
+
29
+ const activePath = path.join(TEAM_ROOT, 'active-task.json');
30
+
31
+ if (!fs.existsSync(activePath)) {
32
+ process.stdout.write('{}');
33
+ process.exit(0);
34
+ }
35
+
36
+ let active;
37
+ try {
38
+ active = JSON.parse(fs.readFileSync(activePath, 'utf8'));
39
+ } catch {
40
+ process.stdout.write('{}');
41
+ process.exit(0);
42
+ }
43
+
44
+ const slug = active.slug;
45
+ if (!slug) {
46
+ process.stdout.write('{}');
47
+ process.exit(0);
48
+ }
49
+
50
+ const taskDir = path.join(TEAM_ROOT, 'tasks', slug);
51
+ const statusPath = path.join(taskDir, 'status.json');
52
+ const pipelinePath = path.join(taskDir, 'pipeline.json');
53
+ const METRICS_PATH = path.join(taskDir, 'metrics.json');
54
+ const METRICS_LOCK = `${METRICS_PATH}.lock`;
55
+
56
+ if (!fs.existsSync(statusPath)) {
57
+ process.stdout.write('{}');
58
+ process.exit(0);
59
+ }
60
+
61
+ let status;
62
+ const now = new Date().toISOString();
63
+ const STACK = 'svelte';
64
+ const PLATFORM = 'cursor';
65
+
66
+ function waitForMetricsLock() {
67
+ for (let attempt = 0; attempt < 200; attempt += 1) {
68
+ try { fs.mkdirSync(METRICS_LOCK); return; } catch (error) {
69
+ if (error && error.code !== 'EEXIST') throw error;
70
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 10);
71
+ }
72
+ }
73
+ throw new Error('metrics lock timeout');
74
+ }
75
+ let taskLockHeld = false;
76
+ function releaseTaskLock() {
77
+ if (!taskLockHeld) return;
78
+ taskLockHeld = false;
79
+ try { fs.rmdirSync(METRICS_LOCK); } catch {}
80
+ }
81
+ waitForMetricsLock();
82
+ taskLockHeld = true;
83
+ process.on('exit', releaseTaskLock);
84
+ try {
85
+ status = JSON.parse(fs.readFileSync(statusPath, 'utf8'));
86
+ } catch {
87
+ releaseTaskLock();
88
+ process.stdout.write('{}');
89
+ process.exit(0);
90
+ }
91
+ function mutateMetrics(mutator) {
92
+ const acquiredHere = !taskLockHeld;
93
+ if (acquiredHere) waitForMetricsLock();
94
+ try {
95
+ let metrics;
96
+ try { metrics = JSON.parse(fs.readFileSync(METRICS_PATH, 'utf8')); } catch {
97
+ const runId = status.metricsRunId || `${slug}-${Date.now()}-${Math.random().toString(16).slice(2)}`;
98
+ status.metricsRunId = runId;
99
+ metrics = { schemaVersion: 1, task: { runId, slug, preset: 'ai-rules', stack: STACK, platform: PLATFORM, intent: status.intent || 'unknown', profile: 'unknown' }, events: [] };
100
+ metrics.events.push({ eventId: `${runId}:task_started`, type: 'task_started', at: now, source: 'hook', attributionConfidence: 'high' });
101
+ }
102
+ mutator(metrics);
103
+ const temporary = `${METRICS_PATH}.${process.pid}.${Date.now()}.tmp`;
104
+ fs.writeFileSync(temporary, JSON.stringify(metrics, null, 2) + '\n');
105
+ fs.renameSync(temporary, METRICS_PATH);
106
+ } finally {
107
+ if (acquiredHere) { try { fs.rmdirSync(METRICS_LOCK); } catch {} }
108
+ }
109
+ }
110
+ function appendMetric(event) { mutateMetrics((metrics) => metrics.events.push({ eventId: `${metrics.task.runId}:${Date.now()}:${Math.random().toString(16).slice(2)}`, ...event })); }
111
+ function nextAttemptOrdinal(stepIndex, agent) {
112
+ try {
113
+ const metrics = JSON.parse(fs.readFileSync(METRICS_PATH, 'utf8'));
114
+ return metrics.events.reduce((highest, event) => event.type === 'attempt_started' && event.stepIndex === stepIndex && event.agent === agent ? Math.max(highest, Number(event.attempt) || 0) : highest, 0) + 1;
115
+ } catch { return 1; }
116
+ }
117
+ function roleFor(agent) {
118
+ if (/analyst|architect|router|migration/.test(agent || '')) return 'planning';
119
+ if (/verifier/.test(agent || '')) return 'validation';
120
+ if (/reviewer|auditor/.test(agent || '')) return 'review';
121
+ if (/test|qa/.test(agent || '')) return 'testing';
122
+ if (/writer/.test(agent || '')) return 'docs';
123
+ return 'implementation';
124
+ }
125
+ const DEFAULT_ARTIFACT_OUTPUT_IDS = {
126
+ 'task-router': 'routing',
127
+ 'task-analyst': 'analysis',
128
+ 'solution-architect': 'architecture',
129
+ 'migration-specialist': 'migration-plan',
130
+ debugger: 'debug',
131
+ 'ci-investigator': 'ci',
132
+ 'feature-developer': 'implementation',
133
+ 'build-verifier': 'validation',
134
+ 'code-reviewer': 'review',
135
+ 'security-reviewer': 'security-review',
136
+ 'accessibility-reviewer': 'a11y-review',
137
+ 'performance-auditor': 'perf-report',
138
+ 'api-contract-reviewer': 'api-contract-review',
139
+ 'tech-writer': 'documentation',
140
+ };
141
+ function artifactOutputIdFor(step, agent) {
142
+ if (step && typeof step.artifactOutputId === 'string') return step.artifactOutputId;
143
+ if (step?.artifactOutputIds && typeof step.artifactOutputIds[agent] === 'string') return step.artifactOutputIds[agent];
144
+ return DEFAULT_ARTIFACT_OUTPUT_IDS[agent] || agent;
145
+ }
146
+ function activateAttempts(step, stepIndex) {
147
+ const active = { ...(status.activeAttempts || {}) }; const agents = getStepAgents(step);
148
+ const parallelGroupId = step.parallel && agents.length > 1 ? `${status.metricsRunId || slug}:step-${stepIndex}` : null;
149
+ for (const agent of agents) {
150
+ const attempt = nextAttemptOrdinal(stepIndex, agent); const runId = status.metricsRunId || `${slug}-${Date.now()}-${Math.random().toString(16).slice(2)}`;
151
+ status.metricsRunId = runId; const attemptId = `${runId}:step-${stepIndex}:${agent}:attempt-${attempt}`;
152
+ if (active[attemptId]) continue;
153
+ active[attemptId] = { agent, stepIndex, attempt, startedAt: now, parallelGroupId };
154
+ appendMetric({ type: 'attempt_started', at: now, attemptId, stepIndex, stepLabel: step.label || null, agent, role: roleFor(agent), attempt, parallelGroupId, source: 'hook', attributionConfidence: 'high' });
155
+ }
156
+ status.activeAttempts = active;
157
+ }
158
+ function resolvedAttempt() {
159
+ const active = status.activeAttempts || {}; const entries = Object.entries(active);
160
+ const stableAttemptId = hookInput.attemptId;
161
+ if (stableAttemptId) {
162
+ return active[stableAttemptId]
163
+ ? { attemptId: stableAttemptId, entry: active[stableAttemptId], confidence: 'high' }
164
+ : null;
165
+ }
166
+ if (entries.length === 1) return { attemptId: entries[0][0], entry: entries[0][1], confidence: 'high' };
167
+ try { const receipts = JSON.parse(fs.readFileSync(path.join(taskDir, '.metrics-receipts.json'), 'utf8')); const receipt = Array.isArray(receipts) ? receipts.find((item) => active[item.attemptId]) : null; if (receipt) return { attemptId: receipt.attemptId, entry: active[receipt.attemptId], confidence: 'fallback', source: 'agent' }; } catch {}
168
+ return null;
169
+ }
170
+ function readBoundReceiptOutcome(agent, step, resolved) {
171
+ if (!agent || !resolved) return { outcome: null, receiptRequired: false };
172
+ const manifestPath = path.join(taskDir, 'artifact-manifest.json');
173
+ if (!fs.existsSync(manifestPath)) return { outcome: null, receiptRequired: false };
174
+ try {
175
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
176
+ const artifacts = Array.isArray(manifest.artifacts) ? manifest.artifacts : [];
177
+ const expectedOutputId = artifactOutputIdFor(step, agent);
178
+ const attemptStartedAt = Date.parse(resolved.entry.startedAt);
179
+ const owned = artifacts
180
+ .filter((entry) => {
181
+ if (!entry || entry.producer !== agent || !entry.receipt || typeof entry.receipt.outcome !== 'string') return false;
182
+ const boundByAttempt = typeof entry.receipt.attemptId === 'string' && entry.receipt.attemptId === resolved.attemptId;
183
+ const boundByOutput = entry.receipt.attemptId == null && entry.id === expectedOutputId;
184
+ if (!boundByAttempt && !boundByOutput) return false;
185
+ const terminalAt = Date.parse(entry.timestamps?.completedAt || entry.timestamps?.updatedAt || '');
186
+ return Number.isFinite(terminalAt) && (!Number.isFinite(attemptStartedAt) || terminalAt >= attemptStartedAt);
187
+ })
188
+ .sort((a, b) => {
189
+ const ta = Date.parse(a.timestamps?.completedAt || a.timestamps?.updatedAt || 0) || 0;
190
+ const tb = Date.parse(b.timestamps?.completedAt || b.timestamps?.updatedAt || 0) || 0;
191
+ return tb - ta;
192
+ });
193
+ return { outcome: owned[0]?.receipt?.outcome || null, receiptRequired: true };
194
+ } catch {
195
+ return { outcome: null, receiptRequired: false };
196
+ }
197
+ }
198
+ function reconcileStatusFromManifest(agent, step, resolved) {
199
+ const terminal = new Set(['completed', 'blocked', 'changes_requested', 'validation_failed']);
200
+ const { outcome, receiptRequired } = readBoundReceiptOutcome(agent, step, resolved);
201
+ if (terminal.has(outcome)) {
202
+ status.state = outcome;
203
+ return outcome;
204
+ }
205
+ if (receiptRequired) {
206
+ status.state = 'awaiting_artifact_receipt';
207
+ status.phase = 'blocked';
208
+ return status.state;
209
+ }
210
+ if (terminal.has(status.state)) return status.state;
211
+ // Host reported subagent completed and no blocking receipt → treat as completed for metrics/advance.
212
+ if (hookInput.status === 'completed') {
213
+ status.state = 'completed';
214
+ return 'completed';
215
+ }
216
+ return status.state;
217
+ }
218
+
219
+ function finishActiveAttempt() {
220
+ const resolved = resolvedAttempt(); if (!resolved) return null;
221
+ const durationMs = Date.parse(now) - Date.parse(resolved.entry.startedAt);
222
+ const outcome = ['completed', 'blocked', 'changes_requested', 'validation_failed'].includes(status.state) ? status.state : 'unknown';
223
+ appendMetric({ type: 'attempt_finished', at: now, attemptId: resolved.attemptId, outcome, durationMs: Number.isFinite(durationMs) && durationMs >= 0 ? durationMs : null, retryAfterFix: status.retryAfterFix || null, source: resolved.source || 'hook', attributionConfidence: resolved.confidence });
224
+ const active = { ...(status.activeAttempts || {}) }; delete active[resolved.attemptId]; status.activeAttempts = active; status.lastCompletedAttempt = { attemptId: resolved.attemptId, completedAt: now }; return { ...resolved, outcome };
225
+ }
226
+ function beginHumanGate() { const eventId = `${status.metricsRunId || slug}:gate:${Date.now()}`; appendMetric({ eventId, type: 'human_gate_started', at: now, source: 'hook', attributionConfidence: 'high' }); status.activeHumanGateEventId = eventId; }
227
+ function endHumanGateIfResumed() {
228
+ if (!status.activeHumanGateEventId || status.awaitingHumanGate || status.state === 'awaiting_approval') return;
229
+ appendMetric({ type: 'human_gate_ended', at: now, gateStartedEventId: status.activeHumanGateEventId, source: 'hook', attributionConfidence: 'high' });
230
+ delete status.activeHumanGateEventId;
231
+ }
232
+ function completeTaskMetrics() { appendMetric({ type: 'task_completed', at: now, outcome: status.state === 'completed' ? 'completed' : 'unknown', source: 'hook', attributionConfidence: 'high' }); }
233
+ function recordSkippedStep(step, stepIndex) {
234
+ for (const agent of getStepAgents(step)) {
235
+ const runId = status.metricsRunId || `${slug}-${Date.now()}-${Math.random().toString(16).slice(2)}`;
236
+ status.metricsRunId = runId;
237
+ const attempt = nextAttemptOrdinal(stepIndex, agent);
238
+ appendMetric({ type: 'attempt_skipped', at: now, attemptId: `${runId}:step-${stepIndex}:${agent}:attempt-${attempt}`, stepIndex, stepLabel: step.label || null, agent, role: roleFor(agent), attempt, outcome: 'skipped', source: 'hook', attributionConfidence: 'high' });
239
+ }
240
+ }
241
+
242
+
243
+ function writeStatus(next) {
244
+ status = { ...status, ...next, slug, updatedAt: now };
245
+ const temporary = `${statusPath}.${process.pid}.${Date.now()}.tmp`;
246
+ fs.writeFileSync(temporary, JSON.stringify(status, null, 2) + '\n');
247
+ fs.renameSync(temporary, statusPath);
248
+ }
249
+
250
+ function out(message) {
251
+ process.stdout.write(JSON.stringify({ followup_message: message }));
252
+ }
253
+
254
+ function readArtifact(name) {
255
+ const p = path.join(taskDir, name);
256
+ if (!fs.existsSync(p)) return '';
257
+ try {
258
+ return fs.readFileSync(p, 'utf8');
259
+ } catch {
260
+ return '';
261
+ }
262
+ }
263
+
264
+ function getStepAgents(step) {
265
+ if (!step) return [];
266
+ return Array.isArray(step.agent) ? step.agent : [step.agent];
267
+ }
268
+
269
+ function skipIfMatches(skipIf, dir) {
270
+ if (!skipIf) return false;
271
+ if (skipIf === 'debugger.fixed') {
272
+ const text = readArtifact('debug-report.md');
273
+ return /fixApplied:\s*true/i.test(text) || /\*\*Fix applied:\*\*\s*true/i.test(text);
274
+ }
275
+ if (skipIf === 'ci-investigator.resolved') {
276
+ const text = readArtifact('ci-report.md');
277
+ return /fixApplied:\s*true/i.test(text) || /## Verdict\s*\nPASS/i.test(text);
278
+ }
279
+ return false;
280
+ }
281
+
282
+ function findNextExecutableStep(steps, startIdx, dir) {
283
+ for (let i = startIdx; i < steps.length; i++) {
284
+ if (!skipIfMatches(steps[i].skipIf, dir)) return { step: steps[i], index: i };
285
+ recordSkippedStep(steps[i], i);
286
+ }
287
+ return null;
288
+ }
289
+
290
+ const AGENT_HANDOFF = {
291
+ 'task-analyst': (s) =>
292
+ `Invoke task-analyst for slug "${s}". Write brief.md and decomposition.md under .cursor/team/tasks/${s}/. ` +
293
+ `Upsert the analysis receipt in artifact-manifest.json; do not mutate status.json lifecycle fields. Do not use legacy phase analysis.`,
294
+ debugger: (s) =>
295
+ `Invoke debugger subagent for slug "${s}". Investigate root cause; write debug-report.md with fixApplied: true/false. ` +
296
+ `Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
297
+ 'solution-architect': (s) =>
298
+ `Invoke solution-architect for slug "${s}". Read brief.md; write architecture.md. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
299
+ 'migration-specialist': (s) =>
300
+ `Invoke migration-specialist for slug "${s}". Read brief.md; write migration-plan.md. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
301
+ 'api-contract-reviewer': (s) =>
302
+ `Invoke api-contract-reviewer (readonly) for slug "${s}". Write api-contract-review.md. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
303
+ 'ci-investigator': (s) =>
304
+ `Invoke ci-investigator for slug "${s}". Diagnose CI failure; write ci-report.md; apply minimal fix. ` +
305
+ `Use ci-investigation skill. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
306
+ 'feature-developer': (s) =>
307
+ `Invoke feature-developer for slug "${s}". Read brief.md, decomposition.md, validation-report.md, review.md, architecture.md, migration-plan.md, api-contract-review.md, debug-report.md if present. ` +
308
+ `Follow feature-delivery-workflow.mdc and reference-features.mdc. Include unit tests for mappers/logic before handoff. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
309
+ 'build-verifier': (s) =>
310
+ `Invoke build-verifier (readonly) for slug "${s}". Run lint:js, lint:css, check, and targeted unit tests from SvelteKit root/. ` +
311
+ `Write validation-report.md and emit receipt outcome completed or validation_failed. Do not edit production code.`,
312
+ 'accessibility-reviewer': (s) =>
313
+ `Invoke accessibility-reviewer (readonly) for slug "${s}". Review UI diff; write a11y-review.md. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
314
+ 'performance-auditor': (s) =>
315
+ `Invoke performance-auditor (readonly) for slug "${s}". Write perf-report.md. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
316
+ 'code-reviewer': (s) =>
317
+ `Invoke code-reviewer subagent (readonly) for slug "${s}". Review git diff vs brief.md per code-review-mr.mdc. ` +
318
+ `Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
319
+ 'security-reviewer': (s) =>
320
+ `Invoke security-reviewer (readonly) for slug "${s}". Write security-review.md. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
321
+ 'qa-tester': (s, scope) =>
322
+ `Invoke qa-tester for slug "${s}"${scope ? ` (scope: ${scope})` : ''}. ` +
323
+ `Add/update tests per brief. Follow playwright-agents.mdc. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
324
+ 'unit-test-planner': (s) =>
325
+ `Invoke unit-test-planner for slug "${s}". Write unit-test-plan.md. Use unit-testing skill. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
326
+ 'unit-test-generator': (s) =>
327
+ `Invoke unit-test-generator for slug "${s}". Implement specs from unit-test-plan.md. Use unit-testing skill. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
328
+ 'unit-test-healer': (s) =>
329
+ `Invoke unit-test-healer for slug "${s}". Fix failing unit tests. Use unit-testing and debug-investigation skills. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
330
+ 'playwright-test-planner': (s) =>
331
+ `Invoke playwright-test-planner for slug "${s}". Create/update tests/e2e/**/*.cases.md. ` +
332
+ `Follow playwright-agents.mdc and the playwright-e2e skill. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
333
+ 'playwright-test-generator': (s) =>
334
+ `Invoke playwright-test-generator for slug "${s}". Generate/update *.spec.ts from matching *.cases.md. ` +
335
+ `Use playwright MCP when available. Follow playwright-agents.mdc and the playwright-e2e skill. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
336
+ 'playwright-test-healer': (s) =>
337
+ `Invoke playwright-test-healer for slug "${s}". Fix failing/flaky e2e while preserving cases.md assertions. ` +
338
+ `Use playwright MCP when available. Follow playwright-agents.mdc and debug-investigation. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
339
+ 'tech-writer': (s) =>
340
+ `Invoke tech-writer for slug "${s}". Write documentation.md from task artifacts. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
341
+ };
342
+
343
+ const REVIEW_AGENTS = new Set([
344
+ 'code-reviewer',
345
+ 'accessibility-reviewer',
346
+ 'security-reviewer',
347
+ 'api-contract-reviewer',
348
+ ]);
349
+
350
+ function metricsHandoff(agent) {
351
+ const matches = Object.entries(status.activeAttempts || {}).filter(([, entry]) => entry.agent === agent);
352
+ if (matches.length === 1) {
353
+ return ` Metrics attemptId: ${matches[0][0]}; write owned artifact-manifest receipt outcome. If the hook cannot identify a parallel stop, append a minimal { attemptId, outcome } receipt to .metrics-receipts.json; do not mutate status.json or calculate duration.`;
354
+ }
355
+ return ' Metrics: use the supplied attemptId when available; for a parallel completion, write a minimal { attemptId, outcome } receipt to .metrics-receipts.json rather than relying on currentAgent. Do not calculate duration.';
356
+ }
357
+
358
+ function artifactHandoff(step, agent) {
359
+ const inputIds = Array.isArray(step?.artifactInputIds) ? step.artifactInputIds.join(', ') : 'manifest defaults';
360
+ return ` Artifact inputs: ${inputIds}; owned output ID: ${artifactOutputIdFor(step, agent)}. Bind the terminal receipt to the supplied attemptId.`;
361
+ }
362
+
363
+ function handoffForAgent(agent, scope, step = null) {
364
+ const fn = AGENT_HANDOFF[agent];
365
+ const handoff = fn ? fn(slug, scope) : `Invoke ${agent} subagent for slug "${slug}". Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`;
366
+ return handoff + artifactHandoff(step, agent) + metricsHandoff(agent);
367
+ }
368
+
369
+ function handoffForParallelStep(step) {
370
+ const agents = getStepAgents(step);
371
+ const attemptIds = Object.entries(status.activeAttempts || {})
372
+ .filter(([, entry]) => agents.includes(entry.agent))
373
+ .map(([attemptId, entry]) => `${entry.agent}=${attemptId}`);
374
+ return (
375
+ `Invoke IN PARALLEL (one message, multiple Task calls): ${agents.join(' AND ')} for slug "${slug}". ` +
376
+ `Each agent writes its artifact and owned receipt; the hook records parallelCompleted from stops. Do not mutate status.json lifecycle fields. ` +
377
+ `Artifact inputs: ${Array.isArray(step.artifactInputIds) ? step.artifactInputIds.join(', ') : 'manifest defaults'}; owned output IDs: ${agents.map((agent) => `${agent}=${artifactOutputIdFor(step, agent)}`).join('; ')}. ` +
378
+ `Metrics attemptIds: ${attemptIds.join('; ')}. If the hook cannot identify a parallel stop, append a minimal { attemptId, outcome } receipt to .metrics-receipts.json; do not calculate duration.`
379
+ );
380
+ }
381
+
382
+ function hasGateAfter(agent, humanGates) {
383
+ return Array.isArray(humanGates) && humanGates.includes(`after:${agent}`);
384
+ }
385
+
386
+ function hasGateAfterStep(step, humanGates) {
387
+ return getStepAgents(step).some((a) => hasGateAfter(a, humanGates));
388
+ }
389
+
390
+ function legacyFlow() {
391
+ if (status.phase === 'analysis') {
392
+ process.stdout.write('{}');
393
+ process.exit(0);
394
+ }
395
+ if (status.phase === 'development' && (status.state === 'completed' || status.state === 'in_progress')) {
396
+ writeStatus({ phase: 'executing', state: 'in_progress', currentAgent: 'build-verifier' });
397
+ out(handoffForAgent('build-verifier'));
398
+ process.exit(0);
399
+ }
400
+ if (status.currentAgent === 'build-verifier' && status.state === 'completed') {
401
+ writeStatus({ phase: 'executing', state: 'in_progress', currentAgent: 'code-reviewer' });
402
+ out(handoffForAgent('code-reviewer'));
403
+ process.exit(0);
404
+ }
405
+ if (status.phase === 'review' && status.state === 'completed') {
406
+ writeStatus({ phase: 'executing', state: 'in_progress', currentAgent: 'qa-tester' });
407
+ out(handoffForAgent('qa-tester'));
408
+ process.exit(0);
409
+ }
410
+ function scheduleLegacyRetry(agent, retryAfterFix) {
411
+ const stepIndex = typeof status.pipelineIndex === 'number' ? status.pipelineIndex : 0;
412
+ const predecessorAttemptId = status.lastCompletedAttempt?.attemptId || null;
413
+ appendMetric({ type: 'retry_scheduled', at: now, attemptId: predecessorAttemptId, nextAgent: agent, retryAfterFix: retryAfterFix || null, source: 'hook', attributionConfidence: 'unknown' });
414
+ activateAttempts({ agent }, stepIndex);
415
+ }
416
+ if (status.state === 'changes_requested') {
417
+ const reviewer = status.currentAgent;
418
+ if (!reviewer) {
419
+ process.stdout.write('{}');
420
+ process.exit(0);
421
+ }
422
+ scheduleLegacyRetry('feature-developer', reviewer);
423
+ writeStatus({
424
+ currentAgent: 'feature-developer',
425
+ state: 'in_progress',
426
+ phase: 'executing',
427
+ retryAfterFix: reviewer,
428
+ });
429
+ out(handoffForAgent('feature-developer') + ` After fixes, re-run ${reviewer}.`);
430
+ process.exit(0);
431
+ }
432
+ if (status.state === 'validation_failed' && status.currentAgent === 'build-verifier') {
433
+ scheduleLegacyRetry('feature-developer', 'build-verifier');
434
+ writeStatus({
435
+ currentAgent: 'feature-developer',
436
+ state: 'in_progress',
437
+ phase: 'executing',
438
+ retryAfterFix: 'build-verifier',
439
+ });
440
+ out(handoffForAgent('feature-developer') + ' Read validation-report.md. After fixes, re-run build-verifier.');
441
+ process.exit(0);
442
+ }
443
+ if (status.state === 'completed' && status.retryAfterFix) {
444
+ const retry = status.retryAfterFix;
445
+ scheduleLegacyRetry(retry, null);
446
+ writeStatus({ currentAgent: retry, state: 'in_progress', retryAfterFix: null });
447
+ out(handoffForAgent(retry));
448
+ process.exit(0);
449
+ }
450
+ if (status.phase === 'testing' && status.state === 'completed') {
451
+ writeStatus({ phase: 'done', state: 'completed' });
452
+ out(`Pipeline complete for "${slug}". Run /technical-retro ${slug}.`);
453
+ process.exit(0);
454
+ }
455
+ process.stdout.write('{}');
456
+ process.exit(0);
457
+ }
458
+
459
+
460
+ if (hookInput.action === 'end_human_gate') {
461
+ status.awaitingHumanGate = false;
462
+ if (status.state === 'awaiting_approval') {
463
+ status.state = 'in_progress';
464
+ status.phase = status.phase === 'human_gate' ? 'executing' : status.phase;
465
+ }
466
+ if (status.activeHumanGateEventId) {
467
+ appendMetric({
468
+ type: 'human_gate_ended',
469
+ at: now,
470
+ gateStartedEventId: status.activeHumanGateEventId,
471
+ source: 'orchestrator',
472
+ attributionConfidence: 'high',
473
+ });
474
+ delete status.activeHumanGateEventId;
475
+ }
476
+ if (hookInput.activateNext && fs.existsSync(pipelinePath)) {
477
+ let resumePipeline = null;
478
+ try { resumePipeline = JSON.parse(fs.readFileSync(pipelinePath, 'utf8')); } catch {}
479
+ if (resumePipeline) {
480
+ const resumeSteps = resumePipeline.steps || [];
481
+ const resumeStart = (typeof status.pipelineIndex === 'number' ? status.pipelineIndex : 0) + 1;
482
+ const resumeNext = findNextExecutableStep(resumeSteps, resumeStart, taskDir);
483
+ if (resumeNext) {
484
+ const resumeAgents = getStepAgents(resumeNext.step);
485
+ activateAttempts(resumeNext.step, resumeNext.index);
486
+ writeStatus({
487
+ pipelineIndex: resumeNext.index,
488
+ currentAgent: resumeAgents[0],
489
+ phase: 'executing',
490
+ state: 'in_progress',
491
+ awaitingHumanGate: false,
492
+ parallelCompleted: [],
493
+ });
494
+ if (resumeNext.step.parallel && resumeAgents.length > 1) out(handoffForParallelStep(resumeNext.step));
495
+ else out(handoffForAgent(resumeAgents[0], resumeNext.step.scope, resumeNext.step));
496
+ process.exit(0);
497
+ }
498
+ }
499
+ }
500
+ writeStatus({
501
+ awaitingHumanGate: false,
502
+ state: status.state,
503
+ phase: status.phase,
504
+ });
505
+ process.stdout.write(JSON.stringify({ ok: true, action: 'end_human_gate', activeHumanGateEventId: status.activeHumanGateEventId || null }));
506
+ process.exit(0);
507
+ }
508
+
509
+ if (!fs.existsSync(pipelinePath)) {
510
+ legacyFlow();
511
+ }
512
+
513
+ let pipeline;
514
+ try {
515
+ pipeline = JSON.parse(fs.readFileSync(pipelinePath, 'utf8'));
516
+ } catch {
517
+ legacyFlow();
518
+ }
519
+
520
+ const steps = pipeline.steps || [];
521
+ const initialIdx = typeof status.pipelineIndex === 'number' ? status.pipelineIndex : 0;
522
+ const initialStep = steps[initialIdx];
523
+ const activeAttemptCountBeforeFinish = Object.keys(status.activeAttempts || {}).length;
524
+ const completingAgentHint = (() => {
525
+ const resolved = resolvedAttempt();
526
+ if (resolved?.entry?.agent) return resolved.entry.agent;
527
+ if (status.currentAgent) return status.currentAgent;
528
+ return getStepAgents(initialStep)[0];
529
+ })();
530
+ const reconcilingAttempt = resolvedAttempt();
531
+ reconcileStatusFromManifest(completingAgentHint, initialStep, reconcilingAttempt);
532
+ if (status.state === 'awaiting_artifact_receipt') {
533
+ writeStatus({});
534
+ process.stdout.write('{}');
535
+ process.exit(0);
536
+ }
537
+ const finishedAttempt = finishActiveAttempt();
538
+ if (!finishedAttempt && (hookInput.attemptId || activeAttemptCountBeforeFinish > 0)) {
539
+ process.stdout.write('{}');
540
+ process.exit(0);
541
+ }
542
+ endHumanGateIfResumed();
543
+ if (steps.length === 0 || pipeline.autoChain === false) {
544
+ writeStatus({});
545
+ process.stdout.write('{}');
546
+ process.exit(0);
547
+ }
548
+
549
+ if (status.awaitingHumanGate || status.state === 'awaiting_approval') {
550
+ process.stdout.write('{}');
551
+ process.exit(0);
552
+ }
553
+
554
+ function nearestPrecedingStepIndex(agent, fromIndex, fallback) {
555
+ for (let index = fromIndex - 1; index >= 0; index -= 1) {
556
+ if (getStepAgents(steps[index]).includes(agent)) return index;
557
+ }
558
+ const match = steps.findIndex((step) => getStepAgents(step).includes(agent));
559
+ return match >= 0 ? match : fallback;
560
+ }
561
+ function scheduleRetry(agent, retryAfterFix, predecessor, explicitStepIndex = null) {
562
+ const currentIndex = typeof status.pipelineIndex === 'number' ? status.pipelineIndex : 0;
563
+ const stepIndex = Number.isInteger(explicitStepIndex)
564
+ ? explicitStepIndex
565
+ : nearestPrecedingStepIndex(agent, currentIndex, currentIndex);
566
+ const predecessorAttemptId = predecessor?.attemptId || status.lastCompletedAttempt?.attemptId || null;
567
+ appendMetric({ type: 'retry_scheduled', at: now, attemptId: predecessorAttemptId, nextAgent: agent, retryAfterFix: retryAfterFix || null, source: 'hook', attributionConfidence: predecessor ? predecessor.confidence : 'unknown' });
568
+ activateAttempts(steps[stepIndex] || { agent }, stepIndex);
569
+ return stepIndex;
570
+ }
571
+
572
+ const idx = typeof status.pipelineIndex === 'number' ? status.pipelineIndex : 0;
573
+ const currentStep = steps[idx];
574
+ const completedAgent = finishedAttempt?.entry?.agent || status.currentAgent || getStepAgents(currentStep)[0];
575
+ const stepAgents = getStepAgents(currentStep);
576
+
577
+ if (currentStep?.parallel && stepAgents.length > 1) {
578
+ const done = [...(status.parallelCompleted || [])];
579
+ const outcomes = { ...(status.parallelOutcomes || {}) };
580
+ if (finishedAttempt && completedAgent) {
581
+ if (!done.includes(completedAgent)) done.push(completedAgent);
582
+ outcomes[completedAgent] = {
583
+ outcome: finishedAttempt.outcome || status.state,
584
+ attemptId: finishedAttempt.attemptId,
585
+ confidence: finishedAttempt.confidence,
586
+ };
587
+ }
588
+ writeStatus({ parallelCompleted: done, parallelOutcomes: outcomes });
589
+ const remaining = stepAgents.filter((agent) => !done.includes(agent));
590
+ if (remaining.length > 0) {
591
+ process.stdout.write('{}');
592
+ process.exit(0);
593
+ }
594
+
595
+ const blockedProducer = stepAgents.find((agent) => outcomes[agent]?.outcome === 'blocked');
596
+ if (blockedProducer) {
597
+ writeStatus({ parallelCompleted: [], parallelOutcomes: {}, state: 'blocked', phase: 'blocked', currentAgent: blockedProducer });
598
+ process.stdout.write('{}');
599
+ process.exit(0);
600
+ }
601
+
602
+ const retryReviewer = stepAgents.find((agent) => outcomes[agent]?.outcome === 'changes_requested');
603
+ if (retryReviewer) {
604
+ const retryAfterFixStepIndex = idx;
605
+ const predecessor = outcomes[retryReviewer]
606
+ ? {
607
+ attemptId: outcomes[retryReviewer].attemptId,
608
+ confidence: outcomes[retryReviewer].confidence,
609
+ }
610
+ : finishedAttempt;
611
+ const developerIndex = scheduleRetry('feature-developer', retryReviewer, predecessor);
612
+ writeStatus({
613
+ pipelineIndex: developerIndex,
614
+ currentAgent: 'feature-developer',
615
+ state: 'in_progress',
616
+ phase: 'executing',
617
+ retryAfterFix: retryReviewer,
618
+ retryAfterFixStepIndex,
619
+ parallelCompleted: [],
620
+ parallelOutcomes: {},
621
+ });
622
+ out(handoffForAgent('feature-developer', steps[developerIndex]?.scope, steps[developerIndex]) + ` After fixes, re-run ${retryReviewer}.`);
623
+ process.exit(0);
624
+ }
625
+
626
+ writeStatus({ parallelCompleted: [], parallelOutcomes: {}, state: 'completed' });
627
+ }
628
+
629
+ if (status.state === 'blocked') {
630
+ writeStatus({ state: 'blocked', phase: 'blocked', currentAgent: completedAgent });
631
+ process.stdout.write('{}');
632
+ process.exit(0);
633
+ }
634
+
635
+ if (status.state === 'changes_requested') {
636
+ const reviewer = status.currentAgent || finishedAttempt?.entry?.agent;
637
+ if (!reviewer) {
638
+ process.stdout.write('{}');
639
+ process.exit(0);
640
+ }
641
+ const retryAfterFixStepIndex = typeof status.pipelineIndex === 'number' ? status.pipelineIndex : 0;
642
+ const developerIndex = scheduleRetry('feature-developer', reviewer, finishedAttempt);
643
+ writeStatus({
644
+ pipelineIndex: developerIndex,
645
+ currentAgent: 'feature-developer',
646
+ state: 'in_progress',
647
+ phase: 'executing',
648
+ retryAfterFix: reviewer,
649
+ retryAfterFixStepIndex,
650
+ });
651
+ out(handoffForAgent('feature-developer', steps[developerIndex]?.scope, steps[developerIndex]) + ` After fixes, re-run ${reviewer}.`);
652
+ process.exit(0);
653
+ }
654
+
655
+ if (status.state === 'validation_failed' && status.currentAgent === 'build-verifier') {
656
+ const retryAfterFixStepIndex = typeof status.pipelineIndex === 'number' ? status.pipelineIndex : 0;
657
+ const developerIndex = scheduleRetry('feature-developer', 'build-verifier', finishedAttempt);
658
+ writeStatus({
659
+ pipelineIndex: developerIndex,
660
+ currentAgent: 'feature-developer',
661
+ state: 'in_progress',
662
+ phase: 'executing',
663
+ retryAfterFix: 'build-verifier',
664
+ retryAfterFixStepIndex,
665
+ });
666
+ out(handoffForAgent('feature-developer', steps[developerIndex]?.scope, steps[developerIndex]) + ' Read validation-report.md. After fixes, re-run build-verifier.');
667
+ process.exit(0);
668
+ }
669
+
670
+ if (status.state === 'completed' && status.retryAfterFix) {
671
+ const retry = status.retryAfterFix;
672
+ const retryIndex = scheduleRetry(retry, null, finishedAttempt, status.retryAfterFixStepIndex);
673
+ writeStatus({ pipelineIndex: retryIndex, currentAgent: retry, state: 'in_progress', retryAfterFix: null, retryAfterFixStepIndex: null });
674
+ out(handoffForAgent(retry, steps[retryIndex]?.scope, steps[retryIndex]));
675
+ process.exit(0);
676
+ }
677
+
678
+ if (!currentStep) {
679
+ writeStatus({ phase: 'done', state: 'completed', currentAgent: null });
680
+ out(`Pipeline complete for "${slug}". Run /technical-retro ${slug}.`);
681
+ process.exit(0);
682
+ }
683
+
684
+ if (hasGateAfterStep(currentStep, pipeline.humanGates)) {
685
+ beginHumanGate();
686
+ writeStatus({
687
+ awaitingHumanGate: true,
688
+ state: 'awaiting_approval',
689
+ currentAgent: completedAgent,
690
+ });
691
+ process.stdout.write('{}');
692
+ process.exit(0);
693
+ }
694
+
695
+ const next = findNextExecutableStep(steps, idx + 1, taskDir);
696
+ if (!next) {
697
+ completeTaskMetrics();
698
+ writeStatus({
699
+ pipelineIndex: steps.length,
700
+ phase: 'done',
701
+ state: 'completed',
702
+ currentAgent: null,
703
+ awaitingHumanGate: false,
704
+ });
705
+ out(`Pipeline complete for "${slug}". Run /technical-retro ${slug}.`);
706
+ process.exit(0);
707
+ }
708
+
709
+ const { step: nextStep, index: nextIdx } = next;
710
+ const nextAgents = getStepAgents(nextStep);
711
+
712
+ activateAttempts(nextStep, nextIdx);
713
+ writeStatus({
714
+ pipelineIndex: nextIdx,
715
+ currentAgent: nextAgents[0],
716
+ phase: 'executing',
717
+ state: 'in_progress',
718
+ awaitingHumanGate: false,
719
+ parallelCompleted: [],
720
+ });
721
+
722
+ if (nextStep.parallel && nextAgents.length > 1) {
723
+ out(handoffForParallelStep(nextStep));
724
+ } else {
725
+ out(handoffForAgent(nextAgents[0], nextStep.scope, nextStep));
726
+ }
727
+ NODE