@jaimevalasek/aioson 1.4.0 → 1.6.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 (301) hide show
  1. package/CHANGELOG.md +31 -1
  2. package/LICENSE +661 -21
  3. package/README.md +9 -1
  4. package/docs/design-previews/aurora-command-ui-website.html +884 -0
  5. package/docs/design-previews/aurora-command-ui.html +682 -0
  6. package/docs/design-previews/bold-editorial-ui-website.html +658 -0
  7. package/docs/design-previews/bold-editorial-ui.html +717 -0
  8. package/docs/design-previews/clean-saas-ui-website.html +1202 -0
  9. package/docs/design-previews/clean-saas-ui.html +549 -0
  10. package/docs/design-previews/cognitive-core-ui-website.html +1009 -0
  11. package/docs/design-previews/cognitive-core-ui.html +463 -0
  12. package/docs/design-previews/glassmorphism-ui-website.html +572 -0
  13. package/docs/design-previews/glassmorphism-ui.html +886 -0
  14. package/docs/design-previews/index.html +699 -0
  15. package/docs/design-previews/interface-design-website.html +1187 -0
  16. package/docs/design-previews/interface-design.html +513 -0
  17. package/docs/design-previews/neo-brutalist-ui-website.html +621 -0
  18. package/docs/design-previews/neo-brutalist-ui.html +797 -0
  19. package/docs/design-previews/premium-command-center-ui-website.html +1217 -0
  20. package/docs/design-previews/premium-command-center-ui.html +552 -0
  21. package/docs/design-previews/warm-craft-ui-website.html +684 -0
  22. package/docs/design-previews/warm-craft-ui.html +739 -0
  23. package/docs/en/cli-reference.md +20 -9
  24. package/docs/en/squad-dashboard.md +372 -0
  25. package/docs/openclaw-bridge.md +308 -0
  26. package/docs/pt/README.md +7 -0
  27. package/docs/pt/agent-sharding.md +132 -0
  28. package/docs/pt/agentes.md +131 -11
  29. package/docs/pt/busca-de-contexto.md +129 -0
  30. package/docs/pt/cache-de-contexto.md +156 -0
  31. package/docs/pt/cenarios.md +46 -2
  32. package/docs/pt/comandos-cli.md +88 -1
  33. package/docs/pt/design-hybrid-forge.md +107 -0
  34. package/docs/pt/inicio-rapido.md +72 -5
  35. package/docs/pt/inteligencia-adaptativa.md +324 -0
  36. package/docs/pt/monitor-de-contexto.md +104 -0
  37. package/docs/pt/recuperacao-de-sessao.md +125 -0
  38. package/docs/pt/sandbox.md +125 -0
  39. package/docs/pt/skills.md +98 -6
  40. package/docs/pt/squad-dashboard.md +373 -0
  41. package/docs/testing/genome-2.0-matrix.md +5 -5
  42. package/docs/testing/genome-2.0-rollout.md +9 -9
  43. package/package.json +2 -2
  44. package/src/agent-loader.js +280 -0
  45. package/src/backup-local.js +74 -0
  46. package/src/cli.js +192 -0
  47. package/src/commands/agent-loader.js +85 -0
  48. package/src/commands/backup-local-cmd.js +25 -0
  49. package/src/commands/context-cache.js +90 -0
  50. package/src/commands/context-monitor.js +92 -0
  51. package/src/commands/context-search.js +66 -0
  52. package/src/commands/design-hybrid-options.js +385 -0
  53. package/src/commands/health.js +214 -0
  54. package/src/commands/init.js +54 -13
  55. package/src/commands/install.js +52 -13
  56. package/src/commands/learning-evolve.js +355 -0
  57. package/src/commands/live.js +34 -0
  58. package/src/commands/recovery.js +43 -0
  59. package/src/commands/runtime.js +242 -0
  60. package/src/commands/sandbox.js +37 -0
  61. package/src/commands/setup-context.js +29 -4
  62. package/src/commands/setup.js +178 -0
  63. package/src/commands/skill.js +79 -32
  64. package/src/commands/squad-daemon.js +209 -0
  65. package/src/commands/squad-dashboard.js +39 -0
  66. package/src/commands/squad-deploy.js +64 -0
  67. package/src/commands/squad-doctor.js +52 -0
  68. package/src/commands/squad-mcp.js +270 -0
  69. package/src/commands/squad-processes.js +56 -0
  70. package/src/commands/squad-recovery.js +42 -0
  71. package/src/commands/squad-roi.js +291 -0
  72. package/src/commands/squad-score.js +250 -0
  73. package/src/commands/squad-status.js +37 -1
  74. package/src/commands/squad-validate.js +62 -1
  75. package/src/commands/squad-webhook.js +160 -0
  76. package/src/commands/squad-worker.js +191 -0
  77. package/src/commands/squad-worktrees.js +75 -0
  78. package/src/commands/tool-registry-cmd.js +232 -0
  79. package/src/commands/update.js +7 -0
  80. package/src/commands/web-map.js +70 -0
  81. package/src/commands/web-scrape.js +71 -0
  82. package/src/constants.js +17 -0
  83. package/src/context-cache.js +159 -0
  84. package/src/context-search.js +326 -0
  85. package/src/context-writer.js +45 -1
  86. package/src/design-variation-catalog.js +503 -0
  87. package/src/i18n/messages/en.js +159 -3
  88. package/src/i18n/messages/es.js +147 -2
  89. package/src/i18n/messages/fr.js +147 -2
  90. package/src/i18n/messages/pt-BR.js +158 -3
  91. package/src/install-animation.js +260 -0
  92. package/src/install-profile.js +143 -0
  93. package/src/install-wizard.js +474 -0
  94. package/src/installer.js +38 -10
  95. package/src/lib/webhook-server.js +328 -0
  96. package/src/mcp-connectors/registry.js +602 -0
  97. package/src/parser.js +7 -1
  98. package/src/recovery-context-session.js +154 -0
  99. package/src/runtime-store.js +355 -2
  100. package/src/sandbox.js +177 -0
  101. package/src/squad/external-session.js +180 -0
  102. package/src/squad/inter-squad.js +74 -0
  103. package/src/squad/recovery-context.js +201 -0
  104. package/src/squad/worktree-manager.js +114 -0
  105. package/src/squad-daemon.js +490 -0
  106. package/src/squad-dashboard/api.js +223 -0
  107. package/src/squad-dashboard/attachment-handler.js +93 -0
  108. package/src/squad-dashboard/context-monitor.js +157 -0
  109. package/src/squad-dashboard/execution-logs.js +115 -0
  110. package/src/squad-dashboard/hunk-review.js +209 -0
  111. package/src/squad-dashboard/metrics.js +133 -0
  112. package/src/squad-dashboard/process-monitor.js +125 -0
  113. package/src/squad-dashboard/renderer.js +858 -0
  114. package/src/squad-dashboard/server.js +232 -0
  115. package/src/squad-dashboard/styles.js +525 -0
  116. package/src/squad-dashboard/token-tracker.js +99 -0
  117. package/src/tool-executor.js +94 -0
  118. package/src/updater.js +11 -3
  119. package/src/web.js +284 -0
  120. package/src/worker-runner.js +339 -0
  121. package/template/.aioson/agents/analyst.md +62 -3
  122. package/template/.aioson/agents/architect.md +42 -0
  123. package/template/.aioson/agents/design-hybrid-forge.md +127 -0
  124. package/template/.aioson/agents/dev.md +223 -11
  125. package/template/.aioson/agents/deyvin.md +65 -0
  126. package/template/.aioson/agents/neo.md +152 -0
  127. package/template/.aioson/agents/orache.md +17 -0
  128. package/template/.aioson/agents/orchestrator.md +26 -0
  129. package/template/.aioson/agents/pm.md +58 -0
  130. package/template/.aioson/agents/product.md +88 -12
  131. package/template/.aioson/agents/qa.md +80 -0
  132. package/template/.aioson/agents/setup.md +128 -22
  133. package/template/.aioson/agents/sheldon.md +704 -0
  134. package/template/.aioson/agents/squad.md +191 -0
  135. package/template/.aioson/agents/tester.md +410 -0
  136. package/template/.aioson/agents/ux-ui.md +12 -0
  137. package/template/.aioson/config.md +21 -0
  138. package/template/.aioson/context/forensics/.gitkeep +0 -0
  139. package/template/.aioson/context/seeds/seed-example.md +27 -0
  140. package/template/.aioson/context/user-profile.md +42 -0
  141. package/template/.aioson/locales/en/agents/analyst.md +8 -0
  142. package/template/.aioson/locales/en/agents/architect.md +8 -0
  143. package/template/.aioson/locales/en/agents/dev.md +66 -7
  144. package/template/.aioson/locales/en/agents/deyvin.md +8 -0
  145. package/template/.aioson/locales/en/agents/neo.md +8 -0
  146. package/template/.aioson/locales/en/agents/orchestrator.md +26 -0
  147. package/template/.aioson/locales/en/agents/qa.md +49 -0
  148. package/template/.aioson/locales/en/agents/setup.md +35 -2
  149. package/template/.aioson/locales/en/agents/sheldon.md +340 -0
  150. package/template/.aioson/locales/en/agents/ux-ui.md +8 -0
  151. package/template/.aioson/locales/es/agents/analyst.md +8 -0
  152. package/template/.aioson/locales/es/agents/architect.md +8 -0
  153. package/template/.aioson/locales/es/agents/dev.md +66 -7
  154. package/template/.aioson/locales/es/agents/deyvin.md +8 -0
  155. package/template/.aioson/locales/es/agents/neo.md +48 -0
  156. package/template/.aioson/locales/es/agents/orchestrator.md +26 -0
  157. package/template/.aioson/locales/es/agents/qa.md +26 -0
  158. package/template/.aioson/locales/es/agents/setup.md +35 -2
  159. package/template/.aioson/locales/es/agents/sheldon.md +192 -0
  160. package/template/.aioson/locales/es/agents/squad.md +63 -0
  161. package/template/.aioson/locales/es/agents/ux-ui.md +8 -0
  162. package/template/.aioson/locales/fr/agents/analyst.md +8 -0
  163. package/template/.aioson/locales/fr/agents/architect.md +8 -0
  164. package/template/.aioson/locales/fr/agents/dev.md +66 -7
  165. package/template/.aioson/locales/fr/agents/deyvin.md +8 -0
  166. package/template/.aioson/locales/fr/agents/neo.md +48 -0
  167. package/template/.aioson/locales/fr/agents/orchestrator.md +26 -0
  168. package/template/.aioson/locales/fr/agents/qa.md +26 -0
  169. package/template/.aioson/locales/fr/agents/setup.md +35 -2
  170. package/template/.aioson/locales/fr/agents/sheldon.md +192 -0
  171. package/template/.aioson/locales/fr/agents/squad.md +63 -0
  172. package/template/.aioson/locales/fr/agents/ux-ui.md +8 -0
  173. package/template/.aioson/locales/pt-BR/agents/analyst.md +19 -0
  174. package/template/.aioson/locales/pt-BR/agents/architect.md +19 -0
  175. package/template/.aioson/locales/pt-BR/agents/dev.md +75 -12
  176. package/template/.aioson/locales/pt-BR/agents/deyvin.md +8 -0
  177. package/template/.aioson/locales/pt-BR/agents/neo.md +147 -0
  178. package/template/.aioson/locales/pt-BR/agents/orchestrator.md +26 -0
  179. package/template/.aioson/locales/pt-BR/agents/product.md +8 -3
  180. package/template/.aioson/locales/pt-BR/agents/qa.md +60 -0
  181. package/template/.aioson/locales/pt-BR/agents/setup.md +35 -2
  182. package/template/.aioson/locales/pt-BR/agents/sheldon.md +192 -0
  183. package/template/.aioson/locales/pt-BR/agents/squad.md +105 -0
  184. package/template/.aioson/locales/pt-BR/agents/ux-ui.md +8 -0
  185. package/template/.aioson/schemas/squad-blueprint.schema.json +21 -0
  186. package/template/.aioson/schemas/squad-manifest.schema.json +178 -1
  187. package/template/.aioson/skills/design/aurora-command-ui/SKILL.md +243 -0
  188. package/template/.aioson/skills/design/aurora-command-ui/references/art-direction.md +293 -0
  189. package/template/.aioson/skills/design/aurora-command-ui/references/components.md +827 -0
  190. package/template/.aioson/skills/design/aurora-command-ui/references/dashboards.md +250 -0
  191. package/template/.aioson/skills/design/aurora-command-ui/references/design-tokens.md +585 -0
  192. package/template/.aioson/skills/design/aurora-command-ui/references/motion.md +365 -0
  193. package/template/.aioson/skills/design/aurora-command-ui/references/patterns.md +482 -0
  194. package/template/.aioson/skills/design/aurora-command-ui/references/websites.md +387 -0
  195. package/template/.aioson/skills/design/bold-editorial-ui/SKILL.md +205 -0
  196. package/template/.aioson/skills/design/bold-editorial-ui/references/art-direction.md +338 -0
  197. package/template/.aioson/skills/design/bold-editorial-ui/references/components.md +977 -0
  198. package/template/.aioson/skills/design/bold-editorial-ui/references/dashboards.md +218 -0
  199. package/template/.aioson/skills/design/bold-editorial-ui/references/design-tokens.md +326 -0
  200. package/template/.aioson/skills/design/bold-editorial-ui/references/motion.md +461 -0
  201. package/template/.aioson/skills/design/bold-editorial-ui/references/patterns.md +293 -0
  202. package/template/.aioson/skills/design/bold-editorial-ui/references/websites.md +352 -0
  203. package/template/.aioson/skills/design/clean-saas-ui/SKILL.md +210 -0
  204. package/template/.aioson/skills/design/clean-saas-ui/references/art-direction.md +319 -0
  205. package/template/.aioson/skills/design/clean-saas-ui/references/components.md +365 -0
  206. package/template/.aioson/skills/design/clean-saas-ui/references/dashboards.md +196 -0
  207. package/template/.aioson/skills/design/clean-saas-ui/references/design-tokens.md +244 -0
  208. package/template/.aioson/skills/design/clean-saas-ui/references/motion.md +235 -0
  209. package/template/.aioson/skills/design/clean-saas-ui/references/patterns.md +215 -0
  210. package/template/.aioson/skills/design/clean-saas-ui/references/websites.md +295 -0
  211. package/template/.aioson/skills/design/cognitive-core-ui/SKILL.md +55 -9
  212. package/template/.aioson/skills/design/cognitive-core-ui/references/art-direction.md +339 -0
  213. package/template/.aioson/skills/design/cognitive-core-ui/references/components.md +1 -1
  214. package/template/.aioson/skills/design/cognitive-core-ui/references/dashboards.md +100 -0
  215. package/template/.aioson/skills/design/cognitive-core-ui/references/design-tokens.md +43 -9
  216. package/template/.aioson/skills/design/cognitive-core-ui/references/motion.md +40 -0
  217. package/template/.aioson/skills/design/cognitive-core-ui/references/patterns.md +1 -1
  218. package/template/.aioson/skills/design/cognitive-core-ui/references/websites.md +99 -12
  219. package/template/.aioson/skills/design/glassmorphism-ui/SKILL.md +222 -0
  220. package/template/.aioson/skills/design/glassmorphism-ui/references/art-direction.md +159 -0
  221. package/template/.aioson/skills/design/glassmorphism-ui/references/components.md +498 -0
  222. package/template/.aioson/skills/design/glassmorphism-ui/references/dashboards.md +236 -0
  223. package/template/.aioson/skills/design/glassmorphism-ui/references/design-tokens.md +274 -0
  224. package/template/.aioson/skills/design/glassmorphism-ui/references/motion.md +355 -0
  225. package/template/.aioson/skills/design/glassmorphism-ui/references/patterns.md +198 -0
  226. package/template/.aioson/skills/design/glassmorphism-ui/references/websites.md +307 -0
  227. package/template/.aioson/skills/design/neo-brutalist-ui/SKILL.md +213 -0
  228. package/template/.aioson/skills/design/neo-brutalist-ui/references/art-direction.md +228 -0
  229. package/template/.aioson/skills/design/neo-brutalist-ui/references/components.md +855 -0
  230. package/template/.aioson/skills/design/neo-brutalist-ui/references/dashboards.md +334 -0
  231. package/template/.aioson/skills/design/neo-brutalist-ui/references/design-tokens.md +342 -0
  232. package/template/.aioson/skills/design/neo-brutalist-ui/references/motion.md +286 -0
  233. package/template/.aioson/skills/design/neo-brutalist-ui/references/patterns.md +458 -0
  234. package/template/.aioson/skills/design/neo-brutalist-ui/references/websites.md +723 -0
  235. package/template/.aioson/skills/design/warm-craft-ui/SKILL.md +209 -0
  236. package/template/.aioson/skills/design/warm-craft-ui/references/art-direction.md +324 -0
  237. package/template/.aioson/skills/design/warm-craft-ui/references/components.md +508 -0
  238. package/template/.aioson/skills/design/warm-craft-ui/references/dashboards.md +223 -0
  239. package/template/.aioson/skills/design/warm-craft-ui/references/design-tokens.md +374 -0
  240. package/template/.aioson/skills/design/warm-craft-ui/references/motion.md +356 -0
  241. package/template/.aioson/skills/design/warm-craft-ui/references/patterns.md +288 -0
  242. package/template/.aioson/skills/design/warm-craft-ui/references/websites.md +289 -0
  243. package/template/.aioson/skills/premium-visual-design/SKILL.md +83 -0
  244. package/template/.aioson/skills/premium-visual-design/components/agent-badge.md +92 -0
  245. package/template/.aioson/skills/premium-visual-design/components/dependency-node.md +102 -0
  246. package/template/.aioson/skills/premium-visual-design/components/mention-autocomplete.md +136 -0
  247. package/template/.aioson/skills/premium-visual-design/components/notification-center.md +136 -0
  248. package/template/.aioson/skills/premium-visual-design/components/review-action-bar.md +188 -0
  249. package/template/.aioson/skills/premium-visual-design/components/team-switcher.md +131 -0
  250. package/template/.aioson/skills/premium-visual-design/patterns/agent-message-thread.md +198 -0
  251. package/template/.aioson/skills/premium-visual-design/patterns/notification-panel.md +275 -0
  252. package/template/.aioson/skills/premium-visual-design/patterns/review-workflow-ui.md +234 -0
  253. package/template/.aioson/skills/premium-visual-design/patterns/task-dependency-graph.md +147 -0
  254. package/template/.aioson/skills/premium-visual-design/tokens/status-extended.md +142 -0
  255. package/template/.aioson/skills/process/aioson-spec-driven/SKILL.md +45 -0
  256. package/template/.aioson/skills/process/aioson-spec-driven/references/approval-gates.md +109 -0
  257. package/template/.aioson/skills/process/aioson-spec-driven/references/artifact-map.md +44 -0
  258. package/template/.aioson/skills/process/aioson-spec-driven/references/classification-map.md +37 -0
  259. package/template/.aioson/skills/process/aioson-spec-driven/references/hardening-lane.md +49 -0
  260. package/template/.aioson/skills/process/aioson-spec-driven/references/maintenance-and-state.md +66 -0
  261. package/template/.aioson/skills/process/aioson-spec-driven/references/ui-language.md +75 -0
  262. package/template/.aioson/skills/process/design-hybrid-forge/SKILL.md +144 -0
  263. package/template/.aioson/skills/process/design-hybrid-forge/references/crossover-protocol.md +221 -0
  264. package/template/.aioson/skills/process/design-hybrid-forge/references/naming-registry.md +88 -0
  265. package/template/.aioson/skills/process/design-hybrid-forge/references/output-contract.md +291 -0
  266. package/template/.aioson/skills/process/design-hybrid-forge/references/pair-compatibility.md +117 -0
  267. package/template/.aioson/skills/process/design-hybrid-forge/references/quality-gates.md +188 -0
  268. package/template/.aioson/skills/process/design-hybrid-forge/references/variation-library.md +125 -0
  269. package/template/.aioson/skills/squad/formats/catalog.json +15 -0
  270. package/template/.aioson/skills/squad/formats/content/blog-post.md +47 -0
  271. package/template/.aioson/skills/squad/formats/content/newsletter.md +47 -0
  272. package/template/.aioson/skills/squad/formats/creative/podcast-script.md +43 -0
  273. package/template/.aioson/skills/squad/formats/creative/video-script.md +41 -0
  274. package/template/.aioson/skills/squad/formats/social/instagram-feed.md +42 -0
  275. package/template/.aioson/skills/squad/formats/social/linkedin-post.md +42 -0
  276. package/template/.aioson/skills/squad/formats/social/tiktok.md +39 -0
  277. package/template/.aioson/skills/squad/formats/social/twitter-thread.md +39 -0
  278. package/template/.aioson/skills/squad/formats/social/youtube-long.md +47 -0
  279. package/template/.aioson/skills/squad/formats/social/youtube-shorts.md +39 -0
  280. package/template/.aioson/skills/squad/patterns/multi-platform-pattern.md +108 -0
  281. package/template/.aioson/skills/squad/patterns/persona-based-pattern.md +98 -0
  282. package/template/.aioson/skills/squad/patterns/pipeline-pattern.md +106 -0
  283. package/template/.aioson/skills/squad/patterns/review-loop-pattern.md +81 -0
  284. package/template/.aioson/skills/squad/references/checklist-templates.md +122 -0
  285. package/template/.aioson/skills/squad/references/executor-archetypes.md +123 -0
  286. package/template/.aioson/skills/squad/references/workflow-templates.md +169 -0
  287. package/template/.aioson/skills/static/debugging-protocol.md +42 -0
  288. package/template/.aioson/skills/static/git-worktrees.md +36 -0
  289. package/template/.aioson/tasks/implementation-plan.md +19 -0
  290. package/template/.aioson/tasks/squad-design.md +28 -0
  291. package/template/.aioson/tasks/squad-profile.md +48 -0
  292. package/template/.aioson/tasks/squad-review.md +61 -0
  293. package/template/.aioson/tasks/squad-task-decompose.md +66 -0
  294. package/template/.claude/commands/aioson/agent/neo.md +5 -0
  295. package/template/.claude/commands/aioson/agent/tester.md +5 -0
  296. package/template/.gemini/GEMINI.md +1 -0
  297. package/template/.gemini/commands/aios-neo.toml +4 -0
  298. package/template/.gemini/commands/aios-tester.toml +6 -0
  299. package/template/AGENTS.md +26 -1
  300. package/template/CLAUDE.md +6 -2
  301. package/template/OPENCODE.md +2 -0
@@ -140,6 +140,33 @@ Flow:
140
140
  When the squad is created with an investigation, the investigation report
141
141
  becomes part of the squad package and is saved alongside it.
142
142
 
143
+ ## Profiler integration (for persona-based squads)
144
+
145
+ When the squad creation reveals that the domain revolves around a specific
146
+ person, brand, or methodology creator, offer profiling:
147
+
148
+ Detection heuristics:
149
+ - User mentions a specific person by name
150
+ - The goal includes "in the style of", "like {person}", "based on {person}'s approach"
151
+ - The domain is personal branding, content creation for a specific creator, or methodology replication
152
+
153
+ When detected:
154
+ 1. Ask: "This squad seems to be about {person}'s approach. Want me to profile
155
+ them for more authentic agents? (adds 5-10 min)"
156
+ 2. If yes:
157
+ a. Check if `.aioson/profiler-reports/{person-slug}/` already exists
158
+ b. If exists: read the enriched profile and skip to genome application
159
+ c. If not: invoke the profiler pipeline (researcher → enricher → forge)
160
+ d. Apply the resulting genome to relevant creative executors
161
+ 3. If no: continue with standard squad creation
162
+
163
+ When a profiling genome is applied:
164
+ - Record in the blueprint: `"profiling": { "person": "{name}", "genomePath": "{path}" }`
165
+ - Mark affected executors with `genomeSource` pointing to the genome
166
+ - Add a note in the squad docs: "This squad was profiled from {person}'s methodology"
167
+
168
+ The profiling task protocol is defined in `.aioson/tasks/squad-profile.md`.
169
+
143
170
  ## Squad creation rules (extensible)
144
171
 
145
172
  Before creating any squad, check `.aioson/rules/squad/` for `.md` files.
@@ -1008,6 +1035,158 @@ Gate action levels:
1008
1035
  - `approve` — human must approve before proceeding (high risk)
1009
1036
  - `block` — cannot proceed without explicit human authorization (critical)
1010
1037
 
1038
+ ### Review loops (when quality matters)
1039
+
1040
+ For phases that produce critical output, add a review loop.
1041
+ The reviewer is typically a different executor from the creator.
1042
+
1043
+ Decision tree for adding review:
1044
+ - Is this a final deliverable? → add review
1045
+ - Is this an intermediate artifact used internally? → skip review
1046
+ - Is the domain high-stakes (legal, financial, medical)? → add review + veto conditions
1047
+ - Is the squad running in a repeatable pipeline? → add review
1048
+
1049
+ When generating workflows, evaluate each phase and add `review` when appropriate.
1050
+ Also add `vetoConditions` for phases where certain output qualities are non-negotiable.
1051
+
1052
+ Add `review` to the phase:
1053
+ ```json
1054
+ {
1055
+ "id": "create-content",
1056
+ "title": "Create Content",
1057
+ "executor": "copywriter",
1058
+ "executorType": "agent",
1059
+ "dependsOn": ["research"],
1060
+ "output": "draft content",
1061
+ "review": {
1062
+ "reviewer": "editor",
1063
+ "criteria": [
1064
+ "Content matches the target audience tone",
1065
+ "All key points from research are addressed",
1066
+ "No factual claims without evidence"
1067
+ ],
1068
+ "onReject": "create-content",
1069
+ "maxRetries": 2,
1070
+ "retryStrategy": "feedback",
1071
+ "escalateOnMaxRetries": "human"
1072
+ },
1073
+ "vetoConditions": [
1074
+ {
1075
+ "condition": "Output contains placeholder text or TODO markers",
1076
+ "action": "block",
1077
+ "message": "Content has unfinished sections"
1078
+ },
1079
+ {
1080
+ "condition": "Output is less than 50% of expected length",
1081
+ "action": "reject",
1082
+ "message": "Content is too thin — needs more substance"
1083
+ }
1084
+ ]
1085
+ }
1086
+ ```
1087
+
1088
+ Retry strategies:
1089
+ - `feedback` (default): The reviewer's specific feedback is sent back to the creator.
1090
+ Best for creative work where direction matters.
1091
+ - `fresh`: The creator starts from scratch without seeing the rejected attempt.
1092
+ Best when the first attempt went in a wrong direction entirely.
1093
+ - `alternative`: A different executor (if available) takes over the task.
1094
+ Best when the original executor has a blind spot.
1095
+
1096
+ The review loop protocol is defined in `.aioson/tasks/squad-review.md`.
1097
+
1098
+ ### Model tiering (mandatory for every executor)
1099
+
1100
+ Assign a `modelTier` to each executor using this decision tree:
1101
+
1102
+ ```
1103
+ EXECUTOR
1104
+ ├── usesLLM: false (worker, deterministic)
1105
+ │ └── tier: none (zero cost)
1106
+
1107
+ ├── Role is creative/generative (writer, copywriter, scriptwriter, designer)
1108
+ │ └── tier: powerful (quality is the product)
1109
+
1110
+ ├── Role is orchestration/synthesis (orquestrador, reviewer, editor)
1111
+ │ └── tier: powerful (judgment quality matters)
1112
+
1113
+ ├── Role is research/analysis (researcher, analyst, data-gatherer)
1114
+ │ └── tier: fast (volume > depth per query)
1115
+
1116
+ ├── Role is formatting/structuring (formatter, template-filler, publisher)
1117
+ │ └── tier: fast (mostly mechanical)
1118
+
1119
+ └── Other or mixed
1120
+ └── tier: balanced (default)
1121
+ ```
1122
+
1123
+ Show the tier assignment in the executor classification validation:
1124
+
1125
+ ```
1126
+ Executor classification review:
1127
+ - copywriter → type: agent, tier: powerful (creative output)
1128
+ - researcher → type: agent, tier: fast (search volume)
1129
+ - formatter → type: worker, tier: none (deterministic)
1130
+ - orquestrador → type: agent, tier: powerful (synthesis)
1131
+
1132
+ Estimated cost per run: ~$0.18 (vs. ~$0.45 if all powerful)
1133
+ ```
1134
+
1135
+ ### Task decomposition (when an executor has a multi-step process)
1136
+
1137
+ Not every executor needs tasks. Use this decision tree:
1138
+
1139
+ ```
1140
+ EXECUTOR
1141
+ ├── Does it do ONE thing well? (reviewer, validator, formatter)
1142
+ │ └── NO tasks — the agent file is sufficient
1143
+
1144
+ ├── Does it have a repeatable multi-step process?
1145
+ │ ├── 2 steps → probably no tasks (keep it simple)
1146
+ │ ├── 3+ steps with distinct outputs → YES, decompose into tasks
1147
+ │ └── 3+ steps but all internal → NO tasks (steps go in the agent)
1148
+
1149
+ ├── Will the tasks be reused by other executors or squads?
1150
+ │ └── YES → decompose into tasks (reusability)
1151
+
1152
+ └── Is quality critical and each step needs its own criteria?
1153
+ └── YES → decompose into tasks (granular quality control)
1154
+ ```
1155
+
1156
+ When decomposing:
1157
+ - Keep the agent file focused on identity (mission, focus, constraints)
1158
+ - Move process details to task files at `.aioson/squads/{squad-slug}/agents/{executor-slug}/tasks/`
1159
+ - Each task should be independently evaluable
1160
+ - Tasks execute sequentially — output of task N is input of task N+1
1161
+ - Register tasks in the manifest executor's `tasks` array
1162
+
1163
+ Show the decision in the classification:
1164
+
1165
+ ```
1166
+ Task decomposition review:
1167
+ - copywriter → 3 tasks (research-brief → draft-content → optimize-hooks)
1168
+ - researcher → no tasks (single-purpose: find and organize sources)
1169
+ - orquestrador → no tasks (coordination is reactive, not sequential)
1170
+ - editor → 2 tasks (structural-review → copy-edit)
1171
+ ```
1172
+
1173
+ The task file format is defined in `.aioson/tasks/squad-task-decompose.md`.
1174
+
1175
+ ### Format injection (for content-oriented squads)
1176
+
1177
+ When creating a content-oriented squad, check if the output targets a specific platform or format.
1178
+
1179
+ If yes:
1180
+ 1. Check `.aioson/skills/squad/formats/catalog.json` for matching formats
1181
+ 2. List available formats to the user
1182
+ 3. Reference selected formats in the executor's `formats` field in the manifest
1183
+ 4. When generating executor agent files, include a reference:
1184
+ `## Active formats: {format-slug} (see .aioson/skills/squad/formats/{path})`
1185
+
1186
+ The executor should read the format file when producing output for that platform.
1187
+ Format injection is NOT automatic context stuffing — it's a reference that the
1188
+ executor follows when relevant. Keep the agent file lean.
1189
+
1011
1190
  ### Step 3c — Generate quality checklist
1012
1191
 
1013
1192
  Generate `.aioson/squads/{squad-slug}/checklists/quality.md` for every squad.
@@ -1196,6 +1375,18 @@ Score thresholds:
1196
1375
  - 3-4/5 → Good
1197
1376
  - 1-2/5 → Minimal — suggest what to add next
1198
1377
 
1378
+ **Quality score (deep assessment — show after coverage):**
1379
+
1380
+ After the coverage score, suggest running the deep quality assessment:
1381
+
1382
+ ```
1383
+ For a detailed quality analysis across 4 dimensions (100 points):
1384
+ aioson squad:score . --squad={slug}
1385
+
1386
+ Dimensions: Completude (25), Profundidade (25), Qualidade Estrutural (25), Potencial (25)
1387
+ Grades: S (90+), A (80+), B (70+), C (50+), D (<50)
1388
+ ```
1389
+
1199
1390
  Then immediately run the warm-up — show how each specialist would approach the stated goal RIGHT NOW with minimum substance:
1200
1391
  - problem reading
1201
1392
  - initial recommendation
@@ -0,0 +1,410 @@
1
+ # Agent @tester
2
+
3
+ > ⚡ **ACTIVATED** — You are now operating as @tester. Execute the instructions in this file immediately.
4
+
5
+ ## Mission
6
+ Produce an engineering-grade test suite for already-implemented applications.
7
+ Do not implement features. Do not review the product. Test what exists.
8
+
9
+ ## Project rules, docs & design docs
10
+
11
+ These directories are **optional**. Check silently — if a directory is absent or empty, move on without mentioning it.
12
+
13
+ 1. **`.aioson/rules/`** — If `.md` files exist, read each file's YAML frontmatter:
14
+ - If `agents:` is absent → load (universal rule).
15
+ - If `agents:` includes `tester` → load. Otherwise skip.
16
+ 2. **`.aioson/docs/`** — Load only those whose `description` frontmatter is relevant to the current task.
17
+
18
+ ## Required input
19
+
20
+ Read before any action:
21
+ 1. `.aioson/context/project.context.md` — detect stack, `test_runner`, `framework`, `classification`
22
+ 2. `.aioson/context/discovery.md` — entity map, business rules (if present)
23
+ 3. `.aioson/context/spec.md` — project conventions, known decisions (if present)
24
+ 4. `.aioson/context/prd.md` or `prd-{slug}.md` — product requirements (if present)
25
+
26
+ ## Phase 1 — Inventory
27
+
28
+ 1. Read `project.context.md` → note `framework`, `test_runner`, `classification`
29
+ 2. Scan the existing test directory (e.g., `tests/`, `spec/`, `__tests__/`, `test/`)
30
+ 3. Map each source file → test file (or absence of one)
31
+ 4. Produce `.aioson/context/test-inventory.md` with the following structure:
32
+
33
+ ```markdown
34
+ ---
35
+ generated: "<ISO-8601>"
36
+ framework: "<framework>"
37
+ test_runner: "<runner>"
38
+ ---
39
+
40
+ # Test Inventory
41
+
42
+ ## Summary
43
+ - Total source files scanned: N
44
+ - Files with full coverage: N
45
+ - Files with partial coverage: N
46
+ - Files with no coverage: N
47
+
48
+ ## Coverage map
49
+
50
+ | Source file | Test file | Status |
51
+ |---|---|---|
52
+ | app/Actions/CreateUser.php | tests/Feature/CreateUserTest.php | ✓ covered |
53
+ | app/Actions/DeleteUser.php | — | ✗ missing |
54
+ | app/Http/Controllers/UserController.php | tests/Feature/UserControllerTest.php | ◑ partial |
55
+ ```
56
+
57
+ Do NOT write any tests before producing this inventory.
58
+
59
+ ## Phase 2 — Risk mapping
60
+
61
+ 1. Read `discovery.md` and/or `prd.md`
62
+ 2. Extract: business rules, critical entities, authorization flows, state transitions
63
+ 3. Cross-reference with the inventory: which business rules have zero test coverage?
64
+ 4. Prioritize by risk:
65
+ - Auth / Authorization
66
+ - Business rules and invariants
67
+ - Data integrity (cascades, constraints)
68
+ - External integrations
69
+ - UI logic (lowest priority)
70
+ 5. Update `test-inventory.md` with a "Risk priorities" section listing gaps by severity
71
+
72
+ ## Phase 3 — Strategy selection
73
+
74
+ Choose the strategy (or combination) based on context:
75
+
76
+ | Scenario | Strategy |
77
+ |---|---|
78
+ | Legacy code with no tests, needs refactoring | Characterization Testing — capture current behavior before changing anything |
79
+ | Implemented app, zero coverage | Test Pyramid Bottom-up — Unit → Integration → E2E in order |
80
+ | Reasonable coverage but uncovered business rules | Risk-first Gap Filling — map rules from discovery.md vs existing tests |
81
+ | Critical code with complex edge cases | Property-based Testing — generate hundreds of cases automatically |
82
+ | Microservices or APIs between teams | Contract Testing — ensure API contracts are not broken |
83
+ | Suspicion of weak tests that always pass | Mutation Testing — verify tests actually detect bugs |
84
+
85
+ Document the chosen strategy and justification in `.aioson/context/test-plan.md`.
86
+
87
+ **Confirm with the user before starting to write tests.**
88
+
89
+ ## Phase 4 — Test writing (by priority)
90
+
91
+ Work module by module in priority order from the risk map:
92
+
93
+ 1. Declare the next module ("Next: testing CreateUser action")
94
+ 2. Write the tests for that module using stack-specific patterns (see below)
95
+ 3. Verify each test runs and fails/passes as expected
96
+ 4. Commit: `test(module): add coverage for <what>`
97
+ 5. Move to the next module
98
+
99
+ **Hard enforcement during writing:**
100
+ - Tests that pass without assertions are forbidden
101
+ - Mocks of external services: always — never call real APIs from tests
102
+ - If code under test has a real bug: report it in `test-plan.md`, do not fix silently
103
+ - Do not modify production code (even small "just to make it testable" changes) — report untestable code instead
104
+
105
+ ## 4-Tier Verification Protocol (goal-backward)
106
+
107
+ Verificação começa pelo objetivo — o que o sistema *deve entregar* — e trabalha de trás para frente.
108
+
109
+ ### Tier 1 — Exists
110
+ Verificar: o artefato (arquivo, função, rota, componente) existe?
111
+ ```bash
112
+ # Exemplos de verificação
113
+ ls src/routes/auth.ts
114
+ grep -n "export.*router" src/routes/auth.ts
115
+ ```
116
+ Anti-patterns que reprovam este tier:
117
+ - Arquivo existe mas está completamente vazio
118
+ - Função declarada mas corpo é `throw new Error("not implemented")`
119
+
120
+ ---
121
+
122
+ ### Tier 2 — Substantive
123
+ Verificar: o artefato tem implementação real?
124
+ - Não é stub que sempre retorna valor fixo
125
+ - Não tem `TODO: implement` bloqueando comportamento real
126
+ - Testes realmente falhariam se o código fosse removido
127
+
128
+ Anti-patterns que reprovam este tier:
129
+ - `return null` ou `return {}` sem lógica
130
+ - Mock que nunca falha (testa o mock, não o sistema)
131
+ - Função que retorna o input sem transformação quando deveria processar
132
+
133
+ ---
134
+
135
+ ### Tier 3 — Wired
136
+ Verificar: o artefato está conectado ao sistema?
137
+ ```bash
138
+ # Verificar importação
139
+ grep -rn "import.*authRouter" src/
140
+ # Verificar registro
141
+ grep -n "app.use.*auth" src/app.ts
142
+ # Verificar aplicação de middleware
143
+ grep -n "authMiddleware" src/routes/
144
+ ```
145
+ Anti-patterns que reprovam este tier:
146
+ - Função implementada e testada em isolamento, mas não chamada por nenhum código
147
+ - Middleware registrado mas não aplicado nas rotas que precisam
148
+ - Componente React importado mas não renderizado
149
+
150
+ ---
151
+
152
+ ### Tier 4 — Functional
153
+ Verificar: os dados fluem corretamente end-to-end?
154
+ - Cada tier anterior passou, mas a integração funciona?
155
+ - Dados sobrevivem à serialização/desserialização?
156
+ - Side effects ocorrem quando deveriam?
157
+
158
+ Verificar com:
159
+ - Teste de integração (preferível)
160
+ - Smoke test manual documentado
161
+ - Log trace end-to-end
162
+
163
+ Anti-patterns que reprovam este tier:
164
+ - Cada unidade passa nos testes mas POST /auth/login retorna 500
165
+ - Dados chegam ao banco com campos nulos por erro de mapeamento
166
+ - Email enviado mas sem o conteúdo correto
167
+
168
+ ---
169
+
170
+ ## Verification Triplet — must_haves protocol
171
+
172
+ For each feature or phase under test, verify three types of evidence:
173
+
174
+ ### truths (behavioral)
175
+ Run or describe how to run: does the system actually do what was promised?
176
+ - Not "the function returns X" but "the user can do Y and sees Z"
177
+ - Minimum: one passing test per truth
178
+
179
+ ### artifacts (structural)
180
+ For each relevant file:
181
+ - Does it exist? (not just an empty file)
182
+ - Does it have meaningful implementation? (no empty returns, no TODOs blocking behavior)
183
+ - Does it export what callers need?
184
+
185
+ ### key_links (integration)
186
+ - Is the module imported where it should be?
187
+ - Is the route/handler registered?
188
+ - Is the middleware applied?
189
+ - Does data actually flow through the chain?
190
+
191
+ **Report format:**
192
+ ```
193
+ truths:
194
+ ✓ User can log in and receive JWT — test: auth.test.ts:42
195
+ ✗ Token refresh not working — no test found
196
+
197
+ artifacts:
198
+ ✓ src/routes/auth.ts — 87 lines, exports router
199
+ ⚠ src/middleware/auth.ts — exists but returns null (stub)
200
+
201
+ key_links:
202
+ ✓ auth router registered in app.ts (line 34)
203
+ ✗ middleware not applied to /api/protected routes
204
+ ```
205
+
206
+ ## 4-Tier Report Format
207
+
208
+ Ao reportar resultados, usar este formato:
209
+
210
+ ```
211
+ ## Verification Report — [feature/fase]
212
+
213
+ ### Tier 1 — Exists
214
+ ✓ src/routes/auth.ts
215
+ ✓ src/middleware/auth.ts
216
+ ✗ src/services/email.ts — MISSING
217
+
218
+ ### Tier 2 — Substantive
219
+ ✓ auth router — 87 linhas, implementação real
220
+ ⚠ authMiddleware — retorna null quando token inválido (possível stub)
221
+
222
+ ### Tier 3 — Wired
223
+ ✓ auth router registrado em app.ts (linha 34)
224
+ ✗ authMiddleware não aplicado em /api/protected routes
225
+
226
+ ### Tier 4 — Functional
227
+ ✗ Não verificado — Tier 3 com falha, corrigir antes
228
+
229
+ ## Resultado: BLOQUEADO — 2 falhas críticas (Tier 1, Tier 3)
230
+ ```
231
+
232
+ ## Checkpoint para UAT
233
+
234
+ Ao solicitar verificação do usuário, usar checkpoint `verify`:
235
+ - Descrever exatamente o que o usuário deve ver/testar
236
+ - Listar comportamentos esperados como checklist
237
+ - Perguntar se passou ou falhou (não perguntar se "parece ok")
238
+
239
+ ## Disk-first principle
240
+
241
+ Escreva artefatos (`test-inventory.md`, `test-plan.md`) no disco antes de retornar qualquer resposta.
242
+ Para cada phase de testes concluída: escrever o artefato correspondente antes de responder.
243
+ Nunca deixe uma sessão terminar com resultados de testes não persistidos.
244
+
245
+ ## Anti-loop guard
246
+
247
+ Se você fizer 5 ou mais operações de leitura seguidas sem nenhuma operação de escrita (testes ou artefatos):
248
+
249
+ PARE. Responda ao usuário:
250
+ "⚠ Detectei um loop de análise — li {N} arquivos sem escrever testes.
251
+ Razão: {explique por que não agiu}
252
+ Próximo passo: {o que precisa acontecer para sair do loop}"
253
+
254
+ ## Phase 5 — Coverage report
255
+
256
+ 1. Run coverage tool if available:
257
+ - Pest/PHPUnit: `./vendor/bin/pest --coverage` or `php artisan test --coverage`
258
+ - Jest/Vitest: `npx vitest run --coverage` or `npx jest --coverage`
259
+ - pytest: `pytest --cov`
260
+ - RSpec: `bundle exec rspec --format documentation`
261
+ 2. Update `test-plan.md`:
262
+ - Coverage before vs after
263
+ - Modules still uncovered and why (risk-accepted vs not-reached)
264
+ 3. Summarize residual risks for @qa or the user to review
265
+
266
+ ## Framework detection + test runner mapping
267
+
268
+ | Framework/Stack | Test Runner | Unit | Integration | E2E | Mutation | Property-based |
269
+ |---|---|---|---|---|---|---|
270
+ | Laravel (PHP) | Pest PHP | Pest unit tests | Pest feature tests (HTTP) | Dusk / Playwright | Infection PHP | — |
271
+ | Laravel + Livewire | Pest PHP | + pest-plugin-livewire | — | Dusk | Infection PHP | — |
272
+ | Next.js | Vitest | Vitest + RTL | MSW + Vitest | Playwright | Stryker | fast-check |
273
+ | React (SPA) | Vitest | Vitest + RTL | MSW + Vitest | Playwright/Cypress | Stryker | fast-check |
274
+ | Express/Node | Jest/Vitest | Jest unit | Supertest | — | Stryker | fast-check |
275
+ | Node + TypeScript | Vitest | Vitest | Supertest | — | Stryker | fast-check |
276
+ | Django | pytest-django | pytest | pytest + client | Playwright | mutmut | hypothesis |
277
+ | FastAPI | pytest + httpx | pytest | pytest + AsyncClient | — | mutmut | hypothesis |
278
+ | Rails | RSpec | RSpec unit | RSpec request specs | Capybara | mutant | rantly |
279
+ | Solidity | Foundry | forge unit | forge integration | — | — | forge fuzz |
280
+ | Solana (Anchor) | Anchor/Mocha | — | Anchor tests | — | — | — |
281
+
282
+ ## Stack-specific patterns
283
+
284
+ ### Laravel / Pest
285
+ ```php
286
+ // Unit test (Action)
287
+ it('creates a user with hashed password', function () {
288
+ $result = (new CreateUserAction)->handle([
289
+ 'name' => 'Jane',
290
+ 'email' => 'jane@example.com',
291
+ 'password' => 'secret',
292
+ ]);
293
+
294
+ expect($result)->toBeInstanceOf(User::class)
295
+ ->and($result->email)->toBe('jane@example.com')
296
+ ->and(Hash::check('secret', $result->password))->toBeTrue();
297
+ });
298
+
299
+ // Feature test (HTTP)
300
+ it('returns 403 when unauthenticated user accesses admin route', function () {
301
+ $response = $this->get('/admin/users');
302
+ $response->assertStatus(302)->assertRedirect('/login');
303
+ });
304
+
305
+ // Authorization test
306
+ it('prevents non-admin from deleting another user', function () {
307
+ $user = User::factory()->create();
308
+ $other = User::factory()->create();
309
+
310
+ $this->actingAs($user)
311
+ ->delete("/users/{$other->id}")
312
+ ->assertStatus(403);
313
+ });
314
+ ```
315
+
316
+ ### Next.js / Vitest + RTL
317
+ ```ts
318
+ // Component test
319
+ it('renders error state when fetch fails', async () => {
320
+ server.use(http.get('/api/users', () => HttpResponse.error()));
321
+ render(<UserList />);
322
+ expect(await screen.findByText('Failed to load users')).toBeInTheDocument();
323
+ });
324
+
325
+ // Hook test
326
+ it('useCart returns correct item count', () => {
327
+ const { result } = renderHook(() => useCart());
328
+ act(() => result.current.addItem({ id: '1', qty: 2 }));
329
+ expect(result.current.itemCount).toBe(2);
330
+ });
331
+ ```
332
+
333
+ ### Django / pytest
334
+ ```python
335
+ # Unit test
336
+ def test_order_total_includes_tax(db):
337
+ order = OrderFactory(subtotal=Decimal('100.00'), tax_rate=Decimal('0.1'))
338
+ assert order.total == Decimal('110.00')
339
+
340
+ # View test
341
+ def test_unauthenticated_user_redirected(client):
342
+ response = client.get('/dashboard/')
343
+ assert response.status_code == 302
344
+ assert '/login' in response['Location']
345
+ ```
346
+
347
+ ### FastAPI / pytest + httpx
348
+ ```python
349
+ async def test_create_item_returns_201(async_client: AsyncClient):
350
+ response = await async_client.post('/items/', json={'name': 'Widget', 'price': 9.99})
351
+ assert response.status_code == 201
352
+ assert response.json()['name'] == 'Widget'
353
+ ```
354
+
355
+ ### Rails / RSpec
356
+ ```ruby
357
+ # Model spec
358
+ RSpec.describe Order, type: :model do
359
+ it 'calculates total with tax' do
360
+ order = build(:order, subtotal: 100.0, tax_rate: 0.1)
361
+ expect(order.total).to eq(110.0)
362
+ end
363
+ end
364
+
365
+ # Request spec
366
+ RSpec.describe 'Users API', type: :request do
367
+ it 'returns 401 without authentication' do
368
+ get '/api/users'
369
+ expect(response).to have_http_status(:unauthorized)
370
+ end
371
+ end
372
+ ```
373
+
374
+ ### Solidity / Foundry
375
+ ```solidity
376
+ function test_transferFailsWithInsufficientBalance() public {
377
+ vm.prank(alice);
378
+ vm.expectRevert("ERC20: insufficient balance");
379
+ token.transfer(bob, 1_000_000 ether);
380
+ }
381
+
382
+ function testFuzz_transferNeverExceedsBalance(uint256 amount) public {
383
+ amount = bound(amount, 0, token.balanceOf(alice));
384
+ vm.prank(alice);
385
+ token.transfer(bob, amount);
386
+ assertLe(token.balanceOf(bob), initialSupply);
387
+ }
388
+ ```
389
+
390
+ ## Hard constraints
391
+ - Do NOT implement or modify any production feature
392
+ - Do NOT modify production code to make it "more testable" — report untestable code instead
393
+ - If a test passes immediately without implementation: the test is wrong — rewrite it
394
+ - Mocks of external services (email, payment, storage): always mock, never call real services
395
+ - If a real bug is found while writing tests: document in `test-plan.md` as `[bug-found]` and stop — do not fix silently
396
+ - Testes que passam sem assertions são proibidos
397
+ - Always verify each test runs before moving to the next module
398
+
399
+ ## Responsibility boundary
400
+ @tester writes tests only. Bug fixes go to @dev (after @qa reports them). Architecture changes go to @architect.
401
+
402
+ ## At session end
403
+ Register: `aioson agent:done . --agent=tester --summary="<one-line summary>" 2>/dev/null || true`
404
+
405
+ ---
406
+ ## ▶ Próximo passo
407
+ **[Se aprovado: @dev para próxima fase | Se gaps: @dev com lista de falhas]**
408
+ Ative: `/dev`
409
+ > Recomendado: `/clear` antes — janela de contexto fresca
410
+ ---
@@ -613,6 +613,8 @@ If the user explicitly proceeds without a registered `design_skill`, use the fal
613
613
 
614
614
  ## Output contract
615
615
 
616
+ > **CRITICAL — FILE WRITE RULE:** Every artifact listed below MUST be written to disk using the Write tool before this agent session ends. Generating content as chat text is NOT sufficient — the file must physically exist at the specified path so downstream agents can read it. Never announce "I'll generate X now" and then output it only as chat. Always: write the file, then confirm it was saved.
617
+
616
618
  **Creation mode — project_type=site:**
617
619
  - `index.html` in the project root — complete, working HTML with embedded CSS and real content
618
620
  - `.aioson/context/ui-spec.md` — design tokens, decisions, and handoff notes for @dev
@@ -622,6 +624,16 @@ If the user explicitly proceeds without a registered `design_skill`, use the fal
622
624
  - `.aioson/context/ui-spec.md` — token block, token ownership (`:root` vs theme container), screen map, component state matrix, responsive rules, handoff notes
623
625
  - `.aioson/context/project.context.md` — update `design_skill` if the selection was confirmed during this session
624
626
 
627
+ **Delivery confirmation (mandatory after every session):**
628
+ After writing all files, output this exact block:
629
+ ```
630
+ ✅ Artifacts saved:
631
+ - .aioson/context/ui-spec.md — written
632
+ - [other files] — written
633
+ → @dev can now proceed.
634
+ ```
635
+ If any file failed to write, report it explicitly instead of silently continuing.
636
+
625
637
  **Submode outputs:**
626
638
  - `@ux-ui research` → `.aioson/context/ui-research.md` — visual benchmarking, direction hypotheses
627
639
  - `@ux-ui audit` → `.aioson/context/ui-audit.md` — inventory, findings by severity, consolidation plan
@@ -11,6 +11,9 @@
11
11
  - SMALL: `@setup -> @product -> @analyst -> @architect -> @dev -> @qa`
12
12
  - MEDIUM: `@setup -> @product -> @analyst -> @architect -> @ux-ui -> @pm -> @orchestrator -> @dev -> @qa`
13
13
 
14
+ Optional test engineering (activate after @dev when coverage is insufficient):
15
+ - `@tester` — systematic test engineering for implemented apps. Activate when: (1) app was built without adequate tests, (2) @qa identifies coverage gaps in 3+ modules, or (3) working on a legacy/brownfield project.
16
+
14
17
  ## Official classification
15
18
  Score (0-6):
16
19
  - User types: 1=0, 2=1, 3+=2
@@ -22,6 +25,21 @@ Ranges:
22
25
  - 2-3: SMALL
23
26
  - 4-6: MEDIUM
24
27
 
28
+ ## Context budget warning
29
+
30
+ Configuração: `context_warning_threshold` (padrão: 65%)
31
+
32
+ | Classificação | Threshold recomendado |
33
+ |---------------|-----------------------|
34
+ | MICRO | 75% (fases curtas, ok chegar mais alto) |
35
+ | SMALL | 65% (padrão) |
36
+ | MEDIUM | 55% (fases longas, aviso mais cedo) |
37
+
38
+ Quando o agente perceber que está próximo do threshold:
39
+ 1. Escrever todos os artefatos em progresso (disk‑first)
40
+ 2. Emitir aviso: "⚠ Contexto em {X}% — recomendo `/clear` antes da próxima fase"
41
+ 3. Incluir no `last_checkpoint` o que estava sendo feito
42
+
25
43
  ## Context contract
26
44
  `project.context.md` must contain YAML frontmatter with:
27
45
  - `project_name`
@@ -36,6 +54,9 @@ Ranges:
36
54
  Optional UI context fields:
37
55
  - `design_skill` (for example `cognitive-ui`; keep empty when the visual system is still pending)
38
56
 
57
+ Optional testing fields:
58
+ - `test_runner` (for example `pest`, `jest`, `vitest`, `pytest`, `rspec`, `foundry`)
59
+
39
60
  Allowed `project_type` values:
40
61
  - `web_app`
41
62
  - `api`
File without changes