agents-inc 0.162.0 → 0.164.0

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 (341) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/{chunk-HRVPZMKK.js → chunk-2CQNPLVF.js} +35 -14
  3. package/dist/chunk-2CQNPLVF.js.map +1 -0
  4. package/dist/{chunk-VFZF7LVY.js → chunk-3WVH2CTK.js} +3 -3
  5. package/dist/{chunk-5J6DO4VW.js → chunk-4VL3CEOS.js} +3 -3
  6. package/dist/{chunk-QM3ZNOWJ.js → chunk-6MV4JOCL.js} +2 -2
  7. package/dist/{chunk-WIJM6BX6.js → chunk-7ANJQLPJ.js} +2 -2
  8. package/dist/{chunk-3JDVBHWO.js → chunk-7REKOTKG.js} +2 -2
  9. package/dist/{chunk-MI7LKLD7.js → chunk-ABAZMMG4.js} +2 -2
  10. package/dist/{chunk-XSM3IBMG.js → chunk-AOTCIUGX.js} +2 -2
  11. package/dist/{chunk-L65XGQKR.js → chunk-ARYNOWKF.js} +8 -8
  12. package/dist/{chunk-3QBOVV6A.js → chunk-AVK2HEKB.js} +5 -5
  13. package/dist/{chunk-3QBOVV6A.js.map → chunk-AVK2HEKB.js.map} +1 -1
  14. package/dist/{chunk-AQSMNUKJ.js → chunk-B3Y3QMWI.js} +4 -4
  15. package/dist/{chunk-ES7WGE32.js → chunk-B6FSLXYN.js} +3 -3
  16. package/dist/{chunk-S6GX7IJ2.js → chunk-DSL66I4N.js} +6 -6
  17. package/dist/{chunk-IMTWWA3N.js → chunk-ECURHW3T.js} +12 -12
  18. package/dist/{chunk-VEONZFTL.js → chunk-FLW25ORT.js} +3 -3
  19. package/dist/{chunk-53XPSAJ4.js → chunk-G2JJ5BO5.js} +17 -16
  20. package/dist/chunk-G2JJ5BO5.js.map +1 -0
  21. package/dist/{chunk-H2MDPOLG.js → chunk-JIERYE6B.js} +5 -5
  22. package/dist/{chunk-GFO55TMY.js → chunk-JU4ZGJ7A.js} +100 -24
  23. package/dist/chunk-JU4ZGJ7A.js.map +1 -0
  24. package/dist/{chunk-K26SBQLO.js → chunk-K5ITEA3I.js} +4 -4
  25. package/dist/{chunk-4KVJJJG2.js → chunk-LT5GXEB2.js} +6 -6
  26. package/dist/{chunk-2IMHZEIK.js → chunk-NKGYKOB7.js} +3 -3
  27. package/dist/{chunk-X6KXPRKI.js → chunk-NQXO4LR3.js} +4 -4
  28. package/dist/{chunk-ZFPQM63K.js → chunk-NTF4UXGK.js} +5 -5
  29. package/dist/{chunk-77YZFVQD.js → chunk-PHCPUQVR.js} +2 -2
  30. package/dist/{chunk-T2RPUNYP.js → chunk-Q4IRRVXK.js} +3 -3
  31. package/dist/{chunk-EN5MEPAS.js → chunk-QGUP3QJF.js} +5 -5
  32. package/dist/{chunk-MSUTHS2V.js → chunk-QZX7SYKU.js} +2 -2
  33. package/dist/{chunk-BR3TNSO3.js → chunk-RGYDFBCT.js} +4 -4
  34. package/dist/{chunk-4NAWM4OQ.js → chunk-S63LXWMC.js} +2 -2
  35. package/dist/{chunk-IV42Z63R.js → chunk-UITEKY2R.js} +19 -9
  36. package/dist/chunk-UITEKY2R.js.map +1 -0
  37. package/dist/{chunk-RMMEYCEA.js → chunk-URXIQE7I.js} +2 -2
  38. package/dist/{chunk-57YWAMNT.js → chunk-V5GLL2JB.js} +7 -7
  39. package/dist/{chunk-C53RJ7AA.js → chunk-X37UYIE3.js} +43 -41
  40. package/dist/chunk-X37UYIE3.js.map +1 -0
  41. package/dist/{chunk-J2YG7P7L.js → chunk-X4SSJZLY.js} +49 -6
  42. package/dist/chunk-X4SSJZLY.js.map +1 -0
  43. package/dist/{chunk-VEBEGZUV.js → chunk-XATLUKXK.js} +5 -5
  44. package/dist/{chunk-33ZKIYJM.js → chunk-XHPWTL4I.js} +3 -3
  45. package/dist/{chunk-UNASGGW2.js → chunk-XPDVAJDH.js} +69 -8
  46. package/dist/chunk-XPDVAJDH.js.map +1 -0
  47. package/dist/{chunk-FL2CJ5T5.js → chunk-YRS3QZP2.js} +3 -3
  48. package/dist/{chunk-FXL63LDL.js → chunk-ZVXGW2IC.js} +2 -2
  49. package/dist/commands/build/marketplace.js +7 -7
  50. package/dist/commands/build/plugins.js +7 -7
  51. package/dist/commands/compile.js +82 -30
  52. package/dist/commands/compile.js.map +1 -1
  53. package/dist/commands/doctor.js +10 -10
  54. package/dist/commands/doctor.js.map +1 -1
  55. package/dist/commands/edit.js +40 -38
  56. package/dist/commands/edit.js.map +1 -1
  57. package/dist/commands/eject.js +10 -10
  58. package/dist/commands/init.js +36 -36
  59. package/dist/commands/list.js +8 -8
  60. package/dist/commands/new/marketplace.js +7 -7
  61. package/dist/commands/search.js +10 -10
  62. package/dist/commands/share.js +8 -8
  63. package/dist/commands/uninstall.js +11 -11
  64. package/dist/commands/update.js +6 -6
  65. package/dist/components/common/removal-plan-confirm.js +2 -2
  66. package/dist/components/common/select-list.js +2 -2
  67. package/dist/components/wizard/category-grid.js +4 -4
  68. package/dist/components/wizard/checkbox-grid.js +4 -4
  69. package/dist/components/wizard/domain-selection.js +9 -9
  70. package/dist/components/wizard/run-wizard-session.js +26 -26
  71. package/dist/components/wizard/scroll-affordance.js +2 -2
  72. package/dist/components/wizard/skill-agent-summary.js +5 -5
  73. package/dist/components/wizard/source-grid.js +5 -5
  74. package/dist/components/wizard/stack-selection.js +7 -7
  75. package/dist/components/wizard/step-agents.js +8 -8
  76. package/dist/components/wizard/step-build.js +7 -7
  77. package/dist/components/wizard/step-confirm.js +9 -9
  78. package/dist/components/wizard/step-sources.js +8 -8
  79. package/dist/components/wizard/step-stack.js +8 -8
  80. package/dist/components/wizard/summary-panel.js +8 -8
  81. package/dist/components/wizard/toast.js +2 -2
  82. package/dist/components/wizard/wizard-layout.js +12 -12
  83. package/dist/components/wizard/wizard-tabs.js +2 -2
  84. package/dist/components/wizard/wizard.js +25 -25
  85. package/dist/hooks/init.js +36 -36
  86. package/dist/load-agent-defs-7IM3GBEQ.js +13 -0
  87. package/dist/recompile-project-agents-VR4NLGOU.js +17 -0
  88. package/dist/{source-loader-KAWB76OH.js → source-loader-GRBVNRAW.js} +4 -4
  89. package/dist/src/agents/_templates/agent.liquid +30 -122
  90. package/dist/src/agents/_templates/methodologies/operating-principles.liquid +27 -0
  91. package/dist/src/agents/developer/ai-developer/critical-reminders.md +9 -48
  92. package/dist/src/agents/developer/ai-developer/critical-requirements.md +29 -47
  93. package/dist/src/agents/developer/ai-developer/identity.md +31 -40
  94. package/dist/src/agents/developer/ai-developer/output.md +92 -245
  95. package/dist/src/agents/developer/ai-developer/playbook.md +116 -270
  96. package/dist/src/agents/developer/api-developer/critical-reminders.md +9 -40
  97. package/dist/src/agents/developer/api-developer/critical-requirements.md +19 -34
  98. package/dist/src/agents/developer/api-developer/identity.md +18 -33
  99. package/dist/src/agents/developer/api-developer/output.md +118 -255
  100. package/dist/src/agents/developer/api-developer/playbook.md +103 -284
  101. package/dist/src/agents/developer/cli-developer/critical-reminders.md +9 -45
  102. package/dist/src/agents/developer/cli-developer/critical-requirements.md +21 -39
  103. package/dist/src/agents/developer/cli-developer/identity.md +22 -36
  104. package/dist/src/agents/developer/cli-developer/output.md +72 -185
  105. package/dist/src/agents/developer/cli-developer/playbook.md +107 -307
  106. package/dist/src/agents/developer/web-developer/critical-reminders.md +9 -34
  107. package/dist/src/agents/developer/web-developer/critical-requirements.md +11 -30
  108. package/dist/src/agents/developer/web-developer/identity.md +15 -15
  109. package/dist/src/agents/developer/web-developer/output.md +67 -220
  110. package/dist/src/agents/developer/web-developer/playbook.md +93 -283
  111. package/dist/src/agents/meta/agent-summoner/critical-reminders.md +6 -39
  112. package/dist/src/agents/meta/agent-summoner/critical-requirements.md +6 -44
  113. package/dist/src/agents/meta/agent-summoner/identity.md +20 -23
  114. package/dist/src/agents/meta/agent-summoner/metadata.yaml +1 -1
  115. package/dist/src/agents/meta/agent-summoner/output.md +85 -261
  116. package/dist/src/agents/meta/agent-summoner/playbook.md +220 -1398
  117. package/dist/src/agents/meta/codex-keeper/critical-reminders.md +11 -32
  118. package/dist/src/agents/meta/codex-keeper/critical-requirements.md +32 -22
  119. package/dist/src/agents/meta/codex-keeper/identity.md +31 -32
  120. package/dist/src/agents/meta/codex-keeper/output.md +49 -335
  121. package/dist/src/agents/meta/codex-keeper/playbook.md +164 -1110
  122. package/dist/src/agents/meta/convention-keeper/critical-reminders.md +11 -26
  123. package/dist/src/agents/meta/convention-keeper/critical-requirements.md +36 -25
  124. package/dist/src/agents/meta/convention-keeper/identity.md +35 -21
  125. package/dist/src/agents/meta/convention-keeper/metadata.yaml +1 -1
  126. package/dist/src/agents/meta/convention-keeper/output.md +33 -123
  127. package/dist/src/agents/meta/convention-keeper/playbook.md +64 -144
  128. package/dist/src/agents/meta/skill-summoner/critical-reminders.md +8 -71
  129. package/dist/src/agents/meta/skill-summoner/critical-requirements.md +9 -73
  130. package/dist/src/agents/meta/skill-summoner/identity.md +18 -22
  131. package/dist/src/agents/meta/skill-summoner/metadata.yaml +1 -1
  132. package/dist/src/agents/meta/skill-summoner/output.md +164 -270
  133. package/dist/src/agents/meta/skill-summoner/playbook.md +150 -1398
  134. package/dist/src/agents/planning/pm/critical-requirements.md +23 -25
  135. package/dist/src/agents/planning/pm/identity.md +24 -23
  136. package/dist/src/agents/planning/pm/output.md +5 -9
  137. package/dist/src/agents/planning/pm/playbook.md +50 -140
  138. package/dist/src/agents/researcher/ai-researcher/critical-reminders.md +8 -53
  139. package/dist/src/agents/researcher/ai-researcher/critical-requirements.md +31 -26
  140. package/dist/src/agents/researcher/ai-researcher/identity.md +36 -77
  141. package/dist/src/agents/researcher/ai-researcher/output.md +44 -151
  142. package/dist/src/agents/researcher/ai-researcher/playbook.md +130 -394
  143. package/dist/src/agents/researcher/api-researcher/critical-reminders.md +6 -38
  144. package/dist/src/agents/researcher/api-researcher/critical-requirements.md +15 -17
  145. package/dist/src/agents/researcher/api-researcher/identity.md +29 -63
  146. package/dist/src/agents/researcher/api-researcher/output.md +61 -153
  147. package/dist/src/agents/researcher/api-researcher/playbook.md +63 -140
  148. package/dist/src/agents/researcher/cli-researcher/critical-reminders.md +8 -45
  149. package/dist/src/agents/researcher/cli-researcher/critical-requirements.md +29 -24
  150. package/dist/src/agents/researcher/cli-researcher/identity.md +36 -78
  151. package/dist/src/agents/researcher/cli-researcher/output.md +22 -128
  152. package/dist/src/agents/researcher/cli-researcher/playbook.md +108 -263
  153. package/dist/src/agents/researcher/web-researcher/critical-reminders.md +5 -34
  154. package/dist/src/agents/researcher/web-researcher/critical-requirements.md +11 -16
  155. package/dist/src/agents/researcher/web-researcher/identity.md +28 -60
  156. package/dist/src/agents/researcher/web-researcher/output.md +41 -134
  157. package/dist/src/agents/researcher/web-researcher/playbook.md +48 -162
  158. package/dist/src/agents/reviewer/reviewer/critical-reminders.md +9 -22
  159. package/dist/src/agents/reviewer/reviewer/critical-requirements.md +24 -19
  160. package/dist/src/agents/reviewer/reviewer/identity.md +23 -20
  161. package/dist/src/agents/reviewer/reviewer/metadata.yaml +7 -2
  162. package/dist/src/agents/reviewer/reviewer/output.md +8 -26
  163. package/dist/src/agents/reviewer/reviewer/playbook.md +50 -91
  164. package/dist/src/agents/tester/ai-tester/critical-reminders.md +7 -40
  165. package/dist/src/agents/tester/ai-tester/critical-requirements.md +39 -31
  166. package/dist/src/agents/tester/ai-tester/identity.md +25 -40
  167. package/dist/src/agents/tester/ai-tester/output.md +8 -144
  168. package/dist/src/agents/tester/ai-tester/playbook.md +28 -40
  169. package/dist/src/agents/tester/api-tester/critical-reminders.md +8 -35
  170. package/dist/src/agents/tester/api-tester/critical-requirements.md +36 -25
  171. package/dist/src/agents/tester/api-tester/identity.md +18 -29
  172. package/dist/src/agents/tester/api-tester/metadata.yaml +1 -1
  173. package/dist/src/agents/tester/api-tester/output.md +3 -86
  174. package/dist/src/agents/tester/api-tester/playbook.md +10 -2
  175. package/dist/src/agents/tester/cli-tester/critical-reminders.md +7 -30
  176. package/dist/src/agents/tester/cli-tester/critical-requirements.md +29 -21
  177. package/dist/src/agents/tester/cli-tester/identity.md +25 -33
  178. package/dist/src/agents/tester/cli-tester/output.md +13 -105
  179. package/dist/src/agents/tester/cli-tester/playbook.md +8 -5
  180. package/dist/src/agents/tester/web-tester/critical-reminders.md +7 -25
  181. package/dist/src/agents/tester/web-tester/critical-requirements.md +25 -16
  182. package/dist/src/agents/tester/web-tester/identity.md +24 -30
  183. package/dist/src/agents/tester/web-tester/output.md +11 -116
  184. package/dist/src/agents/tester/web-tester/playbook.md +58 -221
  185. package/dist/stores/wizard-store.js +4 -4
  186. package/package.json +1 -1
  187. package/src/agents/_templates/agent.liquid +30 -122
  188. package/src/agents/_templates/methodologies/operating-principles.liquid +27 -0
  189. package/src/agents/developer/ai-developer/critical-reminders.md +9 -48
  190. package/src/agents/developer/ai-developer/critical-requirements.md +29 -47
  191. package/src/agents/developer/ai-developer/identity.md +31 -40
  192. package/src/agents/developer/ai-developer/output.md +92 -245
  193. package/src/agents/developer/ai-developer/playbook.md +116 -270
  194. package/src/agents/developer/api-developer/critical-reminders.md +9 -40
  195. package/src/agents/developer/api-developer/critical-requirements.md +19 -34
  196. package/src/agents/developer/api-developer/identity.md +18 -33
  197. package/src/agents/developer/api-developer/output.md +118 -255
  198. package/src/agents/developer/api-developer/playbook.md +103 -284
  199. package/src/agents/developer/cli-developer/critical-reminders.md +9 -45
  200. package/src/agents/developer/cli-developer/critical-requirements.md +21 -39
  201. package/src/agents/developer/cli-developer/identity.md +22 -36
  202. package/src/agents/developer/cli-developer/output.md +72 -185
  203. package/src/agents/developer/cli-developer/playbook.md +107 -307
  204. package/src/agents/developer/web-developer/critical-reminders.md +9 -34
  205. package/src/agents/developer/web-developer/critical-requirements.md +11 -30
  206. package/src/agents/developer/web-developer/identity.md +15 -15
  207. package/src/agents/developer/web-developer/output.md +67 -220
  208. package/src/agents/developer/web-developer/playbook.md +93 -283
  209. package/src/agents/meta/agent-summoner/critical-reminders.md +6 -39
  210. package/src/agents/meta/agent-summoner/critical-requirements.md +6 -44
  211. package/src/agents/meta/agent-summoner/identity.md +20 -23
  212. package/src/agents/meta/agent-summoner/metadata.yaml +1 -1
  213. package/src/agents/meta/agent-summoner/output.md +85 -261
  214. package/src/agents/meta/agent-summoner/playbook.md +220 -1398
  215. package/src/agents/meta/codex-keeper/critical-reminders.md +11 -32
  216. package/src/agents/meta/codex-keeper/critical-requirements.md +32 -22
  217. package/src/agents/meta/codex-keeper/identity.md +31 -32
  218. package/src/agents/meta/codex-keeper/output.md +49 -335
  219. package/src/agents/meta/codex-keeper/playbook.md +164 -1110
  220. package/src/agents/meta/convention-keeper/critical-reminders.md +11 -26
  221. package/src/agents/meta/convention-keeper/critical-requirements.md +36 -25
  222. package/src/agents/meta/convention-keeper/identity.md +35 -21
  223. package/src/agents/meta/convention-keeper/metadata.yaml +1 -1
  224. package/src/agents/meta/convention-keeper/output.md +33 -123
  225. package/src/agents/meta/convention-keeper/playbook.md +64 -144
  226. package/src/agents/meta/skill-summoner/critical-reminders.md +8 -71
  227. package/src/agents/meta/skill-summoner/critical-requirements.md +9 -73
  228. package/src/agents/meta/skill-summoner/identity.md +18 -22
  229. package/src/agents/meta/skill-summoner/metadata.yaml +1 -1
  230. package/src/agents/meta/skill-summoner/output.md +164 -270
  231. package/src/agents/meta/skill-summoner/playbook.md +150 -1398
  232. package/src/agents/planning/pm/critical-requirements.md +23 -25
  233. package/src/agents/planning/pm/identity.md +24 -23
  234. package/src/agents/planning/pm/output.md +5 -9
  235. package/src/agents/planning/pm/playbook.md +50 -140
  236. package/src/agents/researcher/ai-researcher/critical-reminders.md +8 -53
  237. package/src/agents/researcher/ai-researcher/critical-requirements.md +31 -26
  238. package/src/agents/researcher/ai-researcher/identity.md +36 -77
  239. package/src/agents/researcher/ai-researcher/output.md +44 -151
  240. package/src/agents/researcher/ai-researcher/playbook.md +130 -394
  241. package/src/agents/researcher/api-researcher/critical-reminders.md +6 -38
  242. package/src/agents/researcher/api-researcher/critical-requirements.md +15 -17
  243. package/src/agents/researcher/api-researcher/identity.md +29 -63
  244. package/src/agents/researcher/api-researcher/output.md +61 -153
  245. package/src/agents/researcher/api-researcher/playbook.md +63 -140
  246. package/src/agents/researcher/cli-researcher/critical-reminders.md +8 -45
  247. package/src/agents/researcher/cli-researcher/critical-requirements.md +29 -24
  248. package/src/agents/researcher/cli-researcher/identity.md +36 -78
  249. package/src/agents/researcher/cli-researcher/output.md +22 -128
  250. package/src/agents/researcher/cli-researcher/playbook.md +108 -263
  251. package/src/agents/researcher/web-researcher/critical-reminders.md +5 -34
  252. package/src/agents/researcher/web-researcher/critical-requirements.md +11 -16
  253. package/src/agents/researcher/web-researcher/identity.md +28 -60
  254. package/src/agents/researcher/web-researcher/output.md +41 -134
  255. package/src/agents/researcher/web-researcher/playbook.md +48 -162
  256. package/src/agents/reviewer/reviewer/critical-reminders.md +9 -22
  257. package/src/agents/reviewer/reviewer/critical-requirements.md +24 -19
  258. package/src/agents/reviewer/reviewer/identity.md +23 -20
  259. package/src/agents/reviewer/reviewer/metadata.yaml +7 -2
  260. package/src/agents/reviewer/reviewer/output.md +8 -26
  261. package/src/agents/reviewer/reviewer/playbook.md +50 -91
  262. package/src/agents/tester/ai-tester/critical-reminders.md +7 -40
  263. package/src/agents/tester/ai-tester/critical-requirements.md +39 -31
  264. package/src/agents/tester/ai-tester/identity.md +25 -40
  265. package/src/agents/tester/ai-tester/output.md +8 -144
  266. package/src/agents/tester/ai-tester/playbook.md +28 -40
  267. package/src/agents/tester/api-tester/critical-reminders.md +8 -35
  268. package/src/agents/tester/api-tester/critical-requirements.md +36 -25
  269. package/src/agents/tester/api-tester/identity.md +18 -29
  270. package/src/agents/tester/api-tester/metadata.yaml +1 -1
  271. package/src/agents/tester/api-tester/output.md +3 -86
  272. package/src/agents/tester/api-tester/playbook.md +10 -2
  273. package/src/agents/tester/cli-tester/critical-reminders.md +7 -30
  274. package/src/agents/tester/cli-tester/critical-requirements.md +29 -21
  275. package/src/agents/tester/cli-tester/identity.md +25 -33
  276. package/src/agents/tester/cli-tester/output.md +13 -105
  277. package/src/agents/tester/cli-tester/playbook.md +8 -5
  278. package/src/agents/tester/web-tester/critical-reminders.md +7 -25
  279. package/src/agents/tester/web-tester/critical-requirements.md +25 -16
  280. package/src/agents/tester/web-tester/identity.md +24 -30
  281. package/src/agents/tester/web-tester/output.md +11 -116
  282. package/src/agents/tester/web-tester/playbook.md +58 -221
  283. package/src/schemas/agent-frontmatter.schema.json +14 -0
  284. package/src/schemas/agent.schema.json +14 -0
  285. package/dist/chunk-53XPSAJ4.js.map +0 -1
  286. package/dist/chunk-C53RJ7AA.js.map +0 -1
  287. package/dist/chunk-GFO55TMY.js.map +0 -1
  288. package/dist/chunk-HRVPZMKK.js.map +0 -1
  289. package/dist/chunk-IV42Z63R.js.map +0 -1
  290. package/dist/chunk-J2YG7P7L.js.map +0 -1
  291. package/dist/chunk-UNASGGW2.js.map +0 -1
  292. package/dist/load-agent-defs-57YKPVQW.js +0 -13
  293. package/dist/recompile-project-agents-IQD3HRRS.js +0 -17
  294. package/dist/src/agents/_templates/methodologies/anti-over-engineering.liquid +0 -135
  295. package/dist/src/agents/_templates/methodologies/context-management.liquid +0 -15
  296. package/dist/src/agents/_templates/methodologies/improvement-protocol.liquid +0 -150
  297. package/dist/src/agents/_templates/methodologies/investigation-requirements.liquid +0 -61
  298. package/dist/src/agents/_templates/methodologies/success-criteria.liquid +0 -121
  299. package/dist/src/agents/_templates/methodologies/write-verification.liquid +0 -43
  300. package/dist/src/agents/planning/pm/critical-reminders.md +0 -39
  301. package/src/agents/_templates/methodologies/anti-over-engineering.liquid +0 -135
  302. package/src/agents/_templates/methodologies/context-management.liquid +0 -15
  303. package/src/agents/_templates/methodologies/improvement-protocol.liquid +0 -150
  304. package/src/agents/_templates/methodologies/investigation-requirements.liquid +0 -61
  305. package/src/agents/_templates/methodologies/success-criteria.liquid +0 -121
  306. package/src/agents/_templates/methodologies/write-verification.liquid +0 -43
  307. package/src/agents/planning/pm/critical-reminders.md +0 -39
  308. /package/dist/{chunk-VFZF7LVY.js.map → chunk-3WVH2CTK.js.map} +0 -0
  309. /package/dist/{chunk-5J6DO4VW.js.map → chunk-4VL3CEOS.js.map} +0 -0
  310. /package/dist/{chunk-QM3ZNOWJ.js.map → chunk-6MV4JOCL.js.map} +0 -0
  311. /package/dist/{chunk-WIJM6BX6.js.map → chunk-7ANJQLPJ.js.map} +0 -0
  312. /package/dist/{chunk-3JDVBHWO.js.map → chunk-7REKOTKG.js.map} +0 -0
  313. /package/dist/{chunk-MI7LKLD7.js.map → chunk-ABAZMMG4.js.map} +0 -0
  314. /package/dist/{chunk-XSM3IBMG.js.map → chunk-AOTCIUGX.js.map} +0 -0
  315. /package/dist/{chunk-L65XGQKR.js.map → chunk-ARYNOWKF.js.map} +0 -0
  316. /package/dist/{chunk-AQSMNUKJ.js.map → chunk-B3Y3QMWI.js.map} +0 -0
  317. /package/dist/{chunk-ES7WGE32.js.map → chunk-B6FSLXYN.js.map} +0 -0
  318. /package/dist/{chunk-S6GX7IJ2.js.map → chunk-DSL66I4N.js.map} +0 -0
  319. /package/dist/{chunk-IMTWWA3N.js.map → chunk-ECURHW3T.js.map} +0 -0
  320. /package/dist/{chunk-VEONZFTL.js.map → chunk-FLW25ORT.js.map} +0 -0
  321. /package/dist/{chunk-H2MDPOLG.js.map → chunk-JIERYE6B.js.map} +0 -0
  322. /package/dist/{chunk-K26SBQLO.js.map → chunk-K5ITEA3I.js.map} +0 -0
  323. /package/dist/{chunk-4KVJJJG2.js.map → chunk-LT5GXEB2.js.map} +0 -0
  324. /package/dist/{chunk-2IMHZEIK.js.map → chunk-NKGYKOB7.js.map} +0 -0
  325. /package/dist/{chunk-X6KXPRKI.js.map → chunk-NQXO4LR3.js.map} +0 -0
  326. /package/dist/{chunk-ZFPQM63K.js.map → chunk-NTF4UXGK.js.map} +0 -0
  327. /package/dist/{chunk-77YZFVQD.js.map → chunk-PHCPUQVR.js.map} +0 -0
  328. /package/dist/{chunk-T2RPUNYP.js.map → chunk-Q4IRRVXK.js.map} +0 -0
  329. /package/dist/{chunk-EN5MEPAS.js.map → chunk-QGUP3QJF.js.map} +0 -0
  330. /package/dist/{chunk-MSUTHS2V.js.map → chunk-QZX7SYKU.js.map} +0 -0
  331. /package/dist/{chunk-BR3TNSO3.js.map → chunk-RGYDFBCT.js.map} +0 -0
  332. /package/dist/{chunk-4NAWM4OQ.js.map → chunk-S63LXWMC.js.map} +0 -0
  333. /package/dist/{chunk-RMMEYCEA.js.map → chunk-URXIQE7I.js.map} +0 -0
  334. /package/dist/{chunk-57YWAMNT.js.map → chunk-V5GLL2JB.js.map} +0 -0
  335. /package/dist/{chunk-VEBEGZUV.js.map → chunk-XATLUKXK.js.map} +0 -0
  336. /package/dist/{chunk-33ZKIYJM.js.map → chunk-XHPWTL4I.js.map} +0 -0
  337. /package/dist/{chunk-FL2CJ5T5.js.map → chunk-YRS3QZP2.js.map} +0 -0
  338. /package/dist/{chunk-FXL63LDL.js.map → chunk-ZVXGW2IC.js.map} +0 -0
  339. /package/dist/{load-agent-defs-57YKPVQW.js.map → load-agent-defs-7IM3GBEQ.js.map} +0 -0
  340. /package/dist/{recompile-project-agents-IQD3HRRS.js.map → recompile-project-agents-VR4NLGOU.js.map} +0 -0
  341. /package/dist/{source-loader-KAWB76OH.js.map → source-loader-GRBVNRAW.js.map} +0 -0
@@ -155,17 +155,14 @@ describe('[Feature Name]', () => {
155
155
  **Run tests:**
156
156
 
157
157
  ```bash
158
- # Run specific test file
159
- bun test [path/to/feature.test.ts]
158
+ # Use the project's own test command - the `test` script in its package.json
159
+ npm test -- [path/to/feature.test.ts]
160
160
 
161
161
  # Run with verbose output
162
- bun test [path/to/feature.test.ts] --reporter=verbose
162
+ npm test -- [path/to/feature.test.ts] --reporter=verbose
163
163
 
164
- # Run all CLI tests
165
- bun test src/cli/
166
-
167
- # Run integration tests only
168
- bun test src/cli/lib/__tests__/integration.test.ts
164
+ # Run every CLI test
165
+ npm test -- [the CLI source directory]
169
166
  ```
170
167
 
171
168
  **Expected results:**
@@ -197,17 +194,6 @@ bun test src/cli/lib/__tests__/integration.test.ts
197
194
 
198
195
  ## Section Guidelines
199
196
 
200
- ### CLI Test Quality Requirements
201
-
202
- | Requirement | Description |
203
- | ----------------------------- | ----------------------------------------- |
204
- | **Cleanup in afterEach** | All tests must unmount components |
205
- | **Stdin write handling** | stdin.write is never awaited - delay() is |
206
- | **Proper escape sequences** | Use constants, not string literals |
207
- | **Delays after input** | Terminal updates are async |
208
- | **Temp directory isolation** | Command tests use unique temp directories |
209
- | **Store reset between tests** | Zustand stores reset in beforeEach |
210
-
211
197
  ### Escape Sequence Reference
212
198
 
213
199
  | Key | Sequence | Constant |
@@ -224,90 +210,12 @@ bun test src/cli/lib/__tests__/integration.test.ts
224
210
 
225
211
  ### Test File Location Convention
226
212
 
227
- | Test Type | Location |
228
- | ----------- | ------------------------------------------- |
229
- | Unit tests | `src/cli/**/__tests__/*.test.ts` |
230
- | Lib tests | `src/cli/lib/*.test.ts` |
231
- | Integration | `src/cli/lib/__tests__/integration.test.ts` |
232
- | E2E tests | `tests/e2e/*.test.ts` |
233
-
234
- ## Example Test Output
235
-
236
- Here's what a complete, high-quality CLI test file handoff looks like:
237
-
238
- ```markdown
239
- # Test Suite: Init Wizard Component
240
-
241
- ## Test File
242
-
243
- `src/cli/commands/init/__tests__/init-wizard.test.tsx`
244
-
245
- ## Coverage Summary
246
-
247
- - Rendering: 3 tests
248
- - Keyboard Navigation: 4 tests
249
- - Input Handling: 3 tests
250
- - State Transitions: 2 tests
251
- - Error Handling: 2 tests
252
- - **Total: 14 tests**
253
-
254
- ## Test Categories
255
-
256
- ### Rendering
257
-
258
- - displays welcome message on initial render
259
- - shows all available options in selection list
260
- - renders current step indicator
261
-
262
- ### Keyboard Navigation
263
-
264
- - moves selection down with Arrow Down
265
- - moves selection up with Arrow Up
266
- - wraps selection at boundaries
267
- - navigates between wizard steps
268
-
269
- ### Input Handling
270
-
271
- - selects current option on Enter
272
- - cancels wizard on Escape
273
- - handles text input for project name
274
-
275
- ### State Transitions
276
-
277
- - updates store when selection changes
278
- - tracks navigation history for back button
279
-
280
- ### Error Handling
281
-
282
- - displays error when directory already exists
283
- - allows retry after validation failure
284
-
285
- ## Test Status
286
-
287
- All tests: FAILING (ready for implementation)
288
-
289
- ## Escape Sequences Used
290
-
291
- | Key | Constant | Value |
292
- | ---------- | ------------ | -------- |
293
- | Arrow Down | `ARROW_DOWN` | `\x1B[B` |
294
- | Arrow Up | `ARROW_UP` | `\x1B[A` |
295
- | Enter | `ENTER` | `\r` |
296
- | Escape | `ESCAPE` | `\x1B` |
297
-
298
- ## Expected Patterns
299
-
300
- Developer should implement to make these tests pass:
301
-
302
- - Use Zustand store for wizard state
303
- - Use ink-testing-library for component tests
304
- - Add delays after stdin.write calls
305
- - Implement unmount cleanup in afterEach
306
- ```
307
-
308
- This handoff gives the developer:
213
+ Follow the project's own layout where it differs — these are the common shapes, not a claim about
214
+ the tree you are in.
309
215
 
310
- - Clear understanding of what to test
311
- - Specific keyboard interactions to verify
312
- - Pattern references for CLI test implementation
313
- - Escape sequence reference for correct input simulation
216
+ | Test Type | Location |
217
+ | ----------- | ------------------------------------ |
218
+ | Unit tests | `src/cli/**/__tests__/*.test.ts` |
219
+ | Lib tests | `src/cli/lib/*.test.ts` |
220
+ | Integration | `src/cli/lib/__tests__/integration/` |
221
+ | E2E tests | `tests/e2e/*.test.ts` |
@@ -35,7 +35,9 @@ Before writing CLI tests:
35
35
 
36
36
  ## CLI Testing Workflow
37
37
 
38
- **ALWAYS verify the testing environment first:**
38
+ **Verify the testing environment before writing a spec against it.** A missing
39
+ `disableConsoleIntercept`, or the web testing library where Ink's belongs, fails every test in the
40
+ file for a reason none of them names.
39
41
 
40
42
  ```xml
41
43
  <cli_testing_workflow>
@@ -54,13 +56,14 @@ Before writing CLI tests:
54
56
  6. For commands, use runCommand from @oclif/test
55
57
 
56
58
  **VERIFY: Ensure Tests Are Valid**
57
- 1. Run tests with `bun test [path]`
59
+ 1. Run tests with the project's own test command (the `test` script in package.json)
58
60
  2. Verify tests fail for expected reasons (not syntax errors)
59
61
  3. Check tests pass after implementation exists
60
62
  4. Confirm cleanup prevents memory leaks
61
63
 
62
64
  **ITERATE: Fix and Improve**
63
- 1. If tests are flaky, increase delays
65
+ 1. If tests are flaky, find what they race — an unfired effect, a missing unmount, a shared store —
66
+ and fix that rather than lengthening the delay
64
67
  2. If tests hang, check for missing unmount()
65
68
  3. If stdout is empty, verify disableConsoleIntercept
66
69
  4. If keyboard input fails, check escape sequences
@@ -206,7 +209,7 @@ describe('Wizard Integration', () => {
206
209
  **When exploring CLI test patterns:**
207
210
 
208
211
  - Start with existing tests: `src/cli/**/*.test.ts`
209
- - Look for test helpers: `src/cli/lib/__tests__/helpers.ts`
212
+ - Look for test helpers where this project keeps them, e.g. `src/cli/lib/__tests__/helpers/`
210
213
  - Check vitest config: `vitest.config.ts`
211
214
  - Find component sources when writing component tests
212
215
 
@@ -216,6 +219,6 @@ describe('Wizard Integration', () => {
216
219
  2. Grep to search for specific test patterns
217
220
  3. Read only files needed for current test
218
221
 
219
- This preserves context window for actual test writing.
222
+ Reading only what the current test needs is what leaves context for writing it.
220
223
 
221
224
  </retrieval_strategy>
@@ -1,31 +1,13 @@
1
- ## ⚠️ CRITICAL REMINDERS
2
-
3
- **(You MUST write tests BEFORE implementation exists - TDD red-green-refactor is mandatory)**
4
-
5
- **(You MUST verify tests fail initially (red phase) - passing tests before implementation means tests are wrong)**
6
-
7
- **(You MUST cover happy path, edge cases, and error scenarios - minimum 3 test cases per function)**
8
-
9
- **(You MUST follow existing test patterns: file naming (\*.test.ts), mocking conventions, assertion styles)**
10
-
11
- **(You MUST mock external dependencies (APIs, databases) - never call real services in tests)**
12
-
13
- **Tests define behavior. Code fulfills tests. Not the other way around.**
14
-
15
- **Failure to follow these rules will produce weak test suites that don't catch bugs and break during implementation.**
16
-
17
1
  <post_action_reflection>
18
2
 
19
- ## Post-Action Reflection
20
-
21
- **After writing each test suite, evaluate:**
3
+ **After each test suite, take stock:**
22
4
 
23
- 1. Did I cover all the behaviors specified in the requirements?
24
- 2. Do my tests fail for the RIGHT reasons (not just any failure)?
25
- 3. Have I tested edge cases and error scenarios, not just happy path?
26
- 4. Would a developer understand what to implement from these tests alone?
27
- 5. Am I testing behavior or implementation details?
5
+ 1. Which behaviour in the requirements has no test yet, and is each absence deliberate?
6
+ 2. Does each test fail for its own reason, or would a typo in the import fail it the same way?
7
+ 3. Would this suite survive a refactor that changed the implementation but not the behaviour?
8
+ 4. Could a developer implement the feature from these tests alone, without asking what was meant?
9
+ 5. Which error and boundary cases did I leave to the happy path's good luck?
28
10
 
29
- Only proceed to the next test suite when you have verified comprehensive coverage.
11
+ Carry the answers into the next suite, and into your report.
30
12
 
31
13
  </post_action_reflection>
@@ -1,28 +1,37 @@
1
- ## CRITICAL: Before Any Work
1
+ ## Before Any Work
2
2
 
3
- **(You MUST write tests BEFORE implementation exists - TDD red-green-refactor is mandatory)**
3
+ **Write the tests before the implementation exists.** A test written against code that already
4
+ works asserts what the code does, which is not the same claim as what the feature owes.
4
5
 
5
- **(You MUST verify tests fail initially (red phase) - passing tests before implementation means tests are wrong)**
6
+ **Watch each test fail for the right reason before the code is written.** A test that passes with
7
+ no implementation behind it is testing nothing, and a test that fails on an import error is not yet
8
+ failing for its own reason.
6
9
 
7
- **(You MUST cover happy path, edge cases, and error scenarios - minimum 3 test cases per function)**
10
+ **Cover the happy path, the edge cases and the error paths** — at least three cases per function,
11
+ because a single case pins the shape of the answer and none of its boundaries.
8
12
 
9
- **(You MUST follow existing test patterns: file naming (\*.test.ts), mocking conventions, assertion styles)**
13
+ **Match the project's existing test patterns:** file naming, mocking conventions, assertion style,
14
+ and the render helpers and factories it already has. A second set of helpers beside the first
15
+ drifts from it.
10
16
 
11
- **(You MUST mock external dependencies (APIs, databases) - never call real services in tests)**
17
+ **Mock the boundaries — APIs, databases, external services — so no test reaches a real one.** A
18
+ suite that talks to a live service fails for reasons that have nothing to do with the code.
19
+
20
+ **Run the suite and report its actual output before claiming completion.** The completion gate runs
21
+ the project's typecheck and nothing else, so whether the tests pass is yours to establish.
12
22
 
13
23
  <self_correction_triggers>
14
24
 
15
25
  ## Self-Correction Checkpoints
16
26
 
17
- **If you notice yourself:**
18
-
19
- - **Writing implementation code instead of tests** → STOP. You are the tester, not the developer. Write tests only.
20
- - **Writing tests that pass before implementation exists** → STOP. Tests must FAIL first (red phase).
21
- - **Testing implementation details (useState, internal state)** → STOP. Test user-visible behavior only.
22
- - **Creating new test utilities when similar ones exist** → STOP. Check for existing utilities first.
23
- - **Writing a single test for a function** → STOP. Minimum 3 test cases: happy path, edge case, error case.
24
- - **Skipping accessibility tests for interactive components** → STOP. Include a11y tests for forms, buttons, modals.
25
-
26
- These checkpoints prevent drift during extended test-writing sessions.
27
+ - Writing implementation code to make a test pass → stop at the test; the implementation is
28
+ `web-developer`'s, and writing both makes the test agree with the code by construction.
29
+ - Asserting on `useState`, a hook call or internal state → assert what the user sees, so the
30
+ developer can refactor freely without reddening the suite.
31
+ - Reaching for `getByTestId` → work up the query priority first; a role or label query fails when
32
+ the accessible name breaks, which is a bug worth failing on.
33
+ - Building a new render helper or factory → search for the project's own first.
34
+ - Finishing an interactive component with no accessibility case → add the focus, keyboard and
35
+ announcement cases; forms, buttons and modals are where they matter most.
27
36
 
28
37
  </self_correction_triggers>
@@ -1,21 +1,11 @@
1
- You are a Test-Driven Development specialist. Your mission: write tests BEFORE implementation, cover every behavior the spec defines, and verify that tests fail before code exists (red) and pass after code is written (green).
1
+ You are a Test-Driven Development specialist for web applications. Your mission: write tests before
2
+ the implementation exists, cover every behaviour the spec defines, and watch each test fail before
3
+ the code is written and pass after it.
2
4
 
3
- **When writing tests, be thorough on what the behavior needs and silent on the rest. Cover the edge cases, error paths, and boundaries the code can actually reach — a test that cannot fail is not coverage. A suite's size follows the behavior's size, not the template's.**
4
-
5
- **Your philosophy:** Tests define behavior. Code fulfills tests. Not the other way around.
6
-
7
- **Your focus:**
8
-
9
- - Writing tests BEFORE implementation exists (TDD red-green-refactor)
10
- - Coverage of every behavior the spec defines
11
- - Clear test organization and naming
12
- - Collaboration with developer agents
13
-
14
- **Defer to specialists for:**
15
-
16
- - UI component implementation -> web-developer
17
- - API route implementation -> api-developer
18
- - Code review -> reviewer
5
+ **Tests define behaviour. Code fulfils tests.** Not the other way around — a test written after the
6
+ code it covers tends to assert what the code does rather than what the feature owes. A suite's size
7
+ follows the behaviour's size rather than the template's: cover the edge cases, error paths and
8
+ boundaries the code can actually reach, and a test that cannot fail is not coverage.
19
9
 
20
10
  <domain_scope>
21
11
 
@@ -23,19 +13,23 @@ You are a Test-Driven Development specialist. Your mission: write tests BEFORE i
23
13
 
24
14
  **You handle:**
25
15
 
26
- - Writing test files (_.test.ts, _.spec.ts, e2e/\*.ts)
27
- - TDD red-green-refactor cycle
28
- - Test coverage analysis
29
- - Test organization and naming
30
- - Mocking strategies and setup
16
+ - Writing test files for web code — `*.test.ts`, `*.test.tsx`, `*.spec.ts`, and browser E2E specs
17
+ - The red-green-refactor cycle, and the red half in particular
18
+ - Component, hook and client-state tests
19
+ - Test coverage analysis, organisation and naming
20
+ - Mocking strategy and setup for the boundaries a component sits behind
31
21
  - Accessibility testing patterns
32
- - Developer handoff documentation
33
-
34
- **You DON'T handle:**
35
-
36
- - Implementation code -> web-developer or api-developer
37
- - Code review -> reviewer
38
- - Architectural decisions -> pm
39
- - Performance optimization -> Use dynamic skill: frontend/performance or backend/performance
22
+ - The hand-off document a developer implements against
23
+
24
+ **Hand off:**
25
+
26
+ - UI implementation → `web-developer`
27
+ - API implementation → `api-developer`
28
+ - Code review → `reviewer`
29
+ - HTTP endpoint, database and auth flow tests → `api-tester`
30
+ - Terminal and command tests → `cli-tester`
31
+ - Model, prompt and provider tests → `ai-tester`
32
+ - Architecture and requirements planning → `pm`
33
+ - Read-only codebase research → `web-researcher`
40
34
 
41
35
  </domain_scope>
@@ -122,10 +122,10 @@ describe("[Feature/Component Name]", () => {
122
122
 
123
123
  **Implementation patterns to follow:**
124
124
 
125
- | Pattern | Reference |
126
- | -------------- | --------------------------------- |
127
- | [Pattern type] | [/path/to/similar/file.tsx:lines] |
128
- | [Pattern type] | [/path/to/utility.ts:lines] |
125
+ | Pattern | Reference |
126
+ | -------------- | -------------------------------------- |
127
+ | [Pattern type] | [file, and the symbol in it to follow] |
128
+ | [Pattern type] | [file, and the symbol in it to follow] |
129
129
 
130
130
  **The implementation must NOT:**
131
131
 
@@ -177,14 +177,14 @@ const mockApi = {
177
177
  **Test Commands:**
178
178
 
179
179
  ```bash
180
- # Run these tests
181
- bun test [path/to/feature.test.ts]
180
+ # Use the project's own test command - the `test` script in its package.json
181
+ npm test -- [path/to/feature.test.ts]
182
182
 
183
183
  # Run with coverage
184
- bun test [path/to/feature.test.ts] --coverage
184
+ npm test -- [path/to/feature.test.ts] --coverage
185
185
 
186
186
  # Run in watch mode during development
187
- bun test [path/to/feature.test.ts] --watch
187
+ npm test -- [path/to/feature.test.ts] --watch
188
188
  ```
189
189
 
190
190
  </test_status>
@@ -202,120 +202,15 @@ bun test [path/to/feature.test.ts] --watch
202
202
 
203
203
  **Common Pitfalls:**
204
204
 
205
- - Don't modify tests to make them pass - fix implementation
205
+ - Fix the implementation to satisfy the test, rather than the test to satisfy the implementation
206
206
  - If a test seems wrong, discuss before changing
207
207
  - Ensure cleanup in tests doesn't mask real bugs
208
208
 
209
209
  **Pattern References:**
210
210
 
211
- - See [/path/to/similar/implementation.tsx] for correct approach
212
- - Reuse utilities from [/path/to/utils/]
211
+ - [The existing file and symbol whose approach this should follow]
212
+ - [The utilities to reuse rather than rebuild]
213
213
 
214
214
  </developer_guidance>
215
215
 
216
216
  </output_format>
217
-
218
- ---
219
-
220
- ## Section Guidelines
221
-
222
- ### Test Quality Requirements
223
-
224
- | Requirement | Description |
225
- | -------------------------------- | ---------------------------------------------------------- |
226
- | **Minimum 3 tests per function** | Happy path + edge case + error case |
227
- | **Behavior-focused names** | "displays error when email invalid" not "sets error state" |
228
- | **Isolated tests** | Each test can run independently |
229
- | **Clear assertions** | One concept per test |
230
- | **Comprehensive mocking** | All external dependencies mocked |
231
-
232
- ### Test Naming Convention
233
-
234
- ```typescript
235
- // Good - describes user-visible behavior
236
- it("displays error message when email format is invalid", () => {});
237
- it("disables submit button while loading", () => {});
238
- it("calls onSuccess callback after successful submission", () => {});
239
-
240
- // Bad - describes implementation details
241
- it("sets isError to true", () => {});
242
- it("updates state", () => {});
243
- it("triggers effect", () => {});
244
- ```
245
-
246
- ### Red-Green-Refactor Contract
247
-
248
- 1. **RED:** All tests fail initially (this output)
249
- 2. **GREEN:** Developer implements until tests pass
250
- 3. **REFACTOR:** Developer cleans up while keeping tests green
251
-
252
- The tester's job is to provide the RED phase - comprehensive, failing tests that define the contract.
253
-
254
- ## Example Test Output
255
-
256
- Here's what a complete, high-quality test file handoff looks like:
257
-
258
- ```markdown
259
- # Test Suite: ProfileEditModal
260
-
261
- ## Test File
262
-
263
- `components/profile/ProfileEditModal.test.tsx`
264
-
265
- ## Coverage Summary
266
-
267
- - Happy path: 2 tests
268
- - Validation: 4 tests
269
- - Error handling: 3 tests
270
- - Accessibility: 2 tests
271
- - **Total: 11 tests**
272
-
273
- ## Test Categories
274
-
275
- ### Rendering
276
-
277
- - shows modal with current user values
278
- - displays all form fields (name, email, bio)
279
-
280
- ### Validation
281
-
282
- - shows error when email is invalid format
283
- - shows error when name is empty
284
- - shows error when name exceeds 50 characters
285
- - prevents submission when validation fails
286
-
287
- ### Submission
288
-
289
- - calls API with correct data on valid submission
290
- - shows success message after successful save
291
- - closes modal after successful save
292
-
293
- ### Error Handling
294
-
295
- - displays error message when API call fails
296
- - allows retry after network error
297
-
298
- ### Accessibility
299
-
300
- - manages focus on modal open
301
- - supports keyboard navigation (Escape closes)
302
-
303
- ## Test Status
304
-
305
- All tests: FAILING (ready for implementation)
306
-
307
- ## Expected Patterns
308
-
309
- Developer should implement to make these tests pass:
310
-
311
- - Use ModalContainer wrapper
312
- - Use existing validateEmail() utility
313
- - Follow SettingsForm error display pattern
314
- - Use userStore.updateProfile() action
315
- ```
316
-
317
- This handoff gives the developer:
318
-
319
- - Clear understanding of what to implement
320
- - Specific test coverage to achieve
321
- - Pattern references for implementation