@bonesofspring/ai-rules 0.2.17 → 0.2.18

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 (292) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +1 -1
  3. package/package.json +1 -1
  4. package/presets/_shared/README.md +1 -1
  5. package/presets/_shared/core/agent-team/agent-artifact-contracts.md +3 -0
  6. package/presets/_shared/core/agent-team/agent-team-orchestrator.md +4 -4
  7. package/presets/_shared/core/architecture/feature-delivery-workflow.md +1 -1
  8. package/presets/_shared/core/meta/preset-no-cross-stack-leakage.md +4 -2
  9. package/presets/_shared/core/review/mockup-review.md +105 -0
  10. package/presets/_shared/core/review/ux-design.md +97 -0
  11. package/presets/claude/android-kotlin/agents/README.md +2 -2
  12. package/presets/claude/android-kotlin/agents/build-verifier.md +6 -0
  13. package/presets/claude/android-kotlin/agents/feature-developer.md +6 -0
  14. package/presets/claude/android-kotlin/agents/mockup-reviewer.md +59 -0
  15. package/presets/claude/android-kotlin/agents/task-analyst.md +18 -1
  16. package/presets/claude/android-kotlin/agents/task-router.md +11 -2
  17. package/presets/claude/android-kotlin/commands/task-continue.md +6 -4
  18. package/presets/claude/android-kotlin/commands/task.md +2 -0
  19. package/presets/claude/android-kotlin/hooks/chain-team-phases.sh +26 -0
  20. package/presets/claude/android-kotlin/rules/README.md +2 -0
  21. package/presets/claude/android-kotlin/rules/architecture/feature-delivery.md +2 -0
  22. package/presets/claude/android-kotlin/rules/tooling-and-review/agent-team-orchestrator.md +6 -3
  23. package/presets/claude/android-kotlin/rules/tooling-and-review/mockup-review.md +118 -0
  24. package/presets/claude/android-kotlin/rules/tooling-and-review/preset-no-cross-stack-leakage.md +4 -3
  25. package/presets/claude/android-kotlin/rules/tooling-and-review/ux-design.md +110 -0
  26. package/presets/claude/android-kotlin/skills/README.md +2 -0
  27. package/presets/claude/android-kotlin/skills/feature-delivery/SKILL.md +3 -0
  28. package/presets/claude/android-kotlin/skills/mockup-review/SKILL.md +29 -0
  29. package/presets/claude/android-kotlin/skills/ux-design/SKILL.md +36 -0
  30. package/presets/claude/android-kotlin/team/fixtures/artifact-manifest.example.json +25 -0
  31. package/presets/claude/android-kotlin/team/fixtures/feature-with-figma-url.json +17 -0
  32. package/presets/claude/android-kotlin/team/fixtures/feature-with-ux-no-figma.json +17 -0
  33. package/presets/claude/android-kotlin/team/fixtures/mockup-review-fail-embedded-status.json +8 -0
  34. package/presets/claude/android-kotlin/team/fixtures/mockup-review-standalone.json +14 -0
  35. package/presets/claude/android-kotlin/team/fixtures/ux-design-standalone.json +15 -0
  36. package/presets/claude/go/MCP.md +1 -1
  37. package/presets/claude/go/agents/build-verifier.md +6 -0
  38. package/presets/claude/go/agents/task-router.md +1 -1
  39. package/presets/claude/go/rules/tooling-and-review/preset-no-cross-stack-leakage.md +4 -2
  40. package/presets/claude/ios-swift/agents/README.md +2 -2
  41. package/presets/claude/ios-swift/agents/build-verifier.md +6 -0
  42. package/presets/claude/ios-swift/agents/feature-developer.md +6 -0
  43. package/presets/claude/ios-swift/agents/mockup-reviewer.md +59 -0
  44. package/presets/claude/ios-swift/agents/task-analyst.md +18 -1
  45. package/presets/claude/ios-swift/agents/task-router.md +11 -2
  46. package/presets/claude/ios-swift/commands/task-continue.md +6 -4
  47. package/presets/claude/ios-swift/commands/task.md +2 -0
  48. package/presets/claude/ios-swift/hooks/chain-team-phases.sh +26 -0
  49. package/presets/claude/ios-swift/rules/README.md +4 -0
  50. package/presets/claude/ios-swift/rules/architecture/feature-delivery.md +2 -0
  51. package/presets/claude/ios-swift/rules/tooling-and-review/agent-team-orchestrator.md +6 -3
  52. package/presets/claude/ios-swift/rules/tooling-and-review/mockup-review.md +118 -0
  53. package/presets/claude/ios-swift/rules/tooling-and-review/preset-no-cross-stack-leakage.md +4 -2
  54. package/presets/claude/ios-swift/rules/tooling-and-review/ux-design.md +110 -0
  55. package/presets/claude/ios-swift/skills/README.md +2 -0
  56. package/presets/claude/ios-swift/skills/feature-delivery/SKILL.md +3 -0
  57. package/presets/claude/ios-swift/skills/mockup-review/SKILL.md +29 -0
  58. package/presets/claude/ios-swift/skills/ux-design/SKILL.md +36 -0
  59. package/presets/claude/ios-swift/team/fixtures/artifact-manifest.example.json +25 -0
  60. package/presets/claude/ios-swift/team/fixtures/feature-with-figma-url.json +17 -0
  61. package/presets/claude/ios-swift/team/fixtures/feature-with-ux-no-figma.json +17 -0
  62. package/presets/claude/ios-swift/team/fixtures/mockup-review-fail-embedded-status.json +8 -0
  63. package/presets/claude/ios-swift/team/fixtures/mockup-review-standalone.json +14 -0
  64. package/presets/claude/ios-swift/team/fixtures/ux-design-standalone.json +15 -0
  65. package/presets/claude/java/agents/build-verifier.md +7 -1
  66. package/presets/claude/java/agents/task-router.md +1 -1
  67. package/presets/claude/java/rules/tooling-and-review/preset-no-cross-stack-leakage.md +4 -2
  68. package/presets/claude/mcp-ts/agents/build-verifier.md +7 -1
  69. package/presets/claude/mcp-ts/agents/task-router.md +1 -1
  70. package/presets/claude/mcp-ts/rules/tooling-and-review/preset-no-cross-stack-leakage.md +4 -2
  71. package/presets/claude/next/agents/README.md +2 -1
  72. package/presets/claude/next/agents/build-verifier.md +6 -0
  73. package/presets/claude/next/agents/feature-developer.md +6 -0
  74. package/presets/claude/next/agents/mockup-reviewer.md +59 -0
  75. package/presets/claude/next/agents/task-analyst.md +18 -1
  76. package/presets/claude/next/agents/task-router.md +12 -3
  77. package/presets/claude/next/commands/task-continue.md +6 -4
  78. package/presets/claude/next/commands/task.md +2 -0
  79. package/presets/claude/next/hooks/chain-team-phases.sh +26 -0
  80. package/presets/claude/next/rules/README.md +5 -1
  81. package/presets/claude/next/rules/architecture/feature-delivery-workflow.md +2 -0
  82. package/presets/claude/next/rules/tooling-and-review/agent-team-orchestrator.md +6 -3
  83. package/presets/claude/next/rules/tooling-and-review/mockup-review.md +118 -0
  84. package/presets/claude/next/rules/tooling-and-review/preset-no-cross-stack-leakage.md +4 -2
  85. package/presets/claude/next/rules/tooling-and-review/ux-design.md +110 -0
  86. package/presets/claude/next/skills/README.md +2 -0
  87. package/presets/claude/next/skills/feature-delivery/SKILL.md +3 -0
  88. package/presets/claude/next/skills/mockup-review/SKILL.md +29 -0
  89. package/presets/claude/next/skills/ux-design/SKILL.md +36 -0
  90. package/presets/claude/next/team/fixtures/artifact-manifest.example.json +20 -2
  91. package/presets/claude/next/team/fixtures/feature-with-figma-url.json +17 -0
  92. package/presets/claude/next/team/fixtures/feature-with-ux-no-figma.json +17 -0
  93. package/presets/claude/next/team/fixtures/mockup-review-fail-embedded-status.json +8 -0
  94. package/presets/claude/next/team/fixtures/mockup-review-standalone.json +14 -0
  95. package/presets/claude/next/team/fixtures/ux-design-standalone.json +15 -0
  96. package/presets/claude/nuxt/agents/README.md +2 -1
  97. package/presets/claude/nuxt/agents/build-verifier.md +6 -0
  98. package/presets/claude/nuxt/agents/feature-developer.md +6 -0
  99. package/presets/claude/nuxt/agents/mockup-reviewer.md +59 -0
  100. package/presets/claude/nuxt/agents/task-analyst.md +18 -1
  101. package/presets/claude/nuxt/agents/task-router.md +12 -3
  102. package/presets/claude/nuxt/commands/task-continue.md +6 -4
  103. package/presets/claude/nuxt/commands/task.md +2 -0
  104. package/presets/claude/nuxt/hooks/chain-team-phases.sh +26 -0
  105. package/presets/claude/nuxt/rules/README.md +4 -0
  106. package/presets/claude/nuxt/rules/architecture/feature-delivery-workflow.md +2 -0
  107. package/presets/claude/nuxt/rules/tooling-and-review/agent-team-orchestrator.md +6 -3
  108. package/presets/claude/nuxt/rules/tooling-and-review/mockup-review.md +118 -0
  109. package/presets/claude/nuxt/rules/tooling-and-review/preset-no-cross-stack-leakage.md +4 -2
  110. package/presets/claude/nuxt/rules/tooling-and-review/ux-design.md +110 -0
  111. package/presets/claude/nuxt/skills/README.md +2 -0
  112. package/presets/claude/nuxt/skills/feature-delivery/SKILL.md +3 -0
  113. package/presets/claude/nuxt/skills/mockup-review/SKILL.md +29 -0
  114. package/presets/claude/nuxt/skills/ux-design/SKILL.md +36 -0
  115. package/presets/claude/nuxt/team/fixtures/artifact-manifest.example.json +20 -2
  116. package/presets/claude/nuxt/team/fixtures/feature-with-figma-url.json +17 -0
  117. package/presets/claude/nuxt/team/fixtures/feature-with-ux-no-figma.json +17 -0
  118. package/presets/claude/nuxt/team/fixtures/mockup-review-fail-embedded-status.json +8 -0
  119. package/presets/claude/nuxt/team/fixtures/mockup-review-standalone.json +14 -0
  120. package/presets/claude/nuxt/team/fixtures/ux-design-standalone.json +15 -0
  121. package/presets/claude/php-hexagonal/agents/build-verifier.md +7 -1
  122. package/presets/claude/php-hexagonal/agents/task-router.md +1 -1
  123. package/presets/claude/php-hexagonal/rules/tooling-and-review/preset-no-cross-stack-leakage.md +4 -2
  124. package/presets/claude/php-laravel/agents/build-verifier.md +7 -1
  125. package/presets/claude/php-laravel/agents/task-router.md +1 -1
  126. package/presets/claude/php-laravel/rules/tooling-and-review/preset-no-cross-stack-leakage.md +4 -2
  127. package/presets/claude/svelte/agents/README.md +2 -1
  128. package/presets/claude/svelte/agents/build-verifier.md +6 -0
  129. package/presets/claude/svelte/agents/feature-developer.md +6 -0
  130. package/presets/claude/svelte/agents/mockup-reviewer.md +59 -0
  131. package/presets/claude/svelte/agents/task-analyst.md +18 -1
  132. package/presets/claude/svelte/agents/task-router.md +12 -3
  133. package/presets/claude/svelte/commands/task-continue.md +6 -4
  134. package/presets/claude/svelte/commands/task.md +2 -0
  135. package/presets/claude/svelte/hooks/chain-team-phases.sh +26 -0
  136. package/presets/claude/svelte/rules/README.md +4 -0
  137. package/presets/claude/svelte/rules/architecture/feature-delivery-workflow.md +2 -0
  138. package/presets/claude/svelte/rules/tooling-and-review/agent-team-orchestrator.md +6 -3
  139. package/presets/claude/svelte/rules/tooling-and-review/mockup-review.md +118 -0
  140. package/presets/claude/svelte/rules/tooling-and-review/preset-no-cross-stack-leakage.md +4 -2
  141. package/presets/claude/svelte/rules/tooling-and-review/ux-design.md +110 -0
  142. package/presets/claude/svelte/skills/README.md +2 -0
  143. package/presets/claude/svelte/skills/feature-delivery/SKILL.md +3 -0
  144. package/presets/claude/svelte/skills/mockup-review/SKILL.md +29 -0
  145. package/presets/claude/svelte/skills/ux-design/SKILL.md +36 -0
  146. package/presets/claude/svelte/team/fixtures/artifact-manifest.example.json +20 -2
  147. package/presets/claude/svelte/team/fixtures/feature-with-figma-url.json +17 -0
  148. package/presets/claude/svelte/team/fixtures/feature-with-ux-no-figma.json +17 -0
  149. package/presets/claude/svelte/team/fixtures/mockup-review-fail-embedded-status.json +8 -0
  150. package/presets/claude/svelte/team/fixtures/mockup-review-standalone.json +14 -0
  151. package/presets/claude/svelte/team/fixtures/ux-design-standalone.json +15 -0
  152. package/presets/cursor/android-kotlin/agents/README.md +2 -2
  153. package/presets/cursor/android-kotlin/agents/build-verifier.md +6 -0
  154. package/presets/cursor/android-kotlin/agents/feature-developer.md +6 -0
  155. package/presets/cursor/android-kotlin/agents/mockup-reviewer.md +60 -0
  156. package/presets/cursor/android-kotlin/agents/task-analyst.md +18 -1
  157. package/presets/cursor/android-kotlin/agents/task-router.md +11 -2
  158. package/presets/cursor/android-kotlin/commands/task-continue.md +6 -4
  159. package/presets/cursor/android-kotlin/commands/task.md +2 -0
  160. package/presets/cursor/android-kotlin/hooks/chain-team-phases.sh +26 -0
  161. package/presets/cursor/android-kotlin/rules/README.md +4 -0
  162. package/presets/cursor/android-kotlin/rules/agent-team-orchestrator.mdc +6 -3
  163. package/presets/cursor/android-kotlin/rules/feature-delivery-workflow.mdc +2 -0
  164. package/presets/cursor/android-kotlin/rules/mockup-review.mdc +116 -0
  165. package/presets/cursor/android-kotlin/rules/preset-no-cross-stack-leakage.mdc +4 -3
  166. package/presets/cursor/android-kotlin/rules/ux-design.mdc +108 -0
  167. package/presets/cursor/android-kotlin/skills/README.md +2 -0
  168. package/presets/cursor/android-kotlin/skills/feature-delivery/SKILL.md +3 -0
  169. package/presets/cursor/android-kotlin/skills/mockup-review/SKILL.md +29 -0
  170. package/presets/cursor/android-kotlin/skills/ux-design/SKILL.md +36 -0
  171. package/presets/cursor/android-kotlin/team/fixtures/artifact-manifest.example.json +25 -0
  172. package/presets/cursor/android-kotlin/team/fixtures/feature-with-figma-url.json +17 -0
  173. package/presets/cursor/android-kotlin/team/fixtures/feature-with-ux-no-figma.json +17 -0
  174. package/presets/cursor/android-kotlin/team/fixtures/mockup-review-fail-embedded-status.json +8 -0
  175. package/presets/cursor/android-kotlin/team/fixtures/mockup-review-standalone.json +14 -0
  176. package/presets/cursor/android-kotlin/team/fixtures/ux-design-standalone.json +15 -0
  177. package/presets/cursor/go/MCP.md +1 -1
  178. package/presets/cursor/go/agents/build-verifier.md +6 -0
  179. package/presets/cursor/go/agents/task-router.md +1 -1
  180. package/presets/cursor/go/rules/preset-no-cross-stack-leakage.mdc +4 -2
  181. package/presets/cursor/ios-swift/agents/README.md +2 -2
  182. package/presets/cursor/ios-swift/agents/build-verifier.md +6 -0
  183. package/presets/cursor/ios-swift/agents/feature-developer.md +6 -0
  184. package/presets/cursor/ios-swift/agents/mockup-reviewer.md +60 -0
  185. package/presets/cursor/ios-swift/agents/task-analyst.md +18 -1
  186. package/presets/cursor/ios-swift/agents/task-router.md +11 -2
  187. package/presets/cursor/ios-swift/commands/task-continue.md +6 -4
  188. package/presets/cursor/ios-swift/commands/task.md +2 -0
  189. package/presets/cursor/ios-swift/hooks/chain-team-phases.sh +26 -0
  190. package/presets/cursor/ios-swift/rules/README.md +5 -1
  191. package/presets/cursor/ios-swift/rules/agent-team-orchestrator.mdc +6 -3
  192. package/presets/cursor/ios-swift/rules/feature-delivery-workflow.mdc +2 -0
  193. package/presets/cursor/ios-swift/rules/mockup-review.mdc +116 -0
  194. package/presets/cursor/ios-swift/rules/preset-no-cross-stack-leakage.mdc +4 -2
  195. package/presets/cursor/ios-swift/rules/ux-design.mdc +108 -0
  196. package/presets/cursor/ios-swift/skills/README.md +2 -0
  197. package/presets/cursor/ios-swift/skills/feature-delivery/SKILL.md +3 -0
  198. package/presets/cursor/ios-swift/skills/mockup-review/SKILL.md +29 -0
  199. package/presets/cursor/ios-swift/skills/ux-design/SKILL.md +36 -0
  200. package/presets/cursor/ios-swift/team/fixtures/artifact-manifest.example.json +25 -0
  201. package/presets/cursor/ios-swift/team/fixtures/feature-with-figma-url.json +17 -0
  202. package/presets/cursor/ios-swift/team/fixtures/feature-with-ux-no-figma.json +17 -0
  203. package/presets/cursor/ios-swift/team/fixtures/mockup-review-fail-embedded-status.json +8 -0
  204. package/presets/cursor/ios-swift/team/fixtures/mockup-review-standalone.json +14 -0
  205. package/presets/cursor/ios-swift/team/fixtures/ux-design-standalone.json +15 -0
  206. package/presets/cursor/java/agents/build-verifier.md +7 -1
  207. package/presets/cursor/java/agents/task-router.md +1 -1
  208. package/presets/cursor/java/rules/preset-no-cross-stack-leakage.mdc +4 -2
  209. package/presets/cursor/mcp-ts/agents/build-verifier.md +7 -1
  210. package/presets/cursor/mcp-ts/agents/task-router.md +1 -1
  211. package/presets/cursor/mcp-ts/rules/preset-no-cross-stack-leakage.mdc +4 -2
  212. package/presets/cursor/next/agents/README.md +2 -1
  213. package/presets/cursor/next/agents/build-verifier.md +6 -0
  214. package/presets/cursor/next/agents/feature-developer.md +6 -0
  215. package/presets/cursor/next/agents/mockup-reviewer.md +60 -0
  216. package/presets/cursor/next/agents/task-analyst.md +18 -1
  217. package/presets/cursor/next/agents/task-router.md +12 -3
  218. package/presets/cursor/next/commands/task-continue.md +6 -4
  219. package/presets/cursor/next/commands/task.md +2 -0
  220. package/presets/cursor/next/hooks/chain-team-phases.sh +26 -0
  221. package/presets/cursor/next/rules/README.md +3 -1
  222. package/presets/cursor/next/rules/agent-team-orchestrator.mdc +6 -3
  223. package/presets/cursor/next/rules/feature-delivery-workflow.mdc +2 -0
  224. package/presets/cursor/next/rules/mockup-review.mdc +116 -0
  225. package/presets/cursor/next/rules/preset-no-cross-stack-leakage.mdc +4 -2
  226. package/presets/cursor/next/rules/ux-design.mdc +108 -0
  227. package/presets/cursor/next/skills/README.md +2 -0
  228. package/presets/cursor/next/skills/feature-delivery/SKILL.md +3 -0
  229. package/presets/cursor/next/skills/mockup-review/SKILL.md +29 -0
  230. package/presets/cursor/next/skills/ux-design/SKILL.md +36 -0
  231. package/presets/cursor/next/team/fixtures/artifact-manifest.example.json +20 -2
  232. package/presets/cursor/next/team/fixtures/feature-with-figma-url.json +17 -0
  233. package/presets/cursor/next/team/fixtures/feature-with-ux-no-figma.json +17 -0
  234. package/presets/cursor/next/team/fixtures/mockup-review-fail-embedded-status.json +8 -0
  235. package/presets/cursor/next/team/fixtures/mockup-review-standalone.json +14 -0
  236. package/presets/cursor/next/team/fixtures/ux-design-standalone.json +15 -0
  237. package/presets/cursor/nuxt/agents/README.md +2 -1
  238. package/presets/cursor/nuxt/agents/build-verifier.md +6 -0
  239. package/presets/cursor/nuxt/agents/feature-developer.md +6 -0
  240. package/presets/cursor/nuxt/agents/mockup-reviewer.md +60 -0
  241. package/presets/cursor/nuxt/agents/task-analyst.md +18 -1
  242. package/presets/cursor/nuxt/agents/task-router.md +12 -3
  243. package/presets/cursor/nuxt/commands/task-continue.md +6 -4
  244. package/presets/cursor/nuxt/commands/task.md +2 -0
  245. package/presets/cursor/nuxt/hooks/chain-team-phases.sh +26 -0
  246. package/presets/cursor/nuxt/rules/README.md +3 -1
  247. package/presets/cursor/nuxt/rules/agent-team-orchestrator.mdc +6 -3
  248. package/presets/cursor/nuxt/rules/feature-delivery-workflow.mdc +2 -0
  249. package/presets/cursor/nuxt/rules/mockup-review.mdc +116 -0
  250. package/presets/cursor/nuxt/rules/preset-no-cross-stack-leakage.mdc +4 -2
  251. package/presets/cursor/nuxt/rules/ux-design.mdc +108 -0
  252. package/presets/cursor/nuxt/skills/README.md +2 -0
  253. package/presets/cursor/nuxt/skills/feature-delivery/SKILL.md +3 -0
  254. package/presets/cursor/nuxt/skills/mockup-review/SKILL.md +29 -0
  255. package/presets/cursor/nuxt/skills/ux-design/SKILL.md +36 -0
  256. package/presets/cursor/nuxt/team/fixtures/artifact-manifest.example.json +20 -2
  257. package/presets/cursor/nuxt/team/fixtures/feature-with-figma-url.json +17 -0
  258. package/presets/cursor/nuxt/team/fixtures/feature-with-ux-no-figma.json +17 -0
  259. package/presets/cursor/nuxt/team/fixtures/mockup-review-fail-embedded-status.json +8 -0
  260. package/presets/cursor/nuxt/team/fixtures/mockup-review-standalone.json +14 -0
  261. package/presets/cursor/nuxt/team/fixtures/ux-design-standalone.json +15 -0
  262. package/presets/cursor/php-hexagonal/agents/build-verifier.md +7 -1
  263. package/presets/cursor/php-hexagonal/agents/task-router.md +1 -1
  264. package/presets/cursor/php-hexagonal/rules/preset-no-cross-stack-leakage.mdc +4 -2
  265. package/presets/cursor/php-laravel/agents/build-verifier.md +7 -1
  266. package/presets/cursor/php-laravel/agents/task-router.md +1 -1
  267. package/presets/cursor/php-laravel/rules/preset-no-cross-stack-leakage.mdc +4 -2
  268. package/presets/cursor/svelte/agents/README.md +2 -1
  269. package/presets/cursor/svelte/agents/build-verifier.md +6 -0
  270. package/presets/cursor/svelte/agents/feature-developer.md +6 -0
  271. package/presets/cursor/svelte/agents/mockup-reviewer.md +60 -0
  272. package/presets/cursor/svelte/agents/task-analyst.md +18 -1
  273. package/presets/cursor/svelte/agents/task-router.md +12 -3
  274. package/presets/cursor/svelte/commands/task-continue.md +6 -4
  275. package/presets/cursor/svelte/commands/task.md +2 -0
  276. package/presets/cursor/svelte/hooks/chain-team-phases.sh +26 -0
  277. package/presets/cursor/svelte/rules/README.md +3 -1
  278. package/presets/cursor/svelte/rules/agent-team-orchestrator.mdc +6 -3
  279. package/presets/cursor/svelte/rules/feature-delivery-workflow.mdc +2 -0
  280. package/presets/cursor/svelte/rules/mockup-review.mdc +116 -0
  281. package/presets/cursor/svelte/rules/preset-no-cross-stack-leakage.mdc +4 -2
  282. package/presets/cursor/svelte/rules/ux-design.mdc +108 -0
  283. package/presets/cursor/svelte/skills/README.md +2 -0
  284. package/presets/cursor/svelte/skills/feature-delivery/SKILL.md +3 -0
  285. package/presets/cursor/svelte/skills/mockup-review/SKILL.md +29 -0
  286. package/presets/cursor/svelte/skills/ux-design/SKILL.md +36 -0
  287. package/presets/cursor/svelte/team/fixtures/artifact-manifest.example.json +20 -2
  288. package/presets/cursor/svelte/team/fixtures/feature-with-figma-url.json +17 -0
  289. package/presets/cursor/svelte/team/fixtures/feature-with-ux-no-figma.json +17 -0
  290. package/presets/cursor/svelte/team/fixtures/mockup-review-fail-embedded-status.json +8 -0
  291. package/presets/cursor/svelte/team/fixtures/mockup-review-standalone.json +14 -0
  292. package/presets/cursor/svelte/team/fixtures/ux-design-standalone.json +15 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,24 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ### UX design skill (UI stacks)
6
+
7
+ - New requestable skill/rule **`ux-design`** on **`next`**, **`nuxt`**, **`svelte`**, **`ios-swift`**, **`android-kotlin`** (Cursor + Claude twins). Shared-core checklist: `presets/_shared/core/review/ux-design.md`. Invoked by **`task-analyst`** — **no** `ux-designer` agent, **no** FAIL-only hook, **no** Figma MCP in the skill/rule.
8
+ - Standalone intent **`ux-design`**: synthesize or review behavioral UX (IA, named flows, empty/error/loading matrix) → profile `light`, steps only `task-analyst`, `humanGates: []`. Classify `mockup-review` before `ux-design` before `review-only`.
9
+ - Embedded: on UI required-signal or advisory AC, analyst loads the skill (no new pipeline step). Required `INCOMPLETE` blocks DoR; advisory notes only. Developer gate: required-signal + no Figma + missing/`INCOMPLETE` UX artifact → `blocked`, hand back to analyst.
10
+ - Backend stacks (`go`, `java`, `mcp-ts`, `php-*`) never ship `skills/ux-design` / `rules/ux-design` or `agents/ux-designer.md`; leakage checker forbids those stems.
11
+ - `/task` examples include standalone UX (no Figma). `artifact-manifest.example.json` analysis paths append `ux-design.md` on web stacks.
12
+ - Consumers: re-run `npx @bonesofspring/ai-rules init cursor|claude --preset <ui-stack>` after publish.
13
+
14
+ ### Mockup reviewer (UI stacks)
15
+
16
+ - New **`mockup-reviewer`** agent + requestable skill/rule **`mockup-review`** on **`next`**, **`nuxt`**, **`svelte`**, **`ios-swift`**, **`android-kotlin`** (Cursor + Claude twins). Shared-core checklist: `presets/_shared/core/review/mockup-review.md`. Report template fence is a single closed block (no stray fence after AC coverage).
17
+ - Standalone intent **`mockup-review`**: `/task` + Figma URL (e.g. «ревью макета …») → profile `light`, steps only `mockup-reviewer`, report-only exit on FAIL (like `perf-audit`).
18
+ - Embedded: `figma.com` in feature/refactor/spike/spec-gen → reviewer after `task-analyst`, before architect/developer. Embedded **FAIL** → receipt `changes_requested` + FAIL-only hook gate (`awaiting_approval`); resume via `/task-continue` only — no `feature-developer` retry. Orchestrator rule 6 and UI `chain-team-phases.sh` parallel-join now match that exception; ios-swift/android-kotlin `AGENT_HANDOFF` includes `mockup-reviewer`. Never put `mockup-reviewer` in `parallel: true`.
19
+ - Figma MCP-first (read-only subset + node caps); `BLOCKED_MCP` when OAuth/MCP unavailable. Go keeps optional Figma MCP for ad-hoc context — **not** a mockup-review pipeline.
20
+ - Backend stacks (`go`, `java`, `mcp-ts`, `php-*`) never schedule `mockup-reviewer`; leakage checker forbids agent stem on backend.
21
+ - Consumers: re-run `npx @bonesofspring/ai-rules init cursor|claude --preset <ui-stack>` after publish.
22
+
5
23
  ### Product specs authoring (Phases A–E)
6
24
 
7
25
  - **Generation modes** (shared-core): **Consume** (default discovery, soft-fail on miss) · **Generate** (explicit intent / AC / `/spec-start` with existing tree) · **Bootstrap** (same triggers when `docs/specs/` absent). Greenfield policy: no INDEX/spec invention without explicit intent; conflict precedence human > brief AC > approved spec > code.
package/README.md CHANGED
@@ -52,7 +52,7 @@ Where things go on `init`:
52
52
  | **repo-root agents** | `REPO_AGENTS.md` → **`<cwd>/AGENTS.md`** | same |
53
53
  | **docs/specs seed** | When `<cwd>/docs/specs/` is **absent**, copy INDEX stub + `_templates/*` from `presets/_shared/assets/docs-specs/` (never overwrite existing INDEX) | same |
54
54
 
55
- Skills of note: `write-adr` (all stacks); `spec-authoring` (Generate/Bootstrap `docs/specs`); `react-performance` (**next only**); `vue-performance` (**nuxt only**); `svelte-performance` (**svelte only**). Optional command `/spec-start`. Living gotchas: `team/conventions.md`. Opt-in rule samples eval: `yarn check:rule-eval` (workflow `rule-eval.yml`; not part of `check:preset-structure`). Optional consumer specs check: `yarn check:product-specs` (WARN default; `--strict` FAIL).
55
+ Skills of note: `write-adr` (all stacks); `spec-authoring` (Generate/Bootstrap `docs/specs`); `mockup-review` (**next** / **nuxt** / **svelte** / **ios-swift** / **android-kotlin** — Figma mockup reviewer via agent `mockup-reviewer`); `ux-design` (**next** / **nuxt** / **svelte** / **ios-swift** / **android-kotlin** — behavioral UX via `task-analyst`, no agent); `react-performance` (**next only**); `vue-performance` (**nuxt only**); `svelte-performance` (**svelte only**). Optional command `/spec-start`. Living gotchas: `team/conventions.md`. Opt-in rule samples eval: `yarn check:rule-eval` (workflow `rule-eval.yml`; not part of `check:preset-structure`). Optional consumer specs check: `yarn check:product-specs` (WARN default; `--strict` FAIL).
56
56
 
57
57
  ## Product specs (`docs/specs/`)
58
58
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bonesofspring/ai-rules",
3
- "version": "0.2.17",
3
+ "version": "0.2.18",
4
4
  "description": "Presets of Cursor and Claude rules/commands for Revy Ross personal use",
5
5
  "license": "MIT",
6
6
  "author": "Revy Ross",
@@ -39,7 +39,7 @@ Do **not** expect lineage adapters to byte-match core. Embed adapters should mat
39
39
  | `core/quality/` | Boy-scout + Principles (always-on slim); requestable `anti-sycophancy-discipline` (~17 rules); requestable `design-guidance` (smells ≤12 + GoF ≤8) |
40
40
  | `core/agent-team/` | Orchestrator + intake (pipeline language) |
41
41
  | `core/architecture/` | Feature-delivery abstract + reference-features template + product-specs (+ product-specs-authoring) + assets/docs-specs templates |
42
- | `core/review/` | Code-review MR + technical-retro alias |
42
+ | `core/review/` | Code-review MR + technical-retro alias + mockup-review checklist + ux-design checklist |
43
43
  | `core/meta/` | Author-facing preset meta-rules |
44
44
 
45
45
  ## CLI note
@@ -103,12 +103,15 @@ A producer finishes its step by upserting only its owned artifact entry and term
103
103
  | `security-reviewer` | `security-review` | `security-review.md` |
104
104
  | `accessibility-reviewer` | `a11y-review` | `a11y-review.md` |
105
105
  | `performance-auditor` | `perf-report` | `perf-report.md` |
106
+ | `mockup-reviewer` | `mockup-review` | `mockup-review.md` |
106
107
  | `api-contract-reviewer` | `api-contract-review` | `api-contract-review.md` |
107
108
  | `qa-tester` / unit or e2e planners | stack-native test IDs | plan/spec paths named in the agent prompt |
108
109
  | `tech-writer` | `documentation` | `documentation.md` |
109
110
 
110
111
  Use these defaults unless a step's `artifactOutputId` / `artifactOutputIds` assigns a distinct owned ID (parallel reviewers must not share one `id`). `artifactInputIds` defaults to the applicable authoritative entries already present in the manifest.
111
112
 
113
+ **v1 UX artifact:** when `task-analyst` produces `ux-design.md`, append it to the **`analysis`** entry `authoritativePaths` and `evidencePaths`. Do **not** add a default producer row for `ux-designer` in v1.
114
+
112
115
  ## Minimal terminal handoff
113
116
 
114
117
  Report the owned entry ID, outcome, authoritative paths, covered AC/task IDs, and remaining gaps. The hook advances pipeline state from the terminal receipt; the agent receipt is evidence that drives the state transition, not a substitute for writing `status.json`.
@@ -20,9 +20,9 @@ Roster of specialists is **stack-specific** (agent names and write scopes differ
20
20
 
21
21
  | Kind | Examples (names vary by stack) |
22
22
  |------|--------------------------------|
23
- | Planning | `task-router`, `task-analyst`, `solution-architect`, `migration-specialist` |
23
+ | Planning | `task-router`, `task-analyst` (plus skill `ux-design` for behavioral UX **where the stack has a UI surface**), `solution-architect`, `migration-specialist` |
24
24
  | Implementation | `feature-developer`, `debugger`, `ci-investigator` |
25
- | Gates / review | `build-verifier`, `code-reviewer`, `security-reviewer`, `performance-auditor`; plus stack-native a11y/UI reviewer **only when the stack has a UI surface** |
25
+ | Gates / review | `build-verifier`, `code-reviewer`, `security-reviewer`, `performance-auditor`; plus stack-native a11y/UI reviewer and `mockup-reviewer` **only when the stack has a UI surface** |
26
26
  | Tests | unit planner/generator/healer; e2e/UI planner/generator/healer (stack-native) |
27
27
  | Docs | `tech-writer` |
28
28
 
@@ -158,8 +158,8 @@ On each `subagentStop`, the hook reconciles `status.state` from the completing p
158
158
  2. Read `pipeline.json` before every subagent invocation.
159
159
  3. One role per Task call — **except** parallel steps: multiple Task calls in one message.
160
160
  4. **Never** skip `humanGates` without `/task-continue` or explicit user approval.
161
- 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`) and update the producer-owned terminal receipt in `artifact-manifest.json`.
162
- 6. On `changes_requested` from reviewers: hook sets `retryAfterFix` → developer → same reviewer.
161
+ 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`, `mockup-review.md`, `ux-design.md`) and update the producer-owned terminal receipt in `artifact-manifest.json`.
162
+ 6. On `changes_requested` from reviewers: hook sets `retryAfterFix` → developer → same reviewer. Exception: embedded `mockup-reviewer` FAIL (`changes_requested` while the completed/current agent is `mockup-reviewer`) → `awaiting_approval` / `/task-continue` only — do **not** `retryAfterFix` to developer.
163
163
  7. On `validation_failed` from `build-verifier`: hook sets `retryAfterFix: build-verifier` → developer → build-verifier.
164
164
  8. When all steps complete, suggest `/technical-retro <slug>`.
165
165
  9. If `autoChain: false` in pipeline, do not rely on hook — manual step only.
@@ -8,7 +8,7 @@ Typical feature with data and UI. Concrete directories and rule stems — in the
8
8
  2. **Transport / DTO** — DTOs and mappers Domain ↔ transport (must not leak into UI).
9
9
  3. **Services / Data** — repository / API-service implementations via the stack’s public clients.
10
10
  4. **State** — store / ViewModel / use cases; no direct HTTP and no DTOs in UI.
11
- 5. **UI** — thin views/components; data via state; design system.
11
+ 5. **UI** — thin views/components; data via state; design system. If the prompt or `brief.md` contains a `figma.com` URL, **mockup review must complete** (or the user must continue past FAIL/`BLOCKED_MCP` via `/task-continue`) **before UI work**. When required-signal and **no** `figma.com`, **`ux-design.md` must exist** (not `INCOMPLETE`) before UI work — else blocked, hand back to analyst. Non-UI tasks no-op these gates.
12
12
  6. **Tests** — unit for mappers / non-trivial logic; e2e/UI per stack convention.
13
13
  7. **Completion** — stack post-change gate (lint/build) + package/toolchain rules.
14
14
 
@@ -59,7 +59,8 @@ Shared backend-stack bans (`go`, `java`, `php-hexagonal`, and `php-laravel`):
59
59
  - `playwright-test-`, `playwright-e2e`, `user-playwright`, `app/__tests__/e2e`
60
60
  - Positive yarn recipes `lint:js` / `lint:css`
61
61
  - `xcuitest-test-`, `instrumentation-test-`, `xcodebuild`, `SwiftLint` as required handoffs
62
- - Agent file `accessibility-reviewer` (no UI surface)
62
+ - Agent files `accessibility-reviewer`, `mockup-reviewer`, `ux-designer` (no UI surface)
63
+ - Required `skills/ux-design`, required `rules/ux-design`, or required pipeline handoff stem `ux-design`
63
64
 
64
65
  Required instead: `integration-test-*`; build-verifier / `post-change-test` plus stack tooling — `go-tooling` (`go test`, `go vet`), `java-tooling` (`mvn test` / `./gradlew test`), or `php-tooling` (`php artisan test` / `composer test` / `vendor/bin/phpunit`).
65
66
 
@@ -71,7 +72,8 @@ Same UI/mobile bans as backend stacks, plus:
71
72
  - Positive yarn recipes `lint:js` / `lint:css` as required gates
72
73
  - `xcuitest-test-`, `instrumentation-test-`, `xcodebuild`, `SwiftLint` as required handoffs
73
74
  - Go tool commands as required MCP delivery gates: `go test`, `go vet`, `golangci-lint`
74
- - Agent files: `playwright-test-*`, `xcuitest-test-*`, `instrumentation-test-*`, `integration-test-*`, `accessibility-reviewer`
75
+ - Agent files: `playwright-test-*`, `xcuitest-test-*`, `instrumentation-test-*`, `integration-test-*`, `accessibility-reviewer`, `mockup-reviewer`, `ux-designer`
76
+ - Required `skills/ux-design`, required `rules/ux-design`, or required pipeline handoff stem `ux-design`
75
77
 
76
78
  Required instead: package-manager–discovered typecheck/test (`mcp-ts-tooling`, `post-change-test`); Phase 1 gates `build-verifier` + `security-reviewer`.
77
79
 
@@ -0,0 +1,105 @@
1
+ # Mockup review checklist
2
+
3
+ On-demand reviewer checklist for Figma mockups. **Procedure:** skill `mockup-review`. **Agent:** `mockup-reviewer`. Do not inline this checklist into the agent prompt.
4
+
5
+ Stack-agnostic: no app-source globs, Playwright, or `xcodebuild`. Breakpoint **examples** live in adapter **Stack notes** only — do not FAIL on exact pixels.
6
+
7
+ ## When to load
8
+
9
+ - Pipeline step `mockup-reviewer` (standalone intent `mockup-review` or embedded after analyst)
10
+ - Prompt or `brief.md` contains a `figma.com` URL on a UI-capable stack
11
+ - User asks to review a mockup / Figma file (not a code MR)
12
+
13
+ ## Inputs
14
+
15
+ 1. Task `artifact-manifest.json`, then prompt Figma URL(s); `brief.md` / `decomposition.md` when present
16
+ 2. Skill `mockup-review` + this rule
17
+ 3. If plugin skills `figma-use` / `figma-design-to-code` are installed: **reference** them for URL parse and MCP invocation only — do not copy their bodies; do not run design-to-code
18
+
19
+ ## MCP-first
20
+
21
+ Required when MCP is up: `get_metadata`, `get_design_context`, `search_design_system`, `get_variable_defs`, `get_screenshot`. Optional: `get_libraries`, `get_code_connect_map`.
22
+
23
+ **Forbidden:** `use_figma`, `create_new_file`, `generate_*`, `weave_*`, `upload_assets`, `send_code_connect_mappings`. FigJam URL → `BLOCKED_MCP` / out of scope (do not call `get_figjam` unless the URL is a FigJam board — then still `BLOCKED_MCP`).
24
+
25
+ Cite `fileKey` + node IDs. Screenshots are supporting evidence, not a second reviewer. No screenshot-only path.
26
+
27
+ **Node caps:** ≤12 screen-level frames; `get_metadata` depth ≤3 named-frame levels; ≤3 screenshots (prefer one per small/medium/large). `search_design_system` once; `get_variable_defs` once per file. No node-id on URL: pick top-level frames matching the feature name; if still unbounded → `BLOCKED_MCP` (or `PASS_WITH_NOTES` only if MCP returned a tiny file) — do not dump the whole file.
28
+
29
+ **Degradation:** MCP unavailable or OAuth fail → verdict `BLOCKED_MCP`. Do **not** invent DS compliance claims.
30
+
31
+ ## Review dimensions
32
+
33
+ ### DS components (AC-4)
34
+
35
+ When an attached library is detectable (`search_design_system` / `get_metadata`): list **library component instances vs custom frames** with file/node references. Flag substitutions where a DS equivalent exists.
36
+
37
+ - Critical DS reimplementation (custom frame where an attached-library component exists) → **FAIL**
38
+ - One-off frame, no DS equivalent; mixed/unpublished library → WARN or notes (`PASS_WITH_NOTES`)
39
+ - No attached library detectable → notes only; do not invent DS claims (`PASS_WITH_NOTES`)
40
+
41
+ Confidence: `high` (MCP library match) / `low` (unpublished or mixed) — prefer `PASS_WITH_NOTES` over FAIL when confidence is low.
42
+
43
+ ### Tokens (AC-5)
44
+
45
+ When variables/styles are available (`get_variable_defs`, style metadata): flag fills, strokes, spacing, or typography that use raw values instead of bound variables/styles.
46
+
47
+ - Isolated unbound values → **WARN** (`PASS_WITH_NOTES`)
48
+ - Wholesale token ignore on a library-attached file (systemic; treat as critical DS with AC-4) → **FAIL**
49
+
50
+ ### Quality (AC-6)
51
+
52
+ Cover at minimum, each item PASS / WARN / FAIL eligible:
53
+
54
+ - Layer/frame naming hygiene
55
+ - Auto-layout vs absolute positioning for responsive regions
56
+ - Text style usage
57
+ - Component variant/property correctness
58
+ - Detached or orphaned component instances
59
+
60
+ Naming hygiene, minor detached instances, text-style drift → **WARN**. Detached **core** DS component that is a substitution → **FAIL** (same as AC-4 critical). Absolute layout on a region that is the only «responsive» evidence → WARN unless it also fails viewports.
61
+
62
+ ### Feature coverage (AC-7)
63
+
64
+ Map **flows → screens/frames**, **actions → interactive elements**, and **states** (empty, loading, error, success, disabled/validation). List explicit **missing** items. Label scope **`inferred`** when only a URL is provided (no brief AC).
65
+
66
+ - Missing **core** flow or primary action from brief AC (or labeled `inferred` primary flow from the URL) → **FAIL**
67
+ - Missing empty/loading/error/success on a form/list called out in AC → **FAIL**
68
+ - Missing secondary states (disabled/validation) not in AC → **WARN**
69
+
70
+ ### Viewports (AC-8)
71
+
72
+ Verify **≥3 viewport representations** (small / medium / large) via dedicated frames, Figma viewport presets, or responsive component variants.
73
+
74
+ - Fewer than 3 → **FAIL**
75
+ - 3 exist but sizes ≠ stack example buckets → **WARN** only (no exact pixel enforcement in core)
76
+
77
+ ## Severity (v1)
78
+
79
+ Isolated **WARN** never blocks. Overall verdict = worst FAIL > BLOCKED_MCP > PASS_WITH_NOTES > PASS. Multiple WARNs without FAIL → `PASS_WITH_NOTES`, not FAIL.
80
+
81
+ ## Report headings
82
+
83
+ Write `mockup-review.md` with these headings (must match the agent template):
84
+
85
+ ```markdown
86
+ # Mockup review: <slug>
87
+
88
+ ## Verdict
89
+ PASS | PASS_WITH_NOTES | FAIL | BLOCKED_MCP
90
+
91
+ ## Scope
92
+ - Figma fileKey / node IDs
93
+ - MCP: available | unavailable (reason)
94
+ - Feature scope source: brief AC | prompt | inferred
95
+
96
+ ## Critical (must fix)
97
+ ## Warnings (should fix)
98
+ ## Suggestions
99
+ ## DS compliance (AC-4, AC-5)
100
+ ## Quality (AC-6)
101
+ ## Feature coverage (AC-7)
102
+ ## Viewport matrix (AC-8)
103
+ ## AC coverage
104
+ | Criterion | Status | Notes |
105
+ ```
@@ -0,0 +1,97 @@
1
+ # UX design checklist
2
+
3
+ On-demand behavioral UX checklist (IA, named flows, state matrix). **Procedure:** skill `ux-design`. **Producer:** `task-analyst` (not a pipeline agent). Do not inline this checklist into the analyst prompt.
4
+
5
+ Stack-agnostic: no app-source globs, Playwright, or `xcodebuild`. Form-factor **examples** live in adapter **Stack notes** only.
6
+
7
+ ## When to load
8
+
9
+ - Standalone `/task` intent `ux-design` (modes `synthesize` | `review`; profile `light`; steps only `task-analyst`)
10
+ - Embedded on a UI-capable stack when **required-signal** or advisory UI AC fires on `feature` / `refactor` / `spike` / `spec-gen`
11
+ - Required-signal (any one): the user asked for UX, **or** AC explicitly require flows/states, **or** intent is `spec-gen` / `/spec-start` for a **page/feature**. Else **advisory** (notes only; skip if no UI surface)
12
+ - **Do not** load for backend-only AC even on a UI stack. Classify `mockup-review` (Figma) before `ux-design` before `review-only`
13
+
14
+ ## Inputs
15
+
16
+ 1. Task `artifact-manifest.json`, then prompt / `brief.md` / `decomposition.md` when present
17
+ 2. Skill `ux-design` + this rule
18
+ 3. Approved `docs/specs` only as product-behavior SoT **after** UX synthesis maps via Spec feed — do not write INDEX here
19
+
20
+ ## Forbidden Figma MCP
21
+
22
+ Do **not** call Figma MCP. Only `mockup-reviewer` reads Figma. Forbidden by name: `get_metadata`, `get_design_context`, `get_screenshot`, `search_design_system`, `get_variable_defs`, `use_figma`, `create_new_file`, `generate_*`.
23
+
24
+ When `figma.com` is present and required-signal fires, emit a **thin** `ux-design.md` from AC only (IA/flows the mockup must cover; no visual or DS claims). If the user only pasted a URL and AC are visual, the UX file may be omitted; `mockup-review.md` coverage stands.
25
+
26
+ Do **not** write BMAD-style `DESIGN.md` or a second visual spine. One experience artifact: `ux-design.md`.
27
+
28
+ ## Modes
29
+
30
+ | Mode | When |
31
+ |------|------|
32
+ | `synthesize` | Design UX from a brief/AC (standalone «разработай UX» / embedded required-signal) | <!-- i18n-keep: E4 -->
33
+ | `review` | Critique a brief/wireframe/description **without** Figma («ревью UX»). Figma + review-not-implement remains intent `mockup-review` | <!-- i18n-keep: E4 -->
34
+
35
+ ## Required vs advisory
36
+
37
+ - **Required** when required-signal fires (user-asked-ux / ac-requires-flows-states / spec-gen-page-feature)
38
+ - **Advisory** otherwise (UI AC without those signals). Advisory `INCOMPLETE` → notes only; DoR may complete
39
+ - Skip the skill when there is no UI surface or the prompt is empty of UX-relevant AC
40
+
41
+ ## Verdicts
42
+
43
+ `PASS` | `PASS_WITH_NOTES` | `INCOMPLETE`. Never copy the mockup FAIL-only hook (`changes_requested` + do-not-retry-developer). Incomplete UX is an analyst/DoR problem.
44
+
45
+ | Verdict | Required step | Advisory step | Standalone intent `ux-design` |
46
+ |---------|---------------|---------------|-------------------------------|
47
+ | `PASS` / `PASS_WITH_NOTES` | Analysis may complete DoR | Analysis may complete | `completed` |
48
+ | `INCOMPLETE` | DoR **not** met: `open_questions` / blocked analysis; existing `after:task-analyst` gate | Notes only; DoR may complete | `completed` (report-only) |
49
+
50
+ **Block (`INCOMPLETE` as DoR failure) only when the step was required and primary flows *or* the empty/error/loading matrix are missing.** Isolated missing microcopy or optional protagonist names never block.
51
+
52
+ ## Surface-closure
53
+
54
+ Each stated need → a surface; each surface → a flow that lands there. If closure fails, list probes under **Open probes** — **do not invent** screens, flows, or copy to fill gaps.
55
+
56
+ ## Spec feed
57
+
58
+ Analyst remains the **only** writer of `docs/specs` INDEX and page/feature files. Map `ux-design.md` → templates **after** UX synthesis (UX before `spec-authoring` author mode):
59
+
60
+ | `ux-design.md` heading | Page template | Feature template |
61
+ |------------------------|---------------|------------------|
62
+ | Scope + IA | **Overview** | **Overview** |
63
+ | Entry / actors | **Entry / actors** | — (page-level) |
64
+ | Primary flows | **Primary flows** | **Shared behavior / constraints** when a flow is cross-page |
65
+ | States | **States** (loading/empty/error/success) | **Cross-cutting states** when shared |
66
+ | Interaction notes + microcopy direction | Inform **Acceptance criteria**; leftover → **Edge cases** | Shared constraints |
67
+ | Accessibility floor (behavioral) | Testable AC without pixels; else Edge cases | Shared constraints |
68
+ | Surface-closure probes | Analyst `open_questions` — **do not** invent spec rows | Same |
69
+
70
+ ## Manifest
71
+
72
+ When produced, append `ux-design.md` to the **`analysis`** entry `authoritativePaths` and `evidencePaths`. Do **not** add a new default producer row for v1 (`ux-designer` is deferred).
73
+
74
+ ## Report headings
75
+
76
+ Write `ux-design.md` with these headings (must match the architecture artifact contract):
77
+
78
+ ```markdown
79
+ # UX design: <slug>
80
+ ## Mode
81
+ synthesize | review
82
+ ## Verdict
83
+ PASS | PASS_WITH_NOTES | INCOMPLETE
84
+ ## Scope
85
+ - Form factor: web | ios | android | mixed
86
+ - Figma present: yes | no
87
+ - Required-signal: user-asked-ux | ac-requires-flows-states | spec-gen-page-feature | advisory
88
+ ## Information architecture
89
+ ## Entry / actors
90
+ ## Primary flows
91
+ ## States
92
+ ## Interaction notes
93
+ ## Microcopy direction
94
+ ## Accessibility floor (behavioral)
95
+ ## Spec feed
96
+ ## Open probes
97
+ ```
@@ -27,7 +27,7 @@ When copying next pipeline templates: put Playwright / XCUITest / integration-te
27
27
  | feature-developer | yes (Kotlin/Android sources) |
28
28
  | build-verifier | no (report only) |
29
29
  | debugger, ci-investigator | minimal |
30
- | code-reviewer, accessibility-reviewer, security-reviewer, performance-auditor | team only |
30
+ | code-reviewer, accessibility-reviewer, security-reviewer, performance-auditor, mockup-reviewer | team only |
31
31
  | qa-tester, unit-test-*, instrumentation-test-* | tests only |
32
32
  | tech-writer | docs only |
33
33
 
@@ -37,7 +37,7 @@ When copying next pipeline templates: put Playwright / XCUITest / integration-te
37
37
  |------|------------|----------------|
38
38
  | **cheap** | `fast` / cheap | build-verifier, some generators/healers |
39
39
  | **standard** | `inherit` | feature-developer, debugger, ci-investigator, a11y, qa, unit-*, instrumentation-* |
40
- | **strong** | `strong` | solution-architect, security-reviewer (when scheduled) |
40
+ | **strong** | `strong` | solution-architect, security-reviewer, mockup-reviewer (when scheduled) |
41
41
 
42
42
  ## Pipeline schema
43
43
 
@@ -46,6 +46,12 @@ When validating **android-kotlin preset** changes (or `scope: preset-structure-v
46
46
  13. **AC-11 vendor neutrality:** no private consumer repo names, brand/product vendor strings, or org-specific type names in `presets/{cursor,claude}/android-kotlin/**`.
47
47
  14. Prefer `yarn check:preset-structure` (twin-map + token-budget + leakage + i18n).
48
48
 
49
+
50
+ **mockup-reviewer (UI):** `agents/mockup-reviewer.md` and `skills/mockup-review/` must exist (Cursor + Claude). Missing → **FAIL**. Backend stacks must **not** ship that agent file or a required `mockup-reviewer` chain handoff → **FAIL** if present.
51
+
52
+ **ux-design (UI):** `skills/ux-design/` and requestable rule `ux-design` (`ux-design.mdc` / `tooling-and-review/ux-design.md`) must exist (Cursor + Claude). Missing → **FAIL**. Do **not** require `agents/ux-designer.md`. Backend stacks must **not** ship that agent file or a required `ux-design` skill/rule/handoff → **FAIL** if present.
53
+
54
+
49
55
  ### Soft rules
50
56
 
51
57
  - Thin aliases (`agent-team-intake`, `technical-retro`) may be &lt;15 body lines; domain rules ≥15.
@@ -55,6 +55,12 @@ Emit the owned implementation receipt with outcome `completed`. Handoff by layer
55
55
 
56
56
  - When writing or changing code, load / follow rule `anti-sycophancy-discipline`.
57
57
 
58
+ ## UX design (behavioral)
59
+
60
+ Read order when present: manifest → `brief.md` / `decomposition.md` → **`ux-design.md`** (when listed on `analysis`) → approved `docs/specs` (behavior SoT) → **`mockup-review.md`** when Figma was in scope → `architecture.md`.
61
+
62
+ If required-signal fired (user asked UX, AC require flows/states, or spec-gen page/feature) and there is **no** `figma.com` URL, and `ux-design.md` is absent or verdict `INCOMPLETE` without user continue → emit **`blocked`** and hand back to `task-analyst`. Do not invent flows/states. Advisory / no UI AC / Figma-only visual tweak with mockup PASS → proceed from brief + mockup-review; do not demand a UX file.
63
+
58
64
  ## Product specs (docs/specs)
59
65
 
60
66
  When work touches a page/feature/route/alias: if `docs/specs/INDEX.md` exists (or brief lists approved specs), load **`product-specs`** and treat **approved** specs from brief/handoff as **behavior SoT**. Soft-fail on miss (`open_questions` + code / `.ai/context` fallback); **never invent** product behavior.
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: mockup-reviewer
3
+ description: Figma mockup review specialist. Audits design-system usage, tokens, mockup quality, feature coverage, and viewport matrix. Writes mockup-review.md only; never edits production code or Figma.
4
+ model: opus
5
+ ---
6
+
7
+ You are a Figma mockup reviewer for an Android Kotlin / Jetpack Compose frontend.
8
+
9
+ You write **only** `.claude/team/tasks/<slug>/mockup-review.md` (and the owned manifest receipt). Never edit production code, `packages/**`, app sources, or Figma (no `use_figma` writes).
10
+
11
+ ## Inputs
12
+
13
+ 1. `.claude/team/tasks/<slug>/artifact-manifest.json`.
14
+ 2. Prompt Figma URL(s); `brief.md` / `decomposition.md` when present.
15
+ 3. Requestable skill `mockup-review` and rule `mockup-review` (core checklist — do not inline it here).
16
+ 4. If plugin skills `figma-use` / `figma-design-to-code` are installed: **reference** them for URL parse and MCP invocation only — do not copy their bodies; do not run design-to-code.
17
+
18
+ ## MCP tools
19
+
20
+ **Required when MCP is up:** `get_metadata`, `get_design_context`, `search_design_system`, `get_variable_defs`, `get_screenshot`.
21
+
22
+ **Optional:** `get_libraries`, `get_code_connect_map`.
23
+
24
+ **Forbidden:** `use_figma`, `create_new_file`, `generate_*`, `weave_*`, `upload_assets`, `send_code_connect_mappings`. FigJam URL → `BLOCKED_MCP`.
25
+
26
+ Cite `fileKey` + node IDs. Screenshot is supporting evidence, not a second reviewer.
27
+
28
+ **Node caps:** ≤12 screen-level frames; `get_metadata` depth ≤3; ≤3 screenshots (prefer one per small/medium/large). `search_design_system` once; `get_variable_defs` once per file. Unbounded file without a frame link → `BLOCKED_MCP` (do not dump the whole file).
29
+
30
+ MCP unavailable or OAuth fail → verdict `BLOCKED_MCP`. Do not invent DS claims.
31
+
32
+ ## Review dimensions
33
+
34
+ Follow the requestable `mockup-review` checklist (DS components, tokens, quality, coverage, viewports). Do not duplicate that checklist here.
35
+
36
+ ## Output
37
+
38
+ Write `.claude/team/tasks/<slug>/mockup-review.md` using the report headings in the `mockup-review` rule.
39
+
40
+ ## Verdicts and receipts
41
+
42
+ Report verdict: `PASS | PASS_WITH_NOTES | FAIL | BLOCKED_MCP`.
43
+
44
+ | Verdict | Standalone receipt | Embedded receipt | Artifact `status` |
45
+ |---------|--------------------|------------------|-------------------|
46
+ | `PASS` / `PASS_WITH_NOTES` | `completed` | `completed` | `completed` |
47
+ | `FAIL` | `completed` (report-only, like `perf-audit`) | `changes_requested` | `blocked` |
48
+ | `BLOCKED_MCP` | `blocked` | `blocked` | `blocked` |
49
+
50
+ Standalone FAIL must **not** set `changes_requested`. Embedded FAIL is a FAIL-only hook gate — resume **only** via `/task-continue` (hook must not `scheduleRetry('feature-developer')`).
51
+
52
+ ## Artifact contract
53
+
54
+ - **Authoritative inputs:** read `.claude/team/tasks/<slug>/artifact-manifest.json` first; consume handoff `artifactInputIds` when supplied, otherwise consume the manifest entries for routing + analysis when present (standalone may have only the prompt + URL).
55
+ - **Owned outputs:** `mockup-review.md`; upsert only the manifest entry assigned by handoff (`artifactOutputId`; fallback `mockup-review`) and preserve all foreign entries.
56
+ - **Terminal receipt:** cover applicable AC/task IDs, list authoritative evidence paths, and emit `completed`, `changes_requested`, or `blocked` per the table above. Bind it to the supplied `attemptId` when present.
57
+ - **Shared state:** never create or mutate `status.json` or `metrics.json`; the orchestration runtime/hook owns lifecycle, gates, retries, attempts, and timestamps.
58
+
59
+ Do not modify production code or tests.
@@ -47,9 +47,26 @@ Add to `brief.md`:
47
47
  ```
48
48
 
49
49
 
50
+ ## UX design (behavioral)
51
+
52
+ Load requestable skill **`ux-design`** and rule **`ux-design`** when:
53
+ - standalone router intent `ux-design`, or
54
+ - **required-signal:** the user asked for UX, **or** AC explicitly require flows/states, **or** `spec-gen` / `/spec-start` for a **page/feature**, or
55
+ - advisory UI AC on this UI stack (notes only; skip if no UI surface).
56
+
57
+ **Order:** write `ux-design.md` **before** author mode / skill `spec-authoring` when both apply. You remain the only INDEX writer.
58
+
59
+ Write `.claude/team/tasks/<slug>/ux-design.md` with the headings in rule `ux-design` (Mode, Verdict, Scope, IA, Entry/actors, Primary flows, States, Interaction notes, Microcopy direction, Accessibility floor, Spec feed, Open probes). Modes: `synthesize` | `review`.
60
+
61
+ **Required vs advisory:** required-signal + missing named primary flows **or** empty/error/loading matrix → DoR not met (`open_questions` / blocked analysis). Isolated missing microcopy never blocks. Advisory `INCOMPLETE` → notes only. Do **not** copy the mockup FAIL-only hook.
62
+
63
+ **Forbidden:** Figma MCP tools (`get_metadata`, `get_design_context`, `get_screenshot`, `search_design_system`, `get_variable_defs`, `use_figma`, `create_new_file`, `generate_*`). When Figma is present and required-signal fires, emit a **thin** `ux-design.md` from AC only (no visual claims). Only `mockup-reviewer` reads Figma.
64
+
65
+ When produced, append `ux-design.md` to this step's **`analysis`** `authoritativePaths` / `evidencePaths`. No new manifest producer row.
66
+
50
67
  ## Artifact contract
51
68
 
52
69
  - **Authoritative inputs:** read `.claude/team/tasks/<slug>/artifact-manifest.json` first; consume `pipeline.json`, the manifest routing entry, user-approved decisions, and any authoritative architecture/approval entries.
53
- - **Owned outputs:** `brief.md` and `decomposition.md`; upsert only the manifest entry assigned by handoff (`artifactOutputId`; fallback `analysis`) and preserve all foreign entries.
70
+ - **Owned outputs:** `brief.md` and `decomposition.md` (plus `ux-design.md` when produced); upsert only the manifest entry assigned by handoff (`artifactOutputId`; fallback `analysis`) and preserve all foreign entries.
54
71
  - **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
72
  - **Shared state:** never create or mutate `status.json` or `metrics.json`; the orchestration runtime/hook owns lifecycle, gates, retries, attempts, and timestamps.
@@ -23,6 +23,8 @@ You are a task router for an **Android Kotlin/Jetpack Compose** agent team. You
23
23
  | `migration` | “migration”, “upgrade”, “update Android Studio / AGP/Gradle modules” | task-analyst → migration-specialist → feature-developer → build-verifier → code-reviewer |
24
24
  | `perf-audit` | “performance”, “Profiler”, “Macrobenchmark”, “launch”, “slow” | performance-auditor |
25
25
  | `a11y` | “a11y”, “TalkBack”, “font scale”, “semantics”, “contentDescription”, “accessibility” | task-analyst → feature-developer → build-verifier → accessibility-reviewer → code-reviewer |
26
+ | `mockup-review` | “mockup review”, “check Figma”, “figma review”, mockup + review verb, `figma.com` + review-not-implement | mockup-reviewer |
27
+ | `ux-design` | «разработай UX» (design UX), «спроектируй» (design) flows, “journey”, “IA”, “state matrix”, «ревью UX» (UX review) without Figma | task-analyst | <!-- i18n-keep: E4 -->
26
28
  | `review-only` | “review”, “review MR”, “check the diff” | code-reviewer |
27
29
  | `test-only` | “cover with tests” (unit+UI, no impl) | task-analyst → qa-tester |
28
30
  | `unit-only` | “unit”, “JUnit”, “cover mapper” | unit-test-planner → unit-test-generator, or unit-test-healer |
@@ -33,10 +35,15 @@ You are a task router for an **Android Kotlin/Jetpack Compose** agent team. You
33
35
  | `retro` | “retro”, “postmortem” | (orchestrator → `/technical-retro`) |
34
36
 
35
37
  **Never schedule Playwright agents** (`playwright-test-*`). If a next template mentions them, put in `skipped` with reason "Android uses Android instrumentation" and use instrumentation-test trio.
38
+ **Light by intent:** `mockup-review` → only `mockup-reviewer` (`model: "strong"`, never `cheap`). `ux-design` → only `task-analyst` (skill `ux-design`; analyst default model, not `strong`). Classify `mockup-review` **before** `ux-design` **before** `review-only`. A `figma.com` URL with review-not-implement language remains `mockup-review` even if the user said «ревью UX». <!-- i18n-keep: E4 -->
39
+ **Embed UX:** on `feature` / `refactor` / `spike` / `spec-gen` with required-signal or advisory UI AC, instruct **task-analyst** to load skill `ux-design` (no new pipeline step).
40
+
41
+ **Embed `figma.com`:** on `feature` / `refactor` / `spike` / `spec-gen`, insert `mockup-reviewer` after `task-analyst` (when present) and before `solution-architect` and `feature-developer`. Do **not** add static `humanGates: ["after:mockup-reviewer"]` (FAIL-only gate is a hook exception). Never put `mockup-reviewer` in a `parallel: true` step.
42
+
36
43
 
37
44
  ## Pipeline profiles
38
45
 
39
- `"profile": "full" | "standard" | "light"`. Default: **standard** for feature/refactor/bugfix; **light** for review-only/perf; **full** when cross-layer or UI-test AC.
46
+ `"profile": "full" | "standard" | "light"`. Default: **standard** for feature/refactor/bugfix; **light** for review-only/perf/mockup-review/ux-design; **full** when cross-layer or UI-test AC.
40
47
 
41
48
  **Never skip `build-verifier`** after developer when Kotlin/Android Studio / AGP sources changed.
42
49
 
@@ -66,7 +73,7 @@ Keep top-level `profile` and emit this top-level object in every new `pipeline.j
66
73
  Optional: `"model": "cheap" | "standard" | "strong"`. Same policy as **cursor/next** `task-router.md`:
67
74
 
68
75
  - `light` → `cheap` on all steps (debugger unclear root cause → `strong`)
69
- - `full` / `spike` / security|perf specialists → `strong` on architect, migration, security, perf steps
76
+ - `full` / `spike` / security|perf|mockup specialists → `strong` on architect, migration, security, perf, and `mockup-reviewer` steps
70
77
  - never `strong` on build-verifier / tech-writer / task-router
71
78
  - omit on `standard` → agent frontmatter (`fast` / `inherit` / `claude-opus-4-8[effort=high]`)
72
79
 
@@ -81,6 +88,8 @@ Fixtures: `.claude/team/fixtures/` (feature-full, feature-light, bugfix-standard
81
88
  | unit-only | `["after:unit-test-planner"]` when new plan |
82
89
  | e2e-only | `["after:instrumentation-test-planner"]` when new plan |
83
90
  | bugfix, review-only, ci-fix | `[]` |
91
+ | mockup-review | `[]` |
92
+ | ux-design | `[]` |
84
93
  | spike | `["after:solution-architect"]` |
85
94
 
86
95
  ## Output
@@ -32,17 +32,19 @@ printf '%s\n' '{"status":"completed","action":"end_human_gate","activateNext":tr
32
32
 
33
33
  3. Re-read `status.json` (and the hook `followup_message`).
34
34
  4. Invoke the subagent named in `status.currentAgent` / followup — do **not** advance the pipeline a second time.
35
- 3. **Review `changes_requested`** (not a human gate): set `currentAgent` to `feature-developer` (same index / find developer in steps), `state: in_progress`, then invoke developer. Do **not** call `end_human_gate` unless `activeHumanGateEventId` is set.
36
- 4. **Other resume**: restore `pipelineIndex` / `currentAgent` from status and invoke that agent.
37
- 5. After the invoked agent completes, `chain-team-phases.sh` on `subagentStop` continues the chain when `autoChain: true`.
35
+ 3. **Review `changes_requested`** (not a human gate): if `currentAgent` is **`mockup-reviewer`**, this is the FAIL-only mockup gate — do **not** retry `feature-developer`. Read `mockup-review.md` and resume via the human-gate path (`end_human_gate` / `activateNext`). Otherwise: set `currentAgent` to `feature-developer` (same index / find developer in steps), `state: in_progress`, then invoke developer. Do **not** call `end_human_gate` unless `activeHumanGateEventId` is set.
36
+ 4. **`blocked` + `currentAgent: mockup-reviewer`** (`BLOCKED_MCP`): skip-forward via the same `end_human_gate`/`activateNext` path (explicit «proceed without MCP»). Do not invent DS claims.
37
+ 5. **Other resume**: restore `pipelineIndex` / `currentAgent` from status and invoke that agent.
38
+ 6. After the invoked agent completes, `chain-team-phases.sh` on `subagentStop` continues the chain when `autoChain: true`.
38
39
 
39
40
  ## Artifacts for handoff
40
41
 
41
42
  | Agent | Read |
42
43
  |-------|------|
43
- | feature-developer | brief.md (incl. **Related specs**), decomposition.md, validation-report.md (if retry), review.md (if retry), architecture.md; if `docs/specs/INDEX.md` exists → load **`product-specs`** |
44
+ | feature-developer | brief.md (incl. **Related specs**), decomposition.md, ux-design.md (if present), mockup-review.md (if present), validation-report.md (if retry), review.md (if retry), architecture.md; if `docs/specs/INDEX.md` exists → load **`product-specs`** |
44
45
  | build-verifier | git diff, decomposition.md |
45
46
  | code-reviewer | brief.md, validation-report.md, git diff |
47
+ | mockup-reviewer | mockup-review.md |
46
48
  | qa-tester | brief.md, decomposition.md, scope from pipeline step |
47
49
 
48
50
  ## Product specs (docs/specs)
@@ -22,6 +22,8 @@ Examples:
22
22
  - `/task Write a changelog for the filters release`
23
23
  - `/task Review my changes in features/Orders`
24
24
  - `/task Write an Android instrumentation for the payment flow`
25
+ - `/task Review mockup https://figma.com/design/...`
26
+ - `/task Design UX flows for Order History` (no Figma)
25
27
 
26
28
  ## Algorithm
27
29
 
@@ -135,6 +135,7 @@ const DEFAULT_ARTIFACT_OUTPUT_IDS = {
135
135
  'security-reviewer': 'security-review',
136
136
  'accessibility-reviewer': 'a11y-review',
137
137
  'performance-auditor': 'perf-report',
138
+ 'mockup-reviewer': 'mockup-review',
138
139
  'api-contract-reviewer': 'api-contract-review',
139
140
  'tech-writer': 'documentation',
140
141
  };
@@ -313,6 +314,8 @@ const AGENT_HANDOFF = {
313
314
  `Invoke accessibility-reviewer (readonly) for slug "${s}". Review Presentation/Jetpack Compose (or Android View system) diff for TalkBack/font scale/semantics/testTag; write a11y-review.md. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
314
315
  'performance-auditor': (s) =>
315
316
  `Invoke performance-auditor (readonly) for slug "${s}". Audit launch/Jetpack Compose performance risks; write perf-report.md. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
317
+ 'mockup-reviewer': (s) =>
318
+ `Invoke mockup-reviewer (readonly) for slug "${s}". Write mockup-review.md. Load requestable mockup-review skill/rule. Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
316
319
  'code-reviewer': (s) =>
317
320
  `Invoke code-reviewer subagent (readonly) for slug "${s}". Review git diff vs brief.md per tooling-and-review/code-review.md. ` +
318
321
  `Upsert the owned terminal receipt in artifact-manifest.json; do not mutate status.json lifecycle fields.`,
@@ -593,6 +596,18 @@ if (currentStep?.parallel && stepAgents.length > 1) {
593
596
  }
594
597
 
595
598
  const retryReviewer = stepAgents.find((agent) => outcomes[agent]?.outcome === 'changes_requested');
599
+ if (retryReviewer === 'mockup-reviewer') {
600
+ beginHumanGate();
601
+ writeStatus({
602
+ awaitingHumanGate: true,
603
+ state: 'awaiting_approval',
604
+ currentAgent: 'mockup-reviewer',
605
+ parallelCompleted: [],
606
+ parallelOutcomes: {},
607
+ });
608
+ out(`Mockup review FAIL for slug "${slug}". Read mockup-review.md. Resume only via /task-continue. Do not retry feature-developer.`);
609
+ process.exit(0);
610
+ }
596
611
  if (retryReviewer) {
597
612
  const retryAfterFixStepIndex = idx;
598
613
  const predecessor = outcomes[retryReviewer] ? { attemptId: outcomes[retryReviewer].attemptId, confidence: outcomes[retryReviewer].confidence } : finishedAttempt;
@@ -610,6 +625,17 @@ if (status.state === 'blocked') {
610
625
  process.exit(0);
611
626
  }
612
627
 
628
+ if (status.state === 'changes_requested' && (completedAgent === 'mockup-reviewer' || status.currentAgent === 'mockup-reviewer')) {
629
+ beginHumanGate();
630
+ writeStatus({
631
+ awaitingHumanGate: true,
632
+ state: 'awaiting_approval',
633
+ currentAgent: 'mockup-reviewer',
634
+ });
635
+ out(`Mockup review FAIL for slug "${slug}". Read mockup-review.md. Resume only via /task-continue. Do not retry feature-developer.`);
636
+ process.exit(0);
637
+ }
638
+
613
639
  if (status.state === 'changes_requested') {
614
640
  const reviewer = status.currentAgent || finishedAttempt?.entry?.agent;
615
641
  if (!reviewer) {
@@ -47,6 +47,8 @@ In Claude Code all `.md` files under `rules/` are **discovered recursively**. Bo
47
47
  | `agent-team-intake.mdc` | `tooling-and-review/agent-team-intake.md` |
48
48
  | `agent-team-orchestrator.mdc` | `tooling-and-review/agent-team-orchestrator.md` |
49
49
  | `technical-retro.mdc` | `tooling-and-review/technical-retro.md` |
50
+ | `mockup-review.mdc` | `tooling-and-review/mockup-review.md` |
51
+ | `ux-design.mdc` | `tooling-and-review/ux-design.md` |
50
52
  | `preset-layering.mdc` | `tooling-and-review/preset-layering.md` |
51
53
  | `preset-twin-sync.mdc` | `tooling-and-review/preset-twin-sync.md` |
52
54
  | `preset-token-budget.mdc` | `tooling-and-review/preset-token-budget.md` |