@bonesofspring/ai-rules 0.2.12 → 0.2.14

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 (660) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +6 -2
  3. package/bin/cli.js +4 -0
  4. package/package.json +1 -1
  5. package/presets/_shared/README.md +1 -1
  6. package/presets/_shared/core/agent-team/agent-artifact-contracts.md +114 -0
  7. package/presets/_shared/core/agent-team/agent-team-orchestrator.md +64 -5
  8. package/presets/_shared/core/meta/preset-layering.md +1 -1
  9. package/presets/_shared/core/meta/preset-no-cross-stack-leakage.md +15 -1
  10. package/presets/_shared/core/meta/preset-pr-checklist.md +1 -1
  11. package/presets/_shared/core/meta/preset-twin-sync.md +4 -0
  12. package/presets/claude/go/agents/build-verifier.md +10 -3
  13. package/presets/claude/go/agents/code-reviewer.md +8 -1
  14. package/presets/claude/go/agents/feature-developer.md +8 -1
  15. package/presets/claude/go/agents/task-analyst.md +8 -1
  16. package/presets/claude/go/agents/task-router.md +33 -5
  17. package/presets/claude/go/commands/task.md +8 -6
  18. package/presets/claude/go/hooks/chain-team-phases.sh +195 -53
  19. package/presets/claude/go/rules/tooling-and-review/agent-team-orchestrator.md +30 -5
  20. package/presets/claude/go/rules/tooling-and-review/preset-layering.md +2 -1
  21. package/presets/claude/go/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -1
  22. package/presets/claude/go/rules/tooling-and-review/preset-pr-checklist.md +2 -1
  23. package/presets/claude/go/rules/tooling-and-review/preset-token-budget.md +1 -0
  24. package/presets/claude/go/rules/tooling-and-review/preset-twin-sync.md +5 -0
  25. package/presets/claude/go/team/README.md +13 -2
  26. package/presets/claude/ios-swift/agents/build-verifier.md +10 -3
  27. package/presets/claude/ios-swift/agents/code-reviewer.md +9 -14
  28. package/presets/claude/ios-swift/agents/feature-developer.md +8 -1
  29. package/presets/claude/ios-swift/agents/task-analyst.md +8 -1
  30. package/presets/claude/ios-swift/agents/task-router.md +31 -3
  31. package/presets/claude/ios-swift/commands/task.md +8 -6
  32. package/presets/claude/ios-swift/hooks/chain-team-phases.sh +177 -54
  33. package/presets/claude/ios-swift/rules/tooling-and-review/agent-team-orchestrator.md +33 -2
  34. package/presets/claude/ios-swift/rules/tooling-and-review/preset-layering.md +2 -1
  35. package/presets/claude/ios-swift/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -1
  36. package/presets/claude/ios-swift/rules/tooling-and-review/preset-pr-checklist.md +2 -1
  37. package/presets/claude/ios-swift/rules/tooling-and-review/preset-token-budget.md +1 -0
  38. package/presets/claude/ios-swift/rules/tooling-and-review/preset-twin-sync.md +5 -0
  39. package/presets/claude/ios-swift/team/README.md +13 -2
  40. package/presets/claude/java/agents/build-verifier.md +9 -2
  41. package/presets/claude/java/agents/code-reviewer.md +8 -1
  42. package/presets/claude/java/agents/feature-developer.md +8 -1
  43. package/presets/claude/java/agents/task-analyst.md +8 -1
  44. package/presets/claude/java/agents/task-router.md +31 -3
  45. package/presets/claude/java/commands/task.md +8 -6
  46. package/presets/claude/java/hooks/chain-team-phases.sh +195 -53
  47. package/presets/claude/java/rules/tooling-and-review/agent-team-orchestrator.md +30 -5
  48. package/presets/claude/java/rules/tooling-and-review/preset-layering.md +2 -1
  49. package/presets/claude/java/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -1
  50. package/presets/claude/java/rules/tooling-and-review/preset-pr-checklist.md +2 -1
  51. package/presets/claude/java/rules/tooling-and-review/preset-token-budget.md +1 -0
  52. package/presets/claude/java/rules/tooling-and-review/preset-twin-sync.md +5 -0
  53. package/presets/claude/java/team/README.md +13 -2
  54. package/presets/claude/mcp-ts/agents/build-verifier.md +10 -3
  55. package/presets/claude/mcp-ts/agents/feature-developer.md +7 -1
  56. package/presets/claude/mcp-ts/agents/task-analyst.md +8 -1
  57. package/presets/claude/mcp-ts/agents/task-router.md +33 -5
  58. package/presets/claude/mcp-ts/commands/task.md +8 -6
  59. package/presets/claude/mcp-ts/hooks/chain-team-phases.sh +181 -39
  60. package/presets/claude/mcp-ts/rules/tooling-and-review/agent-team-orchestrator.md +30 -5
  61. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-layering.md +2 -1
  62. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -1
  63. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-pr-checklist.md +2 -1
  64. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-token-budget.md +1 -0
  65. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-twin-sync.md +5 -0
  66. package/presets/claude/mcp-ts/team/README.md +13 -2
  67. package/presets/claude/next/agents/accessibility-reviewer.md +6 -12
  68. package/presets/claude/next/agents/api-contract-reviewer.md +6 -12
  69. package/presets/claude/next/agents/build-verifier.md +10 -14
  70. package/presets/claude/next/agents/ci-investigator.md +7 -13
  71. package/presets/claude/next/agents/code-reviewer.md +9 -14
  72. package/presets/claude/next/agents/debugger.md +6 -12
  73. package/presets/claude/next/agents/feature-developer.md +8 -1
  74. package/presets/claude/next/agents/migration-specialist.md +6 -12
  75. package/presets/claude/next/agents/performance-auditor.md +5 -11
  76. package/presets/claude/next/agents/qa-tester.md +6 -12
  77. package/presets/claude/next/agents/security-reviewer.md +6 -12
  78. package/presets/claude/next/agents/solution-architect.md +6 -12
  79. package/presets/claude/next/agents/task-analyst.md +10 -16
  80. package/presets/claude/next/agents/task-router.md +31 -3
  81. package/presets/claude/next/agents/tech-writer.md +6 -13
  82. package/presets/claude/next/agents/unit-test-generator.md +6 -10
  83. package/presets/claude/next/agents/unit-test-healer.md +6 -10
  84. package/presets/claude/next/agents/unit-test-planner.md +5 -11
  85. package/presets/claude/next/commands/task.md +8 -6
  86. package/presets/claude/next/hooks/chain-team-phases.sh +197 -54
  87. package/presets/claude/next/rules/tooling-and-review/agent-team-orchestrator.md +29 -4
  88. package/presets/claude/next/rules/tooling-and-review/preset-layering.md +2 -1
  89. package/presets/claude/next/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -1
  90. package/presets/claude/next/rules/tooling-and-review/preset-pr-checklist.md +2 -1
  91. package/presets/claude/next/rules/tooling-and-review/preset-token-budget.md +1 -0
  92. package/presets/claude/next/rules/tooling-and-review/preset-twin-sync.md +5 -0
  93. package/presets/claude/next/team/README.md +15 -3
  94. package/presets/claude/next/team/fixtures/artifact-manifest.example.json +61 -0
  95. package/presets/claude/next/team/fixtures/bugfix-standard.json +10 -0
  96. package/presets/claude/next/team/fixtures/feature-full.json +10 -0
  97. package/presets/claude/next/team/fixtures/feature-light.json +10 -0
  98. package/presets/claude/nuxt/CLAUDE.md +39 -0
  99. package/presets/claude/nuxt/MCP.md +16 -0
  100. package/presets/claude/nuxt/README.md +39 -0
  101. package/presets/claude/nuxt/REPO_AGENTS.md +49 -0
  102. package/presets/claude/nuxt/agents/README.md +199 -0
  103. package/presets/claude/nuxt/agents/accessibility-reviewer.md +59 -0
  104. package/presets/claude/nuxt/agents/api-contract-reviewer.md +63 -0
  105. package/presets/claude/nuxt/agents/build-verifier.md +89 -0
  106. package/presets/claude/nuxt/agents/ci-investigator.md +60 -0
  107. package/presets/claude/nuxt/agents/code-reviewer.md +62 -0
  108. package/presets/claude/nuxt/agents/codebase-analyzer.md +28 -0
  109. package/presets/claude/nuxt/agents/debugger.md +65 -0
  110. package/presets/claude/nuxt/agents/feature-developer.md +59 -0
  111. package/presets/claude/nuxt/agents/migration-specialist.md +67 -0
  112. package/presets/claude/nuxt/agents/performance-auditor.md +66 -0
  113. package/presets/claude/nuxt/agents/playwright-test-generator.md +75 -0
  114. package/presets/claude/nuxt/agents/playwright-test-healer.md +61 -0
  115. package/presets/claude/nuxt/agents/playwright-test-planner.md +67 -0
  116. package/presets/claude/nuxt/agents/qa-tester.md +54 -0
  117. package/presets/claude/nuxt/agents/security-reviewer.md +60 -0
  118. package/presets/claude/nuxt/agents/solution-architect.md +68 -0
  119. package/presets/claude/nuxt/agents/task-analyst.md +109 -0
  120. package/presets/claude/nuxt/agents/task-router.md +140 -0
  121. package/presets/claude/nuxt/agents/tech-writer.md +54 -0
  122. package/presets/claude/nuxt/agents/unit-test-generator.md +37 -0
  123. package/presets/claude/nuxt/agents/unit-test-healer.md +38 -0
  124. package/presets/claude/nuxt/agents/unit-test-planner.md +60 -0
  125. package/presets/claude/nuxt/commands/README.md +13 -0
  126. package/presets/claude/nuxt/commands/feature-continue.md +51 -0
  127. package/presets/claude/nuxt/commands/feature-start.md +30 -0
  128. package/presets/claude/nuxt/commands/task-continue.md +50 -0
  129. package/presets/claude/nuxt/commands/task.md +56 -0
  130. package/presets/claude/nuxt/commands/technical-retro.md +62 -0
  131. package/presets/claude/nuxt/hooks/README.md +14 -0
  132. package/presets/claude/nuxt/hooks/chain-team-phases.sh +723 -0
  133. package/presets/claude/nuxt/hooks/examples/README.md +18 -0
  134. package/presets/claude/nuxt/hooks/examples/format-edited.example.sh +11 -0
  135. package/presets/claude/nuxt/hooks/examples/secret-guard.example.sh +10 -0
  136. package/presets/claude/nuxt/hooks/examples/test-on-save.example.sh +8 -0
  137. package/presets/claude/nuxt/hooks/guard-shell-command.sh +77 -0
  138. package/presets/claude/nuxt/mcp.json +20 -0
  139. package/presets/claude/nuxt/rules/README.md +90 -0
  140. package/presets/claude/nuxt/rules/anti-hallucination/vue-nuxt-anti-hallucination.md +72 -0
  141. package/presets/claude/nuxt/rules/api-and-data/README.md +9 -0
  142. package/presets/claude/nuxt/rules/api-and-data/api-services.md +76 -0
  143. package/presets/claude/nuxt/rules/api-and-data/http-client.md +16 -0
  144. package/presets/claude/nuxt/rules/api-and-data/store-pinia.md +67 -0
  145. package/presets/claude/nuxt/rules/architecture/README.md +12 -0
  146. package/presets/claude/nuxt/rules/architecture/architecture-boundaries-ui.md +15 -0
  147. package/presets/claude/nuxt/rules/architecture/architecture-boundaries.md +98 -0
  148. package/presets/claude/nuxt/rules/architecture/feature-delivery-workflow.md +88 -0
  149. package/presets/claude/nuxt/rules/architecture/layer-barrel-exports.md +71 -0
  150. package/presets/claude/nuxt/rules/architecture/public-imports.md +60 -0
  151. package/presets/claude/nuxt/rules/architecture/reference-features.md +49 -0
  152. package/presets/claude/nuxt/rules/stack/README.md +12 -0
  153. package/presets/claude/nuxt/rules/stack/navigation-router-ui.md +14 -0
  154. package/presets/claude/nuxt/rules/stack/navigation-router.md +59 -0
  155. package/presets/claude/nuxt/rules/stack/no-type-assertion.md +61 -0
  156. package/presets/claude/nuxt/rules/stack/nuxt-app-core.md +43 -0
  157. package/presets/claude/nuxt/rules/stack/nuxt-pages-routing.md +39 -0
  158. package/presets/claude/nuxt/rules/stack/script-setup-conventions.md +12 -0
  159. package/presets/claude/nuxt/rules/stack/types-jsdoc.md +40 -0
  160. package/presets/claude/nuxt/rules/testing/README.md +11 -0
  161. package/presets/claude/nuxt/rules/testing/playwright-agents.md +78 -0
  162. package/presets/claude/nuxt/rules/testing/tests-e2e-structure.md +49 -0
  163. package/presets/claude/nuxt/rules/testing/tests-unit.md +75 -0
  164. package/presets/claude/nuxt/rules/tooling-and-review/README.md +15 -0
  165. package/presets/claude/nuxt/rules/tooling-and-review/agent-team-intake.md +15 -0
  166. package/presets/claude/nuxt/rules/tooling-and-review/agent-team-orchestrator.md +191 -0
  167. package/presets/claude/nuxt/rules/tooling-and-review/anti-sycophancy-discipline.md +33 -0
  168. package/presets/claude/nuxt/rules/tooling-and-review/code-quality.md +49 -0
  169. package/presets/claude/nuxt/rules/tooling-and-review/code-review-mr.md +63 -0
  170. package/presets/claude/nuxt/rules/tooling-and-review/design-guidance.md +114 -0
  171. package/presets/claude/nuxt/rules/tooling-and-review/package-manager.md +16 -0
  172. package/presets/claude/nuxt/rules/tooling-and-review/post-change-lint.md +43 -0
  173. package/presets/claude/nuxt/rules/tooling-and-review/preset-layering.md +32 -0
  174. package/presets/claude/nuxt/rules/tooling-and-review/preset-no-cross-stack-leakage.md +79 -0
  175. package/presets/claude/nuxt/rules/tooling-and-review/preset-pr-checklist.md +35 -0
  176. package/presets/claude/nuxt/rules/tooling-and-review/preset-token-budget.md +39 -0
  177. package/presets/claude/nuxt/rules/tooling-and-review/preset-twin-sync.md +50 -0
  178. package/presets/claude/nuxt/rules/tooling-and-review/security-nuxt.md +37 -0
  179. package/presets/claude/nuxt/rules/tooling-and-review/technical-retro.md +15 -0
  180. package/presets/claude/nuxt/rules/ui-and-accessibility/README.md +12 -0
  181. package/presets/claude/nuxt/rules/ui-and-accessibility/css-property-order.md +11 -0
  182. package/presets/claude/nuxt/rules/ui-and-accessibility/no-v-bind-spread.md +12 -0
  183. package/presets/claude/nuxt/rules/ui-and-accessibility/vue-a11y-coding.md +16 -0
  184. package/presets/claude/nuxt/rules/ui-and-accessibility/vue-ui.md +34 -0
  185. package/presets/claude/nuxt/skills/README.md +17 -0
  186. package/presets/claude/nuxt/skills/ci-investigation/SKILL.md +36 -0
  187. package/presets/claude/nuxt/skills/code-review/SKILL.md +38 -0
  188. package/presets/claude/nuxt/skills/debug-investigation/SKILL.md +32 -0
  189. package/presets/claude/nuxt/skills/feature-delivery/SKILL.md +34 -0
  190. package/presets/claude/nuxt/skills/playwright-e2e/SKILL.md +37 -0
  191. package/presets/claude/nuxt/skills/technical-retro/SKILL.md +54 -0
  192. package/presets/claude/nuxt/skills/unit-testing/SKILL.md +32 -0
  193. package/presets/claude/nuxt/skills/vue-performance/SKILL.md +53 -0
  194. package/presets/claude/nuxt/skills/write-adr/SKILL.md +41 -0
  195. package/presets/claude/nuxt/team/README.md +136 -0
  196. package/presets/claude/nuxt/team/conventions.md +21 -0
  197. package/presets/claude/nuxt/team/fixtures/artifact-manifest.example.json +61 -0
  198. package/presets/claude/nuxt/team/fixtures/bugfix-standard.json +25 -0
  199. package/presets/claude/nuxt/team/fixtures/feature-full.json +28 -0
  200. package/presets/claude/nuxt/team/fixtures/feature-light.json +27 -0
  201. package/presets/claude/nuxt/team/tasks/.gitkeep +1 -0
  202. package/presets/claude/php-hexagonal/agents/build-verifier.md +10 -3
  203. package/presets/claude/php-hexagonal/agents/code-reviewer.md +8 -1
  204. package/presets/claude/php-hexagonal/agents/feature-developer.md +8 -1
  205. package/presets/claude/php-hexagonal/agents/task-analyst.md +8 -1
  206. package/presets/claude/php-hexagonal/agents/task-router.md +31 -3
  207. package/presets/claude/php-hexagonal/commands/task.md +8 -6
  208. package/presets/claude/php-hexagonal/hooks/README.md +1 -1
  209. package/presets/claude/php-hexagonal/hooks/chain-team-phases.sh +195 -53
  210. package/presets/claude/php-hexagonal/rules/tooling-and-review/agent-team-orchestrator.md +30 -5
  211. package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-layering.md +2 -1
  212. package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -1
  213. package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-pr-checklist.md +2 -1
  214. package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-token-budget.md +1 -0
  215. package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-twin-sync.md +5 -0
  216. package/presets/claude/php-hexagonal/team/README.md +13 -2
  217. package/presets/claude/php-laravel/agents/build-verifier.md +10 -3
  218. package/presets/claude/php-laravel/agents/code-reviewer.md +8 -1
  219. package/presets/claude/php-laravel/agents/feature-developer.md +8 -1
  220. package/presets/claude/php-laravel/agents/task-analyst.md +8 -1
  221. package/presets/claude/php-laravel/agents/task-router.md +31 -3
  222. package/presets/claude/php-laravel/commands/task.md +8 -6
  223. package/presets/claude/php-laravel/hooks/chain-team-phases.sh +195 -53
  224. package/presets/claude/php-laravel/rules/tooling-and-review/agent-team-orchestrator.md +30 -5
  225. package/presets/claude/php-laravel/rules/tooling-and-review/preset-layering.md +2 -1
  226. package/presets/claude/php-laravel/rules/tooling-and-review/preset-no-cross-stack-leakage.md +16 -1
  227. package/presets/claude/php-laravel/rules/tooling-and-review/preset-pr-checklist.md +2 -1
  228. package/presets/claude/php-laravel/rules/tooling-and-review/preset-token-budget.md +1 -0
  229. package/presets/claude/php-laravel/rules/tooling-and-review/preset-twin-sync.md +5 -0
  230. package/presets/claude/php-laravel/team/README.md +13 -2
  231. package/presets/claude/svelte/CLAUDE.md +39 -0
  232. package/presets/claude/svelte/MCP.md +16 -0
  233. package/presets/claude/svelte/README.md +13 -0
  234. package/presets/claude/svelte/REPO_AGENTS.md +49 -0
  235. package/presets/claude/svelte/agents/README.md +199 -0
  236. package/presets/claude/svelte/agents/accessibility-reviewer.md +59 -0
  237. package/presets/claude/svelte/agents/api-contract-reviewer.md +63 -0
  238. package/presets/claude/svelte/agents/build-verifier.md +89 -0
  239. package/presets/claude/svelte/agents/ci-investigator.md +60 -0
  240. package/presets/claude/svelte/agents/code-reviewer.md +62 -0
  241. package/presets/claude/svelte/agents/codebase-analyzer.md +28 -0
  242. package/presets/claude/svelte/agents/debugger.md +65 -0
  243. package/presets/claude/svelte/agents/feature-developer.md +59 -0
  244. package/presets/claude/svelte/agents/migration-specialist.md +67 -0
  245. package/presets/claude/svelte/agents/performance-auditor.md +66 -0
  246. package/presets/claude/svelte/agents/playwright-test-generator.md +75 -0
  247. package/presets/claude/svelte/agents/playwright-test-healer.md +61 -0
  248. package/presets/claude/svelte/agents/playwright-test-planner.md +67 -0
  249. package/presets/claude/svelte/agents/qa-tester.md +54 -0
  250. package/presets/claude/svelte/agents/security-reviewer.md +60 -0
  251. package/presets/claude/svelte/agents/solution-architect.md +68 -0
  252. package/presets/claude/svelte/agents/task-analyst.md +109 -0
  253. package/presets/claude/svelte/agents/task-router.md +140 -0
  254. package/presets/claude/svelte/agents/tech-writer.md +54 -0
  255. package/presets/claude/svelte/agents/unit-test-generator.md +37 -0
  256. package/presets/claude/svelte/agents/unit-test-healer.md +38 -0
  257. package/presets/claude/svelte/agents/unit-test-planner.md +60 -0
  258. package/presets/claude/svelte/commands/README.md +13 -0
  259. package/presets/claude/svelte/commands/feature-continue.md +51 -0
  260. package/presets/claude/svelte/commands/feature-start.md +30 -0
  261. package/presets/claude/svelte/commands/task-continue.md +50 -0
  262. package/presets/claude/svelte/commands/task.md +56 -0
  263. package/presets/claude/svelte/commands/technical-retro.md +62 -0
  264. package/presets/claude/svelte/hooks/README.md +14 -0
  265. package/presets/claude/svelte/hooks/chain-team-phases.sh +723 -0
  266. package/presets/claude/svelte/hooks/examples/README.md +18 -0
  267. package/presets/claude/svelte/hooks/examples/format-edited.example.sh +13 -0
  268. package/presets/claude/svelte/hooks/examples/secret-guard.example.sh +10 -0
  269. package/presets/claude/svelte/hooks/examples/test-on-save.example.sh +14 -0
  270. package/presets/claude/svelte/hooks/guard-shell-command.sh +77 -0
  271. package/presets/claude/svelte/mcp.json +20 -0
  272. package/presets/claude/svelte/rules/README.md +90 -0
  273. package/presets/claude/svelte/rules/anti-hallucination/svelte-sveltekit-anti-hallucination.md +71 -0
  274. package/presets/claude/svelte/rules/api-and-data/README.md +9 -0
  275. package/presets/claude/svelte/rules/api-and-data/api-services.md +45 -0
  276. package/presets/claude/svelte/rules/api-and-data/http-client.md +17 -0
  277. package/presets/claude/svelte/rules/api-and-data/store-svelte.md +67 -0
  278. package/presets/claude/svelte/rules/architecture/README.md +12 -0
  279. package/presets/claude/svelte/rules/architecture/architecture-boundaries-ui.md +16 -0
  280. package/presets/claude/svelte/rules/architecture/architecture-boundaries.md +65 -0
  281. package/presets/claude/svelte/rules/architecture/feature-delivery-workflow.md +61 -0
  282. package/presets/claude/svelte/rules/architecture/layer-barrel-exports.md +73 -0
  283. package/presets/claude/svelte/rules/architecture/public-imports.md +43 -0
  284. package/presets/claude/svelte/rules/architecture/reference-features.md +50 -0
  285. package/presets/claude/svelte/rules/stack/README.md +12 -0
  286. package/presets/claude/svelte/rules/stack/navigation-router-ui.md +26 -0
  287. package/presets/claude/svelte/rules/stack/navigation-router.md +41 -0
  288. package/presets/claude/svelte/rules/stack/no-type-assertion.md +59 -0
  289. package/presets/claude/svelte/rules/stack/svelte-app-core.md +44 -0
  290. package/presets/claude/svelte/rules/stack/svelte-script-conventions.md +33 -0
  291. package/presets/claude/svelte/rules/stack/sveltekit-routing.md +40 -0
  292. package/presets/claude/svelte/rules/stack/types-jsdoc.md +42 -0
  293. package/presets/claude/svelte/rules/testing/README.md +11 -0
  294. package/presets/claude/svelte/rules/testing/playwright-agents.md +80 -0
  295. package/presets/claude/svelte/rules/testing/tests-e2e-structure.md +51 -0
  296. package/presets/claude/svelte/rules/testing/tests-unit.md +40 -0
  297. package/presets/claude/svelte/rules/tooling-and-review/README.md +15 -0
  298. package/presets/claude/svelte/rules/tooling-and-review/agent-team-intake.md +17 -0
  299. package/presets/claude/svelte/rules/tooling-and-review/agent-team-orchestrator.md +193 -0
  300. package/presets/claude/svelte/rules/tooling-and-review/anti-sycophancy-discipline.md +29 -0
  301. package/presets/claude/svelte/rules/tooling-and-review/code-quality.md +50 -0
  302. package/presets/claude/svelte/rules/tooling-and-review/code-review-mr.md +64 -0
  303. package/presets/claude/svelte/rules/tooling-and-review/design-guidance.md +110 -0
  304. package/presets/claude/svelte/rules/tooling-and-review/package-manager.md +17 -0
  305. package/presets/claude/svelte/rules/tooling-and-review/post-change-lint.md +44 -0
  306. package/presets/claude/svelte/rules/tooling-and-review/preset-layering.md +36 -0
  307. package/presets/claude/svelte/rules/tooling-and-review/preset-no-cross-stack-leakage.md +83 -0
  308. package/presets/claude/svelte/rules/tooling-and-review/preset-pr-checklist.md +39 -0
  309. package/presets/claude/svelte/rules/tooling-and-review/preset-token-budget.md +41 -0
  310. package/presets/claude/svelte/rules/tooling-and-review/preset-twin-sync.md +54 -0
  311. package/presets/claude/svelte/rules/tooling-and-review/security-sveltekit.md +41 -0
  312. package/presets/claude/svelte/rules/tooling-and-review/technical-retro.md +17 -0
  313. package/presets/claude/svelte/rules/ui-and-accessibility/README.md +12 -0
  314. package/presets/claude/svelte/rules/ui-and-accessibility/css-property-order.md +12 -0
  315. package/presets/claude/svelte/rules/ui-and-accessibility/no-rest-props-spread.md +32 -0
  316. package/presets/claude/svelte/rules/ui-and-accessibility/svelte-a11y-coding.md +28 -0
  317. package/presets/claude/svelte/rules/ui-and-accessibility/svelte-ui.md +38 -0
  318. package/presets/claude/svelte/skills/README.md +17 -0
  319. package/presets/claude/svelte/skills/ci-investigation/SKILL.md +36 -0
  320. package/presets/claude/svelte/skills/code-review/SKILL.md +38 -0
  321. package/presets/claude/svelte/skills/debug-investigation/SKILL.md +32 -0
  322. package/presets/claude/svelte/skills/feature-delivery/SKILL.md +34 -0
  323. package/presets/claude/svelte/skills/playwright-e2e/SKILL.md +37 -0
  324. package/presets/claude/svelte/skills/svelte-performance/SKILL.md +52 -0
  325. package/presets/claude/svelte/skills/technical-retro/SKILL.md +54 -0
  326. package/presets/claude/svelte/skills/unit-testing/SKILL.md +32 -0
  327. package/presets/claude/svelte/skills/write-adr/SKILL.md +41 -0
  328. package/presets/claude/svelte/team/README.md +136 -0
  329. package/presets/claude/svelte/team/conventions.md +21 -0
  330. package/presets/claude/svelte/team/fixtures/artifact-manifest.example.json +61 -0
  331. package/presets/claude/svelte/team/fixtures/bugfix-standard.json +25 -0
  332. package/presets/claude/svelte/team/fixtures/feature-full.json +28 -0
  333. package/presets/claude/svelte/team/fixtures/feature-light.json +27 -0
  334. package/presets/claude/svelte/team/tasks/.gitkeep +1 -0
  335. package/presets/cursor/go/agents/build-verifier.md +9 -2
  336. package/presets/cursor/go/agents/code-reviewer.md +8 -1
  337. package/presets/cursor/go/agents/feature-developer.md +8 -1
  338. package/presets/cursor/go/agents/task-analyst.md +8 -1
  339. package/presets/cursor/go/agents/task-router.md +31 -3
  340. package/presets/cursor/go/commands/task.md +8 -6
  341. package/presets/cursor/go/hooks/chain-team-phases.sh +195 -53
  342. package/presets/cursor/go/rules/agent-team-orchestrator.mdc +30 -5
  343. package/presets/cursor/go/rules/preset-layering.mdc +2 -1
  344. package/presets/cursor/go/rules/preset-no-cross-stack-leakage.mdc +16 -1
  345. package/presets/cursor/go/rules/preset-pr-checklist.mdc +2 -1
  346. package/presets/cursor/go/rules/preset-token-budget.mdc +1 -0
  347. package/presets/cursor/go/rules/preset-twin-sync.mdc +5 -0
  348. package/presets/cursor/go/team/README.md +13 -2
  349. package/presets/cursor/ios-swift/agents/build-verifier.md +10 -3
  350. package/presets/cursor/ios-swift/agents/code-reviewer.md +9 -14
  351. package/presets/cursor/ios-swift/agents/feature-developer.md +8 -1
  352. package/presets/cursor/ios-swift/agents/task-analyst.md +8 -1
  353. package/presets/cursor/ios-swift/agents/task-router.md +31 -3
  354. package/presets/cursor/ios-swift/commands/task.md +8 -6
  355. package/presets/cursor/ios-swift/hooks/chain-team-phases.sh +195 -54
  356. package/presets/cursor/ios-swift/rules/agent-team-orchestrator.mdc +23 -2
  357. package/presets/cursor/ios-swift/rules/preset-layering.mdc +2 -1
  358. package/presets/cursor/ios-swift/rules/preset-no-cross-stack-leakage.mdc +16 -1
  359. package/presets/cursor/ios-swift/rules/preset-pr-checklist.mdc +2 -1
  360. package/presets/cursor/ios-swift/rules/preset-token-budget.mdc +1 -0
  361. package/presets/cursor/ios-swift/rules/preset-twin-sync.mdc +5 -0
  362. package/presets/cursor/ios-swift/team/README.md +13 -2
  363. package/presets/cursor/java/agents/build-verifier.md +9 -2
  364. package/presets/cursor/java/agents/code-reviewer.md +8 -1
  365. package/presets/cursor/java/agents/feature-developer.md +8 -1
  366. package/presets/cursor/java/agents/task-analyst.md +8 -1
  367. package/presets/cursor/java/agents/task-router.md +31 -3
  368. package/presets/cursor/java/commands/task.md +8 -6
  369. package/presets/cursor/java/hooks/chain-team-phases.sh +195 -53
  370. package/presets/cursor/java/rules/agent-team-orchestrator.mdc +30 -5
  371. package/presets/cursor/java/rules/preset-layering.mdc +2 -1
  372. package/presets/cursor/java/rules/preset-no-cross-stack-leakage.mdc +16 -1
  373. package/presets/cursor/java/rules/preset-pr-checklist.mdc +2 -1
  374. package/presets/cursor/java/rules/preset-token-budget.mdc +1 -0
  375. package/presets/cursor/java/rules/preset-twin-sync.mdc +5 -0
  376. package/presets/cursor/java/team/README.md +13 -2
  377. package/presets/cursor/mcp-ts/agents/build-verifier.md +9 -2
  378. package/presets/cursor/mcp-ts/agents/feature-developer.md +7 -1
  379. package/presets/cursor/mcp-ts/agents/task-analyst.md +8 -1
  380. package/presets/cursor/mcp-ts/agents/task-router.md +31 -3
  381. package/presets/cursor/mcp-ts/commands/task.md +8 -6
  382. package/presets/cursor/mcp-ts/hooks/chain-team-phases.sh +181 -39
  383. package/presets/cursor/mcp-ts/rules/agent-team-orchestrator.mdc +30 -5
  384. package/presets/cursor/mcp-ts/rules/preset-layering.mdc +2 -1
  385. package/presets/cursor/mcp-ts/rules/preset-no-cross-stack-leakage.mdc +16 -1
  386. package/presets/cursor/mcp-ts/rules/preset-pr-checklist.mdc +2 -1
  387. package/presets/cursor/mcp-ts/rules/preset-token-budget.mdc +1 -0
  388. package/presets/cursor/mcp-ts/rules/preset-twin-sync.mdc +5 -0
  389. package/presets/cursor/mcp-ts/team/README.md +13 -2
  390. package/presets/cursor/next/agents/accessibility-reviewer.md +7 -14
  391. package/presets/cursor/next/agents/api-contract-reviewer.md +7 -14
  392. package/presets/cursor/next/agents/build-verifier.md +10 -15
  393. package/presets/cursor/next/agents/ci-investigator.md +7 -14
  394. package/presets/cursor/next/agents/code-reviewer.md +9 -14
  395. package/presets/cursor/next/agents/debugger.md +6 -12
  396. package/presets/cursor/next/agents/feature-developer.md +8 -1
  397. package/presets/cursor/next/agents/migration-specialist.md +7 -14
  398. package/presets/cursor/next/agents/performance-auditor.md +6 -13
  399. package/presets/cursor/next/agents/qa-tester.md +6 -13
  400. package/presets/cursor/next/agents/security-reviewer.md +7 -14
  401. package/presets/cursor/next/agents/solution-architect.md +6 -12
  402. package/presets/cursor/next/agents/task-analyst.md +10 -16
  403. package/presets/cursor/next/agents/task-router.md +31 -3
  404. package/presets/cursor/next/agents/tech-writer.md +6 -13
  405. package/presets/cursor/next/agents/unit-test-generator.md +6 -11
  406. package/presets/cursor/next/agents/unit-test-healer.md +6 -11
  407. package/presets/cursor/next/agents/unit-test-planner.md +6 -13
  408. package/presets/cursor/next/commands/task.md +8 -6
  409. package/presets/cursor/next/hooks/chain-team-phases.sh +197 -54
  410. package/presets/cursor/next/rules/agent-team-orchestrator.mdc +30 -5
  411. package/presets/cursor/next/rules/preset-layering.mdc +2 -1
  412. package/presets/cursor/next/rules/preset-no-cross-stack-leakage.mdc +16 -1
  413. package/presets/cursor/next/rules/preset-pr-checklist.mdc +2 -1
  414. package/presets/cursor/next/rules/preset-token-budget.mdc +1 -0
  415. package/presets/cursor/next/rules/preset-twin-sync.mdc +5 -0
  416. package/presets/cursor/next/team/README.md +16 -4
  417. package/presets/cursor/next/team/fixtures/artifact-manifest.example.json +61 -0
  418. package/presets/cursor/next/team/fixtures/bugfix-standard.json +10 -0
  419. package/presets/cursor/next/team/fixtures/feature-full.json +10 -0
  420. package/presets/cursor/next/team/fixtures/feature-light.json +10 -0
  421. package/presets/cursor/nuxt/AGENTS.md +39 -0
  422. package/presets/cursor/nuxt/BUGBOT.md +14 -0
  423. package/presets/cursor/nuxt/MCP.md +16 -0
  424. package/presets/cursor/nuxt/README.md +47 -0
  425. package/presets/cursor/nuxt/REPO_AGENTS.md +49 -0
  426. package/presets/cursor/nuxt/agents/README.md +206 -0
  427. package/presets/cursor/nuxt/agents/accessibility-reviewer.md +60 -0
  428. package/presets/cursor/nuxt/agents/api-contract-reviewer.md +64 -0
  429. package/presets/cursor/nuxt/agents/build-verifier.md +90 -0
  430. package/presets/cursor/nuxt/agents/ci-investigator.md +61 -0
  431. package/presets/cursor/nuxt/agents/code-reviewer.md +63 -0
  432. package/presets/cursor/nuxt/agents/codebase-analyzer.md +28 -0
  433. package/presets/cursor/nuxt/agents/debugger.md +66 -0
  434. package/presets/cursor/nuxt/agents/feature-developer.md +60 -0
  435. package/presets/cursor/nuxt/agents/migration-specialist.md +68 -0
  436. package/presets/cursor/nuxt/agents/performance-auditor.md +67 -0
  437. package/presets/cursor/nuxt/agents/playwright-test-generator.md +27 -0
  438. package/presets/cursor/nuxt/agents/playwright-test-healer.md +27 -0
  439. package/presets/cursor/nuxt/agents/playwright-test-planner.md +28 -0
  440. package/presets/cursor/nuxt/agents/qa-tester.md +55 -0
  441. package/presets/cursor/nuxt/agents/security-reviewer.md +61 -0
  442. package/presets/cursor/nuxt/agents/solution-architect.md +69 -0
  443. package/presets/cursor/nuxt/agents/task-analyst.md +110 -0
  444. package/presets/cursor/nuxt/agents/task-router.md +141 -0
  445. package/presets/cursor/nuxt/agents/tech-writer.md +55 -0
  446. package/presets/cursor/nuxt/agents/unit-test-generator.md +38 -0
  447. package/presets/cursor/nuxt/agents/unit-test-healer.md +39 -0
  448. package/presets/cursor/nuxt/agents/unit-test-planner.md +61 -0
  449. package/presets/cursor/nuxt/commands/README.md +51 -0
  450. package/presets/cursor/nuxt/commands/feature-continue.md +19 -0
  451. package/presets/cursor/nuxt/commands/feature-start.md +33 -0
  452. package/presets/cursor/nuxt/commands/task-continue.md +50 -0
  453. package/presets/cursor/nuxt/commands/task.md +56 -0
  454. package/presets/cursor/nuxt/commands/technical-retro.md +85 -0
  455. package/presets/cursor/nuxt/hooks/README.md +12 -0
  456. package/presets/cursor/nuxt/hooks/chain-team-phases.sh +727 -0
  457. package/presets/cursor/nuxt/hooks/examples/README.md +18 -0
  458. package/presets/cursor/nuxt/hooks/examples/format-edited.example.sh +11 -0
  459. package/presets/cursor/nuxt/hooks/examples/secret-guard.example.sh +10 -0
  460. package/presets/cursor/nuxt/hooks/examples/test-on-save.example.sh +8 -0
  461. package/presets/cursor/nuxt/hooks/guard-shell-command.sh +77 -0
  462. package/presets/cursor/nuxt/hooks.json +17 -0
  463. package/presets/cursor/nuxt/mcp.json +19 -0
  464. package/presets/cursor/nuxt/rules/README.md +108 -0
  465. package/presets/cursor/nuxt/rules/agent-team-intake.mdc +16 -0
  466. package/presets/cursor/nuxt/rules/agent-team-orchestrator.mdc +192 -0
  467. package/presets/cursor/nuxt/rules/anti-sycophancy-discipline.mdc +30 -0
  468. package/presets/cursor/nuxt/rules/api-services.mdc +79 -0
  469. package/presets/cursor/nuxt/rules/architecture-boundaries-ui.mdc +15 -0
  470. package/presets/cursor/nuxt/rules/architecture-boundaries.mdc +97 -0
  471. package/presets/cursor/nuxt/rules/code-quality-and-refactoring.mdc +51 -0
  472. package/presets/cursor/nuxt/rules/code-review-mr.mdc +58 -0
  473. package/presets/cursor/nuxt/rules/css-property-order-stylelint.mdc +12 -0
  474. package/presets/cursor/nuxt/rules/design-guidance.mdc +111 -0
  475. package/presets/cursor/nuxt/rules/feature-delivery-workflow.mdc +83 -0
  476. package/presets/cursor/nuxt/rules/http-client.mdc +15 -0
  477. package/presets/cursor/nuxt/rules/layer-barrel-exports.mdc +74 -0
  478. package/presets/cursor/nuxt/rules/navigation-router-stack.mdc +61 -0
  479. package/presets/cursor/nuxt/rules/navigation-router-ui.mdc +16 -0
  480. package/presets/cursor/nuxt/rules/no-type-assertion-as-import-export.mdc +60 -0
  481. package/presets/cursor/nuxt/rules/no-v-bind-spread.mdc +13 -0
  482. package/presets/cursor/nuxt/rules/nuxt-app-core.mdc +45 -0
  483. package/presets/cursor/nuxt/rules/nuxt-pages-routing.mdc +37 -0
  484. package/presets/cursor/nuxt/rules/package-manager.mdc +18 -0
  485. package/presets/cursor/nuxt/rules/playwright-agents.mdc +80 -0
  486. package/presets/cursor/nuxt/rules/post-change-lint.mdc +42 -0
  487. package/presets/cursor/nuxt/rules/preset-layering.mdc +37 -0
  488. package/presets/cursor/nuxt/rules/preset-no-cross-stack-leakage.mdc +84 -0
  489. package/presets/cursor/nuxt/rules/preset-pr-checklist.mdc +40 -0
  490. package/presets/cursor/nuxt/rules/preset-token-budget.mdc +42 -0
  491. package/presets/cursor/nuxt/rules/preset-twin-sync.mdc +55 -0
  492. package/presets/cursor/nuxt/rules/public-imports.mdc +62 -0
  493. package/presets/cursor/nuxt/rules/reference-features.mdc +49 -0
  494. package/presets/cursor/nuxt/rules/script-setup-conventions.mdc +13 -0
  495. package/presets/cursor/nuxt/rules/security-nuxt.mdc +34 -0
  496. package/presets/cursor/nuxt/rules/store-pinia.mdc +68 -0
  497. package/presets/cursor/nuxt/rules/technical-retro.mdc +16 -0
  498. package/presets/cursor/nuxt/rules/tests-e2e-structure.mdc +51 -0
  499. package/presets/cursor/nuxt/rules/tests-unit.mdc +78 -0
  500. package/presets/cursor/nuxt/rules/types-jsdoc.mdc +42 -0
  501. package/presets/cursor/nuxt/rules/vue-a11y-coding.mdc +15 -0
  502. package/presets/cursor/nuxt/rules/vue-nuxt-anti-hallucination.mdc +68 -0
  503. package/presets/cursor/nuxt/rules/vue-ui.mdc +33 -0
  504. package/presets/cursor/nuxt/skills/README.md +17 -0
  505. package/presets/cursor/nuxt/skills/ci-investigation/SKILL.md +36 -0
  506. package/presets/cursor/nuxt/skills/code-review/SKILL.md +38 -0
  507. package/presets/cursor/nuxt/skills/debug-investigation/SKILL.md +32 -0
  508. package/presets/cursor/nuxt/skills/feature-delivery/SKILL.md +34 -0
  509. package/presets/cursor/nuxt/skills/playwright-e2e/SKILL.md +37 -0
  510. package/presets/cursor/nuxt/skills/technical-retro/SKILL.md +54 -0
  511. package/presets/cursor/nuxt/skills/unit-testing/SKILL.md +32 -0
  512. package/presets/cursor/nuxt/skills/vue-performance/SKILL.md +53 -0
  513. package/presets/cursor/nuxt/skills/write-adr/SKILL.md +41 -0
  514. package/presets/cursor/nuxt/team/README.md +140 -0
  515. package/presets/cursor/nuxt/team/conventions.md +21 -0
  516. package/presets/cursor/nuxt/team/fixtures/artifact-manifest.example.json +61 -0
  517. package/presets/cursor/nuxt/team/fixtures/bugfix-standard.json +25 -0
  518. package/presets/cursor/nuxt/team/fixtures/feature-full.json +28 -0
  519. package/presets/cursor/nuxt/team/fixtures/feature-light.json +27 -0
  520. package/presets/cursor/nuxt/team/fixtures/metrics-scenarios/tasks/human-gate/metrics.json +69 -0
  521. package/presets/cursor/nuxt/team/fixtures/metrics-scenarios/tasks/missing-ledger/status.json +5 -0
  522. package/presets/cursor/nuxt/team/fixtures/metrics-scenarios/tasks/parallel-receipts/metrics.json +79 -0
  523. package/presets/cursor/nuxt/team/fixtures/metrics-scenarios/tasks/serial-retry/metrics.json +124 -0
  524. package/presets/cursor/nuxt/team/fixtures/metrics-scenarios/tasks/validation-failed/metrics.json +124 -0
  525. package/presets/cursor/nuxt/team/fixtures/metrics.example.json +54 -0
  526. package/presets/cursor/nuxt/team/tasks/.gitkeep +0 -0
  527. package/presets/cursor/php-hexagonal/agents/build-verifier.md +9 -2
  528. package/presets/cursor/php-hexagonal/agents/code-reviewer.md +8 -1
  529. package/presets/cursor/php-hexagonal/agents/feature-developer.md +8 -1
  530. package/presets/cursor/php-hexagonal/agents/task-analyst.md +8 -1
  531. package/presets/cursor/php-hexagonal/agents/task-router.md +31 -3
  532. package/presets/cursor/php-hexagonal/commands/task.md +8 -6
  533. package/presets/cursor/php-hexagonal/hooks/chain-team-phases.sh +195 -53
  534. package/presets/cursor/php-hexagonal/rules/agent-team-orchestrator.mdc +30 -5
  535. package/presets/cursor/php-hexagonal/rules/preset-layering.mdc +2 -1
  536. package/presets/cursor/php-hexagonal/rules/preset-no-cross-stack-leakage.mdc +16 -1
  537. package/presets/cursor/php-hexagonal/rules/preset-pr-checklist.mdc +2 -1
  538. package/presets/cursor/php-hexagonal/rules/preset-token-budget.mdc +1 -0
  539. package/presets/cursor/php-hexagonal/rules/preset-twin-sync.mdc +5 -0
  540. package/presets/cursor/php-hexagonal/team/README.md +13 -2
  541. package/presets/cursor/php-laravel/agents/build-verifier.md +9 -2
  542. package/presets/cursor/php-laravel/agents/code-reviewer.md +8 -1
  543. package/presets/cursor/php-laravel/agents/feature-developer.md +8 -1
  544. package/presets/cursor/php-laravel/agents/task-analyst.md +8 -1
  545. package/presets/cursor/php-laravel/agents/task-router.md +31 -3
  546. package/presets/cursor/php-laravel/commands/task.md +8 -6
  547. package/presets/cursor/php-laravel/hooks/chain-team-phases.sh +195 -53
  548. package/presets/cursor/php-laravel/rules/agent-team-orchestrator.mdc +30 -5
  549. package/presets/cursor/php-laravel/rules/preset-layering.mdc +2 -1
  550. package/presets/cursor/php-laravel/rules/preset-no-cross-stack-leakage.mdc +16 -1
  551. package/presets/cursor/php-laravel/rules/preset-pr-checklist.mdc +2 -1
  552. package/presets/cursor/php-laravel/rules/preset-token-budget.mdc +1 -0
  553. package/presets/cursor/php-laravel/rules/preset-twin-sync.mdc +5 -0
  554. package/presets/cursor/php-laravel/team/README.md +13 -2
  555. package/presets/cursor/svelte/AGENTS.md +39 -0
  556. package/presets/cursor/svelte/BUGBOT.md +14 -0
  557. package/presets/cursor/svelte/MCP.md +16 -0
  558. package/presets/cursor/svelte/README.md +47 -0
  559. package/presets/cursor/svelte/REPO_AGENTS.md +49 -0
  560. package/presets/cursor/svelte/agents/README.md +206 -0
  561. package/presets/cursor/svelte/agents/accessibility-reviewer.md +60 -0
  562. package/presets/cursor/svelte/agents/api-contract-reviewer.md +64 -0
  563. package/presets/cursor/svelte/agents/build-verifier.md +90 -0
  564. package/presets/cursor/svelte/agents/ci-investigator.md +61 -0
  565. package/presets/cursor/svelte/agents/code-reviewer.md +63 -0
  566. package/presets/cursor/svelte/agents/codebase-analyzer.md +28 -0
  567. package/presets/cursor/svelte/agents/debugger.md +66 -0
  568. package/presets/cursor/svelte/agents/feature-developer.md +60 -0
  569. package/presets/cursor/svelte/agents/migration-specialist.md +68 -0
  570. package/presets/cursor/svelte/agents/performance-auditor.md +67 -0
  571. package/presets/cursor/svelte/agents/playwright-test-generator.md +27 -0
  572. package/presets/cursor/svelte/agents/playwright-test-healer.md +27 -0
  573. package/presets/cursor/svelte/agents/playwright-test-planner.md +28 -0
  574. package/presets/cursor/svelte/agents/qa-tester.md +55 -0
  575. package/presets/cursor/svelte/agents/security-reviewer.md +61 -0
  576. package/presets/cursor/svelte/agents/solution-architect.md +69 -0
  577. package/presets/cursor/svelte/agents/task-analyst.md +110 -0
  578. package/presets/cursor/svelte/agents/task-router.md +141 -0
  579. package/presets/cursor/svelte/agents/tech-writer.md +55 -0
  580. package/presets/cursor/svelte/agents/unit-test-generator.md +38 -0
  581. package/presets/cursor/svelte/agents/unit-test-healer.md +39 -0
  582. package/presets/cursor/svelte/agents/unit-test-planner.md +61 -0
  583. package/presets/cursor/svelte/commands/README.md +51 -0
  584. package/presets/cursor/svelte/commands/feature-continue.md +19 -0
  585. package/presets/cursor/svelte/commands/feature-start.md +33 -0
  586. package/presets/cursor/svelte/commands/task-continue.md +50 -0
  587. package/presets/cursor/svelte/commands/task.md +56 -0
  588. package/presets/cursor/svelte/commands/technical-retro.md +85 -0
  589. package/presets/cursor/svelte/hooks/README.md +12 -0
  590. package/presets/cursor/svelte/hooks/chain-team-phases.sh +727 -0
  591. package/presets/cursor/svelte/hooks/examples/README.md +18 -0
  592. package/presets/cursor/svelte/hooks/examples/format-edited.example.sh +13 -0
  593. package/presets/cursor/svelte/hooks/examples/secret-guard.example.sh +10 -0
  594. package/presets/cursor/svelte/hooks/examples/test-on-save.example.sh +14 -0
  595. package/presets/cursor/svelte/hooks/guard-shell-command.sh +77 -0
  596. package/presets/cursor/svelte/hooks.json +17 -0
  597. package/presets/cursor/svelte/mcp.json +19 -0
  598. package/presets/cursor/svelte/rules/README.md +86 -0
  599. package/presets/cursor/svelte/rules/agent-team-intake.mdc +16 -0
  600. package/presets/cursor/svelte/rules/agent-team-orchestrator.mdc +192 -0
  601. package/presets/cursor/svelte/rules/anti-sycophancy-discipline.mdc +30 -0
  602. package/presets/cursor/svelte/rules/api-services.mdc +46 -0
  603. package/presets/cursor/svelte/rules/architecture-boundaries-ui.mdc +15 -0
  604. package/presets/cursor/svelte/rules/architecture-boundaries.mdc +61 -0
  605. package/presets/cursor/svelte/rules/code-quality-and-refactoring.mdc +51 -0
  606. package/presets/cursor/svelte/rules/code-review-mr.mdc +58 -0
  607. package/presets/cursor/svelte/rules/css-property-order-stylelint.mdc +12 -0
  608. package/presets/cursor/svelte/rules/design-guidance.mdc +111 -0
  609. package/presets/cursor/svelte/rules/feature-delivery-workflow.mdc +55 -0
  610. package/presets/cursor/svelte/rules/http-client.mdc +16 -0
  611. package/presets/cursor/svelte/rules/layer-barrel-exports.mdc +74 -0
  612. package/presets/cursor/svelte/rules/navigation-router-stack.mdc +40 -0
  613. package/presets/cursor/svelte/rules/navigation-router-ui.mdc +25 -0
  614. package/presets/cursor/svelte/rules/no-rest-props-spread.mdc +32 -0
  615. package/presets/cursor/svelte/rules/no-type-assertion-as-import-export.mdc +60 -0
  616. package/presets/cursor/svelte/rules/package-manager.mdc +18 -0
  617. package/presets/cursor/svelte/rules/playwright-agents.mdc +80 -0
  618. package/presets/cursor/svelte/rules/post-change-lint.mdc +42 -0
  619. package/presets/cursor/svelte/rules/preset-layering.mdc +37 -0
  620. package/presets/cursor/svelte/rules/preset-no-cross-stack-leakage.mdc +84 -0
  621. package/presets/cursor/svelte/rules/preset-pr-checklist.mdc +40 -0
  622. package/presets/cursor/svelte/rules/preset-token-budget.mdc +42 -0
  623. package/presets/cursor/svelte/rules/preset-twin-sync.mdc +55 -0
  624. package/presets/cursor/svelte/rules/public-imports.mdc +45 -0
  625. package/presets/cursor/svelte/rules/reference-features.mdc +51 -0
  626. package/presets/cursor/svelte/rules/security-sveltekit.mdc +38 -0
  627. package/presets/cursor/svelte/rules/store-svelte.mdc +66 -0
  628. package/presets/cursor/svelte/rules/svelte-a11y-coding.mdc +27 -0
  629. package/presets/cursor/svelte/rules/svelte-app-core.mdc +45 -0
  630. package/presets/cursor/svelte/rules/svelte-script-conventions.mdc +33 -0
  631. package/presets/cursor/svelte/rules/svelte-sveltekit-anti-hallucination.mdc +69 -0
  632. package/presets/cursor/svelte/rules/svelte-ui.mdc +37 -0
  633. package/presets/cursor/svelte/rules/sveltekit-routing.mdc +39 -0
  634. package/presets/cursor/svelte/rules/technical-retro.mdc +16 -0
  635. package/presets/cursor/svelte/rules/tests-e2e-structure.mdc +51 -0
  636. package/presets/cursor/svelte/rules/tests-unit.mdc +42 -0
  637. package/presets/cursor/svelte/rules/types-jsdoc.mdc +42 -0
  638. package/presets/cursor/svelte/skills/README.md +17 -0
  639. package/presets/cursor/svelte/skills/ci-investigation/SKILL.md +36 -0
  640. package/presets/cursor/svelte/skills/code-review/SKILL.md +38 -0
  641. package/presets/cursor/svelte/skills/debug-investigation/SKILL.md +32 -0
  642. package/presets/cursor/svelte/skills/feature-delivery/SKILL.md +34 -0
  643. package/presets/cursor/svelte/skills/playwright-e2e/SKILL.md +37 -0
  644. package/presets/cursor/svelte/skills/svelte-performance/SKILL.md +52 -0
  645. package/presets/cursor/svelte/skills/technical-retro/SKILL.md +54 -0
  646. package/presets/cursor/svelte/skills/unit-testing/SKILL.md +32 -0
  647. package/presets/cursor/svelte/skills/write-adr/SKILL.md +41 -0
  648. package/presets/cursor/svelte/team/README.md +140 -0
  649. package/presets/cursor/svelte/team/conventions.md +21 -0
  650. package/presets/cursor/svelte/team/fixtures/artifact-manifest.example.json +61 -0
  651. package/presets/cursor/svelte/team/fixtures/bugfix-standard.json +25 -0
  652. package/presets/cursor/svelte/team/fixtures/feature-full.json +28 -0
  653. package/presets/cursor/svelte/team/fixtures/feature-light.json +27 -0
  654. package/presets/cursor/svelte/team/fixtures/metrics-scenarios/tasks/human-gate/metrics.json +69 -0
  655. package/presets/cursor/svelte/team/fixtures/metrics-scenarios/tasks/missing-ledger/status.json +5 -0
  656. package/presets/cursor/svelte/team/fixtures/metrics-scenarios/tasks/parallel-receipts/metrics.json +79 -0
  657. package/presets/cursor/svelte/team/fixtures/metrics-scenarios/tasks/serial-retry/metrics.json +124 -0
  658. package/presets/cursor/svelte/team/fixtures/metrics-scenarios/tasks/validation-failed/metrics.json +124 -0
  659. package/presets/cursor/svelte/team/fixtures/metrics.example.json +54 -0
  660. package/presets/cursor/svelte/team/tasks/.gitkeep +0 -0
@@ -27,17 +27,12 @@ Use **`unit-testing` skill**, **`debug-investigation` skill**, and **`tests-unit
27
27
 
28
28
  Report root cause, files changed, validation result, and remaining risk.
29
29
 
30
- Update `status.json`:
31
-
32
- ```json
33
- {
34
- "slug": "<slug>",
35
- "currentAgent": "unit-test-healer",
36
- "phase": "executing",
37
- "state": "completed",
38
- "updatedAt": "<ISO8601>"
39
- }
40
- ```
30
+ ## Artifact contract
31
+
32
+ - **Authoritative inputs:** read `.cursor/team/tasks/<slug>/artifact-manifest.json` first; consume handoff `artifactInputIds` when supplied, otherwise consume the manifest entries for failing test evidence, `unit-test-plan.md` when present, and recent diff.
33
+ - **Owned outputs:** healed `*.spec.ts` / `*.spec.tsx` paths (and minimal production fixes only when evidenced); upsert only the manifest entry assigned by handoff (`artifactOutputId`; fallback `unit-test-healer`) and preserve all foreign entries.
34
+ - **Terminal receipt:** cover applicable AC/task IDs, list authoritative evidence paths, and emit `completed` or `blocked`. Bind it to the supplied `attemptId` when present.
35
+ - **Shared state:** never create or mutate `status.json` or `metrics.json`; the orchestration runtime/hook owns lifecycle, gates, retries, attempts, and timestamps.
41
36
 
42
37
  ## Design guidance
43
38
 
@@ -47,19 +47,12 @@ Fixtures, mocks, test-store patterns to reuse.
47
47
 
48
48
  Test titles in the plan must follow Russian capitalization rules from `tests-unit.mdc`.
49
49
 
50
- ## On completion
51
-
52
- Update `status.json`:
53
-
54
- ```json
55
- {
56
- "slug": "<slug>",
57
- "currentAgent": "unit-test-planner",
58
- "phase": "executing",
59
- "state": "completed",
60
- "updatedAt": "<ISO8601>"
61
- }
62
- ```
50
+ ## Artifact contract
51
+
52
+ - **Authoritative inputs:** read `.cursor/team/tasks/<slug>/artifact-manifest.json` first; consume handoff `artifactInputIds` when supplied, otherwise consume the manifest entries for brief/decomposition and target modules under `app/src/**`.
53
+ - **Owned outputs:** `unit-test-plan.md`; upsert only the manifest entry assigned by handoff (`artifactOutputId`; fallback `unit-test-planner`) and preserve all foreign entries.
54
+ - **Terminal receipt:** cover applicable AC/task IDs, list authoritative evidence paths, and emit `completed` or `blocked`. Bind it to the supplied `attemptId` when present.
55
+ - **Shared state:** never create or mutate `status.json` or `metrics.json`; the orchestration runtime/hook owns lifecycle, gates, retries, attempts, and timestamps.
63
56
 
64
57
  Do not write `*.spec.ts` files — that is `unit-test-generator`'s job.
65
58
 
@@ -25,14 +25,16 @@ description: Route a natural-language task through the agent-team pipeline: task
25
25
 
26
26
  ## Алгоритм
27
27
 
28
- 1. **Slug** — kebab-case из описания (≤48 символов). Создай `.cursor/team/tasks/<slug>/` через **Write** (например сразу `status.json` или пустой placeholder) — **не** через Shell `mkdir` (песочница → `Operation not permitted`).
28
+ 1. **Slug** — kebab-case из описания (≤48 символов). Создай `.cursor/team/tasks/<slug>/` через **Write** (например placeholder `pipeline.json` или пустой marker) — runtime/hook владеет `status.json` — **не** через Shell `mkdir` (песочница → `Operation not permitted`).
29
29
  2. **Router** — вызови subagent **task-router** с описанием задачи и путём к slug.
30
30
  3. **План** — покажи пользователю таблицу из `pipeline.json`: intent, steps, skipped, humanGates.
31
31
  4. **Intent retro** — если `intent === "retro"`, выполни `/technical-retro` и **остановись**.
32
- 5. **Старт** — вызови subagent для `pipeline.steps[0].agent`:
33
- - передай slug, пути к артефактам, scope из step (если есть);
34
- - обнови `status.json`: `pipelineIndex: 0`, `currentAgent`, `state: in_progress`.
35
- 6. **Human gate** если после текущего шага есть gate в `humanGates` (`after:<agent>`), после завершения агента **остановись** и попроси `/task-continue <slug>` (или `/feature-continue <slug>`).
32
+ 5. **Старт** — после router:
33
+ - подтверди `pipeline.json` и `active-task.json`;
34
+ - **не** пиши lifecycle-поля `status.json` / `metrics.json` сам — их владеет orchestration runtime/hook (см. **agent-artifact-contracts**). Если `status.json` отсутствует, допустим только минимальный bootstrap (`slug`, `intent`, `pipelineIndex: 0`, `currentAgent: steps[0]`, `state: in_progress`) — **не** увеличивай `pipelineIndex` вручную;
35
+ - вызови subagent для `pipeline.steps[0].agent` (slug, пути к артефактам, scope).
36
+ 6. **После каждого агента** — дождись hook handoff / reconciliation terminal receipt → `status.state`; не запускай следующий шаг, пока `status.json` не отражает handoff (или пока нет `followup_message` от hook).
37
+ 7. **Human gate** — если после текущего шага есть gate в `humanGates` (`after:<agent>`), после завершения агента **остановись** и попроси `/task-continue <slug>` (или `/feature-continue <slug>`).
36
38
 
37
39
  ## Не делать
38
40
 
@@ -51,4 +53,4 @@ description: Route a natural-language task through the agent-team pipeline: task
51
53
 
52
54
  ## Metrics
53
55
 
54
- Initialize `metrics.json` before the first invocation with frozen task dimensions and `task_started`; add one `activeAttempts[attemptId]` entry plus `attempt_started` per scheduled agent. On `/task-continue`, append `human_gate_ended` (referencing the stored gate event) before activating the next attempt. Do not calculate durations in agents.
56
+ Runtime/hook owns `metrics.json` and `status.json` attempt ledgers. Before the first invocation ensure `task_started` and one `activeAttempts[attemptId]` + `attempt_started` exist (router/runtime bootstrap — parent must not invent parallel indices). On `/task-continue`, run the installed chain hook `end_human_gate` action (or wrapper) so `human_gate_ended` lands before the next attempt. Do not calculate durations in agents.
@@ -122,6 +122,27 @@ function roleFor(agent) {
122
122
  if (/writer/.test(agent || '')) return 'docs';
123
123
  return 'implementation';
124
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
+ }
125
146
  function activateAttempts(step, stepIndex) {
126
147
  const active = { ...(status.activeAttempts || {}) }; const agents = getStepAgents(step);
127
148
  const parallelGroupId = step.parallel && agents.length > 1 ? `${status.metricsRunId || slug}:step-${stepIndex}` : null;
@@ -146,11 +167,61 @@ function resolvedAttempt() {
146
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 {}
147
168
  return null;
148
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
+
149
219
  function finishActiveAttempt() {
150
220
  const resolved = resolvedAttempt(); if (!resolved) return null;
151
221
  const durationMs = Date.parse(now) - Date.parse(resolved.entry.startedAt);
152
- appendMetric({ type: 'attempt_finished', at: now, attemptId: resolved.attemptId, outcome: ['completed', 'changes_requested', 'validation_failed'].includes(status.state) ? status.state : 'unknown', durationMs: Number.isFinite(durationMs) && durationMs >= 0 ? durationMs : null, retryAfterFix: status.retryAfterFix || null, source: resolved.source || 'hook', attributionConfidence: resolved.confidence });
153
- const active = { ...(status.activeAttempts || {}) }; delete active[resolved.attemptId]; status.activeAttempts = active; status.lastCompletedAttempt = { attemptId: resolved.attemptId, completedAt: now }; return resolved;
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 };
154
225
  }
155
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; }
156
227
  function endHumanGateIfResumed() {
@@ -219,54 +290,54 @@ function findNextExecutableStep(steps, startIdx, dir) {
219
290
  const AGENT_HANDOFF = {
220
291
  'task-analyst': (s) =>
221
292
  `Invoke task-analyst for slug "${s}". Write brief.md and decomposition.md under .cursor/team/tasks/${s}/. ` +
222
- `Set status.json: phase executing, state awaiting_approval if human gate applies. Do not use legacy phase analysis.`,
293
+ `Upsert the analysis receipt in artifact-manifest.json; do not mutate status.json lifecycle fields. Do not use legacy phase analysis.`,
223
294
  debugger: (s) =>
224
295
  `Invoke debugger subagent for slug "${s}". Investigate root cause; write debug-report.md with fixApplied: true/false. ` +
225
- `Update status.json when done.`,
296
+ `Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
226
297
  'solution-architect': (s) =>
227
- `Invoke solution-architect for slug "${s}". Read brief.md; write architecture.md. Update status.json when done.`,
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.`,
228
299
  'migration-specialist': (s) =>
229
- `Invoke migration-specialist for slug "${s}". Read brief.md; write migration-plan.md. Update status.json when done.`,
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.`,
230
301
  'api-contract-reviewer': (s) =>
231
- `Invoke api-contract-reviewer (readonly) for slug "${s}". Write api-contract-review.md. Update status.json when done.`,
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.`,
232
303
  'ci-investigator': (s) =>
233
304
  `Invoke ci-investigator for slug "${s}". Diagnose CI failure; write ci-report.md; apply minimal fix. ` +
234
- `Use ci-investigation skill. Update status.json when done.`,
305
+ `Use ci-investigation skill. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
235
306
  'feature-developer': (s) =>
236
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. ` +
237
- `Follow feature-delivery-workflow.mdc and reference-features.mdc. Include unit tests for mappers/logic before handoff. Update status.json when done.`,
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.`,
238
309
  'build-verifier': (s) =>
239
310
  `Invoke build-verifier (readonly) for slug "${s}". Run lint:js, lint:css, type-check, and targeted unit tests from app/. ` +
240
- `Write validation-report.md. Set state completed or validation_failed. Do not edit production code.`,
311
+ `Write validation-report.md and emit receipt outcome completed or validation_failed. Do not edit production code.`,
241
312
  'accessibility-reviewer': (s) =>
242
- `Invoke accessibility-reviewer (readonly) for slug "${s}". Review UI diff; write a11y-review.md. Update status.json when done.`,
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.`,
243
314
  'performance-auditor': (s) =>
244
- `Invoke performance-auditor (readonly) for slug "${s}". Write perf-report.md. Update status.json when done.`,
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.`,
245
316
  'code-reviewer': (s) =>
246
317
  `Invoke code-reviewer subagent (readonly) for slug "${s}". Review git diff vs brief.md per code-review-mr.mdc. ` +
247
- `Update status.json when done.`,
318
+ `Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
248
319
  'security-reviewer': (s) =>
249
- `Invoke security-reviewer (readonly) for slug "${s}". Write security-review.md. Update status.json when done.`,
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.`,
250
321
  'qa-tester': (s, scope) =>
251
322
  `Invoke qa-tester for slug "${s}"${scope ? ` (scope: ${scope})` : ''}. ` +
252
- `Add/update tests per brief. Follow playwright-agents.mdc. Update status.json when done.`,
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.`,
253
324
  'unit-test-planner': (s) =>
254
- `Invoke unit-test-planner for slug "${s}". Write unit-test-plan.md. Use unit-testing skill. Update status.json when done.`,
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.`,
255
326
  'unit-test-generator': (s) =>
256
- `Invoke unit-test-generator for slug "${s}". Implement specs from unit-test-plan.md. Use unit-testing skill. Update status.json when done.`,
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.`,
257
328
  'unit-test-healer': (s) =>
258
- `Invoke unit-test-healer for slug "${s}". Fix failing unit tests. Use unit-testing and debug-investigation skills. Update status.json when done.`,
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.`,
259
330
  'playwright-test-planner': (s) =>
260
331
  `Invoke playwright-test-planner for slug "${s}". Create/update app/__tests__/e2e/**/*.cases.md. ` +
261
- `Follow playwright-agents.mdc and the playwright-e2e skill. Update status.json when done.`,
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.`,
262
333
  'playwright-test-generator': (s) =>
263
334
  `Invoke playwright-test-generator for slug "${s}". Generate/update *.spec.ts from matching *.cases.md. ` +
264
- `Use playwright MCP when available. Follow playwright-agents.mdc and the playwright-e2e skill. Update status.json when done.`,
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.`,
265
336
  'playwright-test-healer': (s) =>
266
337
  `Invoke playwright-test-healer for slug "${s}". Fix failing/flaky e2e while preserving cases.md assertions. ` +
267
- `Use playwright MCP when available. Follow playwright-agents.mdc and debug-investigation. Update status.json when done.`,
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.`,
268
339
  'tech-writer': (s) =>
269
- `Invoke tech-writer for slug "${s}". Write documentation.md from task artifacts. Update status.json when done.`,
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.`,
270
341
  };
271
342
 
272
343
  const REVIEW_AGENTS = new Set([
@@ -279,15 +350,20 @@ const REVIEW_AGENTS = new Set([
279
350
  function metricsHandoff(agent) {
280
351
  const matches = Object.entries(status.activeAttempts || {}).filter(([, entry]) => entry.agent === agent);
281
352
  if (matches.length === 1) {
282
- return ` Metrics attemptId: ${matches[0][0]}; update normal status only. If the hook cannot identify a parallel stop, append a minimal { attemptId, outcome } receipt to .metrics-receipts.json; do not calculate duration.`;
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.`;
283
354
  }
284
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.';
285
356
  }
286
357
 
287
- function handoffForAgent(agent, scope) {
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) {
288
364
  const fn = AGENT_HANDOFF[agent];
289
- const handoff = fn ? fn(slug, scope) : `Invoke ${agent} subagent for slug "${slug}". Update status.json when done.`;
290
- return handoff + metricsHandoff(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);
291
367
  }
292
368
 
293
369
  function handoffForParallelStep(step) {
@@ -297,7 +373,8 @@ function handoffForParallelStep(step) {
297
373
  .map(([attemptId, entry]) => `${entry.agent}=${attemptId}`);
298
374
  return (
299
375
  `Invoke IN PARALLEL (one message, multiple Task calls): ${agents.join(' AND ')} for slug "${slug}". ` +
300
- `Each agent writes its artifact and appends itself to status.json parallelCompleted when done. ` +
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('; ')}. ` +
301
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.`
302
379
  );
303
380
  }
@@ -336,8 +413,12 @@ function legacyFlow() {
336
413
  appendMetric({ type: 'retry_scheduled', at: now, attemptId: predecessorAttemptId, nextAgent: agent, retryAfterFix: retryAfterFix || null, source: 'hook', attributionConfidence: 'unknown' });
337
414
  activateAttempts({ agent }, stepIndex);
338
415
  }
339
- if (status.state === 'changes_requested' && REVIEW_AGENTS.has(status.currentAgent)) {
416
+ if (status.state === 'changes_requested') {
340
417
  const reviewer = status.currentAgent;
418
+ if (!reviewer) {
419
+ process.stdout.write('{}');
420
+ process.exit(0);
421
+ }
341
422
  scheduleLegacyRetry('feature-developer', reviewer);
342
423
  writeStatus({
343
424
  currentAgent: 'feature-developer',
@@ -411,7 +492,7 @@ if (hookInput.action === 'end_human_gate') {
411
492
  parallelCompleted: [],
412
493
  });
413
494
  if (resumeNext.step.parallel && resumeAgents.length > 1) out(handoffForParallelStep(resumeNext.step));
414
- else out(handoffForAgent(resumeAgents[0], resumeNext.step.scope));
495
+ else out(handoffForAgent(resumeAgents[0], resumeNext.step.scope, resumeNext.step));
415
496
  process.exit(0);
416
497
  }
417
498
  }
@@ -440,6 +521,19 @@ const steps = pipeline.steps || [];
440
521
  const initialIdx = typeof status.pipelineIndex === 'number' ? status.pipelineIndex : 0;
441
522
  const initialStep = steps[initialIdx];
442
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
+ }
443
537
  const finishedAttempt = finishActiveAttempt();
444
538
  if (!finishedAttempt && (hookInput.attemptId || activeAttemptCountBeforeFinish > 0)) {
445
539
  process.stdout.write('{}');
@@ -447,6 +541,7 @@ if (!finishedAttempt && (hookInput.attemptId || activeAttemptCountBeforeFinish >
447
541
  }
448
542
  endHumanGateIfResumed();
449
543
  if (steps.length === 0 || pipeline.autoChain === false) {
544
+ writeStatus({});
450
545
  process.stdout.write('{}');
451
546
  process.exit(0);
452
547
  }
@@ -474,8 +569,75 @@ function scheduleRetry(agent, retryAfterFix, predecessor, explicitStepIndex = nu
474
569
  return stepIndex;
475
570
  }
476
571
 
477
- if (status.state === 'changes_requested' && REVIEW_AGENTS.has(status.currentAgent)) {
478
- const reviewer = status.currentAgent;
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
+ }
479
641
  const retryAfterFixStepIndex = typeof status.pipelineIndex === 'number' ? status.pipelineIndex : 0;
480
642
  const developerIndex = scheduleRetry('feature-developer', reviewer, finishedAttempt);
481
643
  writeStatus({
@@ -486,7 +648,7 @@ if (status.state === 'changes_requested' && REVIEW_AGENTS.has(status.currentAgen
486
648
  retryAfterFix: reviewer,
487
649
  retryAfterFixStepIndex,
488
650
  });
489
- out(handoffForAgent('feature-developer') + ` After fixes, re-run ${reviewer}.`);
651
+ out(handoffForAgent('feature-developer', steps[developerIndex]?.scope, steps[developerIndex]) + ` After fixes, re-run ${reviewer}.`);
490
652
  process.exit(0);
491
653
  }
492
654
 
@@ -501,7 +663,7 @@ if (status.state === 'validation_failed' && status.currentAgent === 'build-verif
501
663
  retryAfterFix: 'build-verifier',
502
664
  retryAfterFixStepIndex,
503
665
  });
504
- out(handoffForAgent('feature-developer') + ' Read validation-report.md. After fixes, re-run build-verifier.');
666
+ out(handoffForAgent('feature-developer', steps[developerIndex]?.scope, steps[developerIndex]) + ' Read validation-report.md. After fixes, re-run build-verifier.');
505
667
  process.exit(0);
506
668
  }
507
669
 
@@ -509,35 +671,16 @@ if (status.state === 'completed' && status.retryAfterFix) {
509
671
  const retry = status.retryAfterFix;
510
672
  const retryIndex = scheduleRetry(retry, null, finishedAttempt, status.retryAfterFixStepIndex);
511
673
  writeStatus({ pipelineIndex: retryIndex, currentAgent: retry, state: 'in_progress', retryAfterFix: null, retryAfterFixStepIndex: null });
512
- out(handoffForAgent(retry));
674
+ out(handoffForAgent(retry, steps[retryIndex]?.scope, steps[retryIndex]));
513
675
  process.exit(0);
514
676
  }
515
677
 
516
- const idx = typeof status.pipelineIndex === 'number' ? status.pipelineIndex : 0;
517
- const currentStep = steps[idx];
518
678
  if (!currentStep) {
519
679
  writeStatus({ phase: 'done', state: 'completed', currentAgent: null });
520
680
  out(`Pipeline complete for "${slug}". Run /technical-retro ${slug}.`);
521
681
  process.exit(0);
522
682
  }
523
683
 
524
- const completedAgent = finishedAttempt?.entry?.agent || status.currentAgent || getStepAgents(currentStep)[0];
525
- const stepAgents = getStepAgents(currentStep);
526
-
527
- if (currentStep.parallel && stepAgents.length > 1) {
528
- const done = [...(status.parallelCompleted || [])];
529
- if (completedAgent && !done.includes(completedAgent)) {
530
- done.push(completedAgent);
531
- }
532
- writeStatus({ parallelCompleted: done });
533
- const remaining = stepAgents.filter((a) => !done.includes(a));
534
- if (remaining.length > 0) {
535
- process.stdout.write('{}');
536
- process.exit(0);
537
- }
538
- writeStatus({ parallelCompleted: [] });
539
- }
540
-
541
684
  if (hasGateAfterStep(currentStep, pipeline.humanGates)) {
542
685
  beginHumanGate();
543
686
  writeStatus({
@@ -579,6 +722,6 @@ writeStatus({
579
722
  if (nextStep.parallel && nextAgents.length > 1) {
580
723
  out(handoffForParallelStep(nextStep));
581
724
  } else {
582
- out(handoffForAgent(nextAgents[0], nextStep.scope));
725
+ out(handoffForAgent(nextAgents[0], nextStep.scope, nextStep));
583
726
  }
584
727
  NODE
@@ -51,7 +51,7 @@ Work request без `/task` — см. **`agent-team-intake.mdc`** (когда п
51
51
 
52
52
  **Cursor frontmatter:** all team pipeline agents use `readonly: false` so they can write `.cursor/team/**`. Production/app restrictions live in the agent prompt body — do **not** set `readonly: true` (Cursor blocks *all* file writes, including team artifacts).
53
53
 
54
- Full prompts: `.cursor/agents/*.md`. Artifact conventions: `.cursor/team/README.md`.
54
+ Full prompts: `.cursor/agents/*.md`. Artifact conventions: `.cursor/team/README.md`; schema SoT: **agent-artifact-contracts**.
55
55
 
56
56
  When editing `packages/ai-rules/presets/**`, follow **`preset-pr-checklist.mdc`** (+ twin-sync / layering / token-budget / leakage meta-rules).
57
57
 
@@ -79,9 +79,21 @@ flowchart TD
79
79
 
80
80
  **Source of truth for order:** `pipeline.json` → `steps[]`. Never hardcode analyst → dev → review → QA when `pipeline.json` exists.
81
81
 
82
+ New pipelines retain top-level `profile` and include `routingDecision` with `complexity`, `riskFlags`, non-empty `routingReasons`, `estimatedWorkPackages`, and `openDecisionCount`. The stack `task-router` owns heuristics; this metadata is auditable evidence and does not change hook semantics.
83
+
82
84
  ## Metrics lifecycle
83
85
 
84
- Use the local `metrics.json` ledger described by **agent-task-metrics**: initialize attempts before invocation, let hooks record host-clock ends, and never guess a parallel completion from `currentAgent`.
86
+ Use the local `metrics.json` ledger described by **agent-task-metrics**: the orchestration runtime initializes attempts before invocation, hooks record host-clock ends, and agents never guess a parallel completion from `currentAgent`.
87
+
88
+ ## Artifact context index and receipts
89
+
90
+ Each slug has one `artifact-manifest.json`: `.cursor/team/tasks/<slug>/` or `.claude/team/tasks/<slug>/`. Schema SoT: **agent-artifact-contracts**.
91
+
92
+ - Read the manifest before broad prior-artifact discovery. Each step receives authoritative input entry IDs, owns named output entry IDs, and finishes with one terminal receipt linked to AC/task IDs.
93
+ - Markdown remains detailed evidence; the manifest records producer, status, authoritative paths, timestamps, outcome, and evidence paths.
94
+ - Agents upsert only entries they own and preserve foreign entries. Parallel agents use distinct IDs; the parent/orchestrator serializes manifest merges.
95
+ - The orchestration runtime/hook is the single writer for `status.json` lifecycle fields and `metrics.json`. Agents read status for eligibility but never rewrite state, gate, retry, attempt, timestamp, or metrics fields.
96
+ - Missing/stale manifests are reported as a handoff gap; fall back to `brief.md`, `decomposition.md`, and `pipeline.json` rather than inventing authority.
85
97
 
86
98
  ## status.json (pipeline mode)
87
99
 
@@ -93,10 +105,23 @@ Use the local `metrics.json` ledger described by **agent-task-metrics**: initial
93
105
  "currentAgent": "task-analyst",
94
106
  "phase": "executing",
95
107
  "state": "in_progress",
96
- "awaitingHumanGate": false
108
+ "awaitingHumanGate": false,
109
+ "activeAttempts": {},
110
+ "lastCompletedAttempt": null,
111
+ "parallelCompleted": [],
112
+ "parallelOutcomes": {}
97
113
  }
98
114
  ```
99
115
 
116
+ | Field | Meaning |
117
+ |-------|---------|
118
+ | `activeAttempts` | Transient timing bridge keyed by `attemptId` |
119
+ | `lastCompletedAttempt` | Diagnostic pointer to the latest finished attempt |
120
+ | `parallelCompleted` | Agents that have stopped in the current parallel step |
121
+ | `parallelOutcomes` | Per-agent `{ outcome, attemptId, confidence }` for the current parallel join; cleared when the step advances or retries |
122
+
123
+ On each `subagentStop`, the hook reconciles `status.state` from the completing producer's terminal `artifact-manifest.json` receipt when agents left lifecycle fields untouched. Wait for that handoff before invoking the next step.
124
+
100
125
  | state | Meaning |
101
126
  |-------|---------|
102
127
  | `in_progress` | Current step running |
@@ -120,7 +145,7 @@ Use the local `metrics.json` ledger described by **agent-task-metrics**: initial
120
145
  2. Read `pipeline.json` before every subagent invocation.
121
146
  3. One role per Task call — **except** parallel steps: multiple Task calls in one message.
122
147
  4. **Never** skip `humanGates` without `/task-continue` or explicit user approval.
123
- 5. Persist handoffs to disk (`brief.md`, `decomposition.md`, `debug-report.md`, `validation-report.md`, `architecture.md`, `migration-plan.md`, `ci-report.md`, `a11y-review.md`, `perf-report.md`, `security-review.md`, `api-contract-review.md`, `unit-test-plan.md`, `documentation.md`, `review.md`).
148
+ 5. Persist handoffs to disk and update the producer-owned terminal receipt in `artifact-manifest.json`; Markdown remains detailed evidence.
124
149
  6. On `changes_requested` from reviewers: hook sets `retryAfterFix` → developer → same reviewer.
125
150
  7. On `validation_failed` from `build-verifier`: hook sets `retryAfterFix: build-verifier` → developer → build-verifier.
126
151
  8. When all steps complete, suggest `/technical-retro <slug>`.
@@ -145,7 +170,7 @@ Use Task tool or `/agent-name`. Pass: slug, artifact paths, step `scope` if set.
145
170
  - **`strong`** → **never** pass `fast`; rely on agent pin (`claude-opus-4-8[effort=high]`) or parent Max model. If Task allows an explicit model ID from the allowed list, prefer the strong agent’s frontmatter ID.
146
171
  3. Parallel steps: apply the step-level `model` to **each** agent in the array (or omit → each agent’s own frontmatter).
147
172
 
148
- After each agent completes, ensure `status.json` has `state: completed` (or `awaiting_approval` if gate applies).
173
+ After each agent completes, verify its terminal manifest receipt, then let the orchestration runtime/hook reconcile `status.json` (`completed`, a blocking outcome, or `awaiting_approval`) from that receipt. Do not ask the agent to mutate shared lifecycle fields, and do not invoke the next specialist until the hook has written the handoff / updated `status.json`.
149
174
 
150
175
  ## Legacy mode
151
176
 
@@ -9,6 +9,7 @@ alwaysApply: false
9
9
 
10
10
  <!-- shared-core: meta/preset-layering.md -->
11
11
 
12
+
12
13
  # Preset layering
13
14
 
14
15
  Правила для **авторов пресетов** (`packages/ai-rules/presets/**`). Не always-on в consumer apps.
@@ -24,7 +25,7 @@ alwaysApply: false
24
25
  ## Куда класть новое правило
25
26
 
26
27
  1. Общие принципы для всех стеков → **core** + адаптеры с `<!-- shared-core: … -->`.
27
- 2. Только один из installable стеков (`next` / `ios-swift` / `go` / `java` / `mcp-ts` / `php-hexagonal` / `php-laravel`) → **stack-specific** (не в `_shared`).
28
+ 2. Только один из installable стеков (`next` / `nuxt` / `svelte` / `ios-swift` / `go` / `java` / `mcp-ts` / `php-hexagonal` / `php-laravel`) → **stack-specific** (не в `_shared`).
28
29
  3. Только Cursor или только Claude packaging → platform artifact / frontmatter, не дублировать семантику.
29
30
 
30
31
  ## SoT
@@ -9,6 +9,7 @@ alwaysApply: false
9
9
 
10
10
  <!-- shared-core: meta/preset-no-cross-stack-leakage.md -->
11
11
 
12
+
12
13
  # Preset no cross-stack leakage
13
14
 
14
15
  Запрет протекания stack-specific имён, путей и handoff stems между пресетами.
@@ -16,6 +17,8 @@ alwaysApply: false
16
17
  ## Principles
17
18
 
18
19
  - `next` must not require iOS-only agents/tooling (`xcuitest-*`, `xcodebuild` as required handoff, Keychain-only rules).
20
+ - `nuxt` must not require iOS-only agents/tooling (`xcuitest-*`, `xcodebuild` as required handoff, Keychain-only rules).
21
+ - `svelte` must not require iOS-only agents/tooling (`xcuitest-*`, `xcodebuild` as required handoff, Keychain-only rules).
19
22
  - `ios-swift` must not ship Playwright handoffs or Next lint recipes as required commands.
20
23
  - `go` / `java` / `php-hexagonal` / `php-laravel` / `mcp-ts` must not ship Playwright, XCUITest, Next lint recipes, or `xcodebuild`/`SwiftLint` as required handoffs.
21
24
  - `mcp-ts` must not ship Go tool commands (`go test`, `go vet`, `golangci-lint`) or `integration-test-*` agents as required delivery gates.
@@ -36,6 +39,18 @@ Required instead: `xcuitest-test-*` stems; build-verifier mentions `xcodebuild`
36
39
  - `xcuitest-test-` as handoff stems
37
40
  - Requiring `xcodebuild` / SwiftLint as the default post-change gate for Next app work
38
41
 
42
+ ## Forbidden in nuxt hooks/agents (FAIL when present as required)
43
+
44
+ - `xcuitest-test-` as handoff stems
45
+ - Requiring `xcodebuild` / SwiftLint as the default post-change gate for Nuxt app work
46
+ - Frontend profile mirrors `next`: Playwright / `lint:js` / `lint:css` allowed
47
+
48
+ ## Forbidden in svelte hooks/agents (FAIL when present as required)
49
+
50
+ - `xcuitest-test-` as handoff stems
51
+ - Requiring `xcodebuild` / SwiftLint as the default post-change gate for SvelteKit app work
52
+ - Frontend profile mirrors `next` / `nuxt`: Playwright / `lint:js` / `lint:css` allowed
53
+
39
54
  ## Forbidden in go / java / php-hexagonal / php-laravel hooks/agents (FAIL)
40
55
 
41
56
  Shared backend-stack bans (`go`, `java`, `php-hexagonal`, and `php-laravel`):
@@ -66,4 +81,4 @@ Required instead: package-manager–discovered typecheck/test (`mcp-ts-tooling`,
66
81
 
67
82
  ## Chain fork
68
83
 
69
- `hooks/chain-team-phases.sh` must differ **byte-wise** pairwise among `next`, `ios-swift`, `go`, `java`, `mcp-ts`, `php-hexagonal`, and `php-laravel` (per platform).
84
+ `hooks/chain-team-phases.sh` must differ **byte-wise** pairwise among `next`, `nuxt`, `svelte`, `ios-swift`, `go`, `java`, `mcp-ts`, `php-hexagonal`, and `php-laravel` (per platform).
@@ -9,6 +9,7 @@ alwaysApply: false
9
9
 
10
10
  <!-- shared-core: meta/preset-pr-checklist.md -->
11
11
 
12
+
12
13
  # Preset PR checklist
13
14
 
14
15
  Чеклист для PR, затрагивающих `packages/ai-rules/presets/**` (и dogfood `.cursor/` sync).
@@ -17,7 +18,7 @@ alwaysApply: false
17
18
 
18
19
  - [ ] **SoT:** правки в `packages/…` (не только root `.cursor/`)
19
20
  - [ ] **Core:** если менялся `_shared/core/**` — обновлены все `<!-- shared-core: … -->` consumers (или documented intentional fork)
20
- - [ ] **Twin:** Cursor change → Claude twin **same PR** (**FAIL** if missing on next, ios-swift, go, java, mcp-ts, php-hexagonal, and php-laravel — см. `preset-twin-sync`)
21
+ - [ ] **Twin:** Cursor change → Claude twin **same PR** (**FAIL** if missing on next, nuxt, svelte, ios-swift, go, java, mcp-ts, php-hexagonal, and php-laravel — см. `preset-twin-sync`)
21
22
  - [ ] **Mapping:** `claude/<stack>/rules/README.md` mapping table актуален
22
23
  - [ ] **Token budget:** alwaysApply / session-start ≤ 3; meta rules not always-on
23
24
  - [ ] **Leakage:** нет чужих stack agent stems / handoff strings (`preset-no-cross-stack-leakage`)